root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / foundation / foundation.dropdown.js @ f0ac40a4
History | View | Annotate | Download (3.4 kB)
1 | b3c1328b | Olga Brani | /*jslint unparam: true, browser: true, indent: 2 */
|
---|---|---|---|
2 | b3c1328b | Olga Brani | |
3 | b3c1328b | Olga Brani | ;(function ($, window, document, undefined) { |
4 | b3c1328b | Olga Brani | 'use strict';
|
5 | b3c1328b | Olga Brani | |
6 | b3c1328b | Olga Brani | Foundation.libs.dropdown = { |
7 | b3c1328b | Olga Brani | name : 'dropdown', |
8 | b3c1328b | Olga Brani | |
9 | b3c1328b | Olga Brani | version : '4.0.9', |
10 | b3c1328b | Olga Brani | |
11 | b3c1328b | Olga Brani | settings : {
|
12 | b3c1328b | Olga Brani | activeClass: 'open' |
13 | b3c1328b | Olga Brani | }, |
14 | b3c1328b | Olga Brani | |
15 | b3c1328b | Olga Brani | init : function (scope, method, options) { |
16 | b3c1328b | Olga Brani | this.scope = scope || this.scope; |
17 | b3c1328b | Olga Brani | Foundation.inherit(this, 'throttle'); |
18 | b3c1328b | Olga Brani | |
19 | b3c1328b | Olga Brani | if (typeof method === 'object') { |
20 | b3c1328b | Olga Brani | $.extend(true, this.settings, method); |
21 | b3c1328b | Olga Brani | } |
22 | b3c1328b | Olga Brani | |
23 | b3c1328b | Olga Brani | if (typeof method != 'string') { |
24 | b3c1328b | Olga Brani | |
25 | b3c1328b | Olga Brani | if (!this.settings.init) { |
26 | b3c1328b | Olga Brani | this.events();
|
27 | b3c1328b | Olga Brani | } |
28 | b3c1328b | Olga Brani | |
29 | b3c1328b | Olga Brani | return this.settings.init; |
30 | b3c1328b | Olga Brani | } else {
|
31 | b3c1328b | Olga Brani | return this[method].call(this, options); |
32 | b3c1328b | Olga Brani | } |
33 | b3c1328b | Olga Brani | }, |
34 | b3c1328b | Olga Brani | |
35 | b3c1328b | Olga Brani | events : function () { |
36 | b3c1328b | Olga Brani | var self = this; |
37 | b3c1328b | Olga Brani | |
38 | b3c1328b | Olga Brani | $(this.scope).on('click.fndtn.dropdown', '[data-dropdown]', function (e) { |
39 | b3c1328b | Olga Brani | e.preventDefault(); |
40 | b3c1328b | Olga Brani | e.stopPropagation(); |
41 | b3c1328b | Olga Brani | self.toggle($(this)); |
42 | b3c1328b | Olga Brani | }); |
43 | b3c1328b | Olga Brani | |
44 | b3c1328b | Olga Brani | $('*, html, body').on('click.fndtn.dropdown', function (e) { |
45 | b3c1328b | Olga Brani | if (!$(e.target).data('dropdown')) { |
46 | b3c1328b | Olga Brani | $('[data-dropdown-content]') |
47 | b3c1328b | Olga Brani | .css('left', '-99999px') |
48 | b3c1328b | Olga Brani | .removeClass(self.settings.activeClass); |
49 | b3c1328b | Olga Brani | } |
50 | b3c1328b | Olga Brani | }); |
51 | b3c1328b | Olga Brani | |
52 | b3c1328b | Olga Brani | $(window).on('resize.fndtn.dropdown', self.throttle(function () { |
53 | b3c1328b | Olga Brani | self.resize.call(self); |
54 | b3c1328b | Olga Brani | }, 50)).trigger('resize'); |
55 | b3c1328b | Olga Brani | |
56 | b3c1328b | Olga Brani | this.settings.init = true; |
57 | b3c1328b | Olga Brani | }, |
58 | b3c1328b | Olga Brani | |
59 | b3c1328b | Olga Brani | toggle : function (target, resize) { |
60 | b3c1328b | Olga Brani | var dropdown = $('#' + target.data('dropdown')); |
61 | b3c1328b | Olga Brani | |
62 | b3c1328b | Olga Brani | $('[data-dropdown-content]').not(dropdown).css('left', '-99999px').removeClass(this.settings.activeClass); |
63 | b3c1328b | Olga Brani | |
64 | b3c1328b | Olga Brani | if (dropdown.hasClass(this.settings.activeClass)) { |
65 | b3c1328b | Olga Brani | dropdown |
66 | b3c1328b | Olga Brani | .css('left', '-99999px') |
67 | b3c1328b | Olga Brani | .removeClass(this.settings.activeClass);
|
68 | b3c1328b | Olga Brani | } else {
|
69 | b3c1328b | Olga Brani | this
|
70 | b3c1328b | Olga Brani | .css(dropdown |
71 | b3c1328b | Olga Brani | .addClass(this.settings.activeClass), target);
|
72 | b3c1328b | Olga Brani | } |
73 | b3c1328b | Olga Brani | }, |
74 | b3c1328b | Olga Brani | |
75 | b3c1328b | Olga Brani | resize : function () { |
76 | b3c1328b | Olga Brani | var dropdown = $('[data-dropdown-content].open'), |
77 | b3c1328b | Olga Brani | target = $("[data-dropdown='" + dropdown.attr('id') + "']"); |
78 | b3c1328b | Olga Brani | |
79 | b3c1328b | Olga Brani | if (dropdown.length && target.length) {
|
80 | b3c1328b | Olga Brani | this.css(dropdown, target);
|
81 | b3c1328b | Olga Brani | } |
82 | b3c1328b | Olga Brani | }, |
83 | b3c1328b | Olga Brani | |
84 | b3c1328b | Olga Brani | css : function (dropdown, target) { |
85 | b3c1328b | Olga Brani | if (dropdown.parent()[0] === $('body')[0]) { |
86 | b3c1328b | Olga Brani | var position = target.offset();
|
87 | b3c1328b | Olga Brani | } else {
|
88 | b3c1328b | Olga Brani | var position = target.position();
|
89 | b3c1328b | Olga Brani | } |
90 | b3c1328b | Olga Brani | |
91 | b3c1328b | Olga Brani | if (this.small()) { |
92 | b3c1328b | Olga Brani | dropdown.css({ |
93 | b3c1328b | Olga Brani | position : 'absolute', |
94 | b3c1328b | Olga Brani | width: '95%', |
95 | b3c1328b | Olga Brani | left: '2.5%', |
96 | b3c1328b | Olga Brani | 'max-width': 'none', |
97 | b3c1328b | Olga Brani | top: position.top + this.outerHeight(target) |
98 | b3c1328b | Olga Brani | }); |
99 | b3c1328b | Olga Brani | } else {
|
100 | b3c1328b | Olga Brani | if ($(window).width() > this.outerWidth(dropdown) + target.offset().left) { |
101 | b3c1328b | Olga Brani | var left = position.left;
|
102 | b3c1328b | Olga Brani | } else {
|
103 | b3c1328b | Olga Brani | if (!dropdown.hasClass('right')) { |
104 | b3c1328b | Olga Brani | dropdown.addClass('right');
|
105 | b3c1328b | Olga Brani | } |
106 | b3c1328b | Olga Brani | var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target)); |
107 | b3c1328b | Olga Brani | } |
108 | b3c1328b | Olga Brani | dropdown.attr('style', '').css({ |
109 | b3c1328b | Olga Brani | position : 'absolute', |
110 | b3c1328b | Olga Brani | top: position.top + this.outerHeight(target), |
111 | b3c1328b | Olga Brani | left: left
|
112 | b3c1328b | Olga Brani | }); |
113 | b3c1328b | Olga Brani | } |
114 | b3c1328b | Olga Brani | |
115 | b3c1328b | Olga Brani | return dropdown;
|
116 | b3c1328b | Olga Brani | }, |
117 | b3c1328b | Olga Brani | |
118 | b3c1328b | Olga Brani | small : function () { |
119 | b3c1328b | Olga Brani | return $(window).width() < 768 || $('html').hasClass('lt-ie9'); |
120 | b3c1328b | Olga Brani | }, |
121 | b3c1328b | Olga Brani | |
122 | b3c1328b | Olga Brani | off: function () { |
123 | b3c1328b | Olga Brani | $(this.scope).off('.fndtn.dropdown'); |
124 | b3c1328b | Olga Brani | $('html, body').off('.fndtn.dropdown'); |
125 | b3c1328b | Olga Brani | $(window).off('.fndtn.dropdown'); |
126 | b3c1328b | Olga Brani | $('[data-dropdown-content]').off('.fndtn.dropdown'); |
127 | b3c1328b | Olga Brani | this.settings.init = false; |
128 | b3c1328b | Olga Brani | } |
129 | b3c1328b | Olga Brani | }; |
130 | b3c1328b | Olga Brani | }(Foundation.zj, this, this.document)); |