parent
bf2ac18bcd
commit
5ed73b3f16
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)
|
||||
words_per_minute : 200
|
||||
comments:
|
||||
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
|
||||
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "staticman_v2" "custom"
|
||||
disqus:
|
||||
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
|
||||
discourse:
|
||||
|
@ -31,21 +31,24 @@ comments:
|
|||
num_posts : # 5 (default)
|
||||
colorscheme : # "light" (default), "dark"
|
||||
staticman:
|
||||
allowedFields : ['name', 'email', 'url', 'message']
|
||||
branch : "master"
|
||||
commitMessage : "New comment."
|
||||
filename : comment-{@timestamp}
|
||||
format : "yml"
|
||||
moderation : true
|
||||
path : "docs/_data/comments/{options.slug}" # "/_data/comments/{options.slug}" (default)
|
||||
requiredFields : ['name', 'email', 'message']
|
||||
allowedFields : # ['name', 'email', 'url', 'message']
|
||||
branch : # "master"
|
||||
commitMessage : # "New comment."
|
||||
filename : # comment-{@timestamp}
|
||||
format : # "yml"
|
||||
moderation : # true
|
||||
path : # "/_data/comments/{options.slug}" (default)
|
||||
requiredFields : # ['name', 'email', 'message']
|
||||
transforms:
|
||||
email : "md5"
|
||||
email : # "md5"
|
||||
generatedFields:
|
||||
date:
|
||||
type : "date"
|
||||
type : # "date"
|
||||
options:
|
||||
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||
format : # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||
reCaptcha:
|
||||
siteKey :
|
||||
secret :
|
||||
atom_feed:
|
||||
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)
|
||||
words_per_minute : 200
|
||||
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:
|
||||
shortname :
|
||||
discourse:
|
||||
|
@ -31,21 +31,25 @@ comments:
|
|||
num_posts : # 5 (default)
|
||||
colorscheme : # "light" (default), "dark"
|
||||
staticman:
|
||||
allowedFields : ['name', 'email', 'url', 'message']
|
||||
allowedFields : # ['name', 'email', 'url', 'message']
|
||||
branch : "master"
|
||||
commitMessage : "New comment"
|
||||
filename : comment-{@timestamp}
|
||||
format : "yml"
|
||||
moderation : true
|
||||
path : "_data/comments/{options.slug}"
|
||||
requiredFields : ['name', 'email', 'message']
|
||||
commitMessage : # "New comment"
|
||||
filename : # comment-{@timestamp}
|
||||
format : # "yml"
|
||||
moderation : # true
|
||||
path : # "_data/comments/{options.slug}"
|
||||
requiredFields : # ['name', 'email', 'message']
|
||||
transforms:
|
||||
email : "md5"
|
||||
email : # "md5"
|
||||
generatedFields:
|
||||
date:
|
||||
type : "date"
|
||||
type : # "date"
|
||||
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:
|
||||
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 -->
|
||||
{% endif %}
|
||||
</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" %}
|
||||
<section id="custom-comments"></section>
|
||||
{% 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