1
0
mirror of https://github.com/bigchaindb/site.git synced 2024-11-23 10:19:44 +01:00

properly remove: contact form, newsletter form, blog fetching

This commit is contained in:
Matthias Kretschmann 2020-05-25 11:36:36 +02:00
parent 56f4eda210
commit d7dd1236ab
Signed by: m
GPG Key ID: 606EEEF3C479A91F
30 changed files with 30 additions and 760 deletions

View File

@ -10,5 +10,4 @@ end
group :jekyll_plugins do
gem 'hash-joiner'
gem 'simple-rss'
end

View File

@ -12,8 +12,6 @@ hiring: false
email:
contact: contact@bigchaindb.com
contact_formspree: xgkblajx
contact_cc: "contact@bigchaindb.com"
cla: xwojnopx
cla_cc: "upod-team@bigchaindb.com"
gdpr: gdpr@bigchaindb.com

View File

@ -135,22 +135,6 @@ var GoogleAnalytics = (function(w,d,$) {
// All custom events
//
// newsletter forms
gaEventNewsletterSuccess: function() {
ga('send', 'event', 'newsletter', 'subscribe', 'success');
},
gaEventNewsletterError: function() {
ga('send', 'event', 'newsletter', 'subscribe', 'error');
},
// contact forms
gaEventContactSuccess: function() {
ga('send', 'event', 'contact', 'contact_form', 'success');
},
gaEventContactError: function() {
ga('send', 'event', 'contact', 'contact_form', 'error');
},
// CLA forms
gaEventClaSuccess: function() {
ga('send', 'event', 'cla', 'cla_form', 'success');

View File

@ -1,66 +0,0 @@
var FormContact = (function(w, d, $) {
'use strict';
var app, _private, _config;
_config = {
form: $('#form-contact'),
formBtn: $('#form-contact').find('.btn'),
formURL: $('#form-contact').attr('action'),
formMethod: $('#form-contact').attr('method')
};
_private = {
formSubmit: function() {
_config.form.submit(function(e) {
e.preventDefault();
if ( $(this).parsley().isValid() ) {
$.ajax({
url: _config.formURL,
method: _config.formMethod,
data: $(this).serialize(),
dataType: 'json',
beforeSend: function() {
_config.formBtn
.addClass('disabled')
.attr('value', 'Sending...');
},
success: function(data) {
_config.form.find('.form-group').addClass('hide');
_config.form.find('.alert--success').removeClass('hide');
_config.formBtn.removeClass('disabled');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventContactSuccess();
}
},
error: function(err) {
_config.form.find('.alert--danger').removeClass('hide');
_config.formBtn
.removeClass('disabled')
.attr('value', 'Send');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventContactError();
}
}
});
}
});
}
};
app = {
init: function() {
_private.formSubmit();
}
};
return app;
})(window, document, jQuery);

View File

@ -1,39 +0,0 @@
document.addEventListener('DOMContentLoaded', function() {
const url = 'https://bigchaindb-meetups.now.sh'
function injectData(data) {
const events = data
// just grab the first item of array
const nextEvent = events[0]
const element = document.getElementsByClassName('js-social-link--meetup')[0]
if (nextEvent) {
const name = nextEvent.name
const link = nextEvent.link
const date = new Date(nextEvent.time).toLocaleDateString('en-us', {
month: 'short',
day: 'numeric'
})
const elementTitle = document.getElementsByClassName('meetup-title')[0]
elementTitle.innerHTML = `<span class="hero__community__label">${date}</span><strong> ${name}</strong>`
elementTitle.style.opacity = 1
element.href = link
} else {
element.classList.add('hide')
}
}
fetch(url)
.then(function(response) {
return response.json()
})
.then(function(data) {
injectData(data)
})
.catch(function(error) {
console.log(error)
})
})

View File

@ -1,53 +0,0 @@
//=include vendor/jquery.ajaxchimp.js
var Newsletter = (function(w, d, $) {
'use strict';
var app, _private, _config;
_config = {
newsletter: $('#newsletter')
},
_private = {
ajaxChimp: function() {
_config.newsletter.ajaxChimp({
callback: formCallback
});
function formCallback (resp) {
if (resp.result === 'success') {
_config.newsletter.find('.input-group').addClass('hide');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventNewsletterSuccess();
}
}
if (resp.result === 'error') {
_config.newsletter.find('.btn')
.removeClass('disabled')
.text('Subscribe');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventNewsletterError();
}
}
}
}
};
app = {
init: function() {
_private.ajaxChimp();
}
};
return app;
})(window, document, jQuery);

View File

@ -1,8 +0,0 @@
//=include bigchain/form-contact.js
jQuery(function($) {
// init form
FormContact.init()
});

View File

@ -1,9 +1,7 @@
//=include bigchain/newsletter.js
//=include bigchain/github.js
//=include bigchain/meetup.js
jQuery(function($) {
// jQuery(function($) {
Newsletter.init()
})
// })

View File

@ -1,19 +1,13 @@
//=include gumshoejs/dist/gumshoe.js
//=include bigchain/tab.js
//=include bigchain/newsletter.js
const bigchaindbUrl = 'https://test.bigchaindb.com'
const apiPath = '/api/v1/'
jQuery(function ($) {
// jQuery(function ($) {
//
// init modules
//
Newsletter.init()
})
// })
//

View File

@ -1,10 +0,0 @@
//=include bigchain/newsletter.js
jQuery(function($) {
//
// init modules
//
Newsletter.init()
});

View File

@ -1,158 +0,0 @@
/*!
Mailchimp Ajax Submit
jQuery Plugin
Author: Siddharth Doshi
URL: https://github.com/scdoshi/jquery-ajaxchimp
---
Modified by: Matthias Kretschmann
- changes to work with our form control feedback styles
- changes to work with our parsley form validation
---
Use:
===
$('#form_id').ajaxchimp(options);
- Form should have one <input> element with attribute 'type=email'
- Form should have one label element with attribute 'for=email_input_id' (used to display error/success message)
- All options are optional.
Options:
=======
options = {
language: 'en',
callback: callbackFunction,
url: 'http://blahblah.us1.list-manage.com/subscribe/post?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f'
}
Notes:
=====
To get the mailchimp JSONP url (undocumented), change 'post?' to 'post-json?' and add '&c=?' to the end.
For e.g. 'http://blahblah.us1.list-manage.com/subscribe/post-json?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f&c=?',
*/
(function ($) {
'use strict';
$.ajaxChimp = {
responses: {
'We have sent you a confirmation email' : 0,
'Please enter a value' : 1,
'An email address must contain a single @' : 2,
'The domain portion of the email address is invalid (the portion after the @: )' : 3,
'The username portion of the email address is invalid (the portion before the @: )' : 4,
'This email address looks fake or invalid. Please enter a real email address' : 5
},
translations: {
'en': null
},
init: function (selector, options) {
$(selector).ajaxChimp(options);
}
};
$.fn.ajaxChimp = function (options) {
$(this).each(function(i, elem) {
var form = $(elem);
var email = form.find('input[type=email]');
var feedback = form.find('.form-control-feedback');
var formgroup = form.find('.input-group');
var settings = $.extend({
'url': form.attr('action'),
'language': 'en'
}, options);
var url = settings.url.replace('/post?', '/post-json?').concat('&c=?');
form.attr('novalidate', 'true');
email.attr('name', 'EMAIL');
form.submit(function () {
var msg;
function successCallback(resp) {
if (resp.result === 'success') {
msg = 'We have sent you a confirmation email';
formgroup.removeClass('has-error').addClass('has-success');
} else {
formgroup.removeClass('has-success').addClass('has-error');
email.removeClass('parsley-success');
var index = -1;
try {
var parts = resp.msg.split(' - ', 2);
if (parts[1] === undefined) {
msg = resp.msg;
} else {
var i = parseInt(parts[0], 10);
if (i.toString() === parts[0]) {
index = parts[0];
msg = parts[1];
} else {
index = -1;
msg = resp.msg;
}
}
}
catch (e) {
index = -1;
msg = resp.msg;
}
}
// Translate and display message
if (
settings.language !== 'en'
&& $.ajaxChimp.responses[msg] !== undefined
&& $.ajaxChimp.translations
&& $.ajaxChimp.translations[settings.language]
&& $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]
) {
msg = $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]];
}
feedback.html(msg);
feedback.show(2000);
if (settings.callback) {
settings.callback(resp);
}
}
var data = {};
var dataArray = form.serializeArray();
$.each(dataArray, function (index, item) {
data[item.name] = item.value;
});
$.ajax({
url: url,
data: data,
success: successCallback,
dataType: 'jsonp',
error: function (resp, text) {
console.log('mailchimp ajax submit error: ' + text);
}
});
// Translate and display submit message
var submitMsg = 'Sending...';
if(
settings.language !== 'en'
&& $.ajaxChimp.translations
&& $.ajaxChimp.translations[settings.language]
&& $.ajaxChimp.translations[settings.language]['submit']
) {
submitMsg = $.ajaxChimp.translations[settings.language]['submit'];
}
form.find('.btn')
.addClass('disabled')
.text(submitMsg);
//feedback.html(submitMsg).show(2000);
return false;
});
});
return this;
};
})(jQuery);

View File

@ -6,7 +6,6 @@
.page-front {
.section--guides,
.section--blog,
.section-testimonials {
@extend .background--darker;
}

View File

@ -1,63 +0,0 @@
.page-newsletter {
.content--page--markdown {
padding-top: 0;
padding-bottom: 0;
}
.section--newsletter {
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
display: flex;
align-items: center;
min-height: 60vh;
background: darken($body-bg, 5%);
.form-control {
border-color: $gray-light;
&:focus {
border-color: #fff;
}
}
.btn {
@extend .btn-primary;
}
.newsletter__title {
color: $brand-main-blue-light;
}
// stylelint-disable selector-max-compound-selectors,max-nesting-depth
.form-label,
.form-control,
.form-control:focus ~ .form-label,
.newsletter__text,
.newsletter__gdpr {
color: $text-color;
}
.newsletter__gdpr {
opacity: .6;
.icon {
stroke: $gray-light;
color: $gray-light;
}
a {
box-shadow: inset 0 -1px 0 $gray-light;
&:hover,
&:focus {
background: $gray-light;
}
}
}
// stylelint-enable selector-max-compound-selectors,max-nesting-depth
}
}

View File

@ -87,6 +87,4 @@
//
@import '_sections/section-cta-whitepaper';
@import '_sections/section-partners';
@import '_sections/section-blog';
@import '_sections/section-getstarted';
@import '_sections/section-newsletter';

View File

@ -1,31 +0,0 @@
.article {
@include color-overlay;
@include transition;
background-size: cover;
background-position: center;
padding: $spacer;
border-radius: $border-radius;
overflow: hidden;
box-shadow: none;
display: flex;
align-items: center;
min-height: 8rem;
&:hover,
&:focus {
background-size: cover;
background-position: center;
box-shadow: 0 2px 5px rgba($brand-main-blue-dark, .2);
transform: translateY(-1px);
}
}
.article__title,
h1.article__title {
font-size: $font-size-lg;
font-weight: $font-weight-normal;
margin: 0;
color: #fff;
position: relative;
z-index: 1;
}

View File

@ -1,75 +0,0 @@
.section--newsletter {
background: $brand-primary;
align-items: flex-start;
.form-group,
.grid { margin-bottom: 0; }
.form-control {
border-color: $gray-dark;
&:focus {
border-color: #000;
}
&.parsley-error {
border-color: $brand-danger !important; // stylelint-disable-line
}
}
.btn {
background: $brand-main-blue;
}
.form-label,
.form-control,
.form-control:focus ~ .form-label {
color: $gray-dark;
}
.form-control-feedback {
@extend .bold;
margin-top: $spacer / 2;
}
.form--newsletter {
margin-top: $spacer * 2;
}
.parsley-errors-list {
right: auto;
left: 0;
bottom: -.25rem;
}
}
.newsletter__title {
@extend .h5;
margin-top: 0;
margin-bottom: $spacer / 4;
}
.newsletter__title,
.newsletter__text,
.newsletter__gdpr {
color: $gray-dark;
}
.newsletter__gdpr {
opacity: .8;
.icon {
stroke: $brand-main-blue;
color: $brand-main-blue;
}
a {
box-shadow: inset 0 -1px 0 $brand-main-blue;
&:hover,
&:focus {
background: $brand-main-blue;
}
}
}

View File

@ -64,4 +64,3 @@
@import 'page-partners';
@import 'oceanprotocol';
@import 'page-guide';
@import 'page-newsletter';

View File

@ -5,11 +5,5 @@ general: >
We use Formspree & Zapier to send this form and by submitting it, you acknowledge that the information you provide will be transferred to Formspree ([Privacy Policy](https://formspree.io/static/PrivacyPolicy.pdf)) & Zapier ([Privacy Policy](https://zapier.com/privacy/)) for processing. Don't want that? Send us an email at contact@bigchaindb.com.
newsletter: >
We will only use your email to send you our newsletter and by submitting this form you give us permission to do so. You can change your mind at any time by clicking the unsubscribe link of any newsletter you receive from us, deleting your data in the process. For more information visit our [Privacy Policy](/privacy/).
We use MailChimp for our newsletter and by submitting this form, you acknowledge that the information you provide will be transferred to MailChimp for processing in accordance with their their [Terms](https://mailchimp.com/legal/terms/) and [Privacy Policy](https://mailchimp.com/legal/privacy/).
cookies: >
By continuing your visit to this site, you accept the use of cookies from Google Analytics so we can improve the site for you.

View File

@ -1,53 +0,0 @@
<form id="form-contact" class="form js-parsley" action="//formspree.io/{{ site.email.contact_formspree }}" method="POST" accept-charset="UTF-8">
<p class="form-group">
<input class="form-control" type="text" id="name" name="name" required>
<label class="form-label" for="name">Your Name</label>
</p>
<p class="form-group">
<input class="form-control" type="email" id="email" name="_replyto" required>
<label class="form-label" for="email">Your Email</label>
</p>
<p class="form-group">
<textarea class="form-control" id="comment" name="comment" rows="1" required></textarea>
<label class="form-label" for="comment">Your Message</label>
</p>
<p class="form-group text-dimmed mini">
Fields marked with an <span class="required">*</span> are required.
</p>
<p class="form-group">
<input class="btn btn-primary" type="submit" value="Send">
</p>
<div class="alert alert--success animation-slide-in-from-bottom hide">
<svg class="alert__icon icon icon-success">
<use xlink:href="/assets/img/sprite.svg#icon-check"></use>
</svg>
<p>
<strong class="alert__title">Great to hear youre interested!</strong>
Well get in touch soon.
</p>
</div>
<div class="alert alert--danger hide">
<svg class="alert__icon icon icon-fail">
<use xlink:href="/assets/img/sprite.svg#icon-fail"></use>
</svg>
<p>
<strong class="alert__title">Ops, there was an error</strong>
Would you mind trying again?
</p>
</div>
<input type="text" name="_gotcha" style="display: none;">
<input type="hidden" name="_subject" value="New contact form submission" />
<input type="hidden" name="_cc" value="{{ site.email.contact_cc }}" />
<div class="form__gdpr">
<svg class="icon">
<use xlink:href="/assets/img/sprite.svg#icon-heart-protect"></use>
</svg>
<div class="text">
{{ site.data.gdpr.general | markdownify }}
</div>
</div>
</form>

View File

@ -1,23 +0,0 @@
<form id="newsletter"
class="form--newsletter js-parsley"
action="https://bigchaindb.us9.list-manage.com/subscribe/post?u=56f2d3da26a7d407177d3fba3&amp;id=0a99a9481e"
method="post">
<div class="form-group has-feedback">
<div class="input-group">
<input class="form-control" type="email" id="email" name="EMAIL" required>
<label class="form-label" for="email">Your Email</label>
<span class="input-group-btn">
<button class="btn btn-blue" type="submit" name="button">
Subscribe
</button>
</span>
<input type="hidden" name="GDPR" value="yes" />
</div>
<div class="form-control-feedback"></div>
</div>
</form>

View File

@ -10,6 +10,19 @@
</hgroup>
</div>
<aside class="hero__community">
<div class="row row--wide">
<a class="btn btn-text btn-sm" id="release-link" href="{{ site.social.github.url }}/{{ site.social.github.repo }}/releases/latest" rel="external"><span class="hero__community__label">Latest release</span> <strong class="release" id="release"></strong></a>
<a class="social-link btn btn-text btn-sm js-social-link" href="{{ site.social.github.url }}/{{ site.social.github.repo }}" title="Star {{ site.social.github.org }}/{{ site.social.github.repo }} on GitHub">
<svg class="icon icon--social icon--github" aria-labelledby="title">
<title>GitHub</title>
<use xlink:href="/assets/img/sprite.svg#github"></use>
</svg> Star <span class="stars" id="stars"></span>
</a>
</div>
</aside>
<a class="hero__more btn btn-link btn-sm" href="#features" data-scroll>Learn More <svg class="icon icon--caret"><use xlink:href="/assets/img/sprite.svg#icon-caret"></use></svg></a>
</header>

View File

@ -1,27 +0,0 @@
<section class="section section--blog ">
<div class="row row--wide">
<header class="section-header">
<h1 class="section-title">The BigchainDB Blog</h1>
<p class="section-description">Updates, stories and ideas from the people behind BigchainDB.</p>
</header>
<div class="grid grid--full grid-small--half grid-medium--third grid--gutters--small">
{% for article in site.articles | limit: 6 %}
<div class="grid__col">
<a class="article article--{{ article.title | downcase | truncatewords: 3, '' | replace: ' ', '-' }}" href="{{ article.link }}" style="background-image: url('{{ article.image }}');">
<h1 class="article__title">
{{ article.title }}
</h1>
</a>
</div>
{% endfor %}
</div>
<p class="text-center">
<a class="btn btn-secondary" href="{{ site.social.medium.url }}">Go to blog</a>
</p>
</div>
</section>

View File

@ -1,38 +0,0 @@
<section class="section section--newsletter">
<div class="row row--wide">
<div class="grid grid--full grid-medium--half grid--gutters grid--center">
<div class="grid__col">
<h1 class="newsletter__title">
{% if page.newsletter.title %}
{{ page.newsletter.title }}
{% else %}
Get updates delivered to your inbox
{% endif %}
</h1>
<p class="newsletter__text">
{% if page.newsletter.text %}
{{ page.newsletter.text }}
{% else %}
No more than one email per month. We're busy too.
{% endif %}
</p>
{% include form-newsletter.html %}
</div>
<div class="grid__col">
<div class="form__gdpr newsletter__gdpr">
<svg class="icon">
<use xlink:href="/assets/img/sprite.svg#icon-heart-protect"></use>
</svg>
<div class="text">
{{ site.data.gdpr.newsletter | markdownify }}
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -20,5 +20,4 @@ layout: base
{% if page.path contains "whitepaper" %}
{% include sections/section-whitepaper-download.html %}
{% include sections/section-newsletter.html %}
{% endif %}

View File

@ -1,42 +0,0 @@
# http://stackoverflow.com/a/27850727/733677
require 'open-uri'
require 'rss'
require 'simple-rss'
module Jekyll
# Runs during jekyll build
class RssFeedCollector < Generator
safe true
priority :high
def generate(site)
rss_items = SimpleRSS.parse open('https://blog.bigchaindb.com/feed/')
# Create a new on-the-fly Jekyll collection called "articles"
jekyll_items = Jekyll::Collection.new(site, 'articles')
site.collections['articles'] = jekyll_items
# Add fake virtual documents to the collection
rss_items.items.each do |item|
title = item.title
link = item.link
# Medium hack: get first image in content, then get smaller image size
image = item.content_encoded[/img.*?src="(.*?)"/i,1].gsub(/max\/(.*)\//, "max/500/")
path = '_articles/' + title.to_s.gsub(':','_') + '.md'
path = site.in_source_dir(path)
doc = Jekyll::Document.new(path, site: site, collection: jekyll_items)
doc.data['title'] = title
doc.data['link'] = link
doc.data['image'] = image
jekyll_items.docs << doc
end
rescue
puts "Could not parse blog feed. Are you offline?"
end
end
end

View File

@ -9,17 +9,17 @@ js: page-contact.min.js
<section class="section section-contactform">
<div class="h-card contactlist">
<p><strong class="p-name p-org">{{ site.address.company }}</strong></p>
<div class="h-card contactlist">
<p><strong class="p-name p-org">{{ site.address.company }}</strong></p>
<div class="p-adr">
<p class="p-street-address">{{ site.address.street }}</p>
<p><span class="p-postal-code">{{ site.address.zip }}</span> <span class="p-locality">{{ site.address.city }}</span></p>
<p class="p-country-name">{{ site.address.country }}</p>
</div>
<div class="p-adr">
<p class="p-street-address">{{ site.address.street }}</p>
<p><span class="p-postal-code">{{ site.address.zip }}</span> <span class="p-locality">{{ site.address.city }}</span></p>
<p class="p-country-name">{{ site.address.country }}</p>
</div>
<p><a class="u-url" href="{{ site.url }}">{{ site.url | remove: 'https://' }}</a></p>
<p><a class="u-email" href="mailto:{{ site.email.contact }}">{{ site.email.contact }}</a></p>
</div>
<p><a class="u-url" href="{{ site.url }}">{{ site.url | remove: 'https://' }}</a></p>
<p><a class="u-email" href="mailto:{{ site.email.contact }}">{{ site.email.contact }}</a></p>
</div>
</section>

View File

@ -367,5 +367,3 @@ conn.postTransactionCommit(txSigned)
</div>
</section>
{% include sections/section-newsletter.html %}

View File

@ -1,9 +0,0 @@
---
layout: page
title: Newsletter
tagline: Stay in the loop about all things BigchainDB
description: Subscribe to our newsletter and stay in the loop about all things BigchainDB.
---
{% include sections/section-newsletter.html %}

View File

@ -50,8 +50,6 @@ If you want to contribute to the project, you must complete our [Contributor Lic
If you want to sign the CLA form or contact us without using these forms, you can email {{ site.email.gdpr }}.
We use MailChimp for our newsletter, and the information you submit via our newsletter subscription form will be transferred to MailChimp for processing in accordance with their [Terms](https://mailchimp.com/legal/terms/) and [Privacy Policy](https://mailchimp.com/legal/privacy/).
### BigchainDB Test Network
Use of the BigchainDB Test Network available under [testnet.bigchaindb.com](https://testnet.bigchaindb.com) is subject to its own [Terms](https://testnet.bigchaindb.com/terms-network). Creating an account and using it submits your entered information to 3Scale according to their [Terms](https://www.3scale.net/terms-and-conditions/) and [Privacy Policy](https://www.redhat.com/en/about/privacy-policy).

View File

@ -4,11 +4,9 @@ We have multiple forms collecting and processing data throughout the whole site
Form | Actions
------------ |-------------
`/newsletter` | send data to MailChimp and subscribe to newsletter list (double opt-in)
`/contact` | send data to CC emails, Slack message
`/cla` | 2 different forms, send data to CC emails
Initial form sending, except for newsletter, is handled via formspree.io with a Gold account. As form submissions arrive there, Formspree sends out the received data to the email addresses setup as CC in [our site config](../_config.yml).
Initial form sending is handled via formspree.io with a Gold account. As form submissions arrive there, Formspree sends out the received data to the email addresses setup as CC in [our site config](../_config.yml).
Submissions are processed further like so:
@ -17,7 +15,3 @@ _Formspree -> Zapier Email Parser -> Zapier -> Slack & Google Sheets_
The Zapier email parser is a special mailbox provided by Zapier which receives form submissions from Formspree, parses the content of those emails and extracts data fields out of it. The parser as a source then provides the structured data to our Zapier tasks.
The Slack message never contains personally identifiable information. Name and email are not transmitted.
## Newsletter
Newsletter submissions are sent directly to MailChimp via their undocumented `jsonp` functionality, NOT the MailChimp API. We use a local copy of [ajaxChimp](https://github.com/scdoshi/jquery-ajaxchimp) to send the data. Library is old and jQuery but it just works across a wide range of browsers, even older ones.