root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / foundation / foundation.topbar.js @ 65635b1b
History | View | Annotate | Download (6.8 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.topbar = { |
7 | b3c1328b | Olga Brani | name : 'topbar', |
8 | b3c1328b | Olga Brani | |
9 | b3c1328b | Olga Brani | version : '4.0.0', |
10 | b3c1328b | Olga Brani | |
11 | b3c1328b | Olga Brani | settings : {
|
12 | b3c1328b | Olga Brani | index : 0, |
13 | b3c1328b | Olga Brani | stickyClass : 'sticky', |
14 | b3c1328b | Olga Brani | custom_back_text: true, |
15 | b3c1328b | Olga Brani | back_text: 'Back', |
16 | b3c1328b | Olga Brani | init : false |
17 | b3c1328b | Olga Brani | }, |
18 | b3c1328b | Olga Brani | |
19 | b3c1328b | Olga Brani | init : function (scope, method, options) { |
20 | b3c1328b | Olga Brani | var self = this; |
21 | b3c1328b | Olga Brani | this.scope = scope || this.scope; |
22 | b3c1328b | Olga Brani | |
23 | b3c1328b | Olga Brani | if (typeof method === 'object') { |
24 | b3c1328b | Olga Brani | $.extend(true, this.settings, method); |
25 | b3c1328b | Olga Brani | } |
26 | b3c1328b | Olga Brani | |
27 | b3c1328b | Olga Brani | if (typeof method != 'string') { |
28 | b3c1328b | Olga Brani | |
29 | b3c1328b | Olga Brani | $('.top-bar').each(function () { |
30 | b3c1328b | Olga Brani | self.settings.$w = $(window); |
31 | b3c1328b | Olga Brani | self.settings.$topbar = $(this); |
32 | b3c1328b | Olga Brani | self.settings.$section = self.settings.$topbar.find('section'); |
33 | b3c1328b | Olga Brani | self.settings.$titlebar = self.settings.$topbar.children('ul').first(); |
34 | b3c1328b | Olga Brani | |
35 | b3c1328b | Olga Brani | |
36 | b3c1328b | Olga Brani | self.settings.$topbar.data('index', 0); |
37 | b3c1328b | Olga Brani | |
38 | b3c1328b | Olga Brani | var breakpoint = $("<div class='top-bar-js-breakpoint'/>").insertAfter(self.settings.$topbar); |
39 | b3c1328b | Olga Brani | self.settings.breakPoint = breakpoint.width(); |
40 | b3c1328b | Olga Brani | breakpoint.remove(); |
41 | b3c1328b | Olga Brani | |
42 | b3c1328b | Olga Brani | self.assemble(); |
43 | b3c1328b | Olga Brani | |
44 | b3c1328b | Olga Brani | if (self.settings.$topbar.parent().hasClass('fixed')) { |
45 | b3c1328b | Olga Brani | $('body').css('padding-top', self.outerHeight(self.settings.$topbar)); |
46 | b3c1328b | Olga Brani | } |
47 | b3c1328b | Olga Brani | }); |
48 | b3c1328b | Olga Brani | |
49 | b3c1328b | Olga Brani | if (!self.settings.init) {
|
50 | b3c1328b | Olga Brani | this.events();
|
51 | b3c1328b | Olga Brani | } |
52 | b3c1328b | Olga Brani | |
53 | b3c1328b | Olga Brani | return this.settings.init; |
54 | b3c1328b | Olga Brani | } else {
|
55 | b3c1328b | Olga Brani | // fire method
|
56 | b3c1328b | Olga Brani | return this[method].call(this, options); |
57 | b3c1328b | Olga Brani | } |
58 | b3c1328b | Olga Brani | }, |
59 | b3c1328b | Olga Brani | |
60 | b3c1328b | Olga Brani | events : function () { |
61 | b3c1328b | Olga Brani | var self = this; |
62 | b3c1328b | Olga Brani | var offst = this.outerHeight($('.top-bar')); |
63 | b3c1328b | Olga Brani | $(this.scope) |
64 | b3c1328b | Olga Brani | .on('click.fndtn.topbar', '.top-bar .toggle-topbar', function (e) { |
65 | b3c1328b | Olga Brani | var topbar = $(this).closest('.top-bar'), |
66 | b3c1328b | Olga Brani | section = topbar.find('section, .section'),
|
67 | b3c1328b | Olga Brani | titlebar = topbar.children('ul').first();
|
68 | b3c1328b | Olga Brani | |
69 | b3c1328b | Olga Brani | if (!topbar.data('height')) self.largestUL(); |
70 | b3c1328b | Olga Brani | |
71 | b3c1328b | Olga Brani | e.preventDefault(); |
72 | b3c1328b | Olga Brani | |
73 | b3c1328b | Olga Brani | if (self.breakpoint()) {
|
74 | b3c1328b | Olga Brani | topbar |
75 | b3c1328b | Olga Brani | .toggleClass('expanded')
|
76 | b3c1328b | Olga Brani | .css('min-height', ''); |
77 | b3c1328b | Olga Brani | } |
78 | b3c1328b | Olga Brani | |
79 | b3c1328b | Olga Brani | if (!topbar.hasClass('expanded')) { |
80 | b3c1328b | Olga Brani | section.css({left: '0%'}); |
81 | b3c1328b | Olga Brani | section.find('>.name').css({left: '100%'}); |
82 | b3c1328b | Olga Brani | section.find('li.moved').removeClass('moved'); |
83 | b3c1328b | Olga Brani | topbar.data('index', 0); |
84 | b3c1328b | Olga Brani | } |
85 | b3c1328b | Olga Brani | |
86 | b3c1328b | Olga Brani | if (topbar.parent().hasClass('fixed')) { |
87 | b3c1328b | Olga Brani | topbar.parent().removeClass('fixed');
|
88 | b3c1328b | Olga Brani | $('body').css('padding-top','0'); |
89 | b3c1328b | Olga Brani | window.scrollTo(0);
|
90 | b3c1328b | Olga Brani | } else if (topbar.hasClass('fixed expanded')) { |
91 | b3c1328b | Olga Brani | topbar.parent().addClass('fixed');
|
92 | b3c1328b | Olga Brani | $('body').css('padding-top',offst); |
93 | b3c1328b | Olga Brani | } |
94 | b3c1328b | Olga Brani | |
95 | b3c1328b | Olga Brani | }) |
96 | b3c1328b | Olga Brani | |
97 | b3c1328b | Olga Brani | .on('click.fndtn.topbar', '.top-bar .has-dropdown>a', function (e) { |
98 | b3c1328b | Olga Brani | var topbar = $(this).closest('.top-bar'), |
99 | b3c1328b | Olga Brani | section = topbar.find('section, .section'),
|
100 | b3c1328b | Olga Brani | titlebar = topbar.children('ul').first();
|
101 | b3c1328b | Olga Brani | |
102 | b3c1328b | Olga Brani | if (Modernizr.touch || self.breakpoint()) {
|
103 | b3c1328b | Olga Brani | e.preventDefault(); |
104 | b3c1328b | Olga Brani | } |
105 | b3c1328b | Olga Brani | |
106 | b3c1328b | Olga Brani | if (self.breakpoint()) {
|
107 | b3c1328b | Olga Brani | var $this = $(this), |
108 | b3c1328b | Olga Brani | $selectedLi = $this.closest('li'); |
109 | b3c1328b | Olga Brani | |
110 | b3c1328b | Olga Brani | topbar.data('index', topbar.data('index') + 1); |
111 | b3c1328b | Olga Brani | $selectedLi.addClass('moved'); |
112 | b3c1328b | Olga Brani | section.css({left: -(100 * topbar.data('index')) + '%'}); |
113 | b3c1328b | Olga Brani | section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); |
114 | b3c1328b | Olga Brani | |
115 | b3c1328b | Olga Brani | $this.siblings('ul') |
116 | b3c1328b | Olga Brani | .height(topbar.data('height') + self.outerHeight(titlebar, true)); |
117 | b3c1328b | Olga Brani | topbar |
118 | b3c1328b | Olga Brani | .css('min-height', topbar.data('height') + self.outerHeight(titlebar, true) * 2) |
119 | b3c1328b | Olga Brani | } |
120 | b3c1328b | Olga Brani | }); |
121 | b3c1328b | Olga Brani | |
122 | b3c1328b | Olga Brani | $(window).on('resize.fndtn.topbar', function () { |
123 | b3c1328b | Olga Brani | if (!this.breakpoint()) { |
124 | b3c1328b | Olga Brani | $('.top-bar').css('min-height', ''); |
125 | b3c1328b | Olga Brani | } |
126 | b3c1328b | Olga Brani | }.bind(this));
|
127 | b3c1328b | Olga Brani | |
128 | b3c1328b | Olga Brani | // Go up a level on Click
|
129 | b3c1328b | Olga Brani | $(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back', function (e) { |
130 | b3c1328b | Olga Brani | e.preventDefault(); |
131 | b3c1328b | Olga Brani | |
132 | b3c1328b | Olga Brani | var $this = $(this), |
133 | b3c1328b | Olga Brani | topbar = $this.closest('.top-bar'), |
134 | b3c1328b | Olga Brani | section = topbar.find('section, .section'),
|
135 | b3c1328b | Olga Brani | $movedLi = $this.closest('li.moved'), |
136 | b3c1328b | Olga Brani | $previousLevelUl = $movedLi.parent(); |
137 | b3c1328b | Olga Brani | |
138 | b3c1328b | Olga Brani | topbar.data('index', topbar.data('index') - 1); |
139 | b3c1328b | Olga Brani | section.css({left: -(100 * topbar.data('index')) + '%'}); |
140 | b3c1328b | Olga Brani | section.find('>.name').css({'left': 100 * topbar.data('index') + '%'}); |
141 | b3c1328b | Olga Brani | |
142 | b3c1328b | Olga Brani | if (topbar.data('index') === 0) { |
143 | b3c1328b | Olga Brani | topbar.css('min-height', 0); |
144 | b3c1328b | Olga Brani | } |
145 | b3c1328b | Olga Brani | |
146 | b3c1328b | Olga Brani | setTimeout(function () {
|
147 | b3c1328b | Olga Brani | $movedLi.removeClass('moved'); |
148 | b3c1328b | Olga Brani | }, 300);
|
149 | b3c1328b | Olga Brani | }); |
150 | b3c1328b | Olga Brani | }, |
151 | b3c1328b | Olga Brani | |
152 | b3c1328b | Olga Brani | breakpoint : function () { |
153 | b3c1328b | Olga Brani | return $(window).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9'); |
154 | b3c1328b | Olga Brani | }, |
155 | b3c1328b | Olga Brani | |
156 | b3c1328b | Olga Brani | assemble : function () { |
157 | b3c1328b | Olga Brani | var self = this; |
158 | b3c1328b | Olga Brani | // Pull element out of the DOM for manipulation
|
159 | b3c1328b | Olga Brani | this.settings.$section.detach(); |
160 | b3c1328b | Olga Brani | |
161 | b3c1328b | Olga Brani | this.settings.$section.find('.has-dropdown>a').each(function () { |
162 | b3c1328b | Olga Brani | var $link = $(this), |
163 | b3c1328b | Olga Brani | $dropdown = $link.siblings('.dropdown'), |
164 | b3c1328b | Olga Brani | $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li>'); |
165 | b3c1328b | Olga Brani | |
166 | b3c1328b | Olga Brani | // Copy link to subnav
|
167 | b3c1328b | Olga Brani | if (self.settings.custom_back_text == true) { |
168 | b3c1328b | Olga Brani | $titleLi.find('h5>a').html('« ' + self.settings.back_text); |
169 | b3c1328b | Olga Brani | } else {
|
170 | b3c1328b | Olga Brani | $titleLi.find('h5>a').html('« ' + $link.html()); |
171 | b3c1328b | Olga Brani | } |
172 | b3c1328b | Olga Brani | $dropdown.prepend($titleLi); |
173 | b3c1328b | Olga Brani | }); |
174 | b3c1328b | Olga Brani | |
175 | b3c1328b | Olga Brani | // Put element back in the DOM
|
176 | b3c1328b | Olga Brani | this.settings.$section.appendTo(this.settings.$topbar); |
177 | b3c1328b | Olga Brani | |
178 | b3c1328b | Olga Brani | // check for sticky
|
179 | b3c1328b | Olga Brani | this.sticky();
|
180 | b3c1328b | Olga Brani | }, |
181 | b3c1328b | Olga Brani | |
182 | b3c1328b | Olga Brani | largestUL : function () { |
183 | b3c1328b | Olga Brani | var uls = this.settings.$topbar.find('section ul ul'), |
184 | b3c1328b | Olga Brani | largest = uls.first(), |
185 | b3c1328b | Olga Brani | total = 0,
|
186 | b3c1328b | Olga Brani | self = this;
|
187 | b3c1328b | Olga Brani | |
188 | b3c1328b | Olga Brani | uls.each(function () {
|
189 | b3c1328b | Olga Brani | if ($(this).children('li').length > largest.children('li').length) { |
190 | b3c1328b | Olga Brani | largest = $(this); |
191 | b3c1328b | Olga Brani | } |
192 | b3c1328b | Olga Brani | }); |
193 | b3c1328b | Olga Brani | |
194 | b3c1328b | Olga Brani | largest.children('li').each(function () { total += self.outerHeight($(this), true); }); |
195 | b3c1328b | Olga Brani | |
196 | b3c1328b | Olga Brani | this.settings.$topbar.data('height', total); |
197 | b3c1328b | Olga Brani | }, |
198 | b3c1328b | Olga Brani | |
199 | b3c1328b | Olga Brani | sticky : function () { |
200 | b3c1328b | Olga Brani | var klass = '.' + this.settings.stickyClass; |
201 | b3c1328b | Olga Brani | if ($(klass).length > 0) { |
202 | b3c1328b | Olga Brani | var distance = $(klass).length ? $(klass).offset().top: 0, |
203 | b3c1328b | Olga Brani | $window = $(window); |
204 | b3c1328b | Olga Brani | var offst = this.outerHeight($('.top-bar')); |
205 | b3c1328b | Olga Brani | |
206 | b3c1328b | Olga Brani | $window.scroll(function() { |
207 | b3c1328b | Olga Brani | if ($window.scrollTop() >= (distance)) { |
208 | b3c1328b | Olga Brani | $(klass).addClass("fixed"); |
209 | b3c1328b | Olga Brani | $('body').css('padding-top',offst); |
210 | b3c1328b | Olga Brani | } |
211 | b3c1328b | Olga Brani | |
212 | b3c1328b | Olga Brani | else if ($window.scrollTop() < distance) { |
213 | b3c1328b | Olga Brani | $(klass).removeClass("fixed"); |
214 | b3c1328b | Olga Brani | $('body').css('padding-top','0'); |
215 | b3c1328b | Olga Brani | } |
216 | b3c1328b | Olga Brani | }); |
217 | b3c1328b | Olga Brani | } |
218 | b3c1328b | Olga Brani | }, |
219 | b3c1328b | Olga Brani | |
220 | b3c1328b | Olga Brani | off : function () { |
221 | b3c1328b | Olga Brani | $(this.scope).off('.fndtn.topbar'); |
222 | b3c1328b | Olga Brani | $(window).off('.fndtn.topbar'); |
223 | b3c1328b | Olga Brani | } |
224 | b3c1328b | Olga Brani | }; |
225 | b3c1328b | Olga Brani | }(Foundation.zj, this, this.document)); |