From df851b9414912b65e9030821e23ac019ece3a2ad Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Mon, 24 Aug 2026 11:31:57 +0900 Subject: [PATCH] Work around jQuery UI sortable performance regression on long lists --- app/assets/javascripts/application-legacy.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/assets/javascripts/application-legacy.js b/app/assets/javascripts/application-legacy.js index d8317b3f1..32fabe77f 100644 --- a/app/assets/javascripts/application-legacy.js +++ b/app/assets/javascripts/application-legacy.js @@ -990,6 +990,21 @@ function beforeShowDatePicker(input, inst) { $(input).datepickerFallback("option", "defaultDate", default_date); } +// Workaround for a performance regression in jQuery UI 1.12+ that makes +// sortable initialization quadratic in the number of items, freezing +// Chromium-based browsers on long lists such as custom field enumerations +// (https://github.com/jquery/jquery-ui/issues/2062). +// Applies the handle class directly, bypassing the widget class tracking. +if ($.ui && $.ui.sortable) { + $.ui.sortable.prototype._setHandleClassName = function() { + this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"); + $.each(this.items, function() { + var handle = this.instance.options.handle; + (handle ? this.item.find(handle) : this.item).addClass("ui-sortable-handle"); + }); + }; +} + (function($){ $.fn.positionedItems = function(sortableOptions, options){ var settings = $.extend({ -- 2.55.0