Skip to content

Instantly share code, notes, and snippets.

@niknah
Last active July 4, 2023 02:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niknah/1b52724d28ab7a14c17444f47b51cca7 to your computer and use it in GitHub Desktop.
Save niknah/1b52724d28ab7a14c17444f47b51cca7 to your computer and use it in GitHub Desktop.
/*
* Setup a google sheet with api enabled. Instructions: https://www.youtube.com/watch?v=utb_wSk2j8k
* Paste the API's URL below.
* Copy and paste this gist inside contact page's <script> ... </script>
* Add the below line inside {% form %} ... {% endform %}
<input type="hidden" name="datetime" value="{{ "now" | date: "%Y-%m-%d %H:%M" }}">
*/
/**
* jQuery serializeObject
* @copyright 2014, macek <paulmacek@gmail.com>
* @link https://github.com/macek/jquery-serialize-object
* @license BSD
* @version 2.5.0
*/
!function(e,i){if("function"==typeof define&&define.amd)define(["exports","jquery"],function(e,r){return i(e,r)});else if("undefined"!=typeof exports){var r=require("jquery");i(exports,r)}else i(e,e.jQuery||e.Zepto||e.ender||e.$)}(this,function(e,i){function r(e,r){function n(e,i,r){return e[i]=r,e}function a(e,i){for(var r,a=e.match(t.key);void 0!==(r=a.pop());)if(t.push.test(r)){var u=s(e.replace(/\[\]$/,""));i=n([],u,i)}else t.fixed.test(r)?i=n([],r,i):t.named.test(r)&&(i=n({},r,i));return i}function s(e){return void 0===h[e]&&(h[e]=0),h[e]++}function u(e){switch(i('[name="'+e.name+'"]',r).attr("type")){case"checkbox":return"on"===e.value?!0:e.value;default:return e.value}}function f(i){if(!t.validate.test(i.name))return this;var r=a(i.name,u(i));return l=e.extend(!0,l,r),this}function d(i){if(!e.isArray(i))throw new Error("formSerializer.addPairs expects an Array");for(var r=0,t=i.length;t>r;r++)this.addPair(i[r]);return this}function o(){return l}function c(){return JSON.stringify(o())}var l={},h={};this.addPair=f,this.addPairs=d,this.serialize=o,this.serializeJSON=c}var t={validate:/^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,key:/[a-z0-9_]+|(?=\[\])/gi,push:/^$/,fixed:/^\d+$/,named:/^[a-z0-9_]+$/i};return r.patterns=t,r.serializeObject=function(){return new r(i,this).addPairs(this.serializeArray()).serialize()},r.serializeJSON=function(){return new r(i,this).addPairs(this.serializeArray()).serializeJSON()},"undefined"!=typeof i.fn&&(i.fn.serializeObject=r.serializeObject,i.fn.serializeJSON=r.serializeJSON),e.FormSerializer=r,r});
var doFormTrigger = false;
var $form = $('form#contact_form'),
url = 'https://script.google.com/macros/s/abcdefghijklmnopqrstuvwxyz1234567890/exec'
$('#contact_form').on('submit', function(e) { // updated this so it only submit data when form is submitted successfully. Previously we were triggering this even when user click on submit button.
if(!doFormTrigger) {
e.preventDefault(); // delete this is you want to send data to admin email address.
var jqxhr = $.ajax({
url: url,
method: "GET",
dataType: "json",
data: $form.serializeObject(),
timeout:5000,
complete: function() {
doFormTrigger = true;
$form.trigger('submit');
setTimeout(function() {
doFormTrigger = false;
},0);
}
});
return false;
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment