Last active
November 17, 2017 15:28
-
-
Save dimkir/d00368ea76db105db5124a2bd4a2c8da to your computer and use it in GitHub Desktop.
Sheetsu Load Modifications
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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