Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@dimkir
Last active November 17, 2017 15:28
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 dimkir/d00368ea76db105db5124a2bd4a2c8da to your computer and use it in GitHub Desktop.
Save dimkir/d00368ea76db105db5124a2bd4a2c8da to your computer and use it in GitHub Desktop.
Sheetsu Load Modifications
(function(){
var utils = {
startsWith : function (s, e, t) {
return t = t || 0, s.indexOf(e, t) === t
}
};
function callable__TriggerSheetsu_Request_and_Attach_EventDataReceived(element_with_sheetsu_attr) {
var el = element_with_sheetsu_attr;
this.call = function () {
var sheetsu_attribs = new callable__ReturnSheetsuAttributeMapNormalized(el).call();
new newable__RequestSpreadsheet(sheetsu_attribs)
.et(function (data) {
static__Loader().hide();
new callable_SwapGetElement(el, data, sheetsu_attribs).call();
})
}
}
function callable__ReturnSheetsuAttributeMapNormalized(element) {
var element = element;
this.call = function () {
return map_normalize_shetsu_attributes_to_canonic_names(map_filter_attributes_starting_with_sheetsu(build_attribute_kv_map(element)))
};
var build_attribute_kv_map = function (elem) {
for (var map = {}, attrs = elem.attributes, i = 0; i < attrs.length; ++i)
map[attrs[i].nodeName] = attrs[i].nodeValue;
return map
},
map_normalize_shetsu_attributes_to_canonic_names = function (sheetsu_attribute_map) {
var map = {};
for (key in sheetsu_attribute_map) map[normalize_sheetsu_attr_by_trimming_sheetsudashprefix_and_renaming_sheetsu_with_slug(key)] = sheetsu_attribute_map[key];
return map
},
map_filter_attributes_starting_with_sheetsu = function (attribute_map) {
var map = {};
for (key in attribute_map) test_regexp_starts_with_sheetsu(key) && (map[key] = attribute_map[key]);
return map
},
test_regexp_starts_with_sheetsu = function (e) {
return new_sheetsu_regexp().test(e)
},
new_sheetsu_regexp = function () {
return new RegExp(/^sheetsu-?/i)
},
normalize_sheetsu_attr_by_trimming_sheetsudashprefix_and_renaming_sheetsu_with_slug = function (s) {
return "sheetsu" == s ? "slug" : s.replace("sheetsu-", "")
}
}
function newable__QueryAllSheetsuElementsForAttachingEventHandlers() {
this.attachOnSubmitAndDataReceived = function () {
for (var html_collection = (new callable__QueryAllElementsWithAttributeSheetsu).call(), n = 0; n < html_collection.length; ++n)
isTagNameFORM(html_collection[n]) ?
new callable__Attach_FormEventHandler_AsOnSubmitHandlerFor(html_collection[n]).call()
: new callable__TriggerSheetsu_Request_and_Attach_EventDataReceived(html_collection[n]).call()
};
var isTagNameFORM = function (el) {
return "FORM" == el.tagName
}
}
function fn__FormEventHandler(ev) {
ev.preventDefault();
var form = ev.target,
form_serialized = new callable__SerializeForm(form).call(),
sheetsu_attributes = new callable__ReturnSheetsuAttributeMapNormalized(form).call();
sheetsu_attributes.data = form_serialized,
submitButton = form.querySelectorAll('input[type="submit"]')[0],
submitButton.disabled = true,
new newable__RequestSpreadsheet(sheetsu_attributes)
.post(function (e) {
submitButton.disabled = false,
fn__redirectTo(void 0 === sheetsu_attributes["after-submit"] ? "https://sheetsu.com/thank-you.html" : sheetsu_attributes["after-submit"])
})
}
function static__Handlebars() {
return {
get: function (sheetsu_attribs) {
var t = ["{{", "}}"];
if (sheetsu_attribs.hasOwnProperty("handlebars")) {
var n = sheetsu_attribs.handlebars.substr(0, sheetsu_attribs.handlebars.indexOf(",")),
a = sheetsu_attribs.handlebars.substr(sheetsu_attribs.handlebars.indexOf(",") + 1);
n.length > 0 && a.length > 0 && (t = [n, a])
}
return t
}
}
}
function static__Loader() {
var sheetsu_elements = (new callable__QueryAllElementsWithAttributeSheetsu).call(),
string_sheetsu_loading = "sheetsu-loading",
keyframe_css = "@-webkit-keyframes placeHolderShimmer{0%{background-position: -800px 0}100%{background-position: 800px 0}};",
generate_loading_div = function (e) {
return '<div style="' +
'animation-duration: 2s;' +
'animation-fill-mode: forwards;' +
'animation-iteration-count: infinite;' +
'animation-name: placeHolderShimmer;' +
'animation-timing-function: linear;' +
'background: #f6f7f8;' +
'background: linear-gradient(to right, #eeeeee 0%, #aaaaaa 30%, #eeeeee 60%);' +
'background-size: 800px 104px;' +
'height: 7px;' +
'position: relative;' +
'width: 70px;' +
'margin: auto;"' +
'class="' +
string_sheetsu_loading +
'"sheetsu-id="' +
e +
'"></div>'
},
show = function () {
document.body.appendChild(createStyleElementWithKeyframes());
makeWindowSheetsuReplacedElementsEmptyArray();
for (var i = sheetsu_elements.length - 1; i >= 0; i--)
u(sheetsu_elements[i]) || "FORM" == sheetsu_elements[i].tagName || o(sheetsu_elements[i])
},
hide = function () {
makeWindowSheetsuReplacedElementsEmptyArray();
for (var t = 0; t < sheetsu_elements.length; t++)
c(sheetsu_elements[t])
},
makeWindowSheetsuReplacedElementsEmptyArray = function () {
null == window.sheetsuReplacedElements && (window.sheetsuReplacedElements = [])
},
o = function (e) {
window.sheetsuReplacedElements.push(e.innerHTML);
var t = document.createElement("div");
t.innerHTML = generate_loading_div(window.sheetsuReplacedElements.length - 1), e.innerHTML = "", e.appendChild(t)
},
u = function (e) {
return options = new callable__ReturnSheetsuAttributeMapNormalized(e).call(), options.hasOwnProperty("disable-loading")
},
c = function (e) {
loadingElRegex = new RegExp('<div><div.*class="sheetsu-loading".*sheetsu-id="(.*)".*></div></div>', "g"), output = e.innerHTML, output = output.replace(loadingElRegex, function (e, t) {
return window.sheetsuReplacedElements[parseInt(t)]
}), e.innerHTML = output
},
createStyleElementWithKeyframes = function () {
var styleElement = document.createElement("style");
return styleElement.textContent = keyframe_css, styleElement
};
return {
show: show,
hide: hide
}
}
function callable__QueryAllElementsWithAttributeSheetsu() {
this.call = function () {
var t = document.querySelectorAll("[" + sheetsu_string() + "]");
return t
};
var sheetsu_string = function () {
return "sheetsu"
}
}
function callable__Attach_FormEventHandler_AsOnSubmitHandlerFor(form) {
var e = form;
this.call = function () {
e.onsubmit = fn__FormEventHandler
}
}
function newable__RequestSpreadsheet(sheetsu_attribs) {
var sheetsu_attribs = sheetsu_attribs;
this.get = function (onDataCallback) {
var xhr = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = function () {
xhr.readyState > 3 && 200 == xhr.status && onDataCallback(JSON.parse(xhr.responseText))
};
xhr.open("GET", t(sheetsu_attribs), true);
xhr.send();
};
this.post = function (t) {
var xhr = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = function () {
xhr.readyState > 3 && 201 == xhr.status && t(JSON.parse(xhr.responseText))
},
xhr.open("POST", prefix_slug_with_https_sheetsu_com_apis_v1_0(sheetsu_attribs), true),
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8"),
xhr.send(JSON.stringify(sheetsu_attribs.data))
};
var t = function (param) {
var t = prefix_url_with_https_sheetsu_com_apis_v1_0(param.slug),
n = "";
return delete param.slug,
param.sheet && (n += s(param)),
n += param.search ? r(param) : param.column && param["column-value"] ? i(param) : "?" + o(param),
t + n
},
prefix_slug_with_https_sheetsu_com_apis_v1_0 = function (param) {
return prefix_url_with_https_sheetsu_com_apis_v1_0(param.slug)
},
prefix_url_with_https_sheetsu_com_apis_v1_0 = function (s) {
return utils.startsWith(s, "https://sheetsu.com/apis/v1.0/") ? s : "https://sheetsu.com/apis/v1.0/" + s
},
r = function (e) {
var t = [],
n = JSON.parse(e.search);
for (key in n) t.push(key + "=" + n[key]);
return "/search?" + t.join("&") + "&" + o(e)
},
i = function (e) {
var t = "/" + e.column + "/" + e["column-value"];
return t + "?" + o(e)
},
s = function (e) {
return "/sheets/" + e.sheet
},
o = function (e) {
var t = [];
return e.limit && t.push("limit=" + e.limit), e.offset && t.push("offset=" + e.offset), e.transposed && t.push("transposed=" + e.transposed), e["ignore-case"] && t.push("ignore_case=" + e["ignore-case"]), t.join("&")
}
}
function callable__SerializeForm(e) {
var e = e;
this.call = function () {
return t(e)
};
var t = function (e) {
for (var t = e.elements, n = {}, a = 0; a < t.length; ++a) {
var r = t[a].type,
i = t[a].name,
s = t[a].value;
switch (r) {
case "text":
case "textarea":
case "select-one":
case "number":
case "color":
case "date":
case "hidden":
case "local":
case "email":
case "month":
case "range":
case "search":
case "tel":
case "time":
case "url":
case "week":
case "password":
n[i] = s;
break;
case "radio":
case "checkbox":
t[a].checked && (n[i] = s)
}
}
return n
}
}
function callable_SwapGetElement(dest_shelement, data, sheetsu_attribs) {
var dest_shelement = dest_shelement,
data = data,
sheetsu_attribs = sheetsu_attribs;
this.call = function () {
var templateHtml = dest_shelement.innerHTML;
var resultingHtml = "";
for (i = 0; i < data.length; ++i)
resultingHtml += renderEntry(templateHtml, data[i]);
dest_shelement.innerHTML = resultingHtml
};
var renderEntry = function (templateHTML, data_entry) {
var template_html = templateHTML;
for (key in data_entry) template_html = r(template_html, key, data_entry[key]);
return template_html
},
r = function (template_html, key, value) {
var handlebars_array = static__Handlebars().get(sheetsu_attribs);
return template_html.split(handlebars_array[0] + key + handlebars_array[1]).join(value)
}
}
static__Loader().show();
document.addEventListener("DOMContentLoaded", function () {
(new newable__QueryAllSheetsuElementsForAttachingEventHandlers).attachOnSubmitAndDataReceived()
});
var fn__redirectTo = function (e) {
window.location = e
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment