authentic/src/authentic2/manager/static/authentic2/manager/js/manager.js

239 lines
9.3 KiB
JavaScript

(function($, window, undefined) {
$.fn.values = function(data) {
var els = this.find(':input').get();
if(arguments.length === 0) {
// return all data
data = {};
$.each(els, function() {
if (this.name && !this.disabled && (this.checked
|| /select|textarea/i.test(this.nodeName)
|| /text|hidden|password/i.test(this.type))) {
if(data[this.name] == undefined){
data[this.name] = [];
}
data[this.name].push($(this).val());
}
});
return data;
} else {
$.each(els, function() {
if (this.name && data[this.name]) {
var names = data[this.name];
var $this = $(this);
if(Object.prototype.toString.call(names) !== '[object Array]'){
names = [names]; //backwards compat to old version of this code
}
if(this.type == 'checkbox' || this.type == 'radio') {
var val = $this.val();
var found = false;
for(var i = 0; i < names.length; i++){
if(names[i] == val){
found = true;
break;
}
}
$this.attr("checked", found);
} else {
$this.val(names[0]);
}
}
});
return this;
}
};
$(function() {
/* Copied from http://stackoverflow.com/questions/1489486/jquery-plugin-to-serialize-a-form-and-also-restore-populate-the-form/1490431#1490431
* by mkoryak
* jQuery.values: get or set all of the name/value pairs from child input controls
* @argument data {array} If included, will populate all child controls.
* @returns element if data was provided, or array of values if not
*/
/* search inputs behaviours */
$('#search-input').change(function () {
var params = $.url().param();
if ($(this).val()) {
params.search = $(this).val();
} else {
if ('search' in params) {
delete params.search;
}
}
var href = $.url().attr('path')
if ($.param(params)) {
href += '?' + $.param(params);
}
window.location = href;
});
/* content column update */
function update_content(href, state, push) {
/* make the back button work */
if (push) {
window.history.pushState(state, window.document.tile, href);
}
url = window.location.href;
$('body').addClass('refreshing');
$.get(url, function (response_text) {
var $response = $(response_text);
var $content = $response.find('#content .content');
var $appbar = $response.find('#appbar');
var $container = $('#content .content');
var $old_appbar = $('#appbar');
$container.replaceWith($content);
$old_appbar.replaceWith($appbar);
/* keep django-select2 fields working */
if ($.fn.djangoSelect2 != undefined) {
$('.django-select2').djangoSelect2();
}
$(window.document).trigger('gadjo:content-update');
}).always(function() {
$('body').removeClass('refreshing');
});
}
window.update_content = update_content;
/* document popstate */
$(window).on('popstate', function (e) {
var state = e.originalEvent.state;
if (state != undefined) {
if ('form' in state) {
$(state.form).values(state.values);
}
}
update_content(window.document.location);
return true;
});
/* paginator ajax loading */
$(document).on('click', '.paginator a', function () {
var href = $(this).attr('href');
var title = $(this).text();
update_content(href, undefined, true);
return false;
});
/* dialog load handler */
$(document).on('gadjo:dialog-loaded', function (e, form) {
$('.messages', form).delay(3000*(1+$('.messages li', form).length)).fadeOut('slow');
if ($('.table-container').length) {
update_content(location.href);
}
});
/* user deletion */
$(document).on('click', '.js-remove-object', function (e) {
var $anchor = $(this);
if ($anchor.data('confirm')) {
if (! confirm($anchor.data('confirm'))) {
return false;
}
}
var $tr = $anchor.parents('tr');
var pk = $tr.data('pk');
var pk_arg = $anchor.data('pk-arg');
var post_content = {
'csrfmiddlewaretoken': window.csrf_token,
'action': 'remove'}
post_content[pk_arg] = pk
$.post('', post_content, function () {
update_content(window.location.href);
});
return false;
});
/* confirmation on submit buttons */
$(document).on('click', 'button', function (e) {
if ($(e.target).data('confirm')) {
if (! confirm($(e.target).data('confirm'))) {
e.preventDefault();
return false;
}
} else if ($(e.target).data('url')) {
e.preventDefault();
if ($(e.target).attr('rel') == 'popup') {
return displayPopup.apply($(e.target), [e]);
} else {
window.location.href = $(e.target).data('url');
}
}
});
$(document).on('change', '#id_generate_password', function (e) {
if ($(e.target).is(':checked')) {
$('#id_send_mail').prop('disabled', true);
$('#id_send_mail').data('old_value', $('#id_send_mail').is(':checked'));
$('#id_send_mail').prop('checked', true);
$('#id_password1').prop('disabled', true);
$('#id_password2').prop('disabled', true);
} else {
$('#id_send_mail').prop('disabled', false);
$('#id_send_mail').prop('checked', $('#id_send_mail').data('old_value'));
$('#id_password1').prop('disabled', false);
$('#id_password2').prop('disabled', false);
}
});
$(document).on('click.manager', 'table tr[data-url][rel=popup]', displayPopup);
$(document).on('mouseup.manager', 'table tr[data-url]:not([rel=popup])', function (e) {
var $target = $(e.target);
if ($target.is('input') || $target.is('a') || $target.parents('a').length) return false;
if (e.which == 2 || e.ctrlKey) {
window.open($(this).data('url'), '_blank');
} else if (e.which == 3) {
// right click, nothing
} else {
window.location.href = $(this).data('url');
}
return true;
});
/* Prepopulate slug fields */
$('#id_slug').data('_changed', false);
$(document).on('change', '#id_slug', function (e) {
$(e.target).data('_changed', true);
});
$(document).on('gadjo:dialog-loaded', function (e, form) {
if ($('#id_slug').val()) {
$('#id_slug').data('_changed', true);
}
});
$(document).on('keyup', '#id_name', function (e) {
var $this = $(this);
var $target = $(e.target);
var $slug = $('#id_slug');
if (! $slug.data('_changed')) {
$slug.val(URLify($target.val()));
}
});
var timer;
$('#search-form').on('input propertychange change', 'input,select', function (e) {
var $form = $('#search-form');
window.clearTimeout(timer);
timer = window.setTimeout(function () {
var query = $form.serialize();
if (window.location.href.split('?')[1] == query) {
return;
};
update_content('?' + query, {'form': '#search-form', 'values': $form.values()}, true);
}, 600);
});
if ($('#search-form').length) {
window.history.replaceState({'form': '#search-form', 'values': $('#search-form').values()}, window.document.title, window.location.href)
}
$(window.document).trigger('gadjo:content-update');
function FitToContent(id, maxHeight)
{
var text = id && id.style ? id : document.getElementById(id);
if ( !text )
return;
}
$('textarea.js-autoresize').each(function () {
this.setAttribute('style', 'height:' + (this.scrollHeight) + 'px;overflow-y:hidden;');
})
$(document).on('input', 'textarea.js-autoresize', function () {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
return true;
});
});
})(jQuery, window)