294 lines
9.9 KiB
JavaScript
294 lines
9.9 KiB
JavaScript
/*
|
|
* JavaScript functions for OpenSlides dashboard.
|
|
*
|
|
*/
|
|
|
|
// function that writes the widget list order to a cookie
|
|
function saveOrder() {
|
|
$(".column").each(function(index, value){
|
|
var colid = value.id;
|
|
var cookieName = "openslides-dashboard-" + colid;
|
|
// Get the order for this column.
|
|
var order = $('#' + colid).sortable("toArray");
|
|
var cookie_content = [];
|
|
for (var i = 0; i < order.length; i++) {
|
|
widget_id = order[i];
|
|
widget = $('#' + widget_id);
|
|
var is_collabsed = 0;
|
|
var is_pinned = 0;
|
|
if (!widget.find('.collapse').hasClass('in')) {
|
|
is_collabsed = 1;
|
|
}
|
|
if (widget.hasClass('affix')) {
|
|
is_pinned = 1;
|
|
}
|
|
cookie_content[i] = widget_id + '/' + is_collabsed + '/' + is_pinned;
|
|
}
|
|
$.cookie(cookieName, cookie_content);
|
|
});
|
|
}
|
|
|
|
// function that restores the widget list order from a cookie
|
|
function restoreOrder() {
|
|
$(".column").each(function(index, value) {
|
|
var colid = value.id;
|
|
var cookieName = "openslides-dashboard-" + colid;
|
|
var cookie = $.cookie(cookieName);
|
|
if ( cookie === undefined ) { return; }
|
|
var widgets = cookie.split(",");
|
|
for (var i = 0, n = widgets.length; i < n; i++ ) {
|
|
var widget_information = widgets[i].split('/');
|
|
var widgetID = widget_information[0];
|
|
var widget = $(".column").find('#' + widgetID);
|
|
widget.appendTo($('#' + colid));
|
|
if (widget_information[1] === "1") {
|
|
widget.find('.collapse').removeClass('in');
|
|
console.log(widget_information[0]);
|
|
widget.find('.collapsebutton').find('.btn').addClass('active');
|
|
}
|
|
if (widget_information[2] === "1") {
|
|
widget.addClass('affix');
|
|
widget.data('spy', 'affix');
|
|
widget.find('.fixbutton').find('.btn').addClass('active');
|
|
}
|
|
}
|
|
});
|
|
$('.collapse')
|
|
.on('hidden', function () { saveOrder(); })
|
|
.on('shown', function () { saveOrder(); });
|
|
}
|
|
|
|
$(function() {
|
|
$( ".column" ).sortable({
|
|
connectWith: ".column",
|
|
handle: ".widget-header",
|
|
stop: function() { saveOrder(); }
|
|
});
|
|
|
|
// control the projector view
|
|
$('.projector_edit').click(function(event) {
|
|
event.preventDefault();
|
|
var link = $(this);
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: link.attr('href'),
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
// change scale level number
|
|
$('#scale_level').html(data['scale_level']);
|
|
if ( data['scale_level'] != 0 )
|
|
$('#scale_level').addClass('notNull');
|
|
else
|
|
$('#scale_level').removeClass('notNull');
|
|
// change scroll level number
|
|
$('#scroll_level').html(data['scroll_level']);
|
|
if ( data['scroll_level'] != 0 ) {
|
|
$('#scroll_level').addClass('notNull');
|
|
if ( $('#scroll_up_button').hasClass('disabled') )
|
|
$('#scroll_up_button').removeClass('disabled');
|
|
}
|
|
else {
|
|
$('#scroll_level').removeClass('notNull');
|
|
$('#scroll_up_button').addClass('disabled');
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// control countdown
|
|
// TODO: Move Countdown-code into the projector app, or merge the projector
|
|
// app with the core app.
|
|
$('.countdown_control').click(function(event) {
|
|
event.preventDefault();
|
|
var link = $(this);
|
|
var requestData = {};
|
|
if (link.attr('id') == "countdown_set") {
|
|
requestData = { "countdown_time" : $( "#countdown_time" ).val() };
|
|
}
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: link.attr('href'),
|
|
data: requestData,
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
if (data['state'] == 'active') {
|
|
$('#countdown_play').hide();
|
|
$('#countdown_stop').show();
|
|
} else {
|
|
$('#countdown_play').show();
|
|
$('#countdown_stop').hide();
|
|
}
|
|
$('#countdown_time').val(data['countdown_time']);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#countdown_set').click(function(event) {
|
|
// Create a shortcut from the value in the form
|
|
event.preventDefault();
|
|
var times = get_times();
|
|
times.push($("#countdown_time" ).val());
|
|
localStorage.setItem('countdown_shortcut', times.join());
|
|
build_countdown_shortcuts();
|
|
});
|
|
|
|
get_times = function() {
|
|
// Loads the time values from the local storages. Converts all values
|
|
// to integers and removes doubles.
|
|
// Returns an empty array if an error occurs
|
|
try {
|
|
return localStorage.getItem('countdown_shortcut').split(',')
|
|
.map(function(value) {
|
|
// converts times into int
|
|
return parseInt(value);
|
|
}).filter(function(value, index, self) {
|
|
// filters doubles
|
|
return self.indexOf(value) === index;
|
|
});
|
|
} catch(err) {
|
|
return [];
|
|
}
|
|
};
|
|
|
|
$('.countdown_shortcut_time').click(function(event) {
|
|
// click on a shortcut. Set the form value and simulate a click event.
|
|
event.preventDefault();
|
|
var time = $(this).children('span').html();
|
|
$('#countdown_time').val(time);
|
|
$('#countdown_set').click();
|
|
});
|
|
|
|
$('.countdown_shortcut_time .close').click(function(event) {
|
|
// Removes a shortcut.
|
|
event.preventDefault();
|
|
var time = $(this).parent().parent().children('span').html();
|
|
var times = get_times().filter(
|
|
function(value) {
|
|
return value !== parseInt(time);
|
|
}
|
|
);
|
|
localStorage.setItem('countdown_shortcut', times);
|
|
build_countdown_shortcuts();
|
|
});
|
|
|
|
build_countdown_shortcuts = function() {
|
|
// Recreates the countdown shortcuts
|
|
var times = get_times();
|
|
$('#countdown_shortcut_storage').empty();
|
|
$.each(times, function(index, time) {
|
|
var element = $('#countdown_shortcut_dummy').clone(withDataAndEvents=true);
|
|
element.attr('id', '');
|
|
$('span', element).html(time);
|
|
element.appendTo('#countdown_shortcut_storage');
|
|
});
|
|
};
|
|
|
|
// build shortcuts at start time.
|
|
build_countdown_shortcuts();
|
|
|
|
// activate/deactivate overlay
|
|
$('.overlay_activate_link').click(function(event) {
|
|
event.preventDefault();
|
|
var link = $(this);
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: link.attr('href'),
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
if (data['active']) {
|
|
$('#' + data['name'] + '_active').show();
|
|
$('#' + data['name'] + '_inactive').hide();
|
|
} else {
|
|
$('#' + data['name'] + '_active').hide();
|
|
$('#' + data['name'] + '_inactive').show();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#overlay_message').ajaxForm({
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
$('#overlay_message_text').val(data['overlay_message']);
|
|
}
|
|
});
|
|
$('.fixbutton button').click(function (event) {
|
|
event.preventDefault();
|
|
if($(this).hasClass('active')) {
|
|
$(this).closest('.widget').removeClass('affix');
|
|
$(this).closest('.widget').removeAttr('data-spy');
|
|
saveOrder();
|
|
} else {
|
|
$(this).closest('.widget').addClass('affix');
|
|
$(this).closest('.widget').attr('data-spy', 'affix');
|
|
saveOrder();
|
|
}
|
|
});
|
|
|
|
// control pdf pages
|
|
$('.pdf-page-ctl').click(function(event){
|
|
event.preventDefault();
|
|
var link = $(this);
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: link.attr('href'),
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
if (typeof data.current_page !== 'undefined') {
|
|
$('#page_num').val(data.current_page);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.set-page-form').submit(function() {
|
|
$(this).ajaxSubmit();
|
|
return false;
|
|
});
|
|
|
|
$('.go-first-page').click(function() {
|
|
$('#page_num').val('1');
|
|
$('.set-page-form').ajaxSubmit();
|
|
});
|
|
|
|
$('.pdf-toggle-fullscreen').click(function(event){
|
|
event.preventDefault();
|
|
var link = $(this);
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: link.attr('href'),
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
if(data.fullscreen) {
|
|
if (!link.hasClass('btn-primary')) {
|
|
link.addClass('btn-primary');
|
|
link.find('i').addClass('icon-white');
|
|
}
|
|
} else {
|
|
if (link.hasClass('btn-primary')) {
|
|
link.removeClass('btn-primary');
|
|
link.find('i').removeClass('icon-white');
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
/* comment out this function because '$.browser' has been removed from jquery 1.9, see:
|
|
http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/
|
|
TODO: use jquery migrate to have $.browser support for IE8;
|
|
|
|
if ($.browser.msie) {
|
|
if ($.browser.version >= 8.0 && $.browser.version < 9.0)
|
|
{
|
|
// scaling bug in IE8.. iframe has to be 4 times bigger
|
|
$( "#iframe" ).css('width', 1024 * 4);
|
|
$( "#iframe" ).css('height', 768 * 4);
|
|
}
|
|
$( "#iframe" ).css('zoom', '0.25');
|
|
}
|
|
*/
|
|
|
|
restoreOrder();
|
|
});
|