bootstrap.js 97.2 KB
Newer Older
3001
          this._tether = new Tether({
Mark Otto's avatar
Mark Otto committed
3002
            attachment: attachment,
3003
3004
3005
3006
3007
            element: tip,
            target: this.element,
            classes: TetherClass,
            classPrefix: CLASS_PREFIX,
            offset: this.config.offset,
3008
3009
            constraints: this.config.constraints,
            addTargetClasses: false
3010
          });
Mark Otto's avatar
Mark Otto committed
3011

3012
3013
          Util.reflow(tip);
          this._tether.position();
Mark Otto's avatar
Mark Otto committed
3014

3015
          $(tip).addClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
3016

3017
3018
3019
          var complete = function complete() {
            var prevHoverState = _this16._hoverState;
            _this16._hoverState = null;
Mark Otto's avatar
Mark Otto committed
3020

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

3023
3024
3025
3026
            if (prevHoverState === HoverState.OUT) {
              _this16._leave(null, _this16);
            }
          };
XhmikosR's avatar
XhmikosR committed
3027

Mark Otto's avatar
Mark Otto committed
3028
3029
3030
3031
3032
3033
          if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
            $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
            return;
          }

          complete();
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
        }
      }
    }, {
      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
3047

3048
3049
3050
          _this17.element.removeAttribute('aria-describedby');
          $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
          _this17.cleanupTether();
XhmikosR's avatar
XhmikosR committed
3051

3052
3053
3054
3055
          if (callback) {
            callback();
          }
        };
XhmikosR's avatar
XhmikosR committed
3056

3057
        $(this.element).trigger(hideEvent);
XhmikosR's avatar
XhmikosR committed
3058

3059
3060
3061
        if (hideEvent.isDefaultPrevented()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3062

3063
        $(tip).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3064

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

3067
3068
3069
3070
          $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          complete();
        }
Mark Otto's avatar
Mark Otto committed
3071

3072
3073
        this._hoverState = '';
      }
Mark Otto's avatar
Mark Otto committed
3074

3075
      // protected
Mark Otto's avatar
Mark Otto committed
3076

Jacob Thornton's avatar
Jacob Thornton committed
3077
3078
    }, {
      key: 'isWithContent',
3079
      value: function isWithContent() {
Mark Otto's avatar
Mark Otto committed
3080
        return Boolean(this.getTitle());
3081
3082
3083
3084
3085
3086
3087
3088
3089
      }
    }, {
      key: 'getTipElement',
      value: function getTipElement() {
        return this.tip = this.tip || $(this.config.template)[0];
      }
    }, {
      key: 'setContent',
      value: function setContent() {
XhmikosR's avatar
XhmikosR committed
3090
        var $tip = $(this.getTipElement());
Mark Otto's avatar
Mark Otto committed
3091

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

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

3096
3097
        this.cleanupTether();
      }
XhmikosR's avatar
XhmikosR committed
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
    }, {
      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);
        }
      }
3115
3116
3117
3118
    }, {
      key: 'getTitle',
      value: function getTitle() {
        var title = this.element.getAttribute('data-original-title');
XhmikosR's avatar
XhmikosR committed
3119

3120
3121
3122
        if (!title) {
          title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
        }
Mark Otto's avatar
Mark Otto committed
3123

3124
3125
3126
3127
3128
3129
3130
3131
3132
        return title;
      }
    }, {
      key: 'cleanupTether',
      value: function cleanupTether() {
        if (this._tether) {
          this._tether.destroy();
        }
      }
XhmikosR's avatar
XhmikosR committed
3133

3134
      // private
XhmikosR's avatar
XhmikosR committed
3135

Jacob Thornton's avatar
Jacob Thornton committed
3136
3137
    }, {
      key: '_getAttachment',
3138
3139
3140
3141
3142
3143
3144
      value: function _getAttachment(placement) {
        return AttachmentMap[placement.toUpperCase()];
      }
    }, {
      key: '_setListeners',
      value: function _setListeners() {
        var _this18 = this;
XhmikosR's avatar
XhmikosR committed
3145

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

3148
3149
3150
3151
        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
3152
3153
            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
3154

3155
3156
3157
            $(_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
3158

3159
3160
3161
3162
3163
3164
3165
3166
        if (this.config.selector) {
          this.config = $.extend({}, this.config, {
            trigger: 'manual',
            selector: ''
          });
        } else {
          this._fixTitle();
        }
Mark Otto's avatar
Mark Otto committed
3167
      }
3168
3169
3170
3171
3172
3173
3174
3175
    }, {
      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
3176
      }
3177
3178
3179
3180
    }, {
      key: '_enter',
      value: function _enter(event, context) {
        var dataKey = this.constructor.DATA_KEY;
XhmikosR's avatar
XhmikosR committed
3181

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

3184
3185
3186
3187
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3188

3189
        if (event) {
Mark Otto's avatar
Mark Otto committed
3190
          context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3191
        }
XhmikosR's avatar
XhmikosR committed
3192

3193
3194
3195
3196
        if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
          context._hoverState = HoverState.IN;
          return;
        }
XhmikosR's avatar
XhmikosR committed
3197

3198
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3199

3200
        context._hoverState = HoverState.IN;
XhmikosR's avatar
XhmikosR committed
3201

3202
3203
3204
3205
        if (!context.config.delay || !context.config.delay.show) {
          context.show();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3206

3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
        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
3217

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

3220
3221
3222
3223
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3224

3225
        if (event) {
Mark Otto's avatar
Mark Otto committed
3226
          context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
3227
        }
XhmikosR's avatar
XhmikosR committed
3228

3229
3230
3231
        if (context._isWithActiveTrigger()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3232

3233
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3234

3235
        context._hoverState = HoverState.OUT;
XhmikosR's avatar
XhmikosR committed
3236

3237
3238
3239
3240
        if (!context.config.delay || !context.config.delay.hide) {
          context.hide();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3241

3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
        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
3256

3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
        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
3270

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

3273
3274
3275
3276
3277
3278
3279
3280
3281
        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
3282
3283
            if (this.constructor.Default[key] !== this.config[key]) {
              config[key] = this.config[key];
3284
3285
3286
            }
          }
        }
3287

3288
3289
        return config;
      }
Mark Otto's avatar
grunt    
Mark Otto committed
3290
3291
3292

      // static

Jacob Thornton's avatar
Jacob Thornton committed
3293
3294
    }], [{
      key: '_jQueryInterface',
Mark Otto's avatar
grunt    
Mark Otto committed
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
      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
3310
3311
3312
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
Mark Otto's avatar
grunt    
Mark Otto committed
3313
3314
3315
3316
3317
            data[config]();
          }
        });
      }
    }, {
3318
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
3319
      get: function get() {
3320
3321
3322
3323
        return VERSION;
      }
    }, {
      key: 'Default',
Jacob Thornton's avatar
Jacob Thornton committed
3324
      get: function get() {
3325
3326
3327
3328
        return Default;
      }
    }, {
      key: 'NAME',
Jacob Thornton's avatar
Jacob Thornton committed
3329
      get: function get() {
3330
3331
3332
3333
        return NAME;
      }
    }, {
      key: 'DATA_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3334
      get: function get() {
3335
3336
3337
3338
        return DATA_KEY;
      }
    }, {
      key: 'Event',
Jacob Thornton's avatar
Jacob Thornton committed
3339
      get: function get() {
3340
3341
3342
3343
        return Event;
      }
    }, {
      key: 'EVENT_KEY',
Jacob Thornton's avatar
Jacob Thornton committed
3344
      get: function get() {
3345
3346
3347
3348
        return EVENT_KEY;
      }
    }, {
      key: 'DefaultType',
Jacob Thornton's avatar
Jacob Thornton committed
3349
      get: function get() {
3350
3351
3352
        return DefaultType;
      }
    }]);
XhmikosR's avatar
XhmikosR committed
3353

3354
3355
    return Tooltip;
  })();
XhmikosR's avatar
XhmikosR committed
3356

3357
3358
3359
3360
3361
3362
  $.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
3363

3364
3365
  return Tooltip;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3366

Mark Otto's avatar
Mark Otto committed
3367
/**
3368
 * --------------------------------------------------------------------------
3369
 * Bootstrap (v4.0.0-alpha.2): popover.js
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Popover = (function ($) {

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

  var NAME = 'popover';
XhmikosR's avatar
XhmikosR committed
3383
  var VERSION = '4.0.0-alpha.2';
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
  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
3396
    content: '(string|element|function)'
3397
3398
3399
3400
3401
3402
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
  });

  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
3430
3431
    _inherits(Popover, _Tooltip);

3432
3433
3434
    function Popover() {
      _classCallCheck(this, Popover);

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

Jacob Thornton's avatar
Jacob Thornton committed
3438
3439
3440
3441
3442
    /**
     * ------------------------------------------------------------------------
     * jQuery
     * ------------------------------------------------------------------------
     */
XhmikosR's avatar
XhmikosR committed
3443

3444
3445
    _createClass(Popover, [{
      key: 'isWithContent',
XhmikosR's avatar
XhmikosR committed
3446

3447
      // overrides
XhmikosR's avatar
XhmikosR committed
3448

3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
      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
3460
        var $tip = $(this.getTipElement());
XhmikosR's avatar
XhmikosR committed
3461

3462
        // we use append for html objects to maintain js events
XhmikosR's avatar
XhmikosR committed
3463
3464
        this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
        this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
XhmikosR's avatar
XhmikosR committed
3465

XhmikosR's avatar
XhmikosR committed
3466
        $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3467

3468
        this.cleanupTether();
Mark Otto's avatar
Mark Otto committed
3469
      }
XhmikosR's avatar
XhmikosR committed
3470

3471
      // private
XhmikosR's avatar
XhmikosR committed
3472

Jacob Thornton's avatar
Jacob Thornton committed
3473
3474
    }, {
      key: '_getContent',
3475
      value: function _getContent() {
Mark Otto's avatar
Mark Otto committed
3476
        return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
3477
      }
Mark Otto's avatar
grunt    
Mark Otto committed
3478
3479
3480

      // static

Jacob Thornton's avatar
Jacob Thornton committed
3481
3482
    }], [{
      key: '_jQueryInterface',
Mark Otto's avatar
grunt    
Mark Otto committed
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
      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
3498
3499
3500
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
Mark Otto's avatar
grunt    
Mark Otto committed
3501
3502
3503
3504
3505
            data[config]();
          }
        });
      }
    }, {
3506
      key: 'VERSION',
XhmikosR's avatar
XhmikosR committed
3507

3508
      // getters
XhmikosR's avatar
XhmikosR committed
3509

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

3545
3546
    return Popover;
  })(Tooltip);
XhmikosR's avatar
XhmikosR committed
3547

3548
3549
3550
3551
3552
3553
  $.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
3554

3555
3556
  return Popover;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3557

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