You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
6.3 KiB
199 lines
6.3 KiB
(function ($) {
|
|
|
|
// Register callbacks to perform after inline has been added
|
|
Suit.after_inline = function () {
|
|
var functions = {};
|
|
var register = function (fn_name, fn_callback) {
|
|
functions[fn_name] = fn_callback;
|
|
};
|
|
|
|
var run = function (inline_prefix, row) {
|
|
for (var fn_name in functions) {
|
|
functions[fn_name](inline_prefix, row);
|
|
}
|
|
};
|
|
|
|
return {
|
|
register: register,
|
|
run: run
|
|
};
|
|
}();
|
|
|
|
// Backwards compatiblity
|
|
SuitAfterInline = Suit.after_inline;
|
|
|
|
/**
|
|
* Fixed submit buttons.
|
|
*/
|
|
$.fn.suit_fixed = function () {
|
|
$(this).each(function () {
|
|
// extra_offset: 70 (60 Footer height + 10 top offset)
|
|
var $fixed_item = $(this), pos = $fixed_item.offset(), extra_offset = 70;
|
|
$(window).bind('scroll.sl resize.sl load.sl', function (e) {
|
|
var $win = $(this), scroll_top = $win.scrollTop();
|
|
if ($fixed_item.height() < $win.height() &&
|
|
scroll_top > (pos.top - 10) &&
|
|
$fixed_item.height() < $win.height()) {
|
|
!$fixed_item.hasClass('fixed') && $fixed_item.addClass('fixed');
|
|
var max_top = Math.min(10, $(document).height() - $fixed_item.height() - scroll_top - extra_offset);
|
|
$fixed_item.css('top', max_top + 'px');
|
|
}
|
|
else if (scroll_top <= (pos.top - 10) &&
|
|
$fixed_item.hasClass('fixed')) {
|
|
$fixed_item.removeClass('fixed');
|
|
}
|
|
});
|
|
|
|
$(window).trigger('scroll.sl');
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Search filters - submit only changed fields
|
|
*/
|
|
$.fn.suit_search_filters = function () {
|
|
$(this).change(function () {
|
|
var $field = $(this);
|
|
var $option = $field.find('option:selected');
|
|
var select_name = $option.data('name');
|
|
if (select_name) {
|
|
$field.attr('name', select_name);
|
|
} else {
|
|
$field.removeAttr('name');
|
|
}
|
|
// Handle additional values for date filters
|
|
var additional = $option.data('additional');
|
|
if (additional) {
|
|
var hidden_id = $field.data('name') + '_add';
|
|
var $hidden = $('#' + hidden_id);
|
|
if (!$hidden.length) {
|
|
$hidden = $('<input/>').attr('type', 'hidden').attr('id', hidden_id);
|
|
$field.after($hidden);
|
|
}
|
|
additional = additional.split('=');
|
|
$hidden.attr('name', additional[0]).val(additional[1])
|
|
}
|
|
});
|
|
$(this).trigger('change');
|
|
};
|
|
|
|
/**
|
|
* Linked select - shows link to related item after Select
|
|
*/
|
|
$.fn.suit_linked_select = function () {
|
|
|
|
var get_link_name = function ($select) {
|
|
var text = $select.find('option:selected').text();
|
|
return text && $select.val() ? text + '' : '';
|
|
};
|
|
|
|
var get_url = function ($add_link, $select) {
|
|
var value = $select.val();
|
|
return $add_link.attr('href').split('?')[0] + '../' + value + '/';
|
|
};
|
|
|
|
var add_link = function ($select) {
|
|
var $add_link = $select.next();
|
|
if ($add_link.hasClass('add-another')) {
|
|
var $link = $add_link.next('a');
|
|
if (!$link.length) {
|
|
$link = $('<a/>').addClass('linked-select-link');
|
|
$add_link.after($link).after(' ');
|
|
}
|
|
$link.text(get_link_name($select));
|
|
$link.attr('href', get_url($add_link, $select));
|
|
}
|
|
};
|
|
|
|
$(this).each(function () {
|
|
add_link($(this));
|
|
});
|
|
|
|
$(document).on('change', this.selector, function () {
|
|
add_link($(this));
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Content tabs
|
|
*/
|
|
$.fn.suit_form_tabs = function () {
|
|
|
|
var $tabs = $(this);
|
|
var tab_prefix = $tabs.data('tab-prefix');
|
|
if (!tab_prefix)
|
|
return;
|
|
|
|
var $tab_links = $tabs.find('a');
|
|
|
|
function tab_contents($link) {
|
|
return $('.' + tab_prefix + '-' + $link.attr('href').replace('#', ''));
|
|
}
|
|
|
|
function activate_tabs() {
|
|
// Init tab by error, by url hash or init first tab
|
|
if (window.location.hash) {
|
|
var found_error;
|
|
$tab_links.each(function () {
|
|
var $link = $(this);
|
|
if (tab_contents($link).find('.error').length != 0) {
|
|
$link.addClass('error');
|
|
$link.trigger('click');
|
|
found_error = true;
|
|
}
|
|
});
|
|
!found_error && $($tabs).find('a[href=\\' + window.location.hash + ']').click();
|
|
} else {
|
|
$tab_links.first().trigger('click');
|
|
}
|
|
}
|
|
|
|
$tab_links.click(function () {
|
|
var $link = $(this);
|
|
$link.parent().parent().find('.active').removeClass('active');
|
|
$link.parent().addClass('active');
|
|
$('.' + tab_prefix).removeClass('show').addClass('hide');
|
|
tab_contents($link).removeClass('hide').addClass('show')
|
|
});
|
|
|
|
activate_tabs();
|
|
};
|
|
|
|
/**
|
|
* Avoids double-submit issues in the change_form.
|
|
*/
|
|
$.fn.suit_form_debounce = function () {
|
|
var $form = $(this),
|
|
$saveButtons = $form.find('.submit-row button'),
|
|
submitting = false;
|
|
|
|
$form.submit(function () {
|
|
if (submitting) {
|
|
return false;
|
|
}
|
|
|
|
submitting = true;
|
|
$saveButtons.addClass('disabled');
|
|
|
|
setTimeout(function () {
|
|
$saveButtons.removeClass('disabled');
|
|
submitting = false;
|
|
}, 5000);
|
|
});
|
|
};
|
|
|
|
$(function () {
|
|
|
|
// Fixed submit buttons
|
|
$('.inner-right-column').suit_fixed();
|
|
|
|
// Show link to related item after Select
|
|
$('.linked-select').suit_linked_select();
|
|
|
|
// Handle change list filter null values
|
|
$('.search-filter').suit_search_filters();
|
|
|
|
});
|
|
|
|
}(Suit.$));
|
|
|