page_title_helper 1.0.1 → 5.0.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +79 -0
- data/CODE_OF_CONDUCT.md +77 -0
- data/Gemfile +5 -0
- data/README.md +201 -155
- data/Rakefile +8 -62
- data/lib/page_title_helper.rb +56 -52
- data/lib/page_title_helper/version.rb +5 -0
- data/page_title_helper.gemspec +30 -0
- data/test/en.yml +11 -1
- data/test/multiple_formats_test.rb +50 -50
- data/test/page_title_helper_test.rb +89 -71
- data/test/test_helper.rb +33 -13
- metadata +112 -43
- data/.gitignore +0 -4
- data/VERSION.yml +0 -4
- data/rails/init.rb +0 -4
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 83ca84d323ad19f09e49b6ee6333f2cd3c06f0e2e3f8748b8081a204fdebc4ac
|
4
|
+
data.tar.gz: 4c9affff4ee6f51d0dfccb906ec4406e5a50032da651fcc92be19603368741e0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19879f1e33647398e8d15ee0b3adbaacd29a6645fd89b33838fddf11f469a577abf2467a368f6b352e61ad4db8fc71f0ac4f5e918112b16c59ab84751bfca0a2
|
7
|
+
data.tar.gz: c28883f1bd9cefd68c8f121b4caced4bd946ffec08d5e10f4e33f8a6008ed825132886362b97afa36a642ce05e02b22182899743daeb56515962e24ac9e51fdd
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Page title helper change log
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
This project adheres to [Semantic Versioning](https://semver.org/).
|
5
|
+
|
6
|
+
Read more at [Keep a CHANGELOG](https://keepachangelog.com/en/0.3.0/)
|
7
|
+
about why a change log is important.
|
8
|
+
|
9
|
+
## x.y.z
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
|
15
|
+
### Deprecated
|
16
|
+
|
17
|
+
### Removed
|
18
|
+
|
19
|
+
### Fixed
|
20
|
+
|
21
|
+
### Security
|
22
|
+
|
23
|
+
## 5.0.0
|
24
|
+
|
25
|
+
### Added
|
26
|
+
- Add support for Ruby 3 (#120)
|
27
|
+
- Add automatic gem release (#122)
|
28
|
+
- Add support for Rails 6.1 (#113, #114)
|
29
|
+
- Officially support Ruby 2.7 (#103)
|
30
|
+
|
31
|
+
### Removed
|
32
|
+
- Drop support for Ruby 2.4 (#109)
|
33
|
+
- Drop support for Rails < 5.2 (#104)
|
34
|
+
|
35
|
+
### Fixed
|
36
|
+
- Use a better-maintained Ruby setup for the CI (#121)
|
37
|
+
- Fix warnings in the `.travis.yml` (#106)
|
38
|
+
|
39
|
+
## 4.0.0
|
40
|
+
|
41
|
+
### Added
|
42
|
+
- Add support for Rails 6.0 (#94)
|
43
|
+
|
44
|
+
### Removed
|
45
|
+
- Drop support for Ruby < 2.4 (#93)
|
46
|
+
|
47
|
+
## 3.0.0
|
48
|
+
|
49
|
+
### Added
|
50
|
+
- Add Ruby 2.4.0 to the build matrix (#68)
|
51
|
+
- Add a CHANGELOG.md (#59)
|
52
|
+
- Add RuboCop checking to the CI (#52)
|
53
|
+
- Add a CODE_OF_CONDUCT.md (#51)
|
54
|
+
- Update Ruby to 2.3.3 and 2.2.6 on Travis (#38)
|
55
|
+
- Add Ruby 2.3.0 to the build matrix
|
56
|
+
- Re-add Ruby 2.0.0 to the build matrix (#29)
|
57
|
+
- Test against Ruby 2.2
|
58
|
+
- Use Appraisal for building with different Rails versions (#19)
|
59
|
+
|
60
|
+
### Changed
|
61
|
+
- Replaced Appraisals with specific Gemfiles (#41)
|
62
|
+
- Delete obsolete init.rb file (#61)
|
63
|
+
- Add Rails 5.0 to the build matrix (#42)
|
64
|
+
- Raise RVM and Gem minimum versions (#3)
|
65
|
+
|
66
|
+
### Removed
|
67
|
+
- Drop support for Rails 3.2 and 4.0 (#39)
|
68
|
+
- Drop support for Ruby 1.9.x (#24)
|
69
|
+
|
70
|
+
### Fixed
|
71
|
+
- Fix @_page_title uninitialized warning (#62)
|
72
|
+
- Fix the Travis build on Ruby 2.3.3 (#63)
|
73
|
+
- Do do not shell-out to `git` in Gemfile (#49)
|
74
|
+
- Get the tests to run in Rails 4.2 and 5.0 (#40)
|
75
|
+
- Stop requiring version from the main class (#47)
|
76
|
+
- Allow the Rails 3.2 build to fail only with Ruby 2.2 (#30)
|
77
|
+
- Allow Rails 3.2 builds to fail (#26)
|
78
|
+
- Configure Travis for better performance (#10)
|
79
|
+
- Remove Gemfile.lock (#1)
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
7
|
+
our community a harassment-free experience for everyone, regardless of age,
|
8
|
+
body size, disability, ethnicity, gender identity and expression, level of
|
9
|
+
experience, nationality, personal appearance, race, religion, or sexual
|
10
|
+
identity and orientation.
|
11
|
+
|
12
|
+
## Our Standards
|
13
|
+
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
15
|
+
include:
|
16
|
+
|
17
|
+
* Using welcoming and inclusive language
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
19
|
+
* Gracefully accepting constructive criticism
|
20
|
+
* Focusing on what is best for the community
|
21
|
+
* Showing empathy towards other community members
|
22
|
+
|
23
|
+
Examples of unacceptable behavior by participants include:
|
24
|
+
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
+
advances
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
|
+
* Public or private harassment
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
30
|
+
address, without explicit permission
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
32
|
+
professional setting
|
33
|
+
|
34
|
+
|
35
|
+
## Our Responsibilities
|
36
|
+
|
37
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
38
|
+
behavior and are expected to take appropriate and fair corrective action in
|
39
|
+
response to any instances of unacceptable behavior.
|
40
|
+
|
41
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
42
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
43
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
44
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
45
|
+
threatening, offensive, or harmful.
|
46
|
+
|
47
|
+
## Scope
|
48
|
+
|
49
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
50
|
+
when an individual is representing the project or its community. Examples of
|
51
|
+
representing a project or community include using an official project e-mail
|
52
|
+
address, posting via an official social media account, or acting as an
|
53
|
+
appointed representative at an online or offline event. Representation of a
|
54
|
+
project may be further defined and clarified by project maintainers.
|
55
|
+
|
56
|
+
## Enforcement
|
57
|
+
|
58
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
59
|
+
reported by contacting the project team at (lukas dot westermann at gmail dot com).
|
60
|
+
All complaints will be reviewed and investigated and will result in a response
|
61
|
+
that is deemed necessary and appropriate to the circumstances. The project team
|
62
|
+
is obligated to maintain confidentiality with regard to the reporter of an
|
63
|
+
incident. Further details of specific enforcement policies may be posted
|
64
|
+
separately.
|
65
|
+
|
66
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
67
|
+
faith may face temporary or permanent repercussions as determined by other
|
68
|
+
members of the project's leadership.
|
69
|
+
|
70
|
+
## Attribution
|
71
|
+
|
72
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
73
|
+
version 1.4, available at
|
74
|
+
[https://contributor-covenant.org/version/1/4/][version].
|
75
|
+
|
76
|
+
[homepage]: https://contributor-covenant.org
|
77
|
+
[version]: https://contributor-covenant.org/version/1/4/
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -1,178 +1,224 @@
|
|
1
1
|
# Page title helper
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
3
|
+
[](https://github.com/lwe/page_title_helper/actions)
|
4
|
+
[](https://badge.fury.io/rb/page_title_helper)
|
5
|
+
|
6
|
+
This project adheres to [Semantic Versioning](https://semver.org/).
|
7
|
+
|
8
|
+
## What does this gem do?
|
9
|
+
|
10
|
+
Ever wondered if there was an easier and DRY-way to set your page titles
|
11
|
+
(and/or headings), introducing _page title helper_, a small view helper for
|
12
|
+
Rails to inflect titles from controllers and actions.
|
13
|
+
|
14
|
+
In your layout, add this to your `<head>`-section:
|
15
|
+
|
16
|
+
```html
|
17
|
+
<title><%= page_title %></title>
|
18
|
+
```
|
19
|
+
|
20
|
+
That's it. Now just add translations, in e.g. `config/locales/en.yml`:
|
21
|
+
|
22
|
+
```yaml
|
23
|
+
en:
|
24
|
+
contacts:
|
25
|
+
index:
|
26
|
+
title: "Contacts"
|
27
|
+
```
|
28
|
+
|
29
|
+
When `/contacts/` is requested, the key `:en, :contacts, :index, :title`
|
30
|
+
is looked up and printed, together with the applications basename, like:
|
31
|
+
`Contacts - My cool App`.
|
21
32
|
The format etc. is of course configurable, just head down to the options.
|
22
33
|
|
23
34
|
## Installation
|
24
35
|
|
25
|
-
As gem (from
|
36
|
+
As gem (from rubygems.org):
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
# then add the following line to Gemfile
|
40
|
+
gem 'page_title_helper'
|
41
|
+
|
42
|
+
# living on the bleeding edge?
|
43
|
+
gem 'page_title_helper', git: 'git://github.com/lwe/page_title_helper.git'
|
44
|
+
```
|
26
45
|
|
27
|
-
|
28
|
-
|
29
|
-
# then add the following line to config/environment.rb
|
30
|
-
config.gem 'page_title_helper', :source => 'http://gemcutter.org'
|
31
|
-
|
32
|
-
or as plain old Rails plugin:
|
46
|
+
## Translated titles
|
33
47
|
|
34
|
-
|
48
|
+
All translated titles are inflected from the current controller and action,
|
49
|
+
so to easily explain all lookups, here an example with the corresponding
|
50
|
+
lookups:
|
51
|
+
|
52
|
+
```
|
53
|
+
Admin::AccountController#index => :'admin.account.index.title'
|
54
|
+
:'admin.account.title'
|
55
|
+
options[:default]
|
56
|
+
```
|
57
|
+
|
58
|
+
For `create` and `update` a further fallback to `new.title` and `edit.title`
|
59
|
+
have been added, because they certainly are duplicates.
|
35
60
|
|
36
61
|
## Customize titles
|
37
62
|
|
38
|
-
Need a custom title, or need to fill in some placeholders? Just use the _bang_
|
39
|
-
`contacts/show.html.erb` the requirement is to
|
40
|
-
`<title>-tag`as well as in the heading?
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
63
|
+
Need a custom title, or need to fill in some placeholders? Just use the _bang_
|
64
|
+
method (`page_title!`), in e.g. `contacts/show.html.erb` the requirement is to
|
65
|
+
display the contacts name in the `<title>-tag`as well as in the heading?
|
66
|
+
|
67
|
+
```html
|
68
|
+
<h1><%= page_title!(@contact.name) %></h1>
|
69
|
+
```
|
70
|
+
|
71
|
+
A call to `page_title` will now return the contacts name, neat :) if for
|
72
|
+
example the `<h1>` does not match the `<title>`, then well, just do something
|
73
|
+
like:
|
74
|
+
|
75
|
+
```html
|
76
|
+
<% page_title!(@contact.name + " (" + @contact.company.name + ")") %>
|
77
|
+
<h1><%= @contact.name %></h1>
|
78
|
+
```
|
79
|
+
|
80
|
+
Guess, that's it. Of course it's also possible to use `translate` within
|
81
|
+
`page_title!`, to translate custom titles, like:
|
82
|
+
|
83
|
+
In `config/locales/en.yml`:
|
84
|
+
|
85
|
+
```yaml
|
86
|
+
en:
|
87
|
+
dashboard:
|
88
|
+
index:
|
89
|
+
title: "Welcome back, {{name}}"
|
90
|
+
```
|
91
|
+
|
92
|
+
In `app/views/dashboard/index.html.erb`:
|
93
|
+
```html
|
94
|
+
<h1><%= page_title!(t('.title', name: @user.first_name)) %></h1>
|
95
|
+
```
|
96
|
+
|
97
|
+
## More fun with <code>:format</code>
|
98
|
+
|
99
|
+
The `:format` option is used to specify how a title is formatted, i.e. if the
|
100
|
+
app name is prepended or appended or if it contains the account name etc.
|
101
|
+
It uses a similar approach as paperclip's path interpolations:
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
page_title format: ':title / :app' # => "Contacts / My cool app"
|
105
|
+
```
|
106
|
+
|
107
|
+
Adding custom interpolations is as easy as defining a block, for example to
|
108
|
+
access the current controller:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
PageTitleHelper.interpolates :controller do |env|
|
112
|
+
env[:view].controller.controller_name.humanize
|
113
|
+
end
|
114
|
+
|
115
|
+
page_title format: ':title / :controller / :app' # => "Welcome back / Dashboard / My cool app"
|
116
|
+
```
|
117
|
+
|
118
|
+
To access just the title, without any magic app stuff interpolated or appended,
|
119
|
+
use:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
page_title! "untitled"
|
123
|
+
page_title format: false # => "untitled"
|
124
|
+
```
|
125
|
+
|
84
126
|
Need a custom format for a single title? Just return an array:
|
85
127
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
128
|
+
In the view:
|
129
|
+
|
130
|
+
```html
|
131
|
+
<h1><%= page_title!(@contact.name, ":title from :company - :app") %></h1> # => <h1>Franz Meyer</h1>
|
132
|
+
```
|
133
|
+
|
134
|
+
In the `<head>`:
|
135
|
+
|
136
|
+
```html
|
137
|
+
<title><%= page_title %></title> # => this time it will use custom title like "Franz Meyer from ABC Corp. - My cool app"
|
138
|
+
```
|
139
|
+
|
140
|
+
To streamline that feature a bit and simplify reuse of often used formats,
|
141
|
+
it's possible to define format aliases like:
|
142
|
+
|
143
|
+
In an initializer, e.g., `config/initializers/page_title_helper.rb`:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
PageTitleHelper.formats[:with_company] = ":title from :company - :app"
|
147
|
+
# show app first for promo pages :)
|
148
|
+
PageTitleHelper.formats[:promo] = ":app - :title"
|
149
|
+
```
|
150
|
+
|
151
|
+
Then in the view to display a contact:
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
page_title! @contact.name, :with_company
|
155
|
+
```
|
156
|
+
|
157
|
+
Or for the promo page via `config/locales/en.yml` (!):
|
158
|
+
|
159
|
+
```yaml
|
160
|
+
en:
|
161
|
+
pages:
|
162
|
+
features:
|
163
|
+
title:
|
164
|
+
- "Features comparison"
|
165
|
+
- !ruby/sym promo
|
166
|
+
```
|
167
|
+
|
168
|
+
Pretty, cool, ain't it? The special `format: :app` works also via the `formats`
|
169
|
+
hash. Then there is also a `:default` format, which can be used to override the
|
170
|
+
default format.
|
111
171
|
|
112
172
|
## All options - explained
|
113
173
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
<td>string</td>
|
124
|
-
</tr>
|
125
|
-
<tr>
|
126
|
-
<td><tt>:default</tt></td>
|
127
|
-
<td>String which is displayed when no translation exists and no custom title
|
128
|
-
has been specified. Can also be set to a symbol or array to take advantage of
|
129
|
-
<tt>I18n.translate</tt>s <tt>:default</tt> option.</td>
|
130
|
-
<td><tt>:'app.tagline'</tt></td>
|
131
|
-
<td>string, symbol or array of those</td>
|
132
|
-
</tr>
|
133
|
-
<tr>
|
134
|
-
<td><tt>:format</tt></td>
|
135
|
-
<td>Defines the output format, accepts a string containing multiple interpolations, or
|
136
|
-
a symbol to a format alias, see <i>More fun with <tt>:format</tt></i>. If set to
|
137
|
-
+false+, just the current title is returned.</td>
|
138
|
-
<td><tt>:default</tt></td>
|
139
|
-
<td>string, symbol</td>
|
140
|
-
</tr>
|
141
|
-
<tr>
|
142
|
-
<td><tt>:suffix</tt></td>
|
143
|
-
<td>Not happy with the fact that the translations must be named like
|
144
|
-
<tt>en -> contacts -> index -> title</tt>, but prefer e.g. them to be suffixed with
|
145
|
-
<tt>page_title</tt>? Then just set <tt>:suffix => :page_title</tt>.</td>
|
146
|
-
<td><tt>:title</tt></td>
|
147
|
-
<td>symbol or string</td>
|
148
|
-
</tr>
|
149
|
-
</table>
|
150
|
-
</p>
|
151
|
-
|
152
|
-
If an option should be set globally it's possible to change the default options hash as follows:
|
153
|
-
|
154
|
-
PageTitleHelper.options[:suffix] = :page_title
|
155
|
-
|
156
|
-
Note, currently it only makes sense to set `:default` and/or `:page_title` globally.
|
174
|
+
| Option | Description | Default | Values |
|
175
|
+
|----------|-------------|---------|--------|
|
176
|
+
|`:app` | Specify the applications name, however it's recommended to define it via translation key `:'app.name'`. | Inflected from `Rails.root`| string |
|
177
|
+
|`:default`| String which is displayed when no translation exists and no custom title has been specified. Can also be set to a symbol or array to take advantage of `I18n.translate`'s `:default` option. | `'app.tagline'` | string, symbol or array of those |
|
178
|
+
|`:format` | Defines the output format, accepts a string containing multiple interpolations, or a symbol to a format alias, see _More fun with `:format`_. If set to `false`, just the current title is returned. | `:default`| string, symbol |
|
179
|
+
|
180
|
+
Options can be set globally via `PageTitleHelper.options`. Note, currently it
|
181
|
+
only makes sense to set `:default` globally.
|
182
|
+
|
157
183
|
To add or change formats use:
|
158
184
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
185
|
+
```ruby
|
186
|
+
# change the default format used (if no format is specified):
|
187
|
+
PageTitleHelper.formats[:default] = ":title // :app"
|
188
|
+
|
189
|
+
# add a custom format alias (which can be used with page_title(format: :promo))
|
190
|
+
PageTitleHelper.formats[:promo] = ":app // :title"
|
191
|
+
```
|
192
|
+
|
193
|
+
_Note:_ It's recommended to add this kind of stuff to an initializer, like e.g.
|
194
|
+
`config/initializers/page_title_helper.rb`.
|
166
195
|
|
167
196
|
## A (maybe useful) interpolation
|
168
197
|
|
169
|
-
The internationalized controller name, with fallback to just display the
|
198
|
+
The internationalized controller name, with fallback to just display the
|
199
|
+
humanized name:
|
200
|
+
|
201
|
+
```ruby
|
202
|
+
PageTitleHelper.interpolates :controller do |env|
|
203
|
+
c = env[:view].controller
|
204
|
+
I18n.t(c.controller_path.tr('/', '.') + '.controller', default: c.controller_name.humanize)
|
205
|
+
end
|
206
|
+
```
|
207
|
+
|
208
|
+
_Note:_ Put this kind of stuff into an initializer, like
|
209
|
+
`config/initializers/page_title_helper.rb` or something like that.
|
210
|
+
|
211
|
+
## Contributing
|
212
|
+
|
213
|
+
Pull request are more than welcome. Please adhere to our
|
214
|
+
[code of conduct](CODE_OF_CONDUCT.md) in discussions and contributions.
|
215
|
+
Thanks!
|
216
|
+
|
217
|
+
## Maintainers
|
218
|
+
|
219
|
+
* [@lwe - Lukas Westermann](https://github.com/lwe)
|
220
|
+
* [@oliverklee - Oliver Klee](https://github.com/oliverklee)
|
170
221
|
|
171
|
-
PageTitleHelper.interpolates :controller do |env|
|
172
|
-
I18n.t env.controller.controller_path.tr('/','.') + '.controller', :default => env.controller.controller_name.humanize
|
173
|
-
end
|
174
|
-
|
175
|
-
_Note:_ Put this kind of stuff into an initilizer, like `config/initializers/page_title.rb` or someting like that.
|
176
|
-
|
177
222
|
## Licence and copyright
|
178
|
-
Copyright (c) 2009 Lukas Westermann (Zurich, Switzerland), released under the
|
223
|
+
Copyright (c) 2009 Lukas Westermann (Zurich, Switzerland), released under the
|
224
|
+
MIT license
|