jekyll-theme-consulting 0.6.11 → 0.6.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -0
- data/_includes/contact.html +12 -31
- data/_includes/contact_form.html +22 -0
- data/_includes/contact_script.html +51 -0
- data/_includes/scripts.html +9 -9
- data/assets/images/screenshot.jpg +0 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09d0fb48f34fb4e19de2e61aef83aa170248a9b96ab4b34343f7c4587a0d3f9a'
|
4
|
+
data.tar.gz: e5e29daf8d09cc0d557f36eb74ca8a16818d6510d2054ccb66c6b61e0135cb9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5680e9f8154dd43c56fc32362bc7311e0e7043d246fb39601e4be2c7ea485d73797d066cf3c033dd3eed0537f6cd78ad849ad9f8830b446a3f95e0697a5da07
|
7
|
+
data.tar.gz: 3d9e19d9f64864c9c19e21e13e0f524d195ccc1db917c5bbe99b25eed78566719626ccb9dfc36ecb370d4fdfd0ec93fd6e55a363edb4d24333e0a9b951869d94
|
data/README.md
CHANGED
@@ -22,6 +22,10 @@ You can preview the theme [here](https://moodule.github.io/jekyll-theme-consulti
|
|
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,6 +54,11 @@ 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`.
|
@@ -65,6 +74,12 @@ Social icons will appear for each url your fill in, among `facebook_url` etc.
|
|
65
74
|
### Contact
|
66
75
|
Your contact information can be used in contact forms, the footer or anywhere else.
|
67
76
|
|
77
|
+
### Recaptcha
|
78
|
+
|
79
|
+
The contact form is validated using [google's recaptcha plugin][recaptcha-documentation].
|
80
|
+
First, you need to [sign your website up] to enable the plugin.
|
81
|
+
Google will provide you with a **client-side integration key**: copy it to `_config.yml` under `recaptcha.sitekey`.
|
82
|
+
|
68
83
|
## Publication
|
69
84
|
|
70
85
|
### On Github Pages
|
@@ -151,4 +166,6 @@ The theme is available as open source under the terms of the [CC-BY-4.0](LICENSE
|
|
151
166
|
[cookieconsent]: https://github.com/osano/cookieconsent
|
152
167
|
[html5up]: https://html5up.net/
|
153
168
|
[jekyll-logo]: https://github.com/jekyll/brand
|
169
|
+
[recaptcha-documentation]: https://developers.google.com/recaptcha/intro
|
170
|
+
[recaptcha-registering]: https://www.google.com/recaptcha/admin
|
154
171
|
[simple-jekyll-search]: https://github.com/christian-fei/Simple-Jekyll-Search
|
data/_includes/contact.html
CHANGED
@@ -1,31 +1,19 @@
|
|
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" -%}
|
1
10
|
<section id="contact" class="inverted" style="{{ include.style | default: nil }}">
|
2
11
|
<header class="major">
|
3
12
|
<h2>Contact Me</h2>
|
4
13
|
</header>
|
5
14
|
<div class="row gtr-200">
|
6
15
|
<div class="col-6 col-12-medium">
|
7
|
-
|
8
|
-
<div class="row gtr-uniform">
|
9
|
-
<div class="col-6 col-12-xsmall">
|
10
|
-
<input type="text" name="cta-name" id="cta-name" value="" placeholder="Name" />
|
11
|
-
</div>
|
12
|
-
<div class="col-6 col-12-xsmall">
|
13
|
-
<input type="email" name="cta-email" id="cta-email" value="" placeholder="Email" />
|
14
|
-
</div>
|
15
|
-
<!-- Break -->
|
16
|
-
<div class="col-12">
|
17
|
-
<textarea name="cta-message" id="cta-message" placeholder="Enter your message" rows="6">Please get back to me!</textarea>
|
18
|
-
</div>
|
19
|
-
<!-- Break -->
|
20
|
-
<div class="col-12">
|
21
|
-
<ul class="actions">
|
22
|
-
<li><div id="recaptcha-checkbox" ></div></li>
|
23
|
-
<li><input type="submit" value="Send Message" class="primary button solid fa-envelope" /></li>
|
24
|
-
<li><input type="reset" value="Reset" class="icon button fa-undo" /></li>
|
25
|
-
</ul>
|
26
|
-
</div>
|
27
|
-
</div>
|
28
|
-
</form>
|
16
|
+
{% 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 %}
|
29
17
|
</div>
|
30
18
|
<div class="col-6 col-12-medium">
|
31
19
|
<ul class="contact">
|
@@ -37,12 +25,5 @@
|
|
37
25
|
</div>
|
38
26
|
</div>
|
39
27
|
</section>
|
40
|
-
|
41
|
-
|
42
|
-
grecaptcha.render('recaptcha-checkbox', {
|
43
|
-
'sitekey' : '{{ site.recaptcha.sitekey }}',
|
44
|
-
'theme' : 'dark'
|
45
|
-
});
|
46
|
-
};
|
47
|
-
</script>
|
48
|
-
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
|
28
|
+
|
29
|
+
{% 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,22 @@
|
|
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-uniform">
|
3
|
+
<div class="col-6 col-12-xsmall">
|
4
|
+
<input type="text" name="{{ include.name_input_id | 'contact-name' }}" id="{{ include.name_input_id | 'contact-name' }}" value="" placeholder="Name" required minlength="4" maxlength="64" />
|
5
|
+
</div>
|
6
|
+
<div class="col-6 col-12-xsmall">
|
7
|
+
<input type="email" name="{{ include.email_input_id | 'contact-email' }}" id="{{ include.email_input_id | 'contact-email' }}" value="" placeholder="Email" required minlength="8" maxlength="64" />
|
8
|
+
</div>
|
9
|
+
<!-- Break -->
|
10
|
+
<div class="col-12">
|
11
|
+
<textarea name="{{ include.message_input_id | 'contact-message' }}" id="{{ include.message_input_id | 'contact-message' }}" placeholder="Enter your message" rows="6" required minlength="16" maxlength="256" >Please get back to me!</textarea>
|
12
|
+
</div>
|
13
|
+
<!-- Break -->
|
14
|
+
<div class="col-12">
|
15
|
+
<ul class="actions">
|
16
|
+
<li><div id="{{ include.recaptcha_widget_id | 'recaptcha-checkbox' }}" ></div></li>
|
17
|
+
<li><input type="submit" id="{{ include.submit_input_id | 'contact-submit-button' }}" value="Send Message" class="primary button solid fa-envelope" disabled/></li>
|
18
|
+
<li><input type="reset" id="{{ include.reset_input_id | 'contact-reset-button' }}" value="Reset" class="icon button fa-undo" /></li>
|
19
|
+
</ul>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</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/scripts.html
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
<!-- Scripts -->
|
2
|
-
<script src="{{ 'assets/js/jquery.min.js' | absolute_url }}"></script>
|
3
|
-
<script src="{{ 'assets/js/jquery.scrolly.min.js' | absolute_url }}"></script>
|
4
|
-
<script src="{{ 'assets/js/browser.min.js' | absolute_url }}"></script>
|
5
|
-
<script src="{{ 'assets/js/breakpoints.min.js' | absolute_url }}"></script>
|
6
|
-
<script src="{{ 'assets/js/util.js' | absolute_url }}"></script>
|
7
|
-
<script src="{{ 'assets/js/main.js' | absolute_url }}"></script>
|
8
|
-
<script src="{{ 'assets/js/cookieconsent.min.js' | absolute_url }}" data-cfasync="false"></script>
|
2
|
+
<script src="{{ 'assets/js/jquery.min.js' | absolute_url }}" type="text/javascript" ></script>
|
3
|
+
<script src="{{ 'assets/js/jquery.scrolly.min.js' | absolute_url }}" type="text/javascript" ></script>
|
4
|
+
<script src="{{ 'assets/js/browser.min.js' | absolute_url }}" type="text/javascript" ></script>
|
5
|
+
<script src="{{ 'assets/js/breakpoints.min.js' | absolute_url }}" type="text/javascript" ></script>
|
6
|
+
<script src="{{ 'assets/js/util.js' | absolute_url }}" type="text/javascript" ></script>
|
7
|
+
<script src="{{ 'assets/js/main.js' | absolute_url }}" type="text/javascript" ></script>
|
8
|
+
<script src="{{ 'assets/js/cookieconsent.min.js' | absolute_url }}" type="text/javascript" data-cfasync="false" ></script>
|
9
9
|
<script>
|
10
10
|
window.cookieconsent.initialise({
|
11
11
|
"palette": {
|
@@ -18,7 +18,7 @@ window.cookieconsent.initialise({
|
|
18
18
|
}
|
19
19
|
});
|
20
20
|
</script>
|
21
|
-
<script src="{{ 'assets/js/simple-jekyll-search.min.js' | absolute_url }}" type="text/javascript"></script>
|
21
|
+
<script src="{{ 'assets/js/simple-jekyll-search.min.js' | absolute_url }}" type="text/javascript" ></script>
|
22
22
|
<script>
|
23
23
|
SimpleJekyllSearch({
|
24
24
|
searchInput: document.getElementById('search-input'),
|
@@ -28,6 +28,6 @@ SimpleJekyllSearch({
|
|
28
28
|
</script>
|
29
29
|
{%- if include.scripts -%}
|
30
30
|
{%- for file in include.scripts -%}
|
31
|
-
<script src="{{ file.url | absolute_url }}" /></script>
|
31
|
+
<script src="{{ file.url | absolute_url }}" type="text/javascript" /></script>
|
32
32
|
{%- endfor -%}
|
33
33
|
{%- endif -%}
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-theme-consulting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.12
|
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
|
@@ -77,6 +77,8 @@ files:
|
|
77
77
|
- README.md
|
78
78
|
- _includes/banner.html
|
79
79
|
- _includes/contact.html
|
80
|
+
- _includes/contact_form.html
|
81
|
+
- _includes/contact_script.html
|
80
82
|
- _includes/date.html
|
81
83
|
- _includes/footer.html
|
82
84
|
- _includes/head.html
|