/*! * Bootstrap 核心功能最小化实现 * 专为 Argon 主题优化 */ (function($) { 'use strict'; // Tooltip 插件 var Tooltip = function(element, options) { this.element = element; this.options = $.extend({}, Tooltip.DEFAULTS, options); this.init(); }; Tooltip.DEFAULTS = { placement: 'top', trigger: 'hover focus', title: '', delay: 0, html: false, container: false }; Tooltip.prototype.init = function() { var $element = $(this.element); var title = $element.attr('title') || $element.data('original-title') || this.options.title; if (!title) return; $element.attr('data-original-title', title).removeAttr('title'); var self = this; $element.on('mouseenter.tooltip', function() { self.show(); }); $element.on('mouseleave.tooltip', function() { self.hide(); }); }; Tooltip.prototype.show = function() { var $element = $(this.element); var title = $element.data('original-title'); if (!title) return; var $tooltip = $('
' + title + '
'); $('body').append($tooltip); var offset = $element.offset(); var elementWidth = $element.outerWidth(); var elementHeight = $element.outerHeight(); var tooltipWidth = $tooltip.outerWidth(); var tooltipHeight = $tooltip.outerHeight(); var top = offset.top - tooltipHeight - 10; var left = offset.left + (elementWidth - tooltipWidth) / 2; $tooltip.css({ position: 'absolute', top: top, left: left, zIndex: 1070 }); $element.data('tooltip-element', $tooltip); }; Tooltip.prototype.hide = function() { var $element = $(this.element); var $tooltip = $element.data('tooltip-element'); if ($tooltip) { $tooltip.remove(); $element.removeData('tooltip-element'); } }; // jQuery 插件定义 $.fn.tooltip = function(option) { return this.each(function() { var $this = $(this); var data = $this.data('bs.tooltip'); var options = typeof option === 'object' && option; if (!data) { $this.data('bs.tooltip', (data = new Tooltip(this, options))); } if (typeof option === 'string') { data[option](); } }); }; $.fn.tooltip.Constructor = Tooltip; // Modal 插件 var Modal = function(element, options) { this.element = element; this.options = options; }; Modal.prototype.show = function() { var $element = $(this.element); $element.addClass('show').css('display', 'block'); $('body').addClass('modal-open'); // 添加遮罩层 if (!$('.modal-backdrop').length) { $('body').append(''); } }; Modal.prototype.hide = function() { var $element = $(this.element); $element.removeClass('show').css('display', 'none'); $('body').removeClass('modal-open'); $('.modal-backdrop').remove(); }; $.fn.modal = function(option) { return this.each(function() { var $this = $(this); var data = $this.data('bs.modal'); var options = typeof option === 'object' && option; if (!data) { $this.data('bs.modal', (data = new Modal(this, options))); } if (typeof option === 'string') { data[option](); } else if (option === null) { data.show(); } }); }; // 自动初始化 $(document).on('click.modal.data-api', '[data-toggle="modal"]', function(e) { var $this = $(this); var href = $this.attr('href'); var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))); e.preventDefault(); $target.modal('show'); }); $(document).on('click.modal.data-api', '[data-dismiss="modal"]', function(e) { $(this).closest('.modal').modal('hide'); }); })(jQuery); // 添加必要的 CSS 样式 var modalStyles = ` `; $(document).ready(function() { $('head').append(modalStyles); });