UNPKG

zui

Version:

一个基于 Bootstrap 深度定制开源前端实践方案,帮助你快速构建现代跨屏应用。

145 lines (108 loc) 4.54 kB
/* ======================================================================== * Bootstrap: popover.js v3.0.0 * http://twbs.github.com/bootstrap/javascript.html#popovers * * ZUI: The file has been changed in ZUI. It will not keep update with the * Bootsrap version in the future. * http://zui.sexy * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ + function($) { 'use strict'; // POPOVER PUBLIC CLASS DEFINITION // =============================== var Popover = function(element, options) { this.init('popover', element, options) } if(!$.fn.tooltip) throw new Error('Popover requires tooltip.js') Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { placement: 'right', trigger: 'click', content: '', template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' }) // NOTE: POPOVER EXTENDS tooltip.js // ================================ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) Popover.prototype.constructor = Popover Popover.prototype.getDefaults = function() { return Popover.DEFAULTS } Popover.prototype.setContent = function() { var $tip = this.tip() var target = this.getTarget() if(target) { if(target.find('.arrow').length < 1) $tip.addClass('no-arrow') $tip.html(target.html()) return } var title = this.getTitle() var content = this.getContent() $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) $tip.removeClass('fade top bottom left right in') if(this.options.tipId) $tip.attr('id', this.options.tipId) if(this.options.tipClass) $tip.addClass(this.options.tipClass) // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do // this manually by checking the contents. if(!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() } Popover.prototype.hasContent = function() { return this.getTarget() || this.getTitle() || this.getContent() } Popover.prototype.getContent = function() { var $e = this.$element var o = this.options return $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) } Popover.prototype.getTarget = function() { var $e = this.$element var o = this.options var target = $e.attr('data-target') || (typeof o.target == 'function' ? o.target.call($e[0]) : o.target) return(target && true) ? (target == '$next' ? $e.next('.popover') : $(target)) : false } Popover.prototype.arrow = function() { return this.$arrow = this.$arrow || this.tip().find('.arrow') } Popover.prototype.tip = function() { if(!this.$tip) this.$tip = $(this.options.template) return this.$tip } // POPOVER PLUGIN DEFINITION // ========================= var old = $.fn.popover $.fn.popover = function(option) { return this.each(function() { var $this = $(this) var data = $this.data('zui.popover') var options = typeof option == 'object' && option if(!data) $this.data('zui.popover', (data = new Popover(this, options))) if(typeof option == 'string') data[option]() }) } $.fn.popover.Constructor = Popover // POPOVER NO CONFLICT // =================== $.fn.popover.noConflict = function() { $.fn.popover = old return this } }(window.jQuery);