bootstrap.js 97.5 KB
Newer Older
3001
          var attachment = this._getAttachment(placement);
Mark Otto's avatar
Mark Otto committed
3002

3003
          $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
Mark Otto's avatar
Mark Otto committed
3004

3005
          $(this.element).trigger(this.constructor.Event.INSERTED);
Mark Otto's avatar
Mark Otto committed
3006

3007
          this._tether = new Tether({
Mark Otto's avatar
Mark Otto committed
3008
            attachment: attachment,
3009
3010
3011
3012
3013
            element: tip,
            target: this.element,
            classes: TetherClass,
            classPrefix: CLASS_PREFIX,
            offset: this.config.offset,
3014
3015
            constraints: this.config.constraints,
            addTargetClasses: false
3016
          });
Mark Otto's avatar
Mark Otto committed
3017

3018
3019
          Util.reflow(tip);
          this._tether.position();
Mark Otto's avatar
Mark Otto committed
3020

3021
          $(tip).addClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
3022

3023
3024
3025
          var complete = function complete() {
            var prevHoverState = _this16._hoverState;
            _this16._hoverState = null;
Mark Otto's avatar
Mark Otto committed
3026

3027
            $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
Mark Otto's avatar
Mark Otto committed
3028

3029
3030
3031
3032
            if (prevHoverState === HoverState.OUT) {
              _this16._leave(null, _this16);
            }
          };
XhmikosR's avatar
XhmikosR committed
3033

Mark Otto's avatar
Mark Otto committed
3034
3035
3036
3037
3038
3039
          if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
            $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
            return;
          }

          complete();
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
        }
      }
    }, {
      key: 'hide',
      value: function hide(callback) {
        var _this17 = this;

        var tip = this.getTipElement();
        var hideEvent = $.Event(this.constructor.Event.HIDE);
        var complete = function complete() {
          if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
            tip.parentNode.removeChild(tip);
          }
Mark Otto's avatar
Mark Otto committed
3053

3054
3055
3056
          _this17.element.removeAttribute('aria-describedby');
          $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
          _this17.cleanupTether();
XhmikosR's avatar
XhmikosR committed
3057

3058
3059
3060
3061
          if (callback) {
            callback();
          }
        };
XhmikosR's avatar
XhmikosR committed
3062

3063
        $(this.element).trigger(hideEvent);
XhmikosR's avatar
XhmikosR committed
3064

3065
3066
3067
        if (hideEvent.isDefaultPrevented()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3068

3069
        $(tip).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3070

3071
        if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
Mark Otto's avatar
Mark Otto committed
3072

3073
3074
3075
3076
          $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          complete();
        }
Mark Otto's avatar
Mark Otto committed
3077

3078
3079
        this._hoverState = '';
      }
Mark Otto's avatar
Mark Otto committed
3080

3081
      // protected
Mark Otto's avatar
Mark Otto committed
3082

Jacob Thornton's avatar
Jacob Thornton committed
3083
3084
    }, {
      key: 'isWithContent',
3085
      value: function isWithContent() {
Mark Otto's avatar
Mark Otto committed
3086
        return Boolean(this.getTitle());
3087
3088
3089
3090
3091
3092
3093
3094
3095
      }
    }, {
      key: 'getTipElement',
      value: function getTipElement() {
        return this.tip = this.tip || $(this.config.template)[0];
      }
    }, {
      key: 'setContent',
      value: function setContent() {
XhmikosR's avatar
XhmikosR committed
3096
        var $tip = $(this.getTipElement());
Mark Otto's avatar
Mark Otto committed
3097

XhmikosR's avatar
XhmikosR committed
3098
        this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
Mark Otto's avatar
Mark Otto committed
3099

XhmikosR's avatar
XhmikosR committed
3100
        $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
3101

3102
3103
        this.cleanupTether();
      }
XhmikosR's avatar
XhmikosR committed
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
    }, {
      key: 'setElementContent',
      value: function setElementContent($element, content) {
        var html = this.config.html;
        if (typeof content === 'object' && (content.nodeType || content.jquery)) {
          // content is a DOM node or a jQuery
          if (html) {
            if (!$(content).parent().is($element)) {
              $element.empty().append(content);
            }
          } else {
            $element.text($(content).text());
          }
        } else {
          $element[html ? 'html' : 'text'](content);
        }
      }
3121
3122
3123
3124
    }, {
      key: 'getTitle',
      value: function getTitle() {
        var title = this.element.getAttribute('data-original-title');
XhmikosR's avatar
XhmikosR committed
3125

3126
3127
3128
        if (!title) {
          title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
        }
Mark Otto's avatar
Mark Otto committed
3129

3130
3131
3132
3133
3134
3135
3136
3137
3138
        return title;
      }
    }, {
      key: 'cleanupTether',
      value: function cleanupTether() {
        if (this._tether) {
          this._tether.destroy();
        }
      }
XhmikosR's avatar
XhmikosR committed
3139

3140
      // private
XhmikosR's avatar
XhmikosR committed
3141

Jacob Thornton's avatar
Jacob Thornton committed
3142
3143
    }, {
      key: '_getAttachment',
3144
3145
3146
3147
3148
3149
3150
      value: function _getAttachment(placement) {
        return AttachmentMap[placement.toUpperCase()];
      }
    }, {
      key: '_setListeners',
      value: function _setListeners() {
        var _this18 = this;
XhmikosR's avatar
XhmikosR committed
3151

3152
        var triggers = this.config.trigger.split(' ');
XhmikosR's avatar
XhmikosR committed
3153

3154
3155
3156
3157
        triggers.forEach(function (trigger) {
          if (trigger === 'click') {
            $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
          } else if (trigger !== Trigger.MANUAL) {
Mark Otto's avatar
Mark Otto committed
3158
3159
            var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
            var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
XhmikosR's avatar
XhmikosR committed
3160

3161
3162
3163
            $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
          }
        });
XhmikosR's avatar
XhmikosR committed
3164

3165
3166
3167
3168
3169
3170
3171
3172
        if (this.config.selector) {
          this.config = $.extend({}, this.config, {
            trigger: 'manual',
            selector: ''
          });
        } else {
          this._fixTitle();
        }
Mark Otto's avatar
Mark Otto committed
3173
      }
3174
3175
3176
3177
3178
3179
3180
3181
    }, {
      key: '_fixTitle',
      value: function _fixTitle() {
        var titleType = typeof this.element.getAttribute('data-original-title');
        if (this.element.getAttribute('title') || titleType !== 'string') {
          this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
          this.element.setAttribute('title', '');
        }
Mark Otto's avatar
Mark Otto committed
3182
      }
3183
3184
3185
3186
    }, {
      key: '_enter',
      value: function _enter(event, context) {
        var dataKey = this.constructor.DATA_KEY;
XhmikosR's avatar
XhmikosR committed
3187

3188
        context = context || $(event.currentTarget).data(dataKey);
XhmikosR's avatar
XhmikosR committed
3189

3190
3191
3192
3193
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3194

3195
        if (event) {
Mark Otto's avatar
Mark Otto committed
3196
          context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3197
        }
XhmikosR's avatar
XhmikosR committed
3198

3199
3200
3201
3202
        if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
          context._hoverState = HoverState.IN;
          return;
        }
XhmikosR's avatar
XhmikosR committed
3203

3204
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3205

3206
        context._hoverState = HoverState.IN;
XhmikosR's avatar
XhmikosR committed
3207

3208
3209
3210
3211
        if (!context.config.delay || !context.config.delay.show) {
          context.show();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3212

3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
        context._timeout = setTimeout(function () {
          if (context._hoverState === HoverState.IN) {
            context.show();
          }
        }, context.config.delay.show);
      }
    }, {
      key: '_leave',
      value: function _leave(event, context) {
        var dataKey = this.constructor.DATA_KEY;
XhmikosR's avatar
XhmikosR committed
3223

3224
        context = context || $(event.currentTarget).data(dataKey);
XhmikosR's avatar
XhmikosR committed
3225

3226
3227
3228
3229
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3230

3231
        if (event) {
Mark Otto's avatar
Mark Otto committed
3232
          context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
3233
        }
XhmikosR's avatar
XhmikosR committed
3234

3235
3236
3237
        if (context._isWithActiveTrigger()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3238

3239
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3240

3241
        context._hoverState = HoverState.OUT;
XhmikosR's avatar
XhmikosR committed
3242

3243
3244
3245
3246
        if (!context.config.delay || !context.config.delay.hide) {
          context.hide();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3247

3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
        context._timeout = setTimeout(function () {
          if (context._hoverState === HoverState.OUT) {
            context.hide();
          }
        }, context.config.delay.hide);
      }
    }, {
      key: '_isWithActiveTrigger',
      value: function _isWithActiveTrigger() {
        for (var trigger in this._activeTrigger) {
          if (this._activeTrigger[trigger]) {
            return true;
          }
        }
XhmikosR's avatar
XhmikosR committed
3262

3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
        return false;
      }
    }, {
      key: '_getConfig',
      value: function _getConfig(config) {
        config = $.extend({}, this.constructor.Default, $(this.element).data(), config);

        if (config.delay && typeof config.delay === 'number') {
          config.delay = {
            show: config.delay,
            hide: config.delay
          };
        }
XhmikosR's avatar
XhmikosR committed
3276

3277
        Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
XhmikosR's avatar
XhmikosR committed
3278

3279
3280
3281
3282
3283
3284
3285
3286
3287
        return config;
      }
    }, {
      key: '_getDelegateConfig',
      value: function _getDelegateConfig() {
        var config = {};

        if (this.config) {
          for (var key in this.config) {
Mark Otto's avatar
Mark Otto committed
3288
3289
            if (this.constructor.Default[key] !== this.config[key]) {
              config[key] = this.config[key];
3290
3291
3292
            }
          }
        }
3293

3294
3295
        return config;
      }
Mark Otto's avatar
grunt    
Mark Otto committed
3296
3297
3298

      // static

Jacob Thornton's avatar
Jacob Thornton committed
3299
3300
    }], [{
      key: '_jQueryInterface',
Mark Otto's avatar
grunt    
Mark Otto committed
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = typeof config === 'object' ? config : null;

          if (!data && /destroy|hide/.test(config)) {
            return;
          }

          if (!data) {
            data = new Tooltip(this, _config);
            $(this).data(DATA_KEY, data);
          }

          if (typeof config === 'string') {
XhmikosR's avatar
XhmikosR committed
3316
3317
3318
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
Mark Otto's avatar
grunt    
Mark Otto committed
3319
3320
3321
3322
3323
            data[config]();
          }
        });
      }
    }, {
3324
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
3325
      get: function get() {
3326
3327
3328
3329
        return VERSION;
      }
    }, {
      key: 'Default',
Jacob Thornton's avatar
Jacob Thornton committed
3330
      get: function get() {
3331
3332
3333
3334
        return Default;
      }
    }, {
      key: 'NAME',
Jacob Thornton's avatar
Jacob Thornton committed
3335
      get: function get() {
3336
3337
3338
3339
        return NAME;
      }
    }, {
      key: 'DATA_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3340
      get: function get() {
3341
3342
3343
3344
        return DATA_KEY;
      }
    }, {
      key: 'Event',
Jacob Thornton's avatar
Jacob Thornton committed
3345
      get: function get() {
3346
3347
3348
3349
        return Event;
      }
    }, {
      key: 'EVENT_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3350
      get: function get() {
3351
3352
3353
3354
        return EVENT_KEY;
      }
    }, {
      key: 'DefaultType',
Jacob Thornton's avatar
Jacob Thornton committed
3355
      get: function get() {
3356
3357
3358
        return DefaultType;
      }
    }]);
XhmikosR's avatar
XhmikosR committed
3359

3360
3361
    return Tooltip;
  })();
XhmikosR's avatar
XhmikosR committed
3362

3363
3364
3365
3366
3367
3368
  $.fn[NAME] = Tooltip._jQueryInterface;
  $.fn[NAME].Constructor = Tooltip;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Tooltip._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
3369

3370
3371
  return Tooltip;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3372

Mark Otto's avatar
Mark Otto committed
3373
/**
3374
 * --------------------------------------------------------------------------
3375
 * Bootstrap (v4.0.0-alpha.2): popover.js
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Popover = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'popover';
XhmikosR's avatar
XhmikosR committed
3389
  var VERSION = '4.0.0-alpha.2';
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
  var DATA_KEY = 'bs.popover';
  var EVENT_KEY = '.' + DATA_KEY;
  var JQUERY_NO_CONFLICT = $.fn[NAME];

  var Default = $.extend({}, Tooltip.Default, {
    placement: 'right',
    trigger: 'click',
    content: '',
    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
  });

  var DefaultType = $.extend({}, Tooltip.DefaultType, {
XhmikosR's avatar
XhmikosR committed
3402
    content: '(string|element|function)'
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
  });

  var ClassName = {
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    TITLE: '.popover-title',
    CONTENT: '.popover-content',
    ARROW: '.popover-arrow'
  };

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    INSERTED: 'inserted' + EVENT_KEY,
    CLICK: 'click' + EVENT_KEY,
    FOCUSIN: 'focusin' + EVENT_KEY,
    FOCUSOUT: 'focusout' + EVENT_KEY,
    MOUSEENTER: 'mouseenter' + EVENT_KEY,
    MOUSELEAVE: 'mouseleave' + EVENT_KEY
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Popover = (function (_Tooltip) {
Jacob Thornton's avatar
Jacob Thornton committed
3436
3437
    _inherits(Popover, _Tooltip);

3438
3439
3440
    function Popover() {
      _classCallCheck(this, Popover);

Jacob Thornton's avatar
Jacob Thornton committed
3441
      _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments);
Mark Otto's avatar
Mark Otto committed
3442
    }
XhmikosR's avatar
XhmikosR committed
3443

Jacob Thornton's avatar
Jacob Thornton committed
3444
3445
3446
3447
3448
    /**
     * ------------------------------------------------------------------------
     * jQuery
     * ------------------------------------------------------------------------
     */
XhmikosR's avatar
XhmikosR committed
3449

3450
3451
    _createClass(Popover, [{
      key: 'isWithContent',
XhmikosR's avatar
XhmikosR committed
3452

3453
      // overrides
XhmikosR's avatar
XhmikosR committed
3454

3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
      value: function isWithContent() {
        return this.getTitle() || this._getContent();
      }
    }, {
      key: 'getTipElement',
      value: function getTipElement() {
        return this.tip = this.tip || $(this.config.template)[0];
      }
    }, {
      key: 'setContent',
      value: function setContent() {
XhmikosR's avatar
XhmikosR committed
3466
        var $tip = $(this.getTipElement());
XhmikosR's avatar
XhmikosR committed
3467

3468
        // we use append for html objects to maintain js events
XhmikosR's avatar
XhmikosR committed
3469
3470
        this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
        this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
XhmikosR's avatar
XhmikosR committed
3471

XhmikosR's avatar
XhmikosR committed
3472
        $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3473

3474
        this.cleanupTether();
Mark Otto's avatar
Mark Otto committed
3475
      }
XhmikosR's avatar
XhmikosR committed
3476

3477
      // private
XhmikosR's avatar
XhmikosR committed
3478

Jacob Thornton's avatar
Jacob Thornton committed
3479
3480
    }, {
      key: '_getContent',
3481
      value: function _getContent() {
Mark Otto's avatar
Mark Otto committed
3482
        return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
3483
      }
Mark Otto's avatar
grunt    
Mark Otto committed
3484
3485
3486

      // static

Jacob Thornton's avatar
Jacob Thornton committed
3487
3488
    }], [{
      key: '_jQueryInterface',
Mark Otto's avatar
grunt    
Mark Otto committed
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = typeof config === 'object' ? config : null;

          if (!data && /destroy|hide/.test(config)) {
            return;
          }

          if (!data) {
            data = new Popover(this, _config);
            $(this).data(DATA_KEY, data);
          }

          if (typeof config === 'string') {
XhmikosR's avatar
XhmikosR committed
3504
3505
3506
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
Mark Otto's avatar
grunt    
Mark Otto committed
3507
3508
3509
3510
3511
            data[config]();
          }
        });
      }
    }, {
3512
      key: 'VERSION',
XhmikosR's avatar
XhmikosR committed
3513

3514
      // getters
XhmikosR's avatar
XhmikosR committed
3515

Jacob Thornton's avatar
Jacob Thornton committed
3516
      get: function get() {
3517
3518
3519
3520
        return VERSION;
      }
    }, {
      key: 'Default',
Jacob Thornton's avatar
Jacob Thornton committed
3521
      get: function get() {
3522
3523
3524
3525
        return Default;
      }
    }, {
      key: 'NAME',
Jacob Thornton's avatar
Jacob Thornton committed
3526
      get: function get() {
3527
3528
3529
3530
        return NAME;
      }
    }, {
      key: 'DATA_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3531
      get: function get() {
3532
3533
3534
3535
        return DATA_KEY;
      }
    }, {
      key: 'Event',
Jacob Thornton's avatar
Jacob Thornton committed
3536
      get: function get() {
3537
3538
3539
3540
        return Event;
      }
    }, {
      key: 'EVENT_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3541
      get: function get() {
3542
3543
3544
3545
        return EVENT_KEY;
      }
    }, {
      key: 'DefaultType',
Jacob Thornton's avatar
Jacob Thornton committed
3546
      get: function get() {
3547
3548
3549
        return DefaultType;
      }
    }]);
XhmikosR's avatar
XhmikosR committed
3550

3551
3552
    return Popover;
  })(Tooltip);
XhmikosR's avatar
XhmikosR committed
3553

3554
3555
3556
3557
3558
3559
  $.fn[NAME] = Popover._jQueryInterface;
  $.fn[NAME].Constructor = Popover;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Popover._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
3560

3561
3562
  return Popover;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3563

3564
}(jQuery);
For faster browsing, not all history is shown. View entire blame