Team:TU Darmstadt/Template/Javascript

From 2014.igem.org

(Difference between revisions)
Line 1,557: Line 1,557:
</script>
</script>
 +
<script>
 +
/**
 +
* Baseurl
 +
*
 +
* @type {string}
 +
*/
 +
var baseurl;
 +
/**
 +
* Powermail main JavaScript for form validation
 +
*/
 +
jQuery(document).ready(function($) {
 +
// Read baseURL
 +
baseurl = getBaseUrl();
 +
 +
// Tabs
 +
if ($.fn.powermailTabs) {
 +
$('.powermail_morestep').powermailTabs();
 +
}
 +
 +
// Location field
 +
if ($('.powermail_fieldwrap_location input').length) {
 +
getLocationAndWrite();
 +
}
 +
 +
// AJAX Form submit
 +
if ($('form[data-powermail-ajax]').length) {
 +
ajaxFormSubmit();
 +
}
 +
 +
// Datepicker field
 +
if ($.fn.datetimepicker) {
 +
$('.powermail_date').each(function() {
 +
var $this = $(this);
 +
// stop javascript datepicker, if browser supports type="date" or "datetime-local" or "time"
 +
if ($this.prop('type') === 'date' || $this.prop('type') === 'datetime-local' || $this.prop('type') === 'time') {
 +
if ($this.data('datepicker-force')) {
 +
// rewrite input type
 +
$this.prop('type', 'text');
 +
} else {
 +
// get date in format Y-m-d H:i for html5 date fields
 +
if ($(this).data('date-value')) {
 +
$(this).val(
 +
getDatetimeForDateFields($(this).data('date-value'), $(this).data('datepicker-format'), $this.prop('type'))
 +
);
 +
}
 +
 +
// stop js datepicker
 +
return;
 +
}
 +
}
 +
 +
var datepickerStatus = true;
 +
var timepickerStatus = true;
 +
if ($this.data('datepicker-settings') === 'date') {
 +
timepickerStatus = false;
 +
} else if ($this.data('datepicker-settings') === 'time') {
 +
datepickerStatus = false;
 +
}
 +
 +
// create datepicker
 +
$this.datetimepicker({
 +
format: $this.data('datepicker-format'),
 +
timepicker: timepickerStatus,
 +
datepicker: datepickerStatus,
 +
lang: 'en',
 +
i18n:{
 +
en:{
 +
months: $this.data('datepicker-months').split(','),
 +
dayOfWeek: $this.data('datepicker-days').split(',')
 +
}
 +
}
 +
});
 +
});
 +
}
 +
 +
// File Upload Delete
 +
$('.powermail_fieldwrap_file_inner').find('.deleteAllFiles').each(function() {
 +
// initially hide upload fields
 +
disableUploadField($(this).closest('.powermail_fieldwrap_file_inner').find('input[type="file"]'));
 +
});
 +
$('.deleteAllFiles').click(function() {
 +
enableUploadField($(this).closest('.powermail_fieldwrap_file_inner').find('input[type="file"]'));
 +
$(this).closest('ul').fadeOut(function() {
 +
$(this).remove();
 +
});
 +
});
 +
function disableUploadField(element) {
 +
element.prop('disabled', 'disabled').addClass('hide');
 +
}
 +
function enableUploadField(element) {
 +
element.removeProp('disabled').removeClass('hide');
 +
}
 +
 +
// Password Field Output
 +
$('.powermail_all_type_password.powermail_all_value').html('********');
 +
});
 +
 +
/**
 +
* Allow AJAX Submit for powermail
 +
*
 +
* @return void
 +
*/
 +
function ajaxFormSubmit() {
 +
// submit is called after parsley and html5 validation - so we don't have to check for errors
 +
$(document).on('submit', 'form[data-powermail-ajax]', function (e) {
 +
var $this = $(this);
 +
var formUid = $this.data('powermail-form');
 +
 +
$.ajax({
 +
type: 'POST',
 +
url: $this.prop('action'),
 +
data: $this.serialize(),
 +
beforeSend: function() {
 +
// add progressbar <div class="powermail_progressbar"><div class="powermail_progress"><div class="powermail_progess_inner"></div></div></div>
 +
var progressBar = $('<div />').addClass('powermail_progressbar').html(
 +
$('<div />').addClass('powermail_progress').html(
 +
$('<div />').addClass('powermail_progess_inner')
 +
)
 +
);
 +
$('.powermail_submit', $this).parent().append(progressBar);
 +
$('.powermail_confirmation_submit, .powermail_confirmation_form', $this).closest('.powermail_confirmation').append(progressBar);
 +
},
 +
complete: function() {
 +
// remove progressbar
 +
$('.powermail_fieldwrap_submit', $this).find('.powermail_progressbar').remove();
 +
},
 +
success: function(data) {
 +
var html = $('*[data-powermail-form="' + formUid + '"]:first', data);
 +
$('.tx-powermail').html(html);
 +
// fire tabs and parsley again
 +
if ($.fn.powermailTabs) {
 +
$('.powermail_morestep').powermailTabs();
 +
}
 +
if ($.fn.parsley) {
 +
$('form[data-parsley-validate="data-parsley-validate"]').parsley();
 +
}
 +
}
 +
});
 +
 +
e.preventDefault();
 +
});
 +
}
 +
 +
/**
 +
* Convert date format for html5 date fields
 +
*      31.08.2014 => 2014-08-31
 +
*
 +
* @param value
 +
* @param format
 +
* @param type
 +
* @returns {string}
 +
*/
 +
function getDatetimeForDateFields(value, format, type) {
 +
var date = new Date(Date.parseDate(value, format));
 +
var valueDate = date.getFullYear() + '-';
 +
valueDate += ('0' + (date.getMonth() + 1)).slice(-2) + '-';
 +
valueDate += ('0' + date.getDate()).slice(-2);
 +
var valueTime = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
 +
var valueDateTime = valueDate + 'T' + valueTime;
 +
 +
if (type === 'date') {
 +
return valueDate;
 +
}
 +
if (type === 'datetime-local') {
 +
return valueDateTime;
 +
}
 +
if (type === 'time') {
 +
return valueTime;
 +
}
 +
return 'error';
 +
}
 +
 +
/**
 +
* Getting the Location by the browser and write to inputform as address
 +
*
 +
* @return void
 +
*/
 +
function getLocationAndWrite() {
 +
if (navigator.geolocation) { // Read location from Browser
 +
navigator.geolocation.getCurrentPosition(function(position) {
 +
var lat = position.coords.latitude;
 +
var lng = position.coords.longitude;
 +
var url = baseurl + '/index.php' + '?eID=' + 'powermailEidGetLocation';
 +
jQuery.ajax({
 +
url: url,
 +
data: 'lat=' + lat + '&lng=' + lng,
 +
cache: false,
 +
beforeSend: function(jqXHR, settings) {
 +
jQuery('body').css('cursor', 'wait');
 +
},
 +
complete: function(jqXHR, textStatus) {
 +
jQuery('body').css('cursor', 'default');
 +
},
 +
success: function(data) { // return values
 +
if (data) {
 +
jQuery('.powermail_fieldwrap_location input').val(data);
 +
}
 +
}
 +
});
 +
});
 +
}
 +
}
 +
 +
/**
 +
* Return BaseUrl as prefix
 +
*
 +
* @return string Base Url
 +
*/
 +
function getBaseUrl() {
 +
var baseurl;
 +
if (jQuery('base').length > 0) {
 +
baseurl = jQuery('base').prop('href');
 +
} else {
 +
if (window.location.protocol != "https:") {
 +
baseurl = 'http://' + window.location.hostname;
 +
} else {
 +
baseurl = 'https://' + window.location.hostname;
 +
}
 +
}
 +
return baseurl;
 +
}
 +
</script>
</html>
</html>

Revision as of 22:02, 14 October 2014