geo_pattern 1.3.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +30 -0
- data/.gitignore +1 -0
- data/.simplecov +26 -0
- data/Gemfile +17 -17
- data/README.md +154 -29
- data/Rakefile +72 -13
- data/fixtures/generated_patterns/chevrons.svg +1 -0
- data/fixtures/generated_patterns/concentric_circles.svg +1 -0
- data/fixtures/generated_patterns/diamonds.svg +1 -0
- data/fixtures/generated_patterns/diamonds_with_base_color.svg +1 -0
- data/fixtures/generated_patterns/diamonds_with_color.svg +1 -0
- data/fixtures/generated_patterns/hexagons.svg +1 -0
- data/fixtures/generated_patterns/mosaic_squares.svg +1 -0
- data/fixtures/generated_patterns/nested_squares.svg +1 -0
- data/fixtures/generated_patterns/octagons.svg +1 -0
- data/fixtures/generated_patterns/overlapping_circles.svg +1 -0
- data/fixtures/generated_patterns/overlapping_rings.svg +1 -0
- data/fixtures/generated_patterns/plaid.svg +1 -0
- data/fixtures/generated_patterns/plus_signs.svg +1 -0
- data/fixtures/generated_patterns/sine_waves.svg +1 -0
- data/fixtures/generated_patterns/squares.svg +1 -0
- data/fixtures/generated_patterns/tessellation.svg +1 -0
- data/fixtures/generated_patterns/triangles.svg +1 -0
- data/fixtures/generated_patterns/xes.svg +1 -0
- data/geo_pattern.gemspec +19 -17
- data/lib/geo_pattern/background.rb +27 -0
- data/lib/geo_pattern/background_generators/solid_generator.rb +54 -0
- data/lib/geo_pattern/color.rb +27 -0
- data/lib/geo_pattern/color_generators/base_color_generator.rb +57 -0
- data/lib/geo_pattern/color_generators/simple_generator.rb +29 -0
- data/lib/geo_pattern/color_preset.rb +32 -0
- data/lib/geo_pattern/errors.rb +9 -0
- data/lib/geo_pattern/geo_pattern_task.rb +61 -0
- data/lib/geo_pattern/helpers.rb +50 -1
- data/lib/geo_pattern/pattern.rb +86 -0
- data/lib/geo_pattern/pattern_generator.rb +34 -81
- data/lib/geo_pattern/pattern_helpers.rb +34 -2
- data/lib/geo_pattern/pattern_preset.rb +25 -0
- data/lib/geo_pattern/pattern_sieve.rb +38 -0
- data/lib/geo_pattern/pattern_store.rb +65 -0
- data/lib/geo_pattern/pattern_validator.rb +29 -0
- data/lib/geo_pattern/rake_task.rb +112 -0
- data/lib/geo_pattern/roles/comparable_metadata.rb +37 -0
- data/lib/geo_pattern/roles/named_generator.rb +15 -0
- data/lib/geo_pattern/seed.rb +23 -0
- data/lib/geo_pattern/structure.rb +27 -0
- data/lib/geo_pattern/structure_generators/base_generator.rb +88 -0
- data/lib/geo_pattern/structure_generators/chevrons_generator.rb +57 -0
- data/lib/geo_pattern/structure_generators/concentric_circles_generator.rb +58 -0
- data/lib/geo_pattern/structure_generators/diamonds_generator.rb +72 -0
- data/lib/geo_pattern/structure_generators/hexagons_generator.rb +69 -0
- data/lib/geo_pattern/structure_generators/mosaic_squares_generator.rb +85 -0
- data/lib/geo_pattern/structure_generators/nested_squares_generator.rb +62 -0
- data/lib/geo_pattern/structure_generators/octagons_generator.rb +45 -0
- data/lib/geo_pattern/structure_generators/overlapping_circles_generator.rb +57 -0
- data/lib/geo_pattern/structure_generators/overlapping_rings_generator.rb +57 -0
- data/lib/geo_pattern/structure_generators/plaid_generator.rb +55 -0
- data/lib/geo_pattern/structure_generators/plus_signs_generator.rb +68 -0
- data/lib/geo_pattern/structure_generators/sine_waves_generator.rb +45 -0
- data/lib/geo_pattern/structure_generators/squares_generator.rb +37 -0
- data/lib/geo_pattern/structure_generators/tessellation_generator.rb +105 -0
- data/lib/geo_pattern/structure_generators/triangles_generator.rb +64 -0
- data/lib/geo_pattern/structure_generators/xes_generator.rb +74 -0
- data/lib/geo_pattern/svg_image.rb +103 -0
- data/lib/geo_pattern/version.rb +3 -1
- data/lib/geo_pattern.rb +54 -30
- data/script/bootstrap +30 -0
- data/script/console +9 -0
- data/script/test +21 -0
- data/spec/background_generators/solid_generator_spec.rb +52 -0
- data/spec/background_spec.rb +27 -0
- data/spec/color_generators/base_color_generator_spec.rb +33 -0
- data/spec/color_generators/simple_generator_spec.rb +14 -0
- data/spec/color_preset_spec.rb +55 -0
- data/spec/color_spec.rb +17 -0
- data/spec/geo_pattern_spec.rb +98 -26
- data/spec/helpers_spec.rb +67 -0
- data/spec/pattern_preset_spec.rb +43 -0
- data/spec/pattern_sieve_spec.rb +68 -0
- data/spec/pattern_spec.rb +74 -0
- data/spec/pattern_store_spec.rb +49 -0
- data/spec/pattern_validator_spec.rb +30 -0
- data/spec/seed_spec.rb +16 -0
- data/spec/spec_helper.rb +9 -13
- data/spec/structure_generators/chevrons_generator_spec.rb +7 -0
- data/spec/structure_generators/concentric_circles_generator_spec.rb +7 -0
- data/spec/structure_generators/diamonds_generator_spec.rb +7 -0
- data/spec/structure_generators/hexagons_generator_spec.rb +7 -0
- data/spec/structure_generators/mosaic_squares_generator_spec.rb +7 -0
- data/spec/structure_generators/nested_squares_generator_spec.rb +7 -0
- data/spec/structure_generators/octagons_generator_spec.rb +7 -0
- data/spec/structure_generators/overlapping_circles_generator_spec.rb +7 -0
- data/spec/structure_generators/overlapping_rings_generator_spec.rb +7 -0
- data/spec/structure_generators/plaid_generator_spec.rb +7 -0
- data/spec/structure_generators/plus_signs_generator_spec.rb +7 -0
- data/spec/structure_generators/sine_waves_generator_spec.rb +7 -0
- data/spec/structure_generators/squares_generator_spec.rb +7 -0
- data/spec/structure_generators/tessellation_generator_spec.rb +7 -0
- data/spec/structure_generators/triangles_generator_spec.rb +7 -0
- data/spec/structure_generators/xes_generator_spec.rb +7 -0
- data/spec/structure_spec.rb +40 -0
- data/spec/support/aruba.rb +6 -6
- data/spec/support/helpers/fixtures.rb +14 -0
- data/spec/support/kernel.rb +46 -0
- data/spec/support/matchers/image.rb +19 -0
- data/spec/support/matchers/name.rb +17 -0
- data/spec/support/rspec.rb +4 -2
- data/spec/support/shared_examples/generator.rb +48 -0
- data/spec/support/shared_examples/pattern.rb +33 -0
- data/spec/support/shared_examples/pattern_name.rb +9 -0
- data/spec/support/shared_examples/structure.rb +50 -0
- data/spec/support/string.rb +3 -2
- data/spec/svg_spec.rb +8 -6
- metadata +105 -37
- data/.rubocop.yml +0 -13
- data/lib/geo_pattern/pattern/base_pattern.rb +0 -47
- data/lib/geo_pattern/pattern/chevron_pattern.rb +0 -45
- data/lib/geo_pattern/pattern/concentric_circles_pattern.rb +0 -47
- data/lib/geo_pattern/pattern/diamond_pattern.rb +0 -56
- data/lib/geo_pattern/pattern/hexagon_pattern.rb +0 -57
- data/lib/geo_pattern/pattern/mosaic_squares_pattern.rb +0 -76
- data/lib/geo_pattern/pattern/nested_squares_pattern.rb +0 -51
- data/lib/geo_pattern/pattern/octagon_pattern.rb +0 -35
- data/lib/geo_pattern/pattern/overlapping_circles_pattern.rb +0 -46
- data/lib/geo_pattern/pattern/overlapping_rings_pattern.rb +0 -46
- data/lib/geo_pattern/pattern/plaid_pattern.rb +0 -49
- data/lib/geo_pattern/pattern/plus_sign_pattern.rb +0 -53
- data/lib/geo_pattern/pattern/sine_wave_pattern.rb +0 -36
- data/lib/geo_pattern/pattern/square_pattern.rb +0 -27
- data/lib/geo_pattern/pattern/tessellation_pattern.rb +0 -93
- data/lib/geo_pattern/pattern/triangle_pattern.rb +0 -51
- data/lib/geo_pattern/pattern/xes_pattern.rb +0 -58
- data/lib/geo_pattern/svg.rb +0 -77
- data/spec/support/helpers.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 673c02d78cab6a2a0d4739661a9a4e93845fd6c3dafff82f36f36e15e759e032
|
4
|
+
data.tar.gz: da40879b6a7e41a039e00741d5b48e4be51a584f339bc84572bf5d47cb1b44cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87e2bac49b72b2dbb068ab84abdbdbf6a2240fe13f6898de4be9fc72c40d1239654cee649718d8620598257bdaa1cc24366054ed4f320346ddf68b9b11c8a66b
|
7
|
+
data.tar.gz: f69912aeb10d51c3110edd472b8a02dee9653e2b3cb0b8127d817a45a9d878e7ade1b85922a3aaf0a8ef8568912e57661f84b050220171632665fe784b3420a5
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
15
|
+
ruby: [2.6, 2.7, '3.0', 3.1, 3.2, head]
|
16
|
+
|
17
|
+
runs-on: ubuntu-latest
|
18
|
+
|
19
|
+
steps:
|
20
|
+
- uses: actions/checkout@v2
|
21
|
+
|
22
|
+
- name: Set up Ruby
|
23
|
+
uses: ruby/setup-ruby@v1
|
24
|
+
with:
|
25
|
+
ruby-version: ${{ matrix.ruby }}
|
26
|
+
rubygems: latest
|
27
|
+
bundler-cache: true
|
28
|
+
|
29
|
+
- name: Run tests
|
30
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.simplecov
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class ExcludeRegexFilter < SimpleCov::Filter
|
5
|
+
def matches?(source_file)
|
6
|
+
source_file.filename !~ filter_argument
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class IncludeRegexFilter < SimpleCov::Filter
|
11
|
+
def matches?(source_file)
|
12
|
+
source_file.filename =~ filter_argument
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
SimpleCov.start do
|
17
|
+
add_filter "/features/"
|
18
|
+
add_filter "/fixtures/"
|
19
|
+
add_filter "/spec/"
|
20
|
+
add_filter "/tmp"
|
21
|
+
add_filter "/vendor"
|
22
|
+
|
23
|
+
generator_filter = %r{/background_generators/|/structure_generators/}
|
24
|
+
add_group "lib", ExcludeRegexFilter.new(generator_filter)
|
25
|
+
add_group "generators", IncludeRegexFilter.new(generator_filter)
|
26
|
+
end
|
data/Gemfile
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in geopatterns.gemspec
|
4
6
|
gemspec
|
5
7
|
|
6
8
|
group :development, :test do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
9
|
+
gem "activesupport", "~> 6"
|
10
|
+
gem "aruba"
|
11
|
+
gem "fuubar"
|
12
|
+
gem "inch"
|
13
|
+
gem "pry"
|
14
|
+
gem "pry-rescue"
|
15
|
+
gem "pry-stack_explorer"
|
16
|
+
gem "rake"
|
17
|
+
gem "rspec"
|
18
|
+
gem "standard"
|
19
|
+
gem "simplecov"
|
16
20
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
else
|
21
|
-
gem 'debugger'
|
22
|
-
gem 'pry-debugger'
|
23
|
-
end
|
21
|
+
gem "byebug"
|
22
|
+
gem "irb"
|
23
|
+
gem "pry-byebug"
|
24
24
|
end
|
data/README.md
CHANGED
@@ -1,16 +1,36 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
### This project is largely unmaintained now.
|
2
|
+
|
3
|
+
#### I'll happily accept PRs to keep things in working order, but I no longer plan to make updates.
|
4
|
+
|
5
|
+
----
|
6
|
+
|
7
|
+
[![](https://img.shields.io/gem/v/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
|
8
|
+
![Ruby](https://github.com/jasonlong/geo_pattern/workflows/Ruby/badge.svg)
|
9
|
+
[![](https://img.shields.io/gem/dt/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
|
10
|
+
[![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
|
3
11
|
|
4
12
|
# GeoPattern
|
5
13
|
|
6
|
-
Generate beautiful tiling SVG patterns from a string. The string is converted
|
14
|
+
Generate beautiful tiling SVG patterns from a string. The string is converted
|
15
|
+
into a SHA and a color and pattern are determined based on the values in the
|
16
|
+
hash. The color is determined by shifting the hue and saturation from a default
|
17
|
+
(or passed in) base color. One of 16 patterns is used (or you can specify one)
|
18
|
+
and the sizing of the pattern elements is also determined by the hash values.
|
7
19
|
|
8
|
-
You can use the generated pattern as the `background-image` for a container.
|
20
|
+
You can use the generated pattern as the `background-image` for a container.
|
21
|
+
Using the `base64` representation of the pattern still results in SVG
|
22
|
+
rendering, so it looks great on retina displays.
|
9
23
|
|
10
|
-
See the [GitHub Guides](
|
24
|
+
See the [GitHub Guides](https://guides.github.com/) site and the [Explore section
|
25
|
+
of GitHub](https://github.com/explore) are examples of this library in action.
|
26
|
+
Brandon Mills has put together an awesome [live preview
|
27
|
+
page](http://btmills.github.io/geopattern/geopattern.html) that's built on his
|
28
|
+
Javascript port.
|
11
29
|
|
12
30
|
## Installation
|
13
31
|
|
32
|
+
**Note:** as of version `1.4.0`, Ruby version 2 or greater is required.
|
33
|
+
|
14
34
|
Add this line to your application's Gemfile:
|
15
35
|
|
16
36
|
gem 'geo_pattern'
|
@@ -46,115 +66,220 @@ pattern = GeoPattern.generate('Mastering Markdown', color: '#fc0')
|
|
46
66
|
To use a specific [pattern generator](#available-patterns):
|
47
67
|
|
48
68
|
```ruby
|
49
|
-
pattern = GeoPattern.generate('Mastering Markdown',
|
69
|
+
pattern = GeoPattern.generate('Mastering Markdown', patterns: :sine_waves)
|
70
|
+
```
|
71
|
+
|
72
|
+
To use a subset of the [available patterns](#available-patterns):
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
|
50
76
|
```
|
51
77
|
|
52
78
|
Get the SVG string:
|
53
79
|
|
54
80
|
```ruby
|
55
|
-
puts pattern.
|
81
|
+
puts pattern.to_svg
|
56
82
|
# => <svg xmlns="http://www.w3.org/2000/svg" ...
|
57
83
|
```
|
58
84
|
|
59
85
|
Get the Base64 encoded string:
|
60
86
|
|
61
87
|
```ruby
|
62
|
-
puts pattern.
|
88
|
+
puts pattern.to_base64
|
63
89
|
# => PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC...
|
64
90
|
```
|
65
91
|
|
66
92
|
You can then use this string to set the background:
|
67
93
|
|
68
94
|
```html
|
69
|
-
<div style="background-image: <%= pattern.
|
95
|
+
<div style="background-image: <%= pattern.to_data_uri %>"></div>
|
70
96
|
```
|
71
97
|
|
72
98
|
## Available patterns
|
73
99
|
|
74
|
-
*Note: As of version `1.3.0`, string references (e.g. `overlapping_circles`)
|
100
|
+
*Note: As of version `1.3.0`, string references (e.g. `overlapping_circles`)
|
101
|
+
are deprecated in favor of symbol references (e.g. `:overlapping_circles`).*
|
102
|
+
|
103
|
+
### :chevrons
|
104
|
+
|
105
|
+
![](http://jasonlong.github.io/geo_pattern/examples/chevrons.png)
|
75
106
|
|
76
|
-
|
107
|
+
|
108
|
+
### :octagons
|
77
109
|
|
78
110
|
![](http://jasonlong.github.io/geo_pattern/examples/octogons.png)
|
79
111
|
|
80
|
-
###
|
112
|
+
### :overlapping_circles
|
81
113
|
|
82
114
|
![](http://jasonlong.github.io/geo_pattern/examples/overlapping_circles.png)
|
83
115
|
|
84
|
-
###
|
116
|
+
### :plus_signs
|
85
117
|
|
86
118
|
![](http://jasonlong.github.io/geo_pattern/examples/plus_signs.png)
|
87
119
|
|
88
|
-
###
|
120
|
+
### :xes
|
89
121
|
|
90
122
|
![](http://jasonlong.github.io/geo_pattern/examples/xes.png)
|
91
123
|
|
92
|
-
###
|
124
|
+
### :sine_waves
|
93
125
|
|
94
126
|
![](http://jasonlong.github.io/geo_pattern/examples/sine_waves.png)
|
95
127
|
|
96
|
-
###
|
128
|
+
### :hexagons
|
97
129
|
|
98
130
|
![](http://jasonlong.github.io/geo_pattern/examples/hexagons.png)
|
99
131
|
|
100
|
-
###
|
132
|
+
### :overlapping_rings
|
101
133
|
|
102
134
|
![](http://jasonlong.github.io/geo_pattern/examples/overlapping_rings.png)
|
103
135
|
|
104
|
-
###
|
136
|
+
### :plaid
|
105
137
|
|
106
138
|
![](http://jasonlong.github.io/geo_pattern/examples/plaid.png)
|
107
139
|
|
108
|
-
###
|
140
|
+
### :triangles
|
109
141
|
|
110
142
|
![](http://jasonlong.github.io/geo_pattern/examples/triangles.png)
|
111
143
|
|
112
|
-
###
|
144
|
+
### :squares
|
113
145
|
|
114
146
|
![](http://jasonlong.github.io/geo_pattern/examples/squares.png)
|
115
147
|
|
116
|
-
###
|
148
|
+
### :nested_squares
|
117
149
|
|
118
150
|
![](http://jasonlong.github.io/geo_pattern/examples/nested_squares.png)
|
119
151
|
|
120
|
-
###
|
152
|
+
### :mosaic_squares
|
121
153
|
|
122
154
|
![](http://jasonlong.github.io/geo_pattern/examples/mosaic_squares.png)
|
123
155
|
|
124
|
-
###
|
156
|
+
### :concentric_circles
|
125
157
|
|
126
158
|
![](http://jasonlong.github.io/geo_pattern/examples/concentric_circles.png)
|
127
159
|
|
128
|
-
###
|
160
|
+
### :diamonds
|
129
161
|
|
130
162
|
![](http://jasonlong.github.io/geo_pattern/examples/diamonds.png)
|
131
163
|
|
132
|
-
###
|
164
|
+
### :tessellation
|
133
165
|
|
134
166
|
![](http://jasonlong.github.io/geo_pattern/examples/tessellation.png)
|
135
167
|
|
136
168
|
|
169
|
+
## Inspection of pattern
|
170
|
+
|
171
|
+
If you want to get some more information about a pattern, please use the
|
172
|
+
following methods.
|
173
|
+
|
174
|
+
```ruby
|
175
|
+
pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
|
176
|
+
|
177
|
+
# The color of the background in html notation
|
178
|
+
pattern.background.color.to_html
|
179
|
+
|
180
|
+
# The color of the background in svg notation
|
181
|
+
pattern.background.color.to_svg
|
182
|
+
|
183
|
+
|
184
|
+
# The input colors
|
185
|
+
pattern.background.preset.color
|
186
|
+
pattern.background.preset.base_color
|
187
|
+
|
188
|
+
# The generator
|
189
|
+
pattern.background.generator
|
190
|
+
```
|
191
|
+
|
192
|
+
To get more information about the structure of the pattern, please use the following methods:
|
193
|
+
|
194
|
+
```ruby
|
195
|
+
pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
|
196
|
+
|
197
|
+
# The name of the structure
|
198
|
+
pattern.structure.name
|
199
|
+
|
200
|
+
# The generator of the structure
|
201
|
+
pattern.structure.generator
|
202
|
+
```
|
203
|
+
|
204
|
+
## Rake Support
|
205
|
+
|
206
|
+
```ruby
|
207
|
+
string = 'Mastering markdown'
|
208
|
+
|
209
|
+
require 'geo_pattern/geo_pattern_task'
|
210
|
+
|
211
|
+
GeoPattern::GeoPatternTask.new(
|
212
|
+
name: 'generate',
|
213
|
+
description: 'Generate patterns to make them available as fixtures',
|
214
|
+
data: {
|
215
|
+
'fixtures/generated_patterns/diamonds_with_color.svg' => { input: string, patterns: [:diamonds], color: '#00ff00' },
|
216
|
+
'fixtures/generated_patterns/diamonds_with_base_color.svg' => { input: string, patterns: [:diamonds], base_color: '#00ff00' }
|
217
|
+
}
|
218
|
+
)
|
219
|
+
```
|
220
|
+
|
221
|
+
## Developing
|
222
|
+
|
223
|
+
### Generate Fixtures
|
224
|
+
|
225
|
+
```ruby
|
226
|
+
rake fixtures:generate
|
227
|
+
```
|
228
|
+
|
229
|
+
### Run tests
|
230
|
+
|
231
|
+
```ruby
|
232
|
+
rake test
|
233
|
+
```
|
234
|
+
|
137
235
|
## Contributing
|
138
236
|
|
139
|
-
1. Fork it (
|
237
|
+
1. Fork it ( https://github.com/jasonlong/geo_pattern/fork )
|
140
238
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
141
239
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
142
240
|
4. Push to the branch (`git push origin my-new-feature`)
|
143
241
|
5. Create new Pull Request
|
144
242
|
|
145
|
-
##
|
243
|
+
## Development
|
244
|
+
|
245
|
+
Prefix rspec-commandline with `RSPEC_PROFILE=1` to output the ten slowest
|
246
|
+
examples of the test suite.
|
247
|
+
|
248
|
+
```bash
|
249
|
+
RSPEC_PROFILE=1 bundle exec rspec
|
250
|
+
```
|
251
|
+
|
252
|
+
## Ports & related projects
|
146
253
|
|
147
254
|
JavaScript port by Brandon Mills:
|
148
|
-
https://github.com/btmills/
|
255
|
+
https://github.com/btmills/geopattern
|
256
|
+
|
257
|
+
TypeScript port by MooYeol Lee:
|
258
|
+
https://github.com/mooyoul/geo-pattern
|
149
259
|
|
150
260
|
Python port by Bryan Veloso:
|
151
261
|
https://github.com/bryanveloso/geopatterns
|
152
262
|
|
263
|
+
Elixir port by Anne Johnson:
|
264
|
+
https://github.com/annejohnson/geo_pattern
|
265
|
+
|
153
266
|
PHP port by Anand Capur:
|
154
267
|
https://github.com/redeyeventures/geopattern-php
|
155
268
|
|
156
269
|
Go port by Pravendra Singh:
|
157
|
-
https://github.com/pravj/
|
270
|
+
https://github.com/pravj/geopattern
|
158
271
|
|
159
272
|
CoffeeScript port by Aleks (muchweb):
|
160
273
|
https://github.com/muchweb/geo-pattern-coffee
|
274
|
+
|
275
|
+
Cocoa port by Matt Faluotico:
|
276
|
+
https://github.com/mattfxyz/GeoPattern-Cocoa
|
277
|
+
|
278
|
+
Middleman extension by @maxmeyer:
|
279
|
+
https://github.com/fedux-org/middleman-geo_pattern
|
280
|
+
|
281
|
+
Dart(Flutter) port by @suyash:
|
282
|
+
https://github.com/suyash/geopattern
|
283
|
+
|
284
|
+
Lua port by Ivan Azoyan:
|
285
|
+
https://github.com/azoyan/geopattern
|
data/Rakefile
CHANGED
@@ -1,23 +1,82 @@
|
|
1
|
-
|
2
|
-
require 'inch/rake'
|
3
|
-
require 'rspec/core/rake_task'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
task default: :test
|
3
|
+
$LOAD_PATH.unshift File.expand_path("lib", __dir__)
|
7
4
|
|
8
|
-
desc
|
9
|
-
task
|
10
|
-
# task test: %w(test:rspec test:rubocop)
|
5
|
+
desc "Default task running Tests"
|
6
|
+
task default: :test
|
11
7
|
|
8
|
+
desc "Run test suite"
|
9
|
+
task test: ["test:standard", "test:rspec"]
|
10
|
+
task "test:ci" => ["bootstrap:gem_requirements", :test]
|
12
11
|
namespace :test do
|
12
|
+
task :rspec do
|
13
|
+
sh "rspec"
|
14
|
+
end
|
13
15
|
|
14
|
-
|
16
|
+
task "inch" do
|
17
|
+
sh "inch"
|
18
|
+
end
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
Inch::Rake::Suggest.new
|
20
|
+
require "standard/rake"
|
19
21
|
end
|
20
22
|
|
21
23
|
namespace :gem do
|
22
|
-
require
|
24
|
+
require "bundler/gem_tasks"
|
25
|
+
end
|
26
|
+
|
27
|
+
unless ENV.key?("CI")
|
28
|
+
require "geo_pattern/geo_pattern_task"
|
29
|
+
|
30
|
+
namespace :fixtures do
|
31
|
+
string = "Mastering Markdown"
|
32
|
+
|
33
|
+
GeoPattern::GeoPatternTask.new(
|
34
|
+
name: "generate",
|
35
|
+
description: "Generate patterns to make them available as fixtures",
|
36
|
+
data: {
|
37
|
+
"fixtures/generated_patterns/chevrons.svg" => {input: string, patterns: [:chevrons]},
|
38
|
+
"fixtures/generated_patterns/concentric_circles.svg" => {input: string, patterns: [:concentric_circles]},
|
39
|
+
"fixtures/generated_patterns/diamonds.svg" => {input: string, patterns: [:diamonds]},
|
40
|
+
"fixtures/generated_patterns/hexagons.svg" => {input: string, patterns: [:hexagons]},
|
41
|
+
"fixtures/generated_patterns/mosaic_squares.svg" => {input: string, patterns: [:mosaic_squares]},
|
42
|
+
"fixtures/generated_patterns/nested_squares.svg" => {input: string, patterns: [:nested_squares]},
|
43
|
+
"fixtures/generated_patterns/octagons.svg" => {input: string, patterns: [:octagons]},
|
44
|
+
"fixtures/generated_patterns/overlapping_circles.svg" => {input: string, patterns: [:overlapping_circles]},
|
45
|
+
"fixtures/generated_patterns/overlapping_rings.svg" => {input: string, patterns: [:overlapping_rings]},
|
46
|
+
"fixtures/generated_patterns/plaid.svg" => {input: string, patterns: [:plaid]},
|
47
|
+
"fixtures/generated_patterns/plus_signs.svg" => {input: string, patterns: [:plus_signs]},
|
48
|
+
"fixtures/generated_patterns/sine_waves.svg" => {input: string, patterns: [:sine_waves]},
|
49
|
+
"fixtures/generated_patterns/squares.svg" => {input: string, patterns: [:squares]},
|
50
|
+
"fixtures/generated_patterns/tessellation.svg" => {input: string, patterns: [:tessellation]},
|
51
|
+
"fixtures/generated_patterns/triangles.svg" => {input: string, patterns: [:triangles]},
|
52
|
+
"fixtures/generated_patterns/xes.svg" => {input: string, patterns: [:xes]},
|
53
|
+
"fixtures/generated_patterns/diamonds_with_color.svg" => {input: string, patterns: [:diamonds], color: "#00ff00"},
|
54
|
+
"fixtures/generated_patterns/diamonds_with_base_color.svg" => {input: string, patterns: [:diamonds], base_color: "#00ff00"}
|
55
|
+
}
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "Bootstrap project"
|
61
|
+
task bootstrap: %w[bootstrap:bundler]
|
62
|
+
|
63
|
+
desc "Bootstrap project for ci"
|
64
|
+
task "bootstrap:ci" do
|
65
|
+
Rake::Task["bootstrap"].invoke
|
66
|
+
end
|
67
|
+
|
68
|
+
namespace :bootstrap do
|
69
|
+
desc "Bootstrap bundler"
|
70
|
+
task :bundler do |t|
|
71
|
+
puts t.comment
|
72
|
+
sh "gem install bundler"
|
73
|
+
sh "bundle install"
|
74
|
+
end
|
75
|
+
|
76
|
+
desc "Require gems"
|
77
|
+
task :gem_requirements do |t|
|
78
|
+
puts t.comment
|
79
|
+
require "bundler"
|
80
|
+
Bundler.require
|
81
|
+
end
|
23
82
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="459" height="303"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(0.0,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(76.66666666666666,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(153.33333333333331,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(229.99999999999997,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(306.66666666666663,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(0.0,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(76.66666666666666,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.10666666666666667" stroke-width="1" transform="translate(153.33333333333331,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(229.99999999999997,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(306.66666666666663,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(383.33333333333326,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.12400000000000001" stroke-width="1" transform="translate(0.0,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(76.66666666666666,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(153.33333333333331,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.03733333333333333" stroke-width="1" transform="translate(229.99999999999997,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.028666666666666667" stroke-width="1" transform="translate(306.66666666666663,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(0.0,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(76.66666666666666,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(153.33333333333331,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(229.99999999999997,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(306.66666666666663,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(0.0,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(76.66666666666666,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(153.33333333333331,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(229.99999999999997,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(306.66666666666663,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(383.33333333333326,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="408" height="408"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><circle cx="34.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.14133333333333334;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="102.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.08933333333333333;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="34.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="170.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.13266666666666665;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="34.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="238.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.15;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.12400000000000001" /><circle cx="306.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="374.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="34.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.06333333333333334" /><circle cx="102.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="170.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="238.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="306.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.15;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="374.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.14133333333333334" /><circle cx="34.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.13266666666666665;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="102.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /><circle cx="170.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.10666666666666667;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /><circle cx="238.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="306.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.08933333333333333;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="170.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="374.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.028666666666666667" /><circle cx="34.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.12400000000000001;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.03733333333333333" /><circle cx="102.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.06333333333333334;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="170.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.06333333333333334" /><circle cx="238.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.03733333333333333;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.12400000000000001" /><circle cx="306.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.028666666666666667;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="374.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.08933333333333333" /><circle cx="34.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="102.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="306.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.10666666666666667" /><circle cx="170.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="238.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.13266666666666665" /><circle cx="306.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.14133333333333334;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="374.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.15" /><circle cx="34.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="102.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="170.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="238.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.06333333333333334;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="306.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="374.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="284" height="94"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.10666666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.12400000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.12400000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.06333333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.03733333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.028666666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.06333333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 62.666666666666664)" /></svg>
|