jekyll-theme-twenty 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -0
- data/_includes/contact.html +13 -0
- data/_includes/contact_form.html +25 -0
- data/_includes/contact_script.html +51 -0
- data/_includes/header.html +0 -1
- data/_includes/language.html +7 -9
- data/_includes/navigation.html +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c13da77845cd2ec6ff57e1fde4ec6c1bca8f289eff86532c665f7e167874de7
|
4
|
+
data.tar.gz: 42f3f8761c2fb794fd9f483cb1080feb0a3145dd7ec33917c7217a9a80b34870
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb064195d6340cb710480d343105cac27f4156b184ce87635cc708c50861a0c11625227b8aa4e91dc51dcdb755f3235a6e19f92c4bff3f75ddc0496ea81baa27
|
7
|
+
data.tar.gz: 7bd7687ef8d16d01025632811d3e7021d7c90f29069823c84315e1abf2d0022f42e53cbd49525018a5fcbbc807007f4b79166a371ef87539ed24191013dac834
|
data/README.md
CHANGED
@@ -22,6 +22,10 @@ You can preview the theme [here](https://moodule.github.io/jekyll-theme-twenty).
|
|
22
22
|
|
23
23
|
> **SEO ready**: sitemap, robots.txt and tags are automatically generated for the website
|
24
24
|
|
25
|
+
> **Light**: svg images, thumbs and lazy loading for raster images, few libraries
|
26
|
+
|
27
|
+
> **Hardened**: form validation, recaptcha, verified libraries
|
28
|
+
|
25
29
|
# Installation
|
26
30
|
|
27
31
|
Add this line to your Jekyll site's `Gemfile`:
|
@@ -50,21 +54,35 @@ For those unfamiliar with how Jekyll works, check out [jekyllrb.com](https://jek
|
|
50
54
|
or read up on just the basics of [front matter](https://jekyllrb.com/docs/frontmatter/), [writing posts](https://jekyllrb.com/docs/posts/),
|
51
55
|
and [creating pages](https://jekyllrb.com/docs/pages/).
|
52
56
|
|
57
|
+
## Initialization
|
58
|
+
|
59
|
+
Copy the file `_config.yml` from the theme repository to the root of your website folder tree.
|
60
|
+
The following section explains what the settings impact and how to configure `_config.yml` properly.
|
61
|
+
|
53
62
|
## Configuration
|
54
63
|
|
55
64
|
You can use the following custom parameters in `_config.yml`.
|
56
65
|
|
57
66
|
### Site
|
67
|
+
|
58
68
|
Both `title` and `subtitle` are displayed side by side :
|
59
69
|
- in the tab name
|
60
70
|
- at the top of the page, in the header
|
61
71
|
|
62
72
|
### Social
|
73
|
+
|
63
74
|
Social icons will appear for each url your fill in, among `facebook_url` etc.
|
64
75
|
|
65
76
|
### Contact
|
77
|
+
|
66
78
|
Your contact information can be used in contact forms, the footer or anywhere else.
|
67
79
|
|
80
|
+
### Recaptcha
|
81
|
+
|
82
|
+
The contact form is validated using [google's recaptcha plugin][recaptcha-documentation].
|
83
|
+
First, you need to [sign your website up] to enable the plugin.
|
84
|
+
Google will provide you with a **client-side integration key**: copy it to `_config.yml` under `recaptcha.sitekey`.
|
85
|
+
|
68
86
|
## Publication
|
69
87
|
|
70
88
|
### On Github Pages
|
@@ -194,3 +212,5 @@ The theme is available as open source under the terms of the [CC-BY-3.0](LICENSE
|
|
194
212
|
[cookieconsent]: https://github.com/osano/cookieconsent
|
195
213
|
[html5up]: https://html5up.net/
|
196
214
|
[jekyll-logo]: https://github.com/jekyll/brand
|
215
|
+
[recaptcha-documentation]: https://developers.google.com/recaptcha/intro
|
216
|
+
[recaptcha-registering]: https://www.google.com/recaptcha/admin
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{%- assign form_id="contact-form" -%}
|
2
|
+
{%- assign name_input_id="contact-name" -%}
|
3
|
+
{%- assign email_input_id="contact-email" -%}
|
4
|
+
{%- assign message_input_id="contact-message" -%}
|
5
|
+
{%- assign submit_input_id="contact-submit-button" -%}
|
6
|
+
{%- assign reset_input_id="contact-reset-button" -%}
|
7
|
+
{%- assign recaptcha_widget_id="recaptcha-checkbox" -%}
|
8
|
+
{%- assign onsubmit_callback="sendContactMessage" -%}
|
9
|
+
{%- assign onreset_callback="resetContactForm" -%}
|
10
|
+
|
11
|
+
{% include contact_form.html form_id=form_id name_input_id=name_input_id email_input_id=email_input_id message_input_id=message_input_id submit_input_id=submit_input_id reset_input_id=reset_input_id recaptcha_widget_id=recaptcha_widget_id onsubmit_callback=onsubmit_callback onreset_callback=onreset_callback %}
|
12
|
+
|
13
|
+
{% include contact_script.html form_id=form_id name_input_id=name_input_id email_input_id=email_input_id message_input_id=message_input_id submit_input_id=submit_input_id reset_input_id=reset_input_id recaptcha_widget_id=recaptcha_widget_id onsubmit_callback=onsubmit_callback onreset_callback=onreset_callback %}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<form id="{{ include.form_id | 'contact-form' }}" method="post" action="#" onsubmit="{{ include.onsubmit_callback | 'sendContactMessage' }}()" onreset="{{ include.onreset_callback | 'resetContactForm' }}()" >
|
2
|
+
<div class="row gtr-50">
|
3
|
+
<div class="col-6 col-12-mobile required">
|
4
|
+
<input type="text" name="{{ include.name_input_id | 'contact-name' }}" id="{{ include.name_input_id | 'contact-name' }}" placeholder="Name" required minlength="4" maxlength="64" />
|
5
|
+
</div>
|
6
|
+
<div class="col-6 col-12-mobile required">
|
7
|
+
<input type="email" name="{{ include.email_input_id | 'contact-email' }}" id="{{ include.email_input_id | 'contact-email' }}" placeholder="Email" required minlength="8" maxlength="64" />
|
8
|
+
</div>
|
9
|
+
<div class="col-12 required">
|
10
|
+
<select name="contact-subject" id="contact-subject" >
|
11
|
+
<option value="0">Choose a subject</option>
|
12
|
+
</select>
|
13
|
+
</div>
|
14
|
+
<div class="col-12 required">
|
15
|
+
<textarea name="{{ include.message_input_id | 'contact-message' }}" id="{{ include.message_input_id | 'contact-message' }}" placeholder="Message" rows="7" required minlength="16" maxlength="256" ></textarea>
|
16
|
+
</div>
|
17
|
+
<div class="col-12">
|
18
|
+
<ul class="buttons">
|
19
|
+
<li><div id="{{ include.recaptcha_widget_id | 'recaptcha-checkbox' }}" ></div></li>
|
20
|
+
<li><input type="submit" id="{{ include.submit_input_id | 'contact-submit-button' }}" class="special" value="Send Message" disabled /></li>
|
21
|
+
<li><input type="reset" id="{{ include.reset_input_id | 'contact-reset-button' }}" value="Reset" /></li>
|
22
|
+
</ul>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</form>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
const contactFormElement = document.getElementById("{{ include.form_id | default: 'contact-form' }}");
|
3
|
+
const nameInputElement = document.getElementById("{{ include.name_input_id | default: 'contact-name' }}");
|
4
|
+
const emailInputElement = document.getElementById("{{ include.email_input_id | default: 'contact-email' }}");
|
5
|
+
const messageInputElement = document.getElementById("{{ include.message_input_id | default: 'contact-message' }}");
|
6
|
+
const submitInputElement = document.getElementById("{{ include.submit_input_id | default: 'contact-submit-button' }}");
|
7
|
+
var recaptchaWidget;
|
8
|
+
|
9
|
+
const isInputValid = function() {
|
10
|
+
return (nameInputElement.checkValidity()
|
11
|
+
&& emailInputElement.checkValidity()
|
12
|
+
&& messageInputElement.checkValidity())
|
13
|
+
};
|
14
|
+
|
15
|
+
const isRecaptchaValid = function() {
|
16
|
+
var responseToken = grecaptcha.getResponse(recaptchaWidget);
|
17
|
+
return true;
|
18
|
+
};
|
19
|
+
|
20
|
+
const disableSubmitInputElement = function (disabled = true) {
|
21
|
+
submitInputElement.disabled = disabled;
|
22
|
+
}
|
23
|
+
|
24
|
+
const {{ include.onreset_callback | 'resetContactForm' }} = function() {
|
25
|
+
contactFormElement.reset();
|
26
|
+
disableSubmitInputElement();
|
27
|
+
};
|
28
|
+
|
29
|
+
const {{ include.onsubmit_callback | 'sendContactMessage' }} = function() {
|
30
|
+
encodeURIComponent(nameInputElement.value);
|
31
|
+
encodeURIComponent(emailInputElement.value);
|
32
|
+
encodeURIComponent(messageInputElement.value);
|
33
|
+
};
|
34
|
+
|
35
|
+
var onloadCallback = function() {
|
36
|
+
var verifyForm = function(response) {
|
37
|
+
if (isInputValid() && isRecaptchaValid()) {
|
38
|
+
disableSubmitInputElement(false);
|
39
|
+
} else {
|
40
|
+
disableSubmitInputElement();
|
41
|
+
}
|
42
|
+
};
|
43
|
+
recaptchaWidget = grecaptcha.render('{{ include.recaptcha_widget_id | 'recaptcha-checkbox' }}', {
|
44
|
+
'sitekey' : '{{ site.recaptcha.sitekey }}',
|
45
|
+
'theme' : 'dark',
|
46
|
+
'callback' : verifyForm,
|
47
|
+
'expired-callback': disableSubmitInputElement
|
48
|
+
});
|
49
|
+
};
|
50
|
+
</script>
|
51
|
+
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
|
data/_includes/header.html
CHANGED
data/_includes/language.html
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
{%- assign posts=site.posts | where:"lang-ref", page.lang-ref | sort: 'lang' -%}
|
2
2
|
{%- assign pages=site.pages | where:"lang-ref", page.lang-ref | sort: 'lang' | concat: posts -%}
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
{%- endfor -%}
|
11
|
-
</ul>
|
3
|
+
{%- for page in pages -%}
|
4
|
+
{%- if page.lang != "x-default" -%}
|
5
|
+
<li>
|
6
|
+
<a href="{{ page.url | absolute_url }}" class="{{ page.lang }}">{{ page.lang }}</a>
|
7
|
+
</li>
|
8
|
+
{%- endif -%}
|
9
|
+
{%- endfor -%}
|
data/_includes/navigation.html
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-theme-twenty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Mougeolle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -62,6 +62,9 @@ files:
|
|
62
62
|
- LICENSE
|
63
63
|
- README.md
|
64
64
|
- _includes/banner.html
|
65
|
+
- _includes/contact.html
|
66
|
+
- _includes/contact_form.html
|
67
|
+
- _includes/contact_script.html
|
65
68
|
- _includes/cta.html
|
66
69
|
- _includes/date.html
|
67
70
|
- _includes/footer.html
|