Merge branch 'staticman-v2'
This commit is contained in:
commit
7fed4e8eb7
5 changed files with 248 additions and 23 deletions
27
_config.yml
27
_config.yml
|
@ -20,7 +20,7 @@ teaser : # path of fallback teaser image, e.g. "/assets/images
|
||||||
# breadcrumbs : false # true, false (default)
|
# breadcrumbs : false # true, false (default)
|
||||||
words_per_minute : 200
|
words_per_minute : 200
|
||||||
comments:
|
comments:
|
||||||
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
|
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "staticman_v2" "custom"
|
||||||
disqus:
|
disqus:
|
||||||
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
|
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
|
||||||
discourse:
|
discourse:
|
||||||
|
@ -31,21 +31,24 @@ comments:
|
||||||
num_posts : # 5 (default)
|
num_posts : # 5 (default)
|
||||||
colorscheme : # "light" (default), "dark"
|
colorscheme : # "light" (default), "dark"
|
||||||
staticman:
|
staticman:
|
||||||
allowedFields : ['name', 'email', 'url', 'message']
|
allowedFields : # ['name', 'email', 'url', 'message']
|
||||||
branch : "master"
|
branch : # "master"
|
||||||
commitMessage : "New comment."
|
commitMessage : # "New comment."
|
||||||
filename : comment-{@timestamp}
|
filename : # comment-{@timestamp}
|
||||||
format : "yml"
|
format : # "yml"
|
||||||
moderation : true
|
moderation : # true
|
||||||
path : "docs/_data/comments/{options.slug}" # "/_data/comments/{options.slug}" (default)
|
path : # "/_data/comments/{options.slug}" (default)
|
||||||
requiredFields : ['name', 'email', 'message']
|
requiredFields : # ['name', 'email', 'message']
|
||||||
transforms:
|
transforms:
|
||||||
email : "md5"
|
email : # "md5"
|
||||||
generatedFields:
|
generatedFields:
|
||||||
date:
|
date:
|
||||||
type : "date"
|
type : # "date"
|
||||||
options:
|
options:
|
||||||
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
format : # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||||
|
reCaptcha:
|
||||||
|
siteKey :
|
||||||
|
secret :
|
||||||
atom_feed:
|
atom_feed:
|
||||||
path : # blank (default) uses feed.xml
|
path : # blank (default) uses feed.xml
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ teaser : # path of fallback teaser image, e.g. "/assets/images
|
||||||
# breadcrumbs : false # true, false (default)
|
# breadcrumbs : false # true, false (default)
|
||||||
words_per_minute : 200
|
words_per_minute : 200
|
||||||
comments:
|
comments:
|
||||||
provider : "staticman" # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
|
provider : "staticman_v2" # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "staticman_v2" "custom"
|
||||||
disqus:
|
disqus:
|
||||||
shortname :
|
shortname :
|
||||||
discourse:
|
discourse:
|
||||||
|
@ -31,21 +31,25 @@ comments:
|
||||||
num_posts : # 5 (default)
|
num_posts : # 5 (default)
|
||||||
colorscheme : # "light" (default), "dark"
|
colorscheme : # "light" (default), "dark"
|
||||||
staticman:
|
staticman:
|
||||||
allowedFields : ['name', 'email', 'url', 'message']
|
allowedFields : # ['name', 'email', 'url', 'message']
|
||||||
branch : "master"
|
branch : "master"
|
||||||
commitMessage : "New comment"
|
commitMessage : # "New comment"
|
||||||
filename : comment-{@timestamp}
|
filename : # comment-{@timestamp}
|
||||||
format : "yml"
|
format : # "yml"
|
||||||
moderation : true
|
moderation : # true
|
||||||
path : "_data/comments/{options.slug}"
|
path : # "_data/comments/{options.slug}"
|
||||||
requiredFields : ['name', 'email', 'message']
|
requiredFields : # ['name', 'email', 'message']
|
||||||
transforms:
|
transforms:
|
||||||
email : "md5"
|
email : # "md5"
|
||||||
generatedFields:
|
generatedFields:
|
||||||
date:
|
date:
|
||||||
type : "date"
|
type : # "date"
|
||||||
options:
|
options:
|
||||||
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
format : # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||||
|
reCaptcha:
|
||||||
|
siteKey : "6LdRBykTAAAAAFB46MnIu6ixuxwu9W1ihFF8G60Q"
|
||||||
|
secret : "PznnZGu3P6eTHRPLORniSq+J61YEf+A9zmColXDM5icqF49gbunH51B8+h+i2IvewpuxtA9TFoK68TuhUp/X3YKmmqhXasegHYabY50fqF9nJh9npWNhvITdkQHeaOqnFXUIwxfiEeUt49Yoa2waRR7a5LdRAP3SVM8hz0KIBT4="
|
||||||
|
|
||||||
atom_feed:
|
atom_feed:
|
||||||
path : # blank (default) uses feed.xml
|
path : # blank (default) uses feed.xml
|
||||||
|
|
||||||
|
|
42
docs/_includes/comments-providers/staticman_v2.html
Normal file
42
docs/_includes/comments-providers/staticman_v2.html
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{% if site.repository and site.staticman.branch %}
|
||||||
|
<script>
|
||||||
|
(function ($) {
|
||||||
|
var $comments = $('.js-comments');
|
||||||
|
|
||||||
|
$('#new_comment').submit(function () {
|
||||||
|
var form = this;
|
||||||
|
|
||||||
|
$(form).addClass('disabled');
|
||||||
|
$('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: $(this).attr('method'),
|
||||||
|
url: $(this).attr('action'),
|
||||||
|
data: $(this).serialize(),
|
||||||
|
contentType: 'application/x-www-form-urlencoded',
|
||||||
|
success: function (data) {
|
||||||
|
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
|
||||||
|
$('.page__comments-form .js-notice').removeClass('notice--danger');
|
||||||
|
$('.page__comments-form .js-notice').addClass('notice--success');
|
||||||
|
showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
|
||||||
|
},
|
||||||
|
error: function (err) {
|
||||||
|
console.log(err);
|
||||||
|
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
|
||||||
|
$('.page__comments-form .js-notice').removeClass('notice--success');
|
||||||
|
$('.page__comments-form .js-notice').addClass('notice--danger');
|
||||||
|
showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
|
||||||
|
$(form).removeClass('disabled');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
function showAlert(message) {
|
||||||
|
$('.page__comments-form .js-notice').removeClass('hidden');
|
||||||
|
$('.page__comments-form .js-notice-text').html(message);
|
||||||
|
}
|
||||||
|
})(jQuery);
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
|
@ -91,6 +91,78 @@
|
||||||
<!-- End new comment form -->
|
<!-- End new comment form -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
|
{% when "staticman_v2" %}
|
||||||
|
<section id="static-comments">
|
||||||
|
{% if site.repository and site.staticman.branch %}
|
||||||
|
<!-- Start static comments -->
|
||||||
|
<div class="js-comments">
|
||||||
|
{% if site.data.comments[page.slug] %}
|
||||||
|
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
|
||||||
|
{% assign comments = site.data.comments[page.slug] | sort %}
|
||||||
|
|
||||||
|
{% for comment in comments %}
|
||||||
|
{% assign email = comment[1].email %}
|
||||||
|
{% assign name = comment[1].name %}
|
||||||
|
{% assign url = comment[1].url %}
|
||||||
|
{% assign date = comment[1].date %}
|
||||||
|
{% assign message = comment[1].message %}
|
||||||
|
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<!-- End static comments -->
|
||||||
|
|
||||||
|
<!-- Start new comment form -->
|
||||||
|
<div class="page__comments-form">
|
||||||
|
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
|
||||||
|
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
|
||||||
|
<form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v2/entry/{{ site.repository }}/{{ site.staticman.branch }}/comments">
|
||||||
|
<div class="form__spinner">
|
||||||
|
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||||
|
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
|
||||||
|
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
|
||||||
|
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
|
||||||
|
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
|
||||||
|
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
|
||||||
|
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="hidden" style="display: none;">
|
||||||
|
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
|
||||||
|
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
|
||||||
|
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
|
||||||
|
<input type="hidden" name="options[reCaptcha][siteKey]" value="{{ site.reCaptcha.siteKey }}">
|
||||||
|
<input type="hidden" name="options[reCaptcha][secret]" value="{{ site.reCaptcha.secret }}">
|
||||||
|
</fieldset>
|
||||||
|
<!-- Start comment form alert messaging -->
|
||||||
|
<p class="hidden js-notice">
|
||||||
|
<strong class="js-notice-text"></strong>
|
||||||
|
</p>
|
||||||
|
<!-- End comment form alert messaging -->
|
||||||
|
<fieldset>
|
||||||
|
<div class="g-recaptcha" data-sitekey="{{ site.reCaptcha.siteKey }}"></div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<!-- End new comment form -->
|
||||||
|
{% if site.reCaptcha.siteKey %}<script async src="https://www.google.com/recaptcha/api.js"></script>{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</section>
|
||||||
{% when "custom" %}
|
{% when "custom" %}
|
||||||
<section id="custom-comments"></section>
|
<section id="custom-comments"></section>
|
||||||
{% endcase %}
|
{% endcase %}
|
||||||
|
|
104
staticfile.yml
Normal file
104
staticfile.yml
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# Name of the property. You can have multiple properties with completely
|
||||||
|
# different config blocks for different sections of your site.
|
||||||
|
# For example, you can have one property to handle comment submission and
|
||||||
|
# another one to handle posts.
|
||||||
|
# To encrypt strings use the following endpoint:
|
||||||
|
# https://api.staticman.net/v2/encrypt/{TEXT TO BE ENCRYPTED}
|
||||||
|
|
||||||
|
comments:
|
||||||
|
# (*) REQUIRED
|
||||||
|
#
|
||||||
|
# Names of the fields the form is allowed to submit. If a field that is
|
||||||
|
# not here is part of the request, an error will be thrown.
|
||||||
|
allowedFields: ["name", "email", "url", "message"]
|
||||||
|
|
||||||
|
# (*) REQUIRED WHEN USING NOTIFICATIONS
|
||||||
|
#
|
||||||
|
# When allowedOrigins is defined, only requests sent from one of the domains
|
||||||
|
# listed will be accepted. The origin is sent as part as the `options` object
|
||||||
|
# (e.g. <input name="options[origin]" value="http://yourdomain.com/post1")
|
||||||
|
# allowedOrigins: ["yourdomain.com"]
|
||||||
|
|
||||||
|
# (*) REQUIRED
|
||||||
|
#
|
||||||
|
# Name of the branch being used. Must match the one sent in the URL of the
|
||||||
|
# request.
|
||||||
|
branch: "master"
|
||||||
|
|
||||||
|
commitMessage: "New comment"
|
||||||
|
|
||||||
|
# (*) REQUIRED
|
||||||
|
#
|
||||||
|
# Destination path (filename) for the data files. Accepts placeholders.
|
||||||
|
filename: "comment-{@timestamp}"
|
||||||
|
|
||||||
|
# The format of the generated data files. Accepted values are "json", "yaml"
|
||||||
|
# or "frontmatter"
|
||||||
|
format: "yaml"
|
||||||
|
|
||||||
|
# List of fields to be populated automatically by Staticman and included in
|
||||||
|
# the data file. Keys are the name of the field. The value can be an object
|
||||||
|
# with a `type` property, which configures the generated field, or any value
|
||||||
|
# to be used directly (e.g. a string, number or array)
|
||||||
|
generatedFields:
|
||||||
|
date:
|
||||||
|
type: "date"
|
||||||
|
options:
|
||||||
|
format: "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||||
|
|
||||||
|
# Whether entries need to be approved before they are published to the main
|
||||||
|
# branch. If set to `true`, a pull request will be created for your approval.
|
||||||
|
# Otherwise, entries will be published to the main branch automatically.
|
||||||
|
moderation: true
|
||||||
|
|
||||||
|
# Akismet spam detection.
|
||||||
|
# akismet:
|
||||||
|
# enabled: true
|
||||||
|
# author: "name"
|
||||||
|
# authorEmail: "email"
|
||||||
|
# authorUrl: "url"
|
||||||
|
# content: "message"
|
||||||
|
# type: "comment"
|
||||||
|
|
||||||
|
# Name of the site. Used in notification emails.
|
||||||
|
# name: "Your Site"
|
||||||
|
|
||||||
|
# Notification settings. When enabled, users can choose to receive notifications
|
||||||
|
# via email when someone adds a reply or a new comment. This requires an account
|
||||||
|
# with Mailgun, which you can get for free at http://mailgun.com.
|
||||||
|
# notifications:
|
||||||
|
# Enable notifications
|
||||||
|
# enabled: true
|
||||||
|
|
||||||
|
# (!) ENCRYPTED
|
||||||
|
#
|
||||||
|
# Mailgun API key
|
||||||
|
# apiKey: ""
|
||||||
|
|
||||||
|
# (!) ENCRYPTED
|
||||||
|
#
|
||||||
|
# Mailgun domain (encrypted)
|
||||||
|
# domain: ""
|
||||||
|
|
||||||
|
# (*) REQUIRED
|
||||||
|
#
|
||||||
|
# Destination path (directory) for the data files. Accepts placeholders.
|
||||||
|
path: "docs/_data/comments/{options.slug}" # "/_data/comments/{options.slug}" (default)
|
||||||
|
|
||||||
|
# Names of required files. If any of these isn't in the request or is empty,
|
||||||
|
# an error will be thrown.
|
||||||
|
requiredFields: ["name", "email", "message"]
|
||||||
|
|
||||||
|
# List of transformations to apply to any of the fields supplied. Keys are
|
||||||
|
# the name of the field and values are possible transformation types.
|
||||||
|
transforms:
|
||||||
|
email: md5
|
||||||
|
|
||||||
|
# reCaptcha
|
||||||
|
# Register your domain at https://www.google.com/recaptcha/ and choose reCAPTCHA V2
|
||||||
|
reCaptcha:
|
||||||
|
enabled: true
|
||||||
|
siteKey: "6LdRBykTAAAAAFB46MnIu6ixuxwu9W1ihFF8G60Q"
|
||||||
|
# Encrypt reCaptcha secret key using Staticman /encrypt endpoint
|
||||||
|
# For more inforrmation, https://staticman.net/docs/encryption
|
||||||
|
secret: "PznnZGu3P6eTHRPLORniSq+J61YEf+A9zmColXDM5icqF49gbunH51B8+h+i2IvewpuxtA9TFoK68TuhUp/X3YKmmqhXasegHYabY50fqF9nJh9npWNhvITdkQHeaOqnFXUIwxfiEeUt49Yoa2waRR7a5LdRAP3SVM8hz0KIBT4="
|
Loading…
Reference in a new issue