Blame view

frontend/web/css/node_modules/bootstrap/js/button.js 3.58 KB
3da83322   Administrator   21.03.16 Versrka
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  /* ========================================================================

   * Bootstrap: button.js v3.3.5

   * http://getbootstrap.com/javascript/#buttons

   * ========================================================================

   * Copyright 2011-2015 Twitter, Inc.

   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

   * ======================================================================== */

  

  

  +function ($) {

    'use strict';

  

    // BUTTON PUBLIC CLASS DEFINITION

    // ==============================

  

    var Button = function (element, options) {

      this.$element  = $(element)

      this.options   = $.extend({}, Button.DEFAULTS, options)

      this.isLoading = false

    }

  

    Button.VERSION  = '3.3.5'

  

    Button.DEFAULTS = {

      loadingText: 'loading...'

    }

  

    Button.prototype.setState = function (state) {

      var d    = 'disabled'

      var $el  = this.$element

      var val  = $el.is('input') ? 'val' : 'html'

      var data = $el.data()

  

      state += 'Text'

  

      if (data.resetText == null) $el.data('resetText', $el[val]())

  

      // push to event loop to allow forms to submit

      setTimeout($.proxy(function () {

        $el[val](data[state] == null ? this.options[state] : data[state])

  

        if (state == 'loadingText') {

          this.isLoading = true

          $el.addClass(d).attr(d, d)

        } else if (this.isLoading) {

          this.isLoading = false

          $el.removeClass(d).removeAttr(d)

        }

      }, this), 0)

    }

  

    Button.prototype.toggle = function () {

      var changed = true

      var $parent = this.$element.closest('[data-toggle="buttons"]')

  

      if ($parent.length) {

        var $input = this.$element.find('input')

        if ($input.prop('type') == 'radio') {

          if ($input.prop('checked')) changed = false

          $parent.find('.active').removeClass('active')

          this.$element.addClass('active')

        } else if ($input.prop('type') == 'checkbox') {

          if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false

          this.$element.toggleClass('active')

        }

        $input.prop('checked', this.$element.hasClass('active'))

        if (changed) $input.trigger('change')

      } else {

        this.$element.attr('aria-pressed', !this.$element.hasClass('active'))

        this.$element.toggleClass('active')

      }

    }

  

  

    // BUTTON PLUGIN DEFINITION

    // ========================

  

    function Plugin(option) {

      return this.each(function () {

        var $this   = $(this)

        var data    = $this.data('bs.button')

        var options = typeof option == 'object' && option

  

        if (!data) $this.data('bs.button', (data = new Button(this, options)))

  

        if (option == 'toggle') data.toggle()

        else if (option) data.setState(option)

      })

    }

  

    var old = $.fn.button

  

    $.fn.button             = Plugin

    $.fn.button.Constructor = Button

  

  

    // BUTTON NO CONFLICT

    // ==================

  

    $.fn.button.noConflict = function () {

      $.fn.button = old

      return this

    }

  

  

    // BUTTON DATA-API

    // ===============

  

    $(document)

      .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {

        var $btn = $(e.target)

        if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')

        Plugin.call($btn, 'toggle')

        if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()

      })

      .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {

        $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))

      })

  

  }(jQuery);