introduce importmaps (#983)
* introduce importmaps This commit introduces importmaps. They allow to use modern javacript ESM within rails without webpack, yarn etc. see https://github.com/rails/importmap-rails for more details. Co-authored-by: Philipp Rothmann <philipprothmann@posteo.de> Co-authored-by: FGU <fgu@pragma-shift.net> * fix: rubocop violations --------- Co-authored-by: FGU <fgu@pragma-shift.net>
This commit is contained in:
parent
a8b2f387db
commit
026c3a6285
9 changed files with 17 additions and 3 deletions
183
app/assets/javascripts/application_legacy.js
Normal file
183
app/assets/javascripts/application_legacy.js
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
//= require jquery
|
||||
//= require jquery_ujs
|
||||
//= require select2-full
|
||||
//= require twitter/bootstrap
|
||||
//= require jquery.tokeninput
|
||||
//= require bootstrap-datepicker/core
|
||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.de
|
||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.es
|
||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.nl
|
||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.fr
|
||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.tr
|
||||
//= require list
|
||||
//= require list.unlist
|
||||
//= require list.delay
|
||||
//= require list.reset
|
||||
//= require i18n
|
||||
//= require i18n/translations
|
||||
//= require_self
|
||||
//= require ordering
|
||||
//= require stupidtable
|
||||
//= require touchclick
|
||||
//= require delta_input
|
||||
//= require recurring_select
|
||||
|
||||
$.fn.select2.defaults.set('theme', 'bootstrap');
|
||||
|
||||
// Load following statements, when DOM is ready
|
||||
$(function() {
|
||||
|
||||
// Show/Hide a specific DOM element
|
||||
$(document).on('click', 'a[data-toggle-this]', function() {
|
||||
$($(this).data('toggle-this')).toggle();
|
||||
return false;
|
||||
});
|
||||
|
||||
// Remove this item from DOM
|
||||
$(document).on('click', 'a[data-remove-this]', function() {
|
||||
$($(this).data('remove-this')).remove();
|
||||
return false;
|
||||
});
|
||||
|
||||
// Check/Uncheck a single checkbox
|
||||
$(document).on('click', '[data-check-this]', function() {
|
||||
var checkbox = $($(this).data('check-this'));
|
||||
checkbox.attr('checked', !checkbox.is(':checked'));
|
||||
highlightRow(checkbox);
|
||||
return false;
|
||||
});
|
||||
|
||||
// Check/Uncheck all checkboxes for a specific form
|
||||
$(document).on('click', 'input[data-check-all]', function() {
|
||||
var status = $(this).is(':checked');
|
||||
var context = $(this).data('check-all');
|
||||
var elms = $('input[type="checkbox"]', context);
|
||||
for(i=elms.length-1; i>=0; --i) { // performance can be an issue here, so use native loop
|
||||
var elm = elms[i];
|
||||
elm.checked = status;
|
||||
highlightRow($(elm));
|
||||
}
|
||||
});
|
||||
|
||||
// Submit form when changing a select menu.
|
||||
$(document).on('change', 'form[data-submit-onchange] select:not([data-ignore-onchange])', function() {
|
||||
var confirmMessage = $(this).children(':selected').data('confirm');
|
||||
if (confirmMessage) {
|
||||
if (confirm(confirmMessage)) {
|
||||
$(this).parents('form').submit();
|
||||
}
|
||||
} else {
|
||||
$(this).parents('form').submit();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Submit form when clicking on checkbox
|
||||
$(document).on('click', 'form[data-submit-onchange] input[type=checkbox]:not([data-ignore-onchange])', function() {
|
||||
$(this).parents('form').submit();
|
||||
});
|
||||
|
||||
// Submit form when changing text of an input field.
|
||||
// Submission will be done after 500ms of not typed, unless data-submit-onchange=changed,
|
||||
// in which case it happens when the input box loses its focus ('changed' event).
|
||||
// (changeDate is for bootstrap-datepicker)
|
||||
$(document).on('changed keyup focusin changeDate', 'form[data-submit-onchange] input[type=text]:not([data-ignore-onchange])', function(e) {
|
||||
var input = $(this);
|
||||
// when form has data-submit-onchange=changed, don't do updates while typing
|
||||
if (e.type!='changed' && e.type!='changeDate' && input.parents('form[data-submit-onchange=changed]').length>0) {
|
||||
return true;
|
||||
}
|
||||
// remember old value when it's getting the focus (unless we already have a change pending)
|
||||
if (e.type=='focusin') {
|
||||
if (!input.data('submit-timeout-id')) input.data('old-value', input.val());
|
||||
return true;
|
||||
}
|
||||
// trigger timeout to submit form when value was changed
|
||||
clearTimeout(input.data('submit-timeout-id'));
|
||||
input.data('submit-timeout-id', setTimeout(function() {
|
||||
if (input.val() != input.data('old-value')) input.parents('form').submit();
|
||||
input.removeData('submit-timeout-id');
|
||||
input.removeData('old-value');
|
||||
}, 500));
|
||||
});
|
||||
|
||||
$('[data-redirect-to]').bind('change', function() {
|
||||
var newLocation = $(this).children(':selected').val();
|
||||
if (newLocation != "") {
|
||||
document.location.href = newLocation;
|
||||
}
|
||||
});
|
||||
|
||||
// Remote paginations
|
||||
$(document).on('click', 'div.pagination[data-remote] a', function() {
|
||||
$.getScript($(this).attr('href'));
|
||||
return false;
|
||||
});
|
||||
|
||||
// Disable action of disabled buttons
|
||||
$(document).on('click', 'a.disabled', function() {
|
||||
return false;
|
||||
});
|
||||
|
||||
// Handle ajax errors
|
||||
// render json: {error: "can't except this!"}, status: :unprocessable_entity
|
||||
$(document).ajaxError(function(ev, xhr, settings, exception) {
|
||||
try {
|
||||
msg = xhr.responseJSON.error;
|
||||
} catch(err) {
|
||||
msg = I18n.t('errors.general');
|
||||
}
|
||||
alert(msg);
|
||||
});
|
||||
|
||||
// The autocomplete attribute is used for both autocompletion and storing
|
||||
// for passwords, it's nice to store it when editing one's own profile,
|
||||
// but never autocomplete. Only implemented for passwords.
|
||||
$('input[type="password"][autocomplete="off"][data-store="on"]').each(function() {
|
||||
$(this).on('change', function() {
|
||||
$(this).removeAttr('autocomplete');
|
||||
});
|
||||
});
|
||||
|
||||
// Use bootstrap datepicker for dateinput
|
||||
$('.datepicker').datepicker({format: 'yyyy-mm-dd', language: I18n.locale, todayHighlight: true});
|
||||
|
||||
// bootstrap tooltips (for price)
|
||||
// Extra options don't work when using selector, so override defaults
|
||||
// https://github.com/twbs/bootstrap/issues/3875 . These can still be
|
||||
// overridden per tooltip using data-placement attributes and the like.
|
||||
$.extend($.fn.tooltip.defaults, {
|
||||
html: true,
|
||||
animation: false,
|
||||
placement: 'left',
|
||||
container: 'body'
|
||||
});
|
||||
$(document).tooltip({
|
||||
selector: '[data-toggle~="tooltip"]',
|
||||
});
|
||||
|
||||
// See stupidtable.js for initialization of local table sorting
|
||||
});
|
||||
|
||||
// retrigger last local table sorting
|
||||
function updateSort(table) {
|
||||
$('.sorting-asc, .sorting-desc', table).toggleClass('.sorting-asc .sorting-desc')
|
||||
.removeData('sort-dir').trigger('click'); // CAUTION: removing data field of plugin
|
||||
}
|
||||
|
||||
// gives the row an yellow background
|
||||
function highlightRow(checkbox) {
|
||||
var row = checkbox.closest('tr');
|
||||
if (checkbox.is(':checked')) {
|
||||
row.addClass('selected');
|
||||
} else {
|
||||
row.removeClass('selected');
|
||||
}
|
||||
}
|
||||
|
||||
// Use with auto_complete to set a unique id,
|
||||
// e.g. when the user selects a (may not unique) name
|
||||
// There must be a hidden field with the id 'hidden_field'
|
||||
function setHiddenId(text, li) {
|
||||
$('hidden_id').value = li.id;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue