213 lines
6.3 KiB
JavaScript
213 lines
6.3 KiB
JavaScript
/**
|
|
* This software is governed by the CeCILL-B license. If a copy of this license
|
|
* is not distributed with this file, you can obtain one at
|
|
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
|
|
*
|
|
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
|
|
* Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft)
|
|
*
|
|
* =============================
|
|
*
|
|
* Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
|
|
* ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
|
|
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
|
|
*
|
|
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
|
|
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
|
|
*/
|
|
|
|
|
|
var form;
|
|
|
|
$(document).ready(function () {
|
|
|
|
|
|
/**
|
|
* Save a list of polls inside LocalStorage
|
|
* @param polls
|
|
*/
|
|
function setPolls(polls) {
|
|
localStorage.setItem('polls', JSON.stringify(polls));
|
|
}
|
|
|
|
/**
|
|
* Add an poll inside LocalStorage
|
|
* @param poll
|
|
*/
|
|
function addPoll(poll) {
|
|
var polls = localStorage.getItem('polls');
|
|
if (polls === null) {
|
|
polls = [];
|
|
} else {
|
|
polls = JSON.parse(polls);
|
|
}
|
|
|
|
/**
|
|
* Test if the poll is already inside the list
|
|
*/
|
|
var index = polls.findIndex(function (existingPoll) {
|
|
return existingPoll.url === poll.url;
|
|
});
|
|
if (index === -1) {
|
|
polls.push(poll);
|
|
} else { // if the poll is already present, we need to update the last access date
|
|
polls[index] = poll;
|
|
}
|
|
setPolls(polls);
|
|
}
|
|
|
|
var poll = {
|
|
url: window.location.href,
|
|
title: $('#title-form h3').get(0).childNodes[0].nodeValue,
|
|
accessed: (new Date()).toISOString()
|
|
};
|
|
|
|
function isAdmin() {
|
|
return $('.jumbotron').hasClass('bg-danger');
|
|
}
|
|
|
|
if (!isAdmin()) {
|
|
if (!localStorage.getItem('polls')) {
|
|
setPolls([poll]);
|
|
} else {
|
|
addPoll(poll);
|
|
}
|
|
}
|
|
|
|
$('#poll_form').submit(function (event) {
|
|
var name = $('#name').val().trim();
|
|
|
|
if (name.length == 0) {
|
|
event.preventDefault();
|
|
var newMessage = $('#nameErrorMessage').clone();
|
|
var messageContainer = $('#message-container');
|
|
messageContainer
|
|
.empty()
|
|
.append(newMessage);
|
|
newMessage.removeClass('hidden');
|
|
$('html, body').animate({
|
|
scrollTop: messageContainer.offset().top
|
|
}, 750);
|
|
}
|
|
});
|
|
|
|
$('.choice input:radio').on('change', function(){
|
|
$(this).parent().parent().find('.startunchecked').removeClass('startunchecked');
|
|
});
|
|
$('.startunchecked').on('click', function(){
|
|
$(this).removeClass('startunchecked');
|
|
});
|
|
$('.no input').on('focus', function(){
|
|
$(this).next().removeClass('startunchecked');
|
|
});
|
|
|
|
$('.remove-column').on('click', function(e){
|
|
var confirmTranslation = $(this).data('remove-confirmation');
|
|
if (confirm(confirmTranslation)) {
|
|
return true;
|
|
} else {
|
|
e.stopPropagation();
|
|
return false
|
|
}
|
|
});
|
|
|
|
|
|
form = $('#comment_form');
|
|
|
|
|
|
checkCommentSending();
|
|
|
|
$("#comment_name").on("keyup change", checkCommentSending);
|
|
$("#comment").on("keyup change", checkCommentSending);
|
|
|
|
$("#comment_name").on("change", formatValues);
|
|
$("#comment").on("change", formatValues);
|
|
|
|
|
|
form.submit(function(event) {
|
|
event.preventDefault();
|
|
|
|
if ($('#comment').val()) {
|
|
$('#add_comment').attr("disabled", "disabled");
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: form.attr('action'),
|
|
data: form.serialize(),
|
|
dataType: 'json',
|
|
success: function(data)
|
|
{
|
|
$('#comment').val('');
|
|
if (data.result) {
|
|
$('#comments_list')
|
|
.replaceWith(data.comments);
|
|
var lastComment = $('#comments_list')
|
|
.find('div.comment')
|
|
.last();
|
|
// TODO : replace old jQuery UI Effect with Modern CSS
|
|
// lastComment.effect('highlight', {color: 'green'}, 401);
|
|
$('html, body').animate({
|
|
scrollTop: lastComment.offset().top
|
|
}, 750);
|
|
} else {
|
|
var newMessage = $('#genericErrorTemplate').clone();
|
|
newMessage
|
|
.find('.contents')
|
|
.text(data.message.message);
|
|
newMessage.removeClass('hidden');
|
|
var commentsAlert = $('#comments_alerts');
|
|
commentsAlert
|
|
.empty()
|
|
.append(newMessage);
|
|
$('html, body').animate({
|
|
scrollTop: commentsAlert.offset().top
|
|
}, 750);
|
|
}
|
|
},
|
|
complete: function() {
|
|
$('#add_comment').removeAttr("disabled");
|
|
}
|
|
});
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
/**
|
|
* Disable view public results option when there's a password and the poll is not hidden
|
|
*/
|
|
$('#password').on('keyup change', function () {
|
|
if($('#password').val() && !($('#hidden').attr('checked'))){
|
|
$('#resultsPubliclyVisible').removeAttr('disabled');
|
|
} else {
|
|
$('#resultsPubliclyVisible').attr('disabled','disabled');
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
function formatValues() {
|
|
var value = $(this).val().trim();
|
|
|
|
if (0 === value.length) {
|
|
$(this).val("");
|
|
}
|
|
}
|
|
|
|
function checkCommentSending() {
|
|
|
|
var button = $("#add_comment");
|
|
|
|
// on page load, "textSend" is not set
|
|
if ("undefined" === typeof button.data("textSend")) {
|
|
button.data("textSend", button.text());
|
|
}
|
|
|
|
if (!form.get(0).checkValidity()) {
|
|
button.prop("disabled", true);
|
|
button.text(button.data("textWait"));
|
|
} else {
|
|
button.prop("disabled", false);
|
|
button.text(button.data("textSend"));
|
|
}
|
|
}
|