Passed
Branch develop (893f38)
by Hans Erik
07:18
created

build/media/libraries/redcore/media/redcore/lib/bootstrap/js/bootstrap.js   F

Complexity

Total Complexity 433
Complexity/F 2.26

Size

Lines of Code 2315
Function Count 192

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 433
c 0
b 0
f 0
dl 0
loc 2315
rs 2.4
cc 0
nc 0
mnd 4
bc 244
fnc 192
bpm 1.2708
cpm 2.2552
noi 108

129 Functions

Rating   Name   Duplication   Size   Complexity  
A $.fn.popover.noConflict 0 4 1
A Tooltip.disable 0 3 1
C Dropdown.toggle 0 50 12
A $.extend.getContent 0 10 2
A $.fn.carousel.noConflict 0 4 1
A $.fn.button.noConflict 0 4 1
B bootstrap.js ➔ $ 0 30 1
A Modal.hideWithTransition 0 12 1
A $.fn.scrollspy.noConflict 0 4 1
A $.fn.tab.noConflict 0 4 1
A $.fn.tooltip 0 9 1
A Tooltip.destroy 0 3 1
A $(ꞌ[data-slide], [data-slide-to]ꞌ).click.carousel.data-api 0 14 2
C Tooltip.show 0 53 11
A $.fn.affix.noConflict 0 4 1
A $(window).load 0 6 1
A bootstrap.js ➔ ScrollSpy 0 13 2
C Dropdown.keydown 0 40 13
A $.fn.button 0 10 1
A bootstrap.js ➔ getParent 0 15 4
A Collapse.toggle 0 3 2
A $.fn.alert 0 8 1
A Tooltip.fixTitle 0 6 3
A $.fn.affix 0 9 1
A Typeahead.process 0 15 3
A Tooltip.setContent 0 7 2
B ScrollSpy.activate 0 24 2
A Typeahead.next 0 10 2
A Tooltip.enable 0 3 1
A Tooltip.toggle 0 4 3
A Collapse.dimension 0 4 2
A Tooltip.enter 0 19 3
B Alert.close 0 32 6
A ScrollSpy.process 0 21 3
A Typeahead.prev 0 10 2
A Tooltip.validate 0 7 2
A Typeahead.focus 0 3 1
A Typeahead.select 0 7 1
A Modal.toggle 0 3 2
A Typeahead.show 0 16 1
C Typeahead.keyup 0 27 12
A Modal.removeBackdrop 0 4 1
A Typeahead.hide 0 5 1
A Collapse.hide 0 14 3
A Collapse.transition 0 20 4
A Typeahead.listen 0 16 2
B Tab.activate 0 34 2
A Typeahead.mouseleave 0 4 3
A $.fn.dropdown.noConflict 0 4 1
A $.fn.collapse 0 9 1
A bootstrap.js ➔ Button 0 4 1
A Typeahead.blur 0 4 3
A Typeahead.click 0 6 1
A $(ꞌ[data-toggle^=button]ꞌ).click.button.data-api 0 5 2
A Tooltip.tip 0 3 1
B Modal.show 0 37 3
A Tooltip.getTitle 0 10 2
A bootstrap.js ➔ Dropdown 0 12 1
A Carousel.next 0 4 2
A Carousel.prev 0 4 2
A $.extend.hasContent 0 3 1
A $.fn.modal.noConflict 0 4 1
C Collapse.show 0 23 7
A Modal.enforceFocus 0 8 1
C Carousel.slide 0 56 10
A Typeahead.updater 0 3 1
A $.fn.carousel 0 12 1
B Tab.show 0 35 4
A Tooltip.hasContent 0 3 1
A $.fn.modal 0 10 1
A bootstrap.js ➔ Collapse 0 10 2
A Typeahead.render 0 13 1
C Modal.backdrop 0 37 13
A Tooltip.getPosition 0 7 2
A $(ꞌ[data-provide="typeahead"]ꞌ).focus.typeahead.data-api 0 5 2
A $.extend.destroy 0 3 1
A $.extend.tip 0 6 2
A Modal.escape 0 10 4
A bootstrap.js ➔ Tab 0 3 1
A $.fn.popover 0 9 1
A bootstrap.js ➔ clearMenus 0 9 1
A Typeahead.highlighter 0 6 1
A bootstrap.js ➔ Modal 0 6 1
A Typeahead.eventSupported 0 8 2
A Modal.hideModal 0 8 1
A Typeahead.keypress 0 4 2
A $.fn.dropdown 0 8 1
A bootstrap.js ➔ Tooltip 0 3 1
A Tooltip.replaceArrow 0 5 2
C Tooltip.applyPlacement 0 40 7
A $(ꞌ[data-toggle="tab"], [data-toggle="pill"]ꞌ).click.tab.data-api 0 4 1
A ScrollSpy.refresh 0 23 1
B Typeahead.lookup 0 13 6
A $.fn.collapse.noConflict 0 4 1
A Button.toggle 0 9 1
A Carousel.pause 0 10 4
A Typeahead.matcher 0 3 1
A Carousel.getActiveIndex 0 5 1
A bootstrap.js ➔ Typeahead 0 12 1
A Tooltip.getOptions 0 12 3
A Typeahead.mouseenter 0 5 1
A $(ꞌ[data-toggle="modal"]ꞌ).click.modal.data-api 0 14 2
A bootstrap.js ➔ Affix 0 8 1
A $.fn.typeahead 0 9 1
A Carousel.cycle 0 8 3
A Typeahead.keydown 0 4 1
A bootstrap.js ➔ Popover 0 3 1
F Affix.checkPosition 0 28 14
A $.fn.alert.noConflict 0 4 1
A $.fn.tooltip.noConflict 0 4 1
A Button.setState 0 18 2
C Typeahead.move 0 23 7
A bootstrap.js ➔ Carousel 0 8 1
B Tooltip.hide 0 36 4
A bootstrap.js ➔ Alert 0 3 1
A $.fn.scrollspy 0 9 1
A $(ꞌ[data-toggle=collapse]ꞌ).click.collapse.data-api 0 9 3
A Collapse.reset 0 12 2
B Carousel.to 0 18 6
A Tooltip.toggleEnabled 0 3 1
A $(ꞌ.dropdown formꞌ).click.dropdown.data-api 0 1 1
A Tooltip.arrow 0 3 1
A Tooltip.leave 0 11 4
A $.fn.typeahead.noConflict 0 4 1
A $.extend.setContent 0 10 3
A Typeahead.sorter 0 14 4
A $.fn.tab 0 8 1
C Tooltip.init 0 30 7
B Modal.hide 0 25 5

How to fix   Complexity   

Complexity

Complex classes like build/media/libraries/redcore/media/redcore/lib/bootstrap/js/bootstrap.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
/* ===================================================
2
 * bootstrap-transition.js v2.3.2
3
 * http://twitter.github.com/bootstrap/javascript.html#transitions
4
 * ===================================================
5
 * Copyright 2012 Twitter, Inc.
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 * http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 * ========================================================== */
19
20
 /**
21
  * Custom version for Joomla!
22
  */
23
24
!function ($) {
25
26
  "use strict"; // jshint ;_;
27
28
29
  /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
30
   * ======================================================= */
31
32
  $(function () {
33
34
    $.support.transition = (function () {
35
36
      var transitionEnd = (function () {
37
38
        var el = document.createElement('bootstrap')
39
          , transEndEventNames = {
40
               'WebkitTransition' : 'webkitTransitionEnd'
41
            ,  'MozTransition'    : 'transitionend'
42
            ,  'OTransition'      : 'oTransitionEnd otransitionend'
43
            ,  'transition'       : 'transitionend'
44
            }
45
          , name
46
47
        for (name in transEndEventNames){
48
          if (el.style[name] !== undefined) {
49
            return transEndEventNames[name]
50
          }
51
        }
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
52
53
      }())
54
55
      return transitionEnd && {
56
        end: transitionEnd
57
      }
58
59
    })()
60
61
  })
62
63
}(window.jQuery);/* ==========================================================
64
 * bootstrap-alert.js v2.3.2
65
 * http://twitter.github.com/bootstrap/javascript.html#alerts
66
 * ==========================================================
67
 * Copyright 2012 Twitter, Inc.
68
 *
69
 * Licensed under the Apache License, Version 2.0 (the "License");
70
 * you may not use this file except in compliance with the License.
71
 * You may obtain a copy of the License at
72
 *
73
 * http://www.apache.org/licenses/LICENSE-2.0
74
 *
75
 * Unless required by applicable law or agreed to in writing, software
76
 * distributed under the License is distributed on an "AS IS" BASIS,
77
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
78
 * See the License for the specific language governing permissions and
79
 * limitations under the License.
80
 * ========================================================== */
81
82
83
!function ($) {
84
85
  "use strict"; // jshint ;_;
86
87
88
 /* ALERT CLASS DEFINITION
89
  * ====================== */
90
91
  var dismiss = '[data-dismiss="alert"]'
92
    , Alert = function (el) {
93
        $(el).on('click', dismiss, this.close)
94
      }
95
96
  Alert.prototype.close = function (e) {
97
    var $this = $(this)
98
      , selector = $this.attr('data-target')
99
      , $parent
100
101
    if (!selector) {
102
      selector = $this.attr('href')
103
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
104
    }
105
106
    $parent = $(selector)
107
108
    e && e.preventDefault()
109
110
    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
111
112
    $parent.trigger(e = $.Event('close'))
113
114
    if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
115
116
    $parent.removeClass('in')
117
118
    function removeElement() {
119
      $parent
120
        .trigger('closed')
121
        .remove()
122
    }
123
124
    $.support.transition && $parent.hasClass('fade') ?
125
      $parent.on($.support.transition.end, removeElement) :
126
      removeElement()
127
  }
128
129
130
 /* ALERT PLUGIN DEFINITION
131
  * ======================= */
132
133
  var old = $.fn.alert
134
135
  $.fn.alert = function (option) {
136
    return this.each(function () {
137
      var $this = $(this)
138
        , data = $this.data('alert')
139
      if (!data) $this.data('alert', (data = new Alert(this)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
140
      if (typeof option == 'string') data[option].call($this)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
141
    })
142
  }
143
144
  $.fn.alert.Constructor = Alert
145
146
147
 /* ALERT NO CONFLICT
148
  * ================= */
149
150
  $.fn.alert.noConflict = function () {
151
    $.fn.alert = old
152
    return this
153
  }
154
155
156
 /* ALERT DATA-API
157
  * ============== */
158
159
  $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
160
161
}(window.jQuery);/* ============================================================
162
 * bootstrap-button.js v2.3.2
163
 * http://twitter.github.com/bootstrap/javascript.html#buttons
164
 * ============================================================
165
 * Copyright 2012 Twitter, Inc.
166
 *
167
 * Licensed under the Apache License, Version 2.0 (the "License");
168
 * you may not use this file except in compliance with the License.
169
 * You may obtain a copy of the License at
170
 *
171
 * http://www.apache.org/licenses/LICENSE-2.0
172
 *
173
 * Unless required by applicable law or agreed to in writing, software
174
 * distributed under the License is distributed on an "AS IS" BASIS,
175
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
176
 * See the License for the specific language governing permissions and
177
 * limitations under the License.
178
 * ============================================================ */
179
180
181
!function ($) {
182
183
  "use strict"; // jshint ;_;
184
185
186
 /* BUTTON PUBLIC CLASS DEFINITION
187
  * ============================== */
188
189
  var Button = function (element, options) {
190
    this.$element = $(element)
191
    this.options = $.extend({}, $.fn.button.defaults, options)
192
  }
193
194
  Button.prototype.setState = function (state) {
195
    var d = 'disabled'
196
      , $el = this.$element
197
      , data = $el.data()
198
      , val = $el.is('input') ? 'val' : 'html'
199
200
    state = state + 'Text'
201
    data.resetText || $el.data('resetText', $el[val]())
202
203
    $el[val](data[state] || this.options[state])
204
205
    // push to event loop to allow forms to submit
206
    setTimeout(function () {
207
      state == 'loadingText' ?
208
        $el.addClass(d).attr(d, d) :
209
        $el.removeClass(d).removeAttr(d)
210
    }, 0)
211
  }
212
213
  Button.prototype.toggle = function () {
214
    var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
215
216
    $parent && $parent
217
      .find('.active')
218
      .removeClass('active')
219
220
    this.$element.toggleClass('active')
221
  }
222
223
224
 /* BUTTON PLUGIN DEFINITION
225
  * ======================== */
226
227
  var old = $.fn.button
228
229
  $.fn.button = function (option) {
230
    return this.each(function () {
231
      var $this = $(this)
232
        , data = $this.data('button')
233
        , options = typeof option == 'object' && option
234
      if (!data) $this.data('button', (data = new Button(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
235
      if (option == 'toggle') data.toggle()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
236
      else if (option) data.setState(option)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
237
    })
238
  }
239
240
  $.fn.button.defaults = {
241
    loadingText: 'loading...'
242
  }
243
244
  $.fn.button.Constructor = Button
245
246
247
 /* BUTTON NO CONFLICT
248
  * ================== */
249
250
  $.fn.button.noConflict = function () {
251
    $.fn.button = old
252
    return this
253
  }
254
255
256
 /* BUTTON DATA-API
257
  * =============== */
258
259
  $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
260
    var $btn = $(e.target)
261
    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
262
    $btn.button('toggle')
263
  })
264
265
}(window.jQuery);/* ==========================================================
266
 * bootstrap-carousel.js v2.3.2
267
 * http://twitter.github.com/bootstrap/javascript.html#carousel
268
 * ==========================================================
269
 * Copyright 2012 Twitter, Inc.
270
 *
271
 * Licensed under the Apache License, Version 2.0 (the "License");
272
 * you may not use this file except in compliance with the License.
273
 * You may obtain a copy of the License at
274
 *
275
 * http://www.apache.org/licenses/LICENSE-2.0
276
 *
277
 * Unless required by applicable law or agreed to in writing, software
278
 * distributed under the License is distributed on an "AS IS" BASIS,
279
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
280
 * See the License for the specific language governing permissions and
281
 * limitations under the License.
282
 * ========================================================== */
283
284
285
!function ($) {
286
287
  "use strict"; // jshint ;_;
288
289
290
 /* CAROUSEL CLASS DEFINITION
291
  * ========================= */
292
293
  var Carousel = function (element, options) {
294
    this.$element = $(element)
295
    this.$indicators = this.$element.find('.carousel-indicators')
296
    this.options = options
297
    this.options.pause == 'hover' && this.$element
298
      .on('mouseenter', $.proxy(this.pause, this))
299
      .on('mouseleave', $.proxy(this.cycle, this))
300
  }
301
302
  Carousel.prototype = {
303
304
    cycle: function (e) {
305
      if (!e) this.paused = false
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
306
      if (this.interval) clearInterval(this.interval);
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
307
      this.options.interval
308
        && !this.paused
309
        && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
310
      return this
311
    }
312
313
  , getActiveIndex: function () {
314
      this.$active = this.$element.find('.item.active')
315
      this.$items = this.$active.parent().children()
316
      return this.$items.index(this.$active)
317
    }
318
319
  , to: function (pos) {
320
      var activeIndex = this.getActiveIndex()
321
        , that = this
322
323
      if (pos > (this.$items.length - 1) || pos < 0) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
324
325
      if (this.sliding) {
326
        return this.$element.one('slid', function () {
327
          that.to(pos)
328
        })
329
      }
330
331
      if (activeIndex == pos) {
332
        return this.pause().cycle()
333
      }
334
335
      return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
336
    }
337
338
  , pause: function (e) {
339
      if (!e) this.paused = true
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
340
      if (this.$element.find('.next, .prev').length && $.support.transition.end) {
341
        this.$element.trigger($.support.transition.end)
342
        this.cycle(true)
343
      }
344
      clearInterval(this.interval)
345
      this.interval = null
346
      return this
347
    }
348
349
  , next: function () {
350
      if (this.sliding) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
351
      return this.slide('next')
352
    }
353
354
  , prev: function () {
355
      if (this.sliding) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
356
      return this.slide('prev')
357
    }
358
359
  , slide: function (type, next) {
360
      var $active = this.$element.find('.item.active')
361
        , $next = next || $active[type]()
362
        , isCycling = this.interval
363
        , direction = type == 'next' ? 'left' : 'right'
364
        , fallback  = type == 'next' ? 'first' : 'last'
365
        , that = this
366
        , e
367
368
      this.sliding = true
369
370
      isCycling && this.pause()
371
372
      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
373
374
      e = $.Event('slide', {
375
        relatedTarget: $next[0]
376
      , direction: direction
377
      })
378
379
      if ($next.hasClass('active')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
380
381
      if (this.$indicators.length) {
382
        this.$indicators.find('.active').removeClass('active')
383
        this.$element.one('slid', function () {
384
          var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
385
          $nextIndicator && $nextIndicator.addClass('active')
386
        })
387
      }
388
389
      if ($.support.transition && this.$element.hasClass('slide')) {
390
        this.$element.trigger(e)
391
        if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
392
        $next.addClass(type)
393
        $next[0].offsetWidth // force reflow
0 ignored issues
show
introduced by
The result of the property access to $next.0.offsetWidth is not used.
Loading history...
394
        $active.addClass(direction)
395
        $next.addClass(direction)
396
        this.$element.one($.support.transition.end, function () {
397
          $next.removeClass([type, direction].join(' ')).addClass('active')
398
          $active.removeClass(['active', direction].join(' '))
399
          that.sliding = false
400
          setTimeout(function () { that.$element.trigger('slid') }, 0)
401
        })
402
      } else {
403
        this.$element.trigger(e)
404
        if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
405
        $active.removeClass('active')
406
        $next.addClass('active')
407
        this.sliding = false
408
        this.$element.trigger('slid')
409
      }
410
411
      isCycling && this.cycle()
412
413
      return this
414
    }
415
416
  }
417
418
419
 /* CAROUSEL PLUGIN DEFINITION
420
  * ========================== */
421
422
  var old = $.fn.carousel
423
424
  $.fn.carousel = function (option) {
425
    return this.each(function () {
426
      var $this = $(this)
427
        , data = $this.data('carousel')
428
        , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
429
        , action = typeof option == 'string' ? option : options.slide
430
      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
431
      if (typeof option == 'number') data.to(option)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
432
      else if (action) data[action]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
433
      else if (options.interval) data.pause().cycle()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
434
    })
435
  }
436
437
  $.fn.carousel.defaults = {
438
    interval: 5000
439
  , pause: 'hover'
440
  }
441
442
  $.fn.carousel.Constructor = Carousel
443
444
445
 /* CAROUSEL NO CONFLICT
446
  * ==================== */
447
448
  $.fn.carousel.noConflict = function () {
449
    $.fn.carousel = old
450
    return this
451
  }
452
453
 /* CAROUSEL DATA-API
454
  * ================= */
455
456
  $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
457
    var $this = $(this), href
458
      , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
459
      , options = $.extend({}, $target.data(), $this.data())
460
      , slideIndex
461
462
    $target.carousel(options)
463
464
    if (slideIndex = $this.attr('data-slide-to')) {
465
      $target.data('carousel').pause().to(slideIndex).cycle()
466
    }
467
468
    e.preventDefault()
469
  })
470
471
}(window.jQuery);/* =============================================================
472
 * bootstrap-collapse.js v2.3.2
473
 * http://twitter.github.com/bootstrap/javascript.html#collapse
474
 * =============================================================
475
 * Copyright 2012 Twitter, Inc.
476
 *
477
 * Licensed under the Apache License, Version 2.0 (the "License");
478
 * you may not use this file except in compliance with the License.
479
 * You may obtain a copy of the License at
480
 *
481
 * http://www.apache.org/licenses/LICENSE-2.0
482
 *
483
 * Unless required by applicable law or agreed to in writing, software
484
 * distributed under the License is distributed on an "AS IS" BASIS,
485
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
486
 * See the License for the specific language governing permissions and
487
 * limitations under the License.
488
 * ============================================================ */
489
490
491
!function ($) {
492
493
  "use strict"; // jshint ;_;
494
495
496
 /* COLLAPSE PUBLIC CLASS DEFINITION
497
  * ================================ */
498
499
  var Collapse = function (element, options) {
500
    this.$element = $(element)
501
    this.options = $.extend({}, $.fn.collapse.defaults, options)
502
503
    if (this.options.parent) {
504
      this.$parent = $(this.options.parent)
505
    }
506
507
    this.options.toggle && this.toggle()
508
  }
509
510
  Collapse.prototype = {
511
512
    constructor: Collapse
513
514
  , dimension: function () {
515
      var hasWidth = this.$element.hasClass('width')
516
      return hasWidth ? 'width' : 'height'
517
    }
518
519
  , show: function () {
520
      var dimension
521
        , scroll
522
        , actives
523
        , hasData
524
525
      if (this.transitioning || this.$element.hasClass('in')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
526
527
      dimension = this.dimension()
528
      scroll = $.camelCase(['scroll', dimension].join('-'))
529
      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
530
531
      if (actives && actives.length) {
532
        hasData = actives.data('collapse')
533
        if (hasData && hasData.transitioning) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
534
        actives.collapse('hide')
535
        hasData || actives.data('collapse', null)
536
      }
537
538
      this.$element[dimension](0)
539
      this.transition('addClass', $.Event('show'), 'shown')
540
      $.support.transition && this.$element[dimension](this.$element[0][scroll])
541
    }
542
543
  , hide: function () {
544
      var dimension
545
      if (this.transitioning || !this.$element.hasClass('in')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
546
      dimension = this.dimension()
547
      this.reset(this.$element[dimension]())
548
	  // JOOMLA JUI >>>
549
	  /* ORIGINAL:
550
      this.transition('removeClass', $.Event('hide'), 'hidden')
551
      */
552
      this.transition('removeClass', $.Event('hideme'), 'hidden')
553
      // < Joomla JUI
554
555
      this.$element[dimension](0)
556
    }
557
558
  , reset: function (size) {
559
      var dimension = this.dimension()
560
561
      this.$element
0 ignored issues
show
introduced by
The result of the property access to this.$element.removeClas...| "auto").0.offsetWidth is not used.
Loading history...
562
        .removeClass('collapse')
563
        [dimension](size || 'auto')
564
        [0].offsetWidth
565
566
      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
567
568
      return this
569
    }
570
571
  , transition: function (method, startEvent, completeEvent) {
572
      var that = this
573
        , complete = function () {
574
            if (startEvent.type == 'show') that.reset()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
575
            that.transitioning = 0
576
            that.$element.trigger(completeEvent)
577
          }
578
579
      this.$element.trigger(startEvent)
580
581
      if (startEvent.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
582
583
      this.transitioning = 1
584
585
      this.$element[method]('in')
586
587
      $.support.transition && this.$element.hasClass('collapse') ?
588
        this.$element.one($.support.transition.end, complete) :
589
        complete()
590
    }
591
592
  , toggle: function () {
593
      this[this.$element.hasClass('in') ? 'hide' : 'show']()
594
    }
595
596
  }
597
598
599
 /* COLLAPSE PLUGIN DEFINITION
600
  * ========================== */
601
602
  var old = $.fn.collapse
603
604
  $.fn.collapse = function (option) {
605
    return this.each(function () {
606
      var $this = $(this)
607
        , data = $this.data('collapse')
608
        , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
609
      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
610
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
611
    })
612
  }
613
614
  $.fn.collapse.defaults = {
615
    toggle: true
616
  }
617
618
  $.fn.collapse.Constructor = Collapse
619
620
621
 /* COLLAPSE NO CONFLICT
622
  * ==================== */
623
624
  $.fn.collapse.noConflict = function () {
625
    $.fn.collapse = old
626
    return this
627
  }
628
629
630
 /* COLLAPSE DATA-API
631
  * ================= */
632
633
  $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
634
    var $this = $(this), href
635
      , target = $this.attr('data-target')
636
        || e.preventDefault()
637
        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
638
      , option = $(target).data('collapse') ? 'toggle' : $this.data()
639
    $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
640
    $(target).collapse(option)
641
  })
642
643
}(window.jQuery);
644
/* ============================================================
645
 * bootstrap-dropdown.js v2.3.2
646
 * http://twitter.github.com/bootstrap/javascript.html#dropdowns
647
 * ============================================================
648
 * Copyright 2012 Twitter, Inc.
649
 *
650
 * Licensed under the Apache License, Version 2.0 (the "License");
651
 * you may not use this file except in compliance with the License.
652
 * You may obtain a copy of the License at
653
 *
654
 * http://www.apache.org/licenses/LICENSE-2.0
655
 *
656
 * Unless required by applicable law or agreed to in writing, software
657
 * distributed under the License is distributed on an "AS IS" BASIS,
658
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
659
 * See the License for the specific language governing permissions and
660
 * limitations under the License.
661
 * ============================================================ */
662
663
664
!function ($) {
665
666
  "use strict"; // jshint ;_;
667
668
669
 /* DROPDOWN CLASS DEFINITION
670
  * ========================= */
671
672
  var toggle = '[data-toggle=dropdown]'
673
    , Dropdown = function (element) {
674
        var $el = $(element).on('click.dropdown.data-api', this.toggle)
675
        // JOOMLA JUI >>>
676
          .on('mouseover.dropdown.data-api', this.toggle)
677
        // < Joomla JUI
678
        $('html').on('click.dropdown.data-api', function () {
679
          // JOOMLA JUI >>>
680
          $el.parent().parent().removeClass('nav-hover')
681
          // < Joomla JUI
682
          $el.parent().removeClass('open')
683
        })
684
      }
685
686
  Dropdown.prototype = {
687
688
    constructor: Dropdown
689
690
  , toggle: function (e) {
691
      // JOOMLA JUI >>>
692
      /* ORIGINAL
693
      var $this = $(this)
694
        , $parent
695
        , isActive
696
      */
697
      var $this = $(this)
698
        , $parent
699
        , isActive
700
        , url
701
        , isHover
702
      // < Joomla JUI
703
704
      if ($this.is('.disabled, :disabled')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
705
706
      $parent = getParent($this)
707
708
      isActive = $parent.hasClass('open')
709
      // JOOMLA JUI >>>
710
      isHover = $parent.parent().hasClass('nav-hover')
711
      if(!isHover && e.type == 'mouseover') return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
712
      // < Joomla JUI
713
714
      url = $this.attr('href')
715
      if (e.type == 'click' && (url) && (url !== '#')) {
716
         window.location = url
717
         return
718
      }
719
720
      clearMenus()
721
722
      // JOOMLA JUI >>>
723
      if ((!isActive && e.type != 'mouseover') || (isHover && e.type == 'mouseover')) {
724
        if ('ontouchstart' in document.documentElement) {
725
          // if mobile we we use a backdrop because click events don't delegate
726
          $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
727
          $this.on('hover', function () {
728
            $('.dropdown-backdrop').remove()
729
          });
730
        }
731
        $parent.parent().toggleClass('nav-hover');
732
        $parent.toggleClass('open')
733
      }
734
      // < Joomla JUI
735
736
      $this.focus()
737
738
      return false
739
    }
740
741
  , keydown: function (e) {
742
      var $this
743
        , $items
744
        , $active
0 ignored issues
show
Unused Code introduced by
The variable $active seems to be never used. Consider removing it.
Loading history...
745
        , $parent
746
        , isActive
747
        , index
748
749
      if (!/(38|40|27)/.test(e.keyCode)) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
750
751
      $this = $(this)
752
753
      e.preventDefault()
754
      e.stopPropagation()
755
756
      if ($this.is('.disabled, :disabled')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
757
758
      $parent = getParent($this)
759
760
      isActive = $parent.hasClass('open')
761
762
      if (!isActive || (isActive && e.keyCode == 27)) {
763
        if (e.which == 27) $parent.find(toggle).focus()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
764
        return $this.click()
765
      }
766
767
      $items = $('[role=menu] li:not(.divider):visible a', $parent)
768
769
      if (!$items.length) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
770
771
      index = $items.index($items.filter(':focus'))
772
773
      if (e.keyCode == 38 && index > 0) index--                                        // up
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
774
      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
775
      if (!~index) index = 0
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
776
777
      $items
778
        .eq(index)
779
        .focus()
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
780
    }
781
782
  }
783
784
  function clearMenus() {
785
    // JOOMLA JUI >>>
786
    $(toggle).parent().parent().removeClass('nav-hover')
787
    // < Joomla JUI
788
    $('.dropdown-backdrop').remove()
789
    $(toggle).each(function () {
790
      getParent($(this)).removeClass('open')
791
    })
792
  }
793
794
  function getParent($this) {
795
    var selector = $this.attr('data-target')
796
      , $parent
797
798
    if (!selector) {
799
      selector = $this.attr('href')
800
      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
801
    }
802
803
    $parent = selector && $(selector)
804
805
    if (!$parent || !$parent.length) $parent = $this.parent()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
806
807
    return $parent
808
  }
809
810
811
  /* DROPDOWN PLUGIN DEFINITION
812
   * ========================== */
813
814
  var old = $.fn.dropdown
815
816
  $.fn.dropdown = function (option) {
817
    return this.each(function () {
818
      var $this = $(this)
819
        , data = $this.data('dropdown')
820
      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
821
      if (typeof option == 'string') data[option].call($this)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
822
    })
823
  }
824
825
  $.fn.dropdown.Constructor = Dropdown
826
827
828
 /* DROPDOWN NO CONFLICT
829
  * ==================== */
830
831
  $.fn.dropdown.noConflict = function () {
832
    $.fn.dropdown = old
833
    return this
834
  }
835
836
837
  /* APPLY TO STANDARD DROPDOWN ELEMENTS
838
   * =================================== */
839
840
  $(document)
841
    .on('click.dropdown.data-api', clearMenus)
842
    .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
843
    .on('click.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
844
    .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
845
    // JOOMLA JUI >>>
846
    .on('mouseover.dropdown.data-api', toggle, Dropdown.prototype.toggle)
847
    // < Joomla JUI
848
}(window.jQuery);
849
/* =========================================================
850
 * bootstrap-modal.js v2.3.2
851
 * http://twitter.github.com/bootstrap/javascript.html#modals
852
 * =========================================================
853
 * Copyright 2012 Twitter, Inc.
854
 *
855
 * Licensed under the Apache License, Version 2.0 (the "License");
856
 * you may not use this file except in compliance with the License.
857
 * You may obtain a copy of the License at
858
 *
859
 * http://www.apache.org/licenses/LICENSE-2.0
860
 *
861
 * Unless required by applicable law or agreed to in writing, software
862
 * distributed under the License is distributed on an "AS IS" BASIS,
863
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
864
 * See the License for the specific language governing permissions and
865
 * limitations under the License.
866
 * ========================================================= */
867
868
869
!function ($) {
870
871
  "use strict"; // jshint ;_;
872
873
874
 /* MODAL CLASS DEFINITION
875
  * ====================== */
876
877
  var Modal = function (element, options) {
878
    this.options = options
879
    this.$element = $(element)
880
      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
881
    this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
882
  }
883
884
  Modal.prototype = {
885
886
      constructor: Modal
887
888
    , toggle: function () {
889
        return this[!this.isShown ? 'show' : 'hide']()
890
      }
891
892
    , show: function () {
893
        var that = this
894
          , e = $.Event('show')
895
896
        this.$element.trigger(e)
897
898
        if (this.isShown || e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
899
900
        this.isShown = true
901
902
        this.escape()
903
904
        this.backdrop(function () {
905
          var transition = $.support.transition && that.$element.hasClass('fade')
906
907
          if (!that.$element.parent().length) {
908
            that.$element.appendTo(document.body) //don't move modals dom position
909
          }
910
911
          that.$element.show()
912
913
          if (transition) {
914
            that.$element[0].offsetWidth // force reflow
0 ignored issues
show
introduced by
The result of the property access to that.$element.0.offsetWidth is not used.
Loading history...
915
          }
916
917
          that.$element
918
            .addClass('in')
919
            .attr('aria-hidden', false)
920
921
          that.enforceFocus()
922
923
          transition ?
924
            that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
925
            that.$element.focus().trigger('shown')
926
927
        })
928
      }
929
930
    , hide: function (e) {
931
        e && e.preventDefault()
932
933
        var that = this
0 ignored issues
show
Unused Code introduced by
The variable that seems to be never used. Consider removing it.
Loading history...
934
935
        e = $.Event('hide')
936
937
        this.$element.trigger(e)
938
939
        if (!this.isShown || e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
940
941
        this.isShown = false
942
943
        this.escape()
944
945
        $(document).off('focusin.modal')
946
947
        this.$element
948
          .removeClass('in')
949
          .attr('aria-hidden', true)
950
951
        $.support.transition && this.$element.hasClass('fade') ?
952
          this.hideWithTransition() :
953
          this.hideModal()
954
      }
955
956
    , enforceFocus: function () {
957
        var that = this
958
        $(document).on('focusin.modal', function (e) {
959
          if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
960
            that.$element.focus()
961
          }
962
        })
963
      }
964
965
    , escape: function () {
966
        var that = this
967
        if (this.isShown && this.options.keyboard) {
968
          this.$element.on('keyup.dismiss.modal', function ( e ) {
969
            e.which == 27 && that.hide()
970
          })
971
        } else if (!this.isShown) {
972
          this.$element.off('keyup.dismiss.modal')
973
        }
974
      }
975
976
    , hideWithTransition: function () {
977
        var that = this
978
          , timeout = setTimeout(function () {
979
              that.$element.off($.support.transition.end)
980
              that.hideModal()
981
            }, 500)
982
983
        this.$element.one($.support.transition.end, function () {
984
          clearTimeout(timeout)
985
          that.hideModal()
986
        })
987
      }
988
989
    , hideModal: function () {
990
        var that = this
991
        this.$element.hide()
992
        this.backdrop(function () {
993
          that.removeBackdrop()
994
          that.$element.trigger('hidden')
995
        })
996
      }
997
998
    , removeBackdrop: function () {
999
        this.$backdrop && this.$backdrop.remove()
1000
        this.$backdrop = null
1001
      }
1002
1003
    , backdrop: function (callback) {
1004
        var that = this
0 ignored issues
show
Unused Code introduced by
The variable that seems to be never used. Consider removing it.
Loading history...
1005
          , animate = this.$element.hasClass('fade') ? 'fade' : ''
1006
1007
        if (this.isShown && this.options.backdrop) {
1008
          var doAnimate = $.support.transition && animate
1009
1010
          this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
1011
            .appendTo(document.body)
1012
1013
          this.$backdrop.click(
1014
            this.options.backdrop == 'static' ?
1015
              $.proxy(this.$element[0].focus, this.$element[0])
1016
            : $.proxy(this.hide, this)
1017
          )
1018
1019
          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1020
1021
          this.$backdrop.addClass('in')
1022
1023
          if (!callback) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1024
1025
          doAnimate ?
1026
            this.$backdrop.one($.support.transition.end, callback) :
1027
            callback()
1028
1029
        } else if (!this.isShown && this.$backdrop) {
1030
          this.$backdrop.removeClass('in')
1031
1032
          $.support.transition && this.$element.hasClass('fade')?
1033
            this.$backdrop.one($.support.transition.end, callback) :
1034
            callback()
1035
1036
        } else if (callback) {
1037
          callback()
1038
        }
1039
      }
1040
  }
1041
1042
1043
 /* MODAL PLUGIN DEFINITION
1044
  * ======================= */
1045
1046
  var old = $.fn.modal
1047
1048
  $.fn.modal = function (option) {
1049
    return this.each(function () {
1050
      var $this = $(this)
1051
        , data = $this.data('modal')
1052
        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
1053
      if (!data) $this.data('modal', (data = new Modal(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1054
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1055
      else if (options.show) data.show()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1056
    })
1057
  }
1058
1059
  $.fn.modal.defaults = {
1060
      backdrop: true
1061
    , keyboard: true
1062
    , show: true
1063
  }
1064
1065
  $.fn.modal.Constructor = Modal
1066
1067
1068
 /* MODAL NO CONFLICT
1069
  * ================= */
1070
1071
  $.fn.modal.noConflict = function () {
1072
    $.fn.modal = old
1073
    return this
1074
  }
1075
1076
1077
 /* MODAL DATA-API
1078
  * ============== */
1079
1080
  $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1081
    var $this = $(this)
1082
      , href = $this.attr('href')
1083
      , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1084
      , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1085
1086
    e.preventDefault()
1087
1088
    $target
1089
      .modal(option)
1090
      .one('hide', function () {
1091
        $this.focus()
1092
      })
1093
  })
1094
1095
}(window.jQuery);
1096
/* ===========================================================
1097
 * bootstrap-tooltip.js v2.3.2
1098
 * http://twitter.github.com/bootstrap/javascript.html#tooltips
1099
 * Inspired by the original jQuery.tipsy by Jason Frame
1100
 * ===========================================================
1101
 * Copyright 2012 Twitter, Inc.
1102
 *
1103
 * Licensed under the Apache License, Version 2.0 (the "License");
1104
 * you may not use this file except in compliance with the License.
1105
 * You may obtain a copy of the License at
1106
 *
1107
 * http://www.apache.org/licenses/LICENSE-2.0
1108
 *
1109
 * Unless required by applicable law or agreed to in writing, software
1110
 * distributed under the License is distributed on an "AS IS" BASIS,
1111
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1112
 * See the License for the specific language governing permissions and
1113
 * limitations under the License.
1114
 * ========================================================== */
1115
1116
1117
!function ($) {
1118
1119
  "use strict"; // jshint ;_;
1120
1121
1122
 /* TOOLTIP PUBLIC CLASS DEFINITION
1123
  * =============================== */
1124
1125
  var Tooltip = function (element, options) {
1126
    this.init('tooltip', element, options)
1127
  }
1128
1129
  Tooltip.prototype = {
1130
1131
    constructor: Tooltip
1132
1133
  , init: function (type, element, options) {
1134
      var eventIn
1135
        , eventOut
1136
        , triggers
1137
        , trigger
1138
        , i
1139
1140
      this.type = type
1141
      this.$element = $(element)
1142
      this.options = this.getOptions(options)
1143
      this.enabled = true
1144
1145
      triggers = this.options.trigger.split(' ')
1146
1147
      for (i = triggers.length; i--;) {
1148
        trigger = triggers[i]
1149
        if (trigger == 'click') {
1150
          this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1151
        } else if (trigger != 'manual') {
1152
          eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1153
          eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1154
          this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1155
          this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1156
        }
1157
      }
1158
1159
      this.options.selector ?
1160
        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1161
        this.fixTitle()
1162
    }
1163
1164
  , getOptions: function (options) {
1165
      options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1166
1167
      if (options.delay && typeof options.delay == 'number') {
1168
        options.delay = {
1169
          show: options.delay
1170
        , hide: options.delay
1171
        }
1172
      }
1173
1174
      return options
1175
    }
1176
1177
  , enter: function (e) {
1178
      var defaults = $.fn[this.type].defaults
1179
        , options = {}
1180
        , self
1181
1182
      this._options && $.each(this._options, function (key, value) {
1183
        if (defaults[key] != value) options[key] = value
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1184
      }, this)
1185
1186
      self = $(e.currentTarget)[this.type](options).data(this.type)
1187
1188
      if (!self.options.delay || !self.options.delay.show) return self.show()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1189
1190
      clearTimeout(this.timeout)
1191
      self.hoverState = 'in'
1192
      this.timeout = setTimeout(function() {
1193
        if (self.hoverState == 'in') self.show()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1194
      }, self.options.delay.show)
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
1195
    }
1196
1197
  , leave: function (e) {
1198
      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1199
1200
      if (this.timeout) clearTimeout(this.timeout)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1201
      if (!self.options.delay || !self.options.delay.hide) return self.hide()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1202
1203
      self.hoverState = 'out'
1204
      this.timeout = setTimeout(function() {
1205
        if (self.hoverState == 'out') self.hide()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1206
      }, self.options.delay.hide)
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
1207
    }
1208
1209
  , show: function () {
1210
      var $tip
1211
        , pos
1212
        , actualWidth
1213
        , actualHeight
1214
        , placement
1215
        , tp
1216
        , e = $.Event('show')
1217
1218
      if (this.hasContent() && this.enabled) {
1219
        this.$element.trigger(e)
1220
        if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1221
        $tip = this.tip()
1222
        this.setContent()
1223
1224
        if (this.options.animation) {
1225
          $tip.addClass('fade')
1226
        }
1227
1228
        placement = typeof this.options.placement == 'function' ?
1229
          this.options.placement.call(this, $tip[0], this.$element[0]) :
1230
          this.options.placement
1231
1232
        $tip
1233
          .detach()
1234
          .css({ top: 0, left: 0, display: 'block' })
1235
1236
        this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1237
1238
        pos = this.getPosition()
1239
1240
        actualWidth = $tip[0].offsetWidth
1241
        actualHeight = $tip[0].offsetHeight
1242
1243
        switch (placement) {
0 ignored issues
show
Coding Style introduced by
As per coding-style, switch statements should have a default case.
Loading history...
1244
          case 'bottom':
1245
            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1246
            break
1247
          case 'top':
1248
            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1249
            break
1250
          case 'left':
1251
            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1252
            break
1253
          case 'right':
1254
            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1255
            break
1256
        }
1257
1258
        this.applyPlacement(tp, placement)
0 ignored issues
show
Bug introduced by
The variable tp seems to not be initialized for all possible execution paths. Are you sure applyPlacement handles undefined variables?
Loading history...
1259
        this.$element.trigger('shown')
1260
      }
1261
    }
1262
1263
  , applyPlacement: function(offset, placement){
1264
      var $tip = this.tip()
1265
        , width = $tip[0].offsetWidth
1266
        , height = $tip[0].offsetHeight
1267
        , actualWidth
1268
        , actualHeight
1269
        , delta
1270
        , replace
1271
1272
      $tip
1273
        .offset(offset)
1274
        .addClass(placement)
1275
        .addClass('in')
1276
1277
      actualWidth = $tip[0].offsetWidth
1278
      actualHeight = $tip[0].offsetHeight
1279
1280
      if (placement == 'top' && actualHeight != height) {
1281
        offset.top = offset.top + height - actualHeight
1282
        replace = true
1283
      }
1284
1285
      if (placement == 'bottom' || placement == 'top') {
1286
        delta = 0
1287
1288
        if (offset.left < 0){
1289
          delta = offset.left * -2
1290
          offset.left = 0
1291
          $tip.offset(offset)
1292
          actualWidth = $tip[0].offsetWidth
1293
          actualHeight = $tip[0].offsetHeight
0 ignored issues
show
Unused Code introduced by
The assignment to variable actualHeight seems to be never used. Consider removing it.
Loading history...
1294
        }
1295
1296
        this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1297
      } else {
1298
        this.replaceArrow(actualHeight - height, actualHeight, 'top')
1299
      }
1300
1301
      if (replace) $tip.offset(offset)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1302
    }
1303
1304
  , replaceArrow: function(delta, dimension, position){
1305
      this
1306
        .arrow()
1307
        .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1308
    }
1309
1310
  , setContent: function () {
1311
      var $tip = this.tip()
1312
        , title = this.getTitle()
1313
1314
      $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1315
      $tip.removeClass('fade in top bottom left right')
1316
    }
1317
1318
  , hide: function () {
1319
	  // JOOMLA JUI >>>
1320
	  /* ORIGINAL:
1321
      var that = this
1322
        , $tip = this.tip()
1323
        , e = $.Event('hide')
1324
      */
1325
      var that = this
0 ignored issues
show
Unused Code introduced by
The variable that seems to be never used. Consider removing it.
Loading history...
1326
        , $tip = this.tip()
1327
        , e = $.Event('hideme')
1328
      // < Joomla JUI
1329
1330
      this.$element.trigger(e)
1331
      if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1332
1333
      $tip.removeClass('in')
1334
1335
      function removeWithAnimation() {
1336
        var timeout = setTimeout(function () {
1337
          $tip.off($.support.transition.end).detach()
1338
        }, 500)
1339
1340
        $tip.one($.support.transition.end, function () {
1341
          clearTimeout(timeout)
1342
          $tip.detach()
1343
        })
1344
      }
1345
1346
      $.support.transition && this.$tip.hasClass('fade') ?
1347
        removeWithAnimation() :
1348
        $tip.detach()
1349
1350
      this.$element.trigger('hidden')
1351
1352
      return this
1353
    }
1354
1355
  , fixTitle: function () {
1356
      var $e = this.$element
1357
      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1358
        $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1359
      }
1360
    }
1361
1362
  , hasContent: function () {
1363
      return this.getTitle()
1364
    }
1365
1366
  , getPosition: function () {
1367
      var el = this.$element[0]
1368
      return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1369
        width: el.offsetWidth
1370
      , height: el.offsetHeight
1371
      }, this.$element.offset())
1372
    }
1373
1374
  , getTitle: function () {
1375
      var title
1376
        , $e = this.$element
1377
        , o = this.options
1378
1379
      title = $e.attr('data-original-title')
1380
        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
1381
1382
      return title
1383
    }
1384
1385
  , tip: function () {
1386
      return this.$tip = this.$tip || $(this.options.template)
1387
    }
1388
1389
  , arrow: function(){
1390
      return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1391
    }
1392
1393
  , validate: function () {
1394
      if (!this.$element[0].parentNode) {
1395
        this.hide()
1396
        this.$element = null
1397
        this.options = null
1398
      }
1399
    }
1400
1401
  , enable: function () {
1402
      this.enabled = true
1403
    }
1404
1405
  , disable: function () {
1406
      this.enabled = false
1407
    }
1408
1409
  , toggleEnabled: function () {
1410
      this.enabled = !this.enabled
1411
    }
1412
1413
  , toggle: function (e) {
1414
      var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1415
      self.tip().hasClass('in') ? self.hide() : self.show()
1416
    }
1417
1418
  , destroy: function () {
1419
      this.hide().$element.off('.' + this.type).removeData(this.type)
1420
    }
1421
1422
  }
1423
1424
1425
 /* TOOLTIP PLUGIN DEFINITION
1426
  * ========================= */
1427
1428
  var old = $.fn.tooltip
1429
1430
  $.fn.tooltip = function ( option ) {
1431
    return this.each(function () {
1432
      var $this = $(this)
1433
        , data = $this.data('tooltip')
1434
        , options = typeof option == 'object' && option
1435
      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1436
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1437
    })
1438
  }
1439
1440
  $.fn.tooltip.Constructor = Tooltip
1441
1442
  $.fn.tooltip.defaults = {
1443
    animation: true
1444
  , placement: 'top'
1445
  , selector: false
1446
  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1447
  , trigger: 'hover focus'
1448
  , title: ''
1449
  , delay: 0
1450
  // JOOMLA JUI >>>
1451
  /* ORIGINAL:
1452
  , html: false
1453
  */
1454
  , html: true
1455
  // < Joomla JUI
1456
  , container: false
1457
  }
1458
1459
1460
 /* TOOLTIP NO CONFLICT
1461
  * =================== */
1462
1463
  $.fn.tooltip.noConflict = function () {
1464
    $.fn.tooltip = old
1465
    return this
1466
  }
1467
1468
}(window.jQuery);
1469
/* ===========================================================
1470
 * bootstrap-popover.js v2.3.2
1471
 * http://twitter.github.com/bootstrap/javascript.html#popovers
1472
 * ===========================================================
1473
 * Copyright 2012 Twitter, Inc.
1474
 *
1475
 * Licensed under the Apache License, Version 2.0 (the "License");
1476
 * you may not use this file except in compliance with the License.
1477
 * You may obtain a copy of the License at
1478
 *
1479
 * http://www.apache.org/licenses/LICENSE-2.0
1480
 *
1481
 * Unless required by applicable law or agreed to in writing, software
1482
 * distributed under the License is distributed on an "AS IS" BASIS,
1483
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1484
 * See the License for the specific language governing permissions and
1485
 * limitations under the License.
1486
 * =========================================================== */
1487
1488
1489
!function ($) {
1490
1491
  "use strict"; // jshint ;_;
1492
1493
1494
 /* POPOVER PUBLIC CLASS DEFINITION
1495
  * =============================== */
1496
1497
  var Popover = function (element, options) {
1498
    this.init('popover', element, options)
1499
  }
1500
1501
1502
  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1503
     ========================================== */
1504
1505
  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1506
1507
    constructor: Popover
1508
1509
  , setContent: function () {
1510
      var $tip = this.tip()
1511
        , title = this.getTitle()
1512
        , content = this.getContent()
1513
1514
      $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1515
      $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1516
1517
      $tip.removeClass('fade top bottom left right in')
1518
    }
1519
1520
  , hasContent: function () {
1521
      return this.getTitle() || this.getContent()
1522
    }
1523
1524
  , getContent: function () {
1525
      var content
1526
        , $e = this.$element
1527
        , o = this.options
1528
1529
      content = (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
1530
        || $e.attr('data-content')
1531
1532
      return content
1533
    }
1534
1535
  , tip: function () {
1536
      if (!this.$tip) {
1537
        this.$tip = $(this.options.template)
1538
      }
1539
      return this.$tip
1540
    }
1541
1542
  , destroy: function () {
1543
      this.hide().$element.off('.' + this.type).removeData(this.type)
1544
    }
1545
1546
  })
1547
1548
1549
 /* POPOVER PLUGIN DEFINITION
1550
  * ======================= */
1551
1552
  var old = $.fn.popover
1553
1554
  $.fn.popover = function (option) {
1555
    return this.each(function () {
1556
      var $this = $(this)
1557
        , data = $this.data('popover')
1558
        , options = typeof option == 'object' && option
1559
      if (!data) $this.data('popover', (data = new Popover(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1560
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1561
    })
1562
  }
1563
1564
  $.fn.popover.Constructor = Popover
1565
1566
  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1567
    placement: 'right'
1568
  , trigger: 'click'
1569
  , content: ''
1570
  , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1571
  })
1572
1573
1574
 /* POPOVER NO CONFLICT
1575
  * =================== */
1576
1577
  $.fn.popover.noConflict = function () {
1578
    $.fn.popover = old
1579
    return this
1580
  }
1581
1582
}(window.jQuery);
1583
/* =============================================================
1584
 * bootstrap-scrollspy.js v2.3.2
1585
 * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1586
 * =============================================================
1587
 * Copyright 2012 Twitter, Inc.
1588
 *
1589
 * Licensed under the Apache License, Version 2.0 (the "License");
1590
 * you may not use this file except in compliance with the License.
1591
 * You may obtain a copy of the License at
1592
 *
1593
 * http://www.apache.org/licenses/LICENSE-2.0
1594
 *
1595
 * Unless required by applicable law or agreed to in writing, software
1596
 * distributed under the License is distributed on an "AS IS" BASIS,
1597
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1598
 * See the License for the specific language governing permissions and
1599
 * limitations under the License.
1600
 * ============================================================== */
1601
1602
1603
!function ($) {
1604
1605
  "use strict"; // jshint ;_;
1606
1607
1608
 /* SCROLLSPY CLASS DEFINITION
1609
  * ========================== */
1610
1611
  function ScrollSpy(element, options) {
1612
    var process = $.proxy(this.process, this)
1613
      , $element = $(element).is('body') ? $(window) : $(element)
1614
      , href
1615
    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1616
    this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1617
    this.selector = (this.options.target
1618
      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1619
      || '') + ' .nav li > a'
1620
    this.$body = $('body')
1621
    this.refresh()
1622
    this.process()
1623
  }
1624
1625
  ScrollSpy.prototype = {
1626
1627
      constructor: ScrollSpy
1628
1629
    , refresh: function () {
1630
        var self = this
1631
          , $targets
1632
1633
        this.offsets = $([])
1634
        this.targets = $([])
1635
1636
        $targets = this.$body
0 ignored issues
show
Unused Code introduced by
The variable $targets seems to be never used. Consider removing it.
Loading history...
1637
          .find(this.selector)
1638
          .map(function () {
1639
            var $el = $(this)
1640
              , href = $el.data('target') || $el.attr('href')
1641
              , $href = /^#\w/.test(href) && $(href)
1642
            return ( $href
1643
              && $href.length
1644
              && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
1645
          })
1646
          .sort(function (a, b) { return a[0] - b[0] })
1647
          .each(function () {
1648
            self.offsets.push(this[0])
1649
            self.targets.push(this[1])
1650
          })
1651
      }
1652
1653
    , process: function () {
1654
        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1655
          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1656
          , maxScroll = scrollHeight - this.$scrollElement.height()
1657
          , offsets = this.offsets
1658
          , targets = this.targets
1659
          , activeTarget = this.activeTarget
1660
          , i
1661
1662
        if (scrollTop >= maxScroll) {
1663
          return activeTarget != (i = targets.last()[0])
1664
            && this.activate ( i )
1665
        }
1666
1667
        for (i = offsets.length; i--;) {
1668
          activeTarget != targets[i]
1669
            && scrollTop >= offsets[i]
1670
            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1671
            && this.activate( targets[i] )
1672
        }
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
1673
      }
1674
1675
    , activate: function (target) {
1676
        var active
1677
          , selector
1678
1679
        this.activeTarget = target
1680
1681
        $(this.selector)
1682
          .parent('.active')
1683
          .removeClass('active')
1684
1685
        selector = this.selector
1686
          + '[data-target="' + target + '"],'
1687
          + this.selector + '[href="' + target + '"]'
1688
1689
        active = $(selector)
1690
          .parent('li')
1691
          .addClass('active')
1692
1693
        if (active.parent('.dropdown-menu').length)  {
1694
          active = active.closest('li.dropdown').addClass('active')
1695
        }
1696
1697
        active.trigger('activate')
1698
      }
1699
1700
  }
1701
1702
1703
 /* SCROLLSPY PLUGIN DEFINITION
1704
  * =========================== */
1705
1706
  var old = $.fn.scrollspy
1707
1708
  $.fn.scrollspy = function (option) {
1709
    return this.each(function () {
1710
      var $this = $(this)
1711
        , data = $this.data('scrollspy')
1712
        , options = typeof option == 'object' && option
1713
      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1714
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1715
    })
1716
  }
1717
1718
  $.fn.scrollspy.Constructor = ScrollSpy
1719
1720
  $.fn.scrollspy.defaults = {
1721
    offset: 10
1722
  }
1723
1724
1725
 /* SCROLLSPY NO CONFLICT
1726
  * ===================== */
1727
1728
  $.fn.scrollspy.noConflict = function () {
1729
    $.fn.scrollspy = old
1730
    return this
1731
  }
1732
1733
1734
 /* SCROLLSPY DATA-API
1735
  * ================== */
1736
1737
  $(window).on('load', function () {
1738
    $('[data-spy="scroll"]').each(function () {
1739
      var $spy = $(this)
1740
      $spy.scrollspy($spy.data())
1741
    })
1742
  })
1743
1744
}(window.jQuery);/* ========================================================
1745
 * bootstrap-tab.js v2.3.2
1746
 * http://twitter.github.com/bootstrap/javascript.html#tabs
1747
 * ========================================================
1748
 * Copyright 2012 Twitter, Inc.
1749
 *
1750
 * Licensed under the Apache License, Version 2.0 (the "License");
1751
 * you may not use this file except in compliance with the License.
1752
 * You may obtain a copy of the License at
1753
 *
1754
 * http://www.apache.org/licenses/LICENSE-2.0
1755
 *
1756
 * Unless required by applicable law or agreed to in writing, software
1757
 * distributed under the License is distributed on an "AS IS" BASIS,
1758
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1759
 * See the License for the specific language governing permissions and
1760
 * limitations under the License.
1761
 * ======================================================== */
1762
1763
1764
!function ($) {
1765
1766
  "use strict"; // jshint ;_;
1767
1768
1769
 /* TAB CLASS DEFINITION
1770
  * ==================== */
1771
1772
  var Tab = function (element) {
1773
    this.element = $(element)
1774
  }
1775
1776
  Tab.prototype = {
1777
1778
    constructor: Tab
1779
1780
  , show: function () {
1781
      var $this = this.element
1782
        , $ul = $this.closest('ul:not(.dropdown-menu)')
1783
        , selector = $this.attr('data-target')
1784
        , previous
1785
        , $target
1786
        , e
1787
1788
      if (!selector) {
1789
        selector = $this.attr('href')
1790
        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1791
      }
1792
1793
      if ( $this.parent('li').hasClass('active') ) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1794
1795
      previous = $ul.find('.active:last a')[0]
1796
1797
      e = $.Event('show', {
1798
        relatedTarget: previous
1799
      })
1800
1801
      $this.trigger(e)
1802
1803
      if (e.isDefaultPrevented()) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1804
1805
      $target = $(selector)
1806
1807
      this.activate($this.parent('li'), $ul)
1808
      this.activate($target, $target.parent(), function () {
1809
        $this.trigger({
1810
          type: 'shown'
1811
        , relatedTarget: previous
1812
        })
1813
      })
1814
    }
1815
1816
  , activate: function ( element, container, callback) {
1817
      var $active = container.find('> .active')
1818
        , transition = callback
1819
            && $.support.transition
1820
            && $active.hasClass('fade')
1821
1822
      function next() {
1823
        $active
1824
          .removeClass('active')
1825
          .find('> .dropdown-menu > .active')
1826
          .removeClass('active')
1827
1828
        element.addClass('active')
1829
1830
        if (transition) {
1831
          element[0].offsetWidth // reflow for transition
0 ignored issues
show
introduced by
The result of the property access to element.0.offsetWidth is not used.
Loading history...
1832
          element.addClass('in')
1833
        } else {
1834
          element.removeClass('fade')
1835
        }
1836
1837
        if ( element.parent('.dropdown-menu') ) {
1838
          element.closest('li.dropdown').addClass('active')
1839
        }
1840
1841
        callback && callback()
1842
      }
1843
1844
      transition ?
1845
        $active.one($.support.transition.end, next) :
1846
        next()
1847
1848
      $active.removeClass('in')
1849
    }
1850
  }
1851
1852
1853
 /* TAB PLUGIN DEFINITION
1854
  * ===================== */
1855
1856
  var old = $.fn.tab
1857
1858
  $.fn.tab = function ( option ) {
1859
    return this.each(function () {
1860
      var $this = $(this)
1861
        , data = $this.data('tab')
1862
      if (!data) $this.data('tab', (data = new Tab(this)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1863
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
1864
    })
1865
  }
1866
1867
  $.fn.tab.Constructor = Tab
1868
1869
1870
 /* TAB NO CONFLICT
1871
  * =============== */
1872
1873
  $.fn.tab.noConflict = function () {
1874
    $.fn.tab = old
1875
    return this
1876
  }
1877
1878
1879
 /* TAB DATA-API
1880
  * ============ */
1881
1882
  $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1883
    e.preventDefault()
1884
    $(this).tab('show')
1885
  })
1886
1887
}(window.jQuery);/* =============================================================
1888
 * bootstrap-typeahead.js v2.3.2
1889
 * http://twitter.github.com/bootstrap/javascript.html#typeahead
1890
 * =============================================================
1891
 * Copyright 2012 Twitter, Inc.
1892
 *
1893
 * Licensed under the Apache License, Version 2.0 (the "License");
1894
 * you may not use this file except in compliance with the License.
1895
 * You may obtain a copy of the License at
1896
 *
1897
 * http://www.apache.org/licenses/LICENSE-2.0
1898
 *
1899
 * Unless required by applicable law or agreed to in writing, software
1900
 * distributed under the License is distributed on an "AS IS" BASIS,
1901
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1902
 * See the License for the specific language governing permissions and
1903
 * limitations under the License.
1904
 * ============================================================ */
1905
1906
1907
!function($){
1908
1909
  "use strict"; // jshint ;_;
1910
1911
1912
 /* TYPEAHEAD PUBLIC CLASS DEFINITION
1913
  * ================================= */
1914
1915
  var Typeahead = function (element, options) {
1916
    this.$element = $(element)
1917
    this.options = $.extend({}, $.fn.typeahead.defaults, options)
1918
    this.matcher = this.options.matcher || this.matcher
1919
    this.sorter = this.options.sorter || this.sorter
1920
    this.highlighter = this.options.highlighter || this.highlighter
1921
    this.updater = this.options.updater || this.updater
1922
    this.source = this.options.source
1923
    this.$menu = $(this.options.menu)
1924
    this.shown = false
1925
    this.listen()
1926
  }
1927
1928
  Typeahead.prototype = {
1929
1930
    constructor: Typeahead
1931
1932
  , select: function () {
1933
      var val = this.$menu.find('.active').attr('data-value')
1934
      this.$element
1935
        .val(this.updater(val))
1936
        .change()
1937
      return this.hide()
1938
    }
1939
1940
  , updater: function (item) {
1941
      return item
1942
    }
1943
1944
  , show: function () {
1945
      var pos = $.extend({}, this.$element.position(), {
1946
        height: this.$element[0].offsetHeight
1947
      })
1948
1949
      this.$menu
1950
        .insertAfter(this.$element)
1951
        .css({
1952
          top: pos.top + pos.height
1953
        , left: pos.left
1954
        })
1955
        .show()
1956
1957
      this.shown = true
1958
      return this
1959
    }
1960
1961
  , hide: function () {
1962
      this.$menu.hide()
1963
      this.shown = false
1964
      return this
1965
    }
1966
1967
  , lookup: function (event) {
0 ignored issues
show
Unused Code introduced by
The parameter event is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
1968
      var items
1969
1970
      this.query = this.$element.val()
1971
1972
      if (!this.query || this.query.length < this.options.minLength) {
1973
        return this.shown ? this.hide() : this
1974
      }
1975
1976
      items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1977
1978
      return items ? this.process(items) : this
1979
    }
1980
1981
  , process: function (items) {
1982
      var that = this
1983
1984
      items = $.grep(items, function (item) {
1985
        return that.matcher(item)
1986
      })
1987
1988
      items = this.sorter(items)
1989
1990
      if (!items.length) {
1991
        return this.shown ? this.hide() : this
1992
      }
1993
1994
      return this.render(items.slice(0, this.options.items)).show()
1995
    }
1996
1997
  , matcher: function (item) {
1998
      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1999
    }
2000
2001
  , sorter: function (items) {
2002
      var beginswith = []
2003
        , caseSensitive = []
2004
        , caseInsensitive = []
2005
        , item
2006
2007
      while (item = items.shift()) {
2008
        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2009
        else if (~item.indexOf(this.query)) caseSensitive.push(item)
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2010
        else caseInsensitive.push(item)
2011
      }
2012
2013
      return beginswith.concat(caseSensitive, caseInsensitive)
2014
    }
2015
2016
  , highlighter: function (item) {
2017
      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
2018
      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
2019
        return '<strong>' + match + '</strong>'
2020
      })
2021
    }
2022
2023
  , render: function (items) {
2024
      var that = this
2025
2026
      items = $(items).map(function (i, item) {
2027
        i = $(that.options.item).attr('data-value', item)
2028
        i.find('a').html(that.highlighter(item))
2029
        return i[0]
2030
      })
2031
2032
      items.first().addClass('active')
2033
      this.$menu.html(items)
2034
      return this
2035
    }
2036
2037
  , next: function (event) {
0 ignored issues
show
Unused Code introduced by
The parameter event is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2038
      var active = this.$menu.find('.active').removeClass('active')
2039
        , next = active.next()
2040
2041
      if (!next.length) {
2042
        next = $(this.$menu.find('li')[0])
2043
      }
2044
2045
      next.addClass('active')
2046
    }
2047
2048
  , prev: function (event) {
0 ignored issues
show
Unused Code introduced by
The parameter event is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2049
      var active = this.$menu.find('.active').removeClass('active')
2050
        , prev = active.prev()
2051
2052
      if (!prev.length) {
2053
        prev = this.$menu.find('li').last()
2054
      }
2055
2056
      prev.addClass('active')
2057
    }
2058
2059
  , listen: function () {
2060
      this.$element
2061
        .on('focus',    $.proxy(this.focus, this))
2062
        .on('blur',     $.proxy(this.blur, this))
2063
        .on('keypress', $.proxy(this.keypress, this))
2064
        .on('keyup',    $.proxy(this.keyup, this))
2065
2066
      if (this.eventSupported('keydown')) {
2067
        this.$element.on('keydown', $.proxy(this.keydown, this))
2068
      }
2069
2070
      this.$menu
2071
        .on('click', $.proxy(this.click, this))
2072
        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
2073
        .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
2074
    }
2075
2076
  , eventSupported: function(eventName) {
2077
      var isSupported = eventName in this.$element
2078
      if (!isSupported) {
2079
        this.$element.setAttribute(eventName, 'return;')
2080
        isSupported = typeof this.$element[eventName] === 'function'
2081
      }
2082
      return isSupported
2083
    }
2084
2085
  , move: function (e) {
2086
      if (!this.shown) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2087
2088
      switch(e.keyCode) {
0 ignored issues
show
Coding Style introduced by
As per coding-style, switch statements should have a default case.
Loading history...
2089
        case 9: // tab
2090
        case 13: // enter
2091
        case 27: // escape
2092
          e.preventDefault()
2093
          break
2094
2095
        case 38: // up arrow
2096
          e.preventDefault()
2097
          this.prev()
2098
          break
2099
2100
        case 40: // down arrow
2101
          e.preventDefault()
2102
          this.next()
2103
          break
2104
      }
2105
2106
      e.stopPropagation()
2107
    }
2108
2109
  , keydown: function (e) {
2110
      this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
2111
      this.move(e)
2112
    }
2113
2114
  , keypress: function (e) {
2115
      if (this.suppressKeyPressRepeat) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2116
      this.move(e)
2117
    }
2118
2119
  , keyup: function (e) {
2120
      switch(e.keyCode) {
2121
        case 40: // down arrow
2122
        case 38: // up arrow
2123
        case 16: // shift
2124
        case 17: // ctrl
2125
        case 18: // alt
2126
          break
2127
2128
        case 9: // tab
2129
        case 13: // enter
2130
          if (!this.shown) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2131
          this.select()
2132
          break
2133
2134
        case 27: // escape
2135
          if (!this.shown) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2136
          this.hide()
2137
          break
2138
2139
        default:
2140
          this.lookup()
2141
      }
2142
2143
      e.stopPropagation()
2144
      e.preventDefault()
2145
  }
2146
2147
  , focus: function (e) {
0 ignored issues
show
Unused Code introduced by
The parameter e is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2148
      this.focused = true
2149
    }
2150
2151
  , blur: function (e) {
0 ignored issues
show
Unused Code introduced by
The parameter e is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2152
      this.focused = false
2153
      if (!this.mousedover && this.shown) this.hide()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2154
    }
2155
2156
  , click: function (e) {
2157
      e.stopPropagation()
2158
      e.preventDefault()
2159
      this.select()
2160
      this.$element.focus()
2161
    }
2162
2163
  , mouseenter: function (e) {
2164
      this.mousedover = true
2165
      this.$menu.find('.active').removeClass('active')
2166
      $(e.currentTarget).addClass('active')
2167
    }
2168
2169
  , mouseleave: function (e) {
0 ignored issues
show
Unused Code introduced by
The parameter e is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2170
      this.mousedover = false
2171
      if (!this.focused && this.shown) this.hide()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2172
    }
2173
2174
  }
2175
2176
2177
  /* TYPEAHEAD PLUGIN DEFINITION
2178
   * =========================== */
2179
2180
  var old = $.fn.typeahead
2181
2182
  $.fn.typeahead = function (option) {
2183
    return this.each(function () {
2184
      var $this = $(this)
2185
        , data = $this.data('typeahead')
2186
        , options = typeof option == 'object' && option
2187
      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2188
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2189
    })
2190
  }
2191
2192
  $.fn.typeahead.defaults = {
2193
    source: []
2194
  , items: 8
2195
  , menu: '<ul class="typeahead dropdown-menu"></ul>'
2196
  , item: '<li><a href="#"></a></li>'
2197
  , minLength: 1
2198
  }
2199
2200
  $.fn.typeahead.Constructor = Typeahead
2201
2202
2203
 /* TYPEAHEAD NO CONFLICT
2204
  * =================== */
2205
2206
  $.fn.typeahead.noConflict = function () {
2207
    $.fn.typeahead = old
2208
    return this
2209
  }
2210
2211
2212
 /* TYPEAHEAD DATA-API
2213
  * ================== */
2214
2215
  $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
0 ignored issues
show
Unused Code introduced by
The parameter e is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
2216
    var $this = $(this)
2217
    if ($this.data('typeahead')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2218
    $this.typeahead($this.data())
2219
  })
2220
2221
}(window.jQuery);
2222
/* ==========================================================
2223
 * bootstrap-affix.js v2.3.2
2224
 * http://twitter.github.com/bootstrap/javascript.html#affix
2225
 * ==========================================================
2226
 * Copyright 2012 Twitter, Inc.
2227
 *
2228
 * Licensed under the Apache License, Version 2.0 (the "License");
2229
 * you may not use this file except in compliance with the License.
2230
 * You may obtain a copy of the License at
2231
 *
2232
 * http://www.apache.org/licenses/LICENSE-2.0
2233
 *
2234
 * Unless required by applicable law or agreed to in writing, software
2235
 * distributed under the License is distributed on an "AS IS" BASIS,
2236
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2237
 * See the License for the specific language governing permissions and
2238
 * limitations under the License.
2239
 * ========================================================== */
2240
2241
2242
!function ($) {
2243
2244
  "use strict"; // jshint ;_;
2245
2246
2247
 /* AFFIX CLASS DEFINITION
2248
  * ====================== */
2249
2250
  var Affix = function (element, options) {
2251
    this.options = $.extend({}, $.fn.affix.defaults, options)
2252
    this.$window = $(window)
2253
      .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
2254
      .on('click.affix.data-api',  $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
2255
    this.$element = $(element)
2256
    this.checkPosition()
2257
  }
2258
2259
  Affix.prototype.checkPosition = function () {
2260
    if (!this.$element.is(':visible')) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2261
2262
    var scrollHeight = $(document).height()
2263
      , scrollTop = this.$window.scrollTop()
2264
      , position = this.$element.offset()
2265
      , offset = this.options.offset
2266
      , offsetBottom = offset.bottom
2267
      , offsetTop = offset.top
2268
      , reset = 'affix affix-top affix-bottom'
2269
      , affix
2270
2271
    if (typeof offset != 'object') offsetBottom = offsetTop = offset
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2272
    if (typeof offsetTop == 'function') offsetTop = offset.top()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2273
    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2274
2275
    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
2276
      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
2277
      'bottom' : offsetTop != null && scrollTop <= offsetTop ?
2278
      'top'    : false
2279
2280
    if (this.affixed === affix) return
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2281
2282
    this.affixed = affix
2283
    this.unpin = affix == 'bottom' ? position.top - scrollTop : null
2284
2285
    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
2286
  }
2287
2288
2289
 /* AFFIX PLUGIN DEFINITION
2290
  * ======================= */
2291
2292
  var old = $.fn.affix
2293
2294
  $.fn.affix = function (option) {
2295
    return this.each(function () {
2296
      var $this = $(this)
2297
        , data = $this.data('affix')
2298
        , options = typeof option == 'object' && option
2299
      if (!data) $this.data('affix', (data = new Affix(this, options)))
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2300
      if (typeof option == 'string') data[option]()
0 ignored issues
show
Coding Style Best Practice introduced by
Curly braces around statements make for more readable code and help prevent bugs when you add further statements.

Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.

Consider:

if (a > 0)
    b = 42;

If you or someone else later decides to put another statement in, only the first statement will be executed.

if (a > 0)
    console.log("a > 0");
    b = 42;

In this case the statement b = 42 will always be executed, while the logging statement will be executed conditionally.

if (a > 0) {
    console.log("a > 0");
    b = 42;
}

ensures that the proper code will be executed conditionally no matter how many statements are added or removed.

Loading history...
2301
    })
2302
  }
2303
2304
  $.fn.affix.Constructor = Affix
2305
2306
  $.fn.affix.defaults = {
2307
    offset: 0
2308
  }
2309
2310
2311
 /* AFFIX NO CONFLICT
2312
  * ================= */
2313
2314
  $.fn.affix.noConflict = function () {
2315
    $.fn.affix = old
2316
    return this
2317
  }
2318
2319
2320
 /* AFFIX DATA-API
2321
  * ============== */
2322
2323
  $(window).on('load', function () {
2324
    $('[data-spy="affix"]').each(function () {
2325
      var $spy = $(this)
2326
        , data = $spy.data()
2327
2328
      data.offset = data.offset || {}
2329
2330
      data.offsetBottom && (data.offset.bottom = data.offsetBottom)
2331
      data.offsetTop && (data.offset.top = data.offsetTop)
2332
2333
      $spy.affix(data)
2334
    })
2335
  })
2336
2337
2338
}(window.jQuery);
2339