Clean up js style and remove extra getCookie function (#4123)

This commit is contained in:
José Padilla 2016-05-16 04:27:38 -04:00 committed by Tom Christie
parent 5392be4ddb
commit daccc2b8f3
3 changed files with 170 additions and 170 deletions

View File

@ -1,97 +1,112 @@
function replaceDocument(docString) { function replaceDocument(docString) {
var doc = document.open("text/html"); var doc = document.open("text/html");
doc.write(docString);
doc.close();
}
doc.write(docString);
doc.close();
}
function doAjaxSubmit(e) { function doAjaxSubmit(e) {
var form = $(this); var form = $(this);
var btn = $(this.clk); var btn = $(this.clk);
var method = btn.data('method') || form.data('method') || form.attr('method') || 'GET'; var method = (
method = method.toUpperCase() btn.data('method') ||
if (method === 'GET') { form.data('method') ||
// GET requests can always use standard form submits. form.attr('method') || 'GET'
).toUpperCase();
if (method === 'GET') {
// GET requests can always use standard form submits.
return;
}
var contentType =
form.find('input[data-override="content-type"]').val() ||
form.find('select[data-override="content-type"] option:selected').text();
if (method === 'POST' && !contentType) {
// POST requests can use standard form submits, unless we have
// overridden the content type.
return;
}
// At this point we need to make an AJAX form submission.
e.preventDefault();
var url = form.attr('action');
var data;
if (contentType) {
data = form.find('[data-override="content"]').val() || ''
} else {
contentType = form.attr('enctype') || form.attr('encoding')
if (contentType === 'multipart/form-data') {
if (!window.FormData) {
alert('Your browser does not support AJAX multipart form submissions');
return; return;
} }
var contentType = // Use the FormData API and allow the content type to be set automatically,
form.find('input[data-override="content-type"]').val() || // so it includes the boundary string.
form.find('select[data-override="content-type"] option:selected').text(); // See https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
if (method === 'POST' && !contentType) { contentType = false;
// POST requests can use standard form submits, unless we have data = new FormData(form[0]);
// overridden the content type.
return;
}
// At this point we need to make an AJAX form submission.
e.preventDefault();
var url = form.attr('action');
var data;
if (contentType) {
data = form.find('[data-override="content"]').val() || ''
} else { } else {
contentType = form.attr('enctype') || form.attr('encoding') contentType = 'application/x-www-form-urlencoded; charset=UTF-8'
if (contentType === 'multipart/form-data') { data = form.serialize();
if (!window.FormData) { }
alert('Your browser does not support AJAX multipart form submissions'); }
return;
} var ret = $.ajax({
// Use the FormData API and allow the content type to be set automatically, url: url,
// so it includes the boundary string. method: method,
// See https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects data: data,
contentType = false; contentType: contentType,
data = new FormData(form[0]); processData: false,
} else { headers: {
contentType = 'application/x-www-form-urlencoded; charset=UTF-8' 'Accept': 'text/html; q=1.0, */*'
data = form.serialize(); },
} });
ret.always(function(data, textStatus, jqXHR) {
if (textStatus != 'success') {
jqXHR = data;
} }
var ret = $.ajax({ var responseContentType = jqXHR.getResponseHeader("content-type") || "";
url: url,
method: method,
data: data,
contentType: contentType,
processData: false,
headers: {'Accept': 'text/html; q=1.0, */*'},
});
ret.always(function(data, textStatus, jqXHR) {
if (textStatus != 'success') {
jqXHR = data;
}
var responseContentType = jqXHR.getResponseHeader("content-type") || "";
if (responseContentType.toLowerCase().indexOf('text/html') === 0) {
replaceDocument(jqXHR.responseText);
try {
// Modify the location and scroll to top, as if after page load.
history.replaceState({}, '', url);
scroll(0,0);
} catch(err) {
// History API not supported, so redirect.
window.location = url;
}
} else {
// Not HTML content. We can't open this directly, so redirect.
window.location = url;
}
});
return ret;
}
if (responseContentType.toLowerCase().indexOf('text/html') === 0) {
replaceDocument(jqXHR.responseText);
try {
// Modify the location and scroll to top, as if after page load.
history.replaceState({}, '', url);
scroll(0, 0);
} catch (err) {
// History API not supported, so redirect.
window.location = url;
}
} else {
// Not HTML content. We can't open this directly, so redirect.
window.location = url;
}
});
return ret;
}
function captureSubmittingElement(e) { function captureSubmittingElement(e) {
var target = e.target; var target = e.target;
var form = this; var form = this;
form.clk = target;
form.clk = target;
} }
$.fn.ajaxForm = function() { $.fn.ajaxForm = function() {
var options = {} var options = {}
return this
.unbind('submit.form-plugin click.form-plugin') return this
.bind('submit.form-plugin', options, doAjaxSubmit) .unbind('submit.form-plugin click.form-plugin')
.bind('click.form-plugin', options, captureSubmittingElement); .bind('submit.form-plugin', options, doAjaxSubmit)
.bind('click.form-plugin', options, captureSubmittingElement);
}; };

View File

@ -1,47 +1,52 @@
function getCookie(name) { function getCookie(name) {
var cookieValue = null; var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';'); if (document.cookie && document.cookie != '') {
for (var i = 0; i < cookies.length; i++) { var cookies = document.cookie.split(';');
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want? for (var i = 0; i < cookies.length; i++) {
if (cookie.substring(0, name.length + 1) == (name + '=')) { var cookie = jQuery.trim(cookies[i]);
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break; // Does this cookie string begin with the name we want?
} if (cookie.substring(0, name.length + 1) == (name + '=')) {
} cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
} }
return cookieValue; }
return cookieValue;
} }
function csrfSafeMethod(method) { function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection // these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
} }
function sameOrigin(url) { function sameOrigin(url) {
// test that a given url is a same-origin URL // test that a given url is a same-origin URL
// url could be relative or scheme relative or absolute // url could be relative or scheme relative or absolute
var host = document.location.host; // host + port var host = document.location.host; // host + port
var protocol = document.location.protocol; var protocol = document.location.protocol;
var sr_origin = '//' + host; var sr_origin = '//' + host;
var origin = protocol + sr_origin; var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || // Allow absolute or scheme relative URLs to same origin
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative. (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
!(/^(\/\/|http:|https:).*/.test(url)); // or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
} }
var csrftoken = getCookie(window.drf.csrfCookieName); var csrftoken = getCookie(window.drf.csrfCookieName);
$.ajaxSetup({ $.ajaxSetup({
beforeSend: function(xhr, settings) { beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) { if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
// Send the token to same-origin, relative URLs only. // Send the token to same-origin, relative URLs only.
// Send the token only if the method warrants CSRF protection // Send the token only if the method warrants CSRF protection
// Using the CSRFToken value acquired earlier // Using the CSRFToken value acquired earlier
xhr.setRequestHeader("X-CSRFToken", csrftoken); xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
} }
}
}); });

View File

@ -1,67 +1,47 @@
function getCookie(c_name) $(document).ready(function() {
{ // JSON highlighting.
// From http://www.w3schools.com/js/js_cookies.asp prettyPrint();
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1) {
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1) {
c_value = null;
} else {
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1) {
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
$(document).ready(function () { // Bootstrap tooltips.
// JSON highlighting. $('.js-tooltip').tooltip({
prettyPrint(); delay: 1000,
container: 'body'
});
// Bootstrap tooltips. // Deal with rounded tab styling after tab clicks.
$('.js-tooltip').tooltip({ $('a[data-toggle="tab"]:first').on('shown', function(e) {
delay: 1000, $(e.target).parents('.tabbable').addClass('first-tab-active');
container: 'body' });
});
// Deal with rounded tab styling after tab clicks. $('a[data-toggle="tab"]:not(:first)').on('shown', function(e) {
$('a[data-toggle="tab"]:first').on('shown', function (e) { $(e.target).parents('.tabbable').removeClass('first-tab-active');
$(e.target).parents('.tabbable').addClass('first-tab-active'); });
});
$('a[data-toggle="tab"]:not(:first)').on('shown', function (e) {
$(e.target).parents('.tabbable').removeClass('first-tab-active');
});
$('a[data-toggle="tab"]').click(function(){ $('a[data-toggle="tab"]').click(function() {
document.cookie="tabstyle=" + this.name + "; path=/"; document.cookie = "tabstyle=" + this.name + "; path=/";
}); });
// Store tab preference in cookies & display appropriate tab on load. // Store tab preference in cookies & display appropriate tab on load.
var selectedTab = null; var selectedTab = null;
var selectedTabName = getCookie('tabstyle'); var selectedTabName = getCookie('tabstyle');
if (selectedTabName) { if (selectedTabName) {
selectedTabName = selectedTabName.replace(/[^a-z-]/g, ''); selectedTabName = selectedTabName.replace(/[^a-z-]/g, '');
} }
if (selectedTabName) { if (selectedTabName) {
selectedTab = $('.form-switcher a[name=' + selectedTabName + ']'); selectedTab = $('.form-switcher a[name=' + selectedTabName + ']');
} }
if (selectedTab && selectedTab.length > 0) { if (selectedTab && selectedTab.length > 0) {
// Display whichever tab is selected. // Display whichever tab is selected.
selectedTab.tab('show'); selectedTab.tab('show');
} else { } else {
// If no tab selected, display rightmost tab. // If no tab selected, display rightmost tab.
$('.form-switcher a:first').tab('show'); $('.form-switcher a:first').tab('show');
} }
$(window).load(function(){ $(window).load(function() {
$('#errorModal').modal('show'); $('#errorModal').modal('show');
}); });
}); });