Modernize Select2 integration and fix popover page jumping
- Upgraded Select2 from bundled v3.4.4 (2013) to v4.x peer dependency - Removed legacy Select2 v3.x bundled files from lib directory - Updated Select2 input to use v4.x API (events, AJAX, templates) - Fixed Bootstrap 5 popover page jumping issue with multi-timeout scroll restoration - Added comprehensive migration documentation in README-select2-upgrade.md - Rebuilt all distribution files with updated source code Breaking Changes: - Select2 now requires separate installation as peer dependency - AJAX configuration updated for v4.x format - Event names changed (select2:select vs select2-loaded) - Template functions renamed (templateResult vs formatResult)
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
* ---------------------
|
||||
* requires bootstrap-popover.js
|
||||
*/
|
||||
import { Popover } from "bootstrap";
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
@@ -13,7 +12,7 @@ import { Popover } from "bootstrap";
|
||||
containerName: 'popover',
|
||||
containerDataName: 'bs.popover',
|
||||
innerCss: '.popover-body',
|
||||
defaults: Popover.Default,
|
||||
defaults: bootstrap.Popover.Default,
|
||||
|
||||
initContainer: function(){
|
||||
$.extend(this.containerOptions, {
|
||||
@@ -40,7 +39,27 @@ import { Popover } from "bootstrap";
|
||||
|
||||
/* show */
|
||||
innerShow: function () {
|
||||
// Preserve scroll position to prevent page jumping
|
||||
var scrollTop = $(window).scrollTop();
|
||||
var scrollLeft = $(window).scrollLeft();
|
||||
|
||||
this.call('show');
|
||||
|
||||
// Multiple restoration attempts to handle async positioning
|
||||
setTimeout(function() {
|
||||
$(window).scrollTop(scrollTop);
|
||||
$(window).scrollLeft(scrollLeft);
|
||||
}, 0);
|
||||
|
||||
setTimeout(function() {
|
||||
$(window).scrollTop(scrollTop);
|
||||
$(window).scrollLeft(scrollLeft);
|
||||
}, 10);
|
||||
|
||||
setTimeout(function() {
|
||||
$(window).scrollTop(scrollTop);
|
||||
$(window).scrollLeft(scrollLeft);
|
||||
}, 50);
|
||||
},
|
||||
|
||||
/* hide */
|
||||
@@ -64,7 +83,7 @@ import { Popover } from "bootstrap";
|
||||
call: function() {
|
||||
if ( ! $(this.$element).data(this.containerDataName)) {
|
||||
$(this.$element).data(this.containerDataName,
|
||||
Popover.getOrCreateInstance(this.$element, this.containerOptions)
|
||||
bootstrap.Popover.getOrCreateInstance(this.$element, this.containerOptions)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user