Skip to content

Instantly share code, notes, and snippets.

@jdcauley
Created April 15, 2015 01:19
Show Gist options
  • Save jdcauley/daac34c38c69d3962352 to your computer and use it in GitHub Desktop.
Save jdcauley/daac34c38c69d3962352 to your computer and use it in GitHub Desktop.
Blocks
function nilla(element){
element.hasClass = function(classname){
if(this.className.match(new RegExp('(\\s|^)'+classname+'(\\s|$)'))){
return true;
} else {
return false;
}
};
element.addClass = function(newClass) {
if (this.length) {
for (var i = 0, x = this.length; i < x; i++) {
var classes = this[i].className;
if(classes){
classes = classes.split(' ');
var found = classes.indexOf(newClass);
if(found != -1){
return false;
} else {
classes.push(newClass);
this[i].className = classes.join(' ');
}
} else {
this[i].className = newClass;
}
}
} else {
var classes = this.className;
if(classes){
classes = classes.split(' ');
var found = classes.indexOf(newClass);
if(found != -1){
return false;
} else {
classes.push(newClass);
this.className = classes.join(' ');
}
} else {
this.className = newClass;
}
}
};
element.removeClass = function(oldClass) {
if(this.length){
for (var i = 0, x = this.length; i < x; i++){
if(this[i].hasClass(oldClass)){
var reg = new RegExp('(\\s|^)'+oldClass+'(\\s|$)');
this[i].className=this[i].className.replace(reg,'');
}
}
}
};
element.traverseParents = function(parent) {
var traveler = this;
console.log(traveler);
while (traveler.tagName != parent) {
traveler = traveler.parentElement;
}
return traveler;
};
return element;
};
var Blocks = new Object();
Blocks.loadScript = function(url, callback){
var script = document.createElement("script");
script.type = "text/javascript";
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == "loaded" ||
script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
};
Blocks.stop = function(e){
e.preventDefault();
};
Blocks.getElement = function(string){
var splitString = string.charAt(0),
newString = string.slice(1, string.length);
if(splitString === '.'){
return document.getElementsByClassName(newString);
} else if(splitString === '#'){
return document.getElementById(newString);
} else {
return document.getElementsByTagName(string);
}
};
Blocks.init = function(key){
Blocks.key = key;
var init = new XMLHttpRequest();
init.responseType = 'json';
var url = 'http://localhost:1337/inbound/init/' + Blocks.key;
init.open("get", url, true);
init.onreadystatechange = function() {
if(init.readyState == 4 && init.status == 200) {
if(init.response.stripePublicKey){
Blocks.loadScript('https://js.stripe.com/v2/', function(){
Blocks.stripeKey = init.response.stripePublicKey;
Stripe.setPublishableKey(Blocks.stripeKey);
});
}
}
}
init.send();
};
Blocks.req = function(form, callback){
var req = new XMLHttpRequest();
req.responseType = 'json';
var url = 'http://localhost:1337/inbound/new' + '/' + Blocks.key;
var formData = new FormData(form);
console.log(formData)
req.open("post", url, true);
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
return callback(null, req.response);
}
}
req.send(formData);
};
Blocks.mailer = function(message, callback){
};
Blocks.pay = function(form, callback){
function stripeTokenizer(form){
Stripe.card.createToken(form, function(status, response){
if (response.error) {
var displayError = document.getElementById('payment-errors');
displayError.innerHTML = response.error.message;
} else {
var token = response.id;
var stripeInput = document.createElement('input');
stripeInput.setAttribute('type', 'hidden');
stripeInput.setAttribute('name', 'stripeToken');
stripeInput.value = token;
form.appendChild(stripeInput);
Blocks.req(form, function(err, done){
if(err){
return callback(err);
}
if(done){
console.log(done);
}
});
}
});
};
stripeTokenizer(form);
};
Blocks.upload = function(form, callback){
Blocks.req(form, function(err, done){
if(err){
return callback(err);
}
if(done){
return callback(null, done);
}
});
};
Blocks.submit = function(form, callback){
Blocks.req(form, function(err, done){
if(err){
return callback(err);
}
if(done){
return callback(null, done);
}
});
};
Blocks.click = function(string, callback){
var elements = Blocks.getElement(string);
function submit(){
var form = nilla(this).traverseParents('FORM');
Blocks.req(form, function(err, done){
if(err){
return callback(err);
}
if(done){
return callback(null, done);
}
});
}
if(elements.length){
for(var i = 0, x = elements.length; i < x; i++){
console.log(elements[i]);
elements[i].addEventListener('click', Blocks.stop, false);
elements[i].addEventListener('click', submit, false);
}
} else {
elements.addEventListener('click', Blocks.stop, false);
elements.addEventListener('click', submit, false);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment