root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / foundation / foundation.section.js @ cf508a0b
History | View | Annotate | Download (7.5 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.section = { |
7 | b3c1328b | Olga Brani | name: 'section', |
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 | deep_linking: false, |
13 | b3c1328b | Olga Brani | one_up: true, |
14 | b3c1328b | Olga Brani | callback: function (){} |
15 | b3c1328b | Olga Brani | }, |
16 | b3c1328b | Olga Brani | |
17 | b3c1328b | Olga Brani | init : function (scope, method, options) { |
18 | b3c1328b | Olga Brani | var self = this; |
19 | b3c1328b | Olga Brani | |
20 | b3c1328b | Olga Brani | this.scope = scope || this.scope; |
21 | b3c1328b | Olga Brani | Foundation.inherit(this, 'throttle data_options'); |
22 | b3c1328b | Olga Brani | |
23 | b3c1328b | Olga Brani | if (typeof method != 'string') { |
24 | b3c1328b | Olga Brani | this.set_active_from_hash();
|
25 | b3c1328b | Olga Brani | this.events();
|
26 | b3c1328b | Olga Brani | |
27 | b3c1328b | Olga Brani | return true; |
28 | b3c1328b | Olga Brani | } else {
|
29 | b3c1328b | Olga Brani | return this[method].call(this, options); |
30 | b3c1328b | Olga Brani | } |
31 | b3c1328b | Olga Brani | }, |
32 | b3c1328b | Olga Brani | |
33 | b3c1328b | Olga Brani | events : function () { |
34 | b3c1328b | Olga Brani | var self = this; |
35 | b3c1328b | Olga Brani | |
36 | b3c1328b | Olga Brani | $(this.scope) |
37 | b3c1328b | Olga Brani | .on('click.fndtn.section', '[data-section] .title', function (e) { |
38 | b3c1328b | Olga Brani | var $this = $(this), |
39 | b3c1328b | Olga Brani | section = $this.closest('[data-section]'); |
40 | b3c1328b | Olga Brani | |
41 | b3c1328b | Olga Brani | self.toggle_active.call(this, e, self);
|
42 | b3c1328b | Olga Brani | }); |
43 | b3c1328b | Olga Brani | |
44 | b3c1328b | Olga Brani | $(window)
|
45 | b3c1328b | Olga Brani | .on('resize.fndtn.section', self.throttle(function () { |
46 | b3c1328b | Olga Brani | self.resize.call(this);
|
47 | b3c1328b | Olga Brani | }, 30))
|
48 | b3c1328b | Olga Brani | .on('hashchange', function () { |
49 | b3c1328b | Olga Brani | if (!self.settings.toggled){
|
50 | b3c1328b | Olga Brani | self.set_active_from_hash(); |
51 | b3c1328b | Olga Brani | $(this).trigger('resize'); |
52 | b3c1328b | Olga Brani | } |
53 | b3c1328b | Olga Brani | }).trigger('resize');
|
54 | b3c1328b | Olga Brani | |
55 | b3c1328b | Olga Brani | $(document)
|
56 | b3c1328b | Olga Brani | .on('click.fndtn.section', function (e) { |
57 | b3c1328b | Olga Brani | if ($(e.target).closest('.title').length < 1) { |
58 | b3c1328b | Olga Brani | $('[data-section="vertical-nav"], [data-section="horizontal-nav"]') |
59 | b3c1328b | Olga Brani | .find('section, .section')
|
60 | b3c1328b | Olga Brani | .removeClass('active')
|
61 | b3c1328b | Olga Brani | .attr('style', ''); |
62 | b3c1328b | Olga Brani | } |
63 | b3c1328b | Olga Brani | }); |
64 | b3c1328b | Olga Brani | |
65 | b3c1328b | Olga Brani | }, |
66 | b3c1328b | Olga Brani | |
67 | b3c1328b | Olga Brani | toggle_active : function (e, self) { |
68 | b3c1328b | Olga Brani | var $this = $(this), |
69 | b3c1328b | Olga Brani | section = $this.closest('section, .section'), |
70 | b3c1328b | Olga Brani | content = section.find('.content'),
|
71 | b3c1328b | Olga Brani | parent = section.closest('[data-section]'),
|
72 | b3c1328b | Olga Brani | self = Foundation.libs.section, |
73 | b3c1328b | Olga Brani | settings = $.extend({}, self.settings, self.data_options(parent));
|
74 | b3c1328b | Olga Brani | |
75 | b3c1328b | Olga Brani | self.settings.toggled = true;
|
76 | b3c1328b | Olga Brani | |
77 | b3c1328b | Olga Brani | if (!settings.deep_linking && content.length > 0) { |
78 | b3c1328b | Olga Brani | e.preventDefault(); |
79 | b3c1328b | Olga Brani | } |
80 | b3c1328b | Olga Brani | |
81 | b3c1328b | Olga Brani | if (section.hasClass('active')) { |
82 | b3c1328b | Olga Brani | if (self.small(parent)
|
83 | b3c1328b | Olga Brani | || self.is_vertical(parent) |
84 | b3c1328b | Olga Brani | || self.is_horizontal(parent) |
85 | b3c1328b | Olga Brani | || self.is_accordion(parent)) { |
86 | b3c1328b | Olga Brani | section |
87 | b3c1328b | Olga Brani | .removeClass('active')
|
88 | b3c1328b | Olga Brani | .attr('style', ''); |
89 | b3c1328b | Olga Brani | } |
90 | b3c1328b | Olga Brani | } else {
|
91 | b3c1328b | Olga Brani | var prev_active_section = null, |
92 | b3c1328b | Olga Brani | title_height = self.outerHeight(section.find('.title'));
|
93 | b3c1328b | Olga Brani | |
94 | b3c1328b | Olga Brani | if (self.small(parent) || settings.one_up) {
|
95 | b3c1328b | Olga Brani | prev_active_section = $this.closest('[data-section]').find('section.active, .section.active'); |
96 | b3c1328b | Olga Brani | |
97 | b3c1328b | Olga Brani | if (self.small(parent)) {
|
98 | b3c1328b | Olga Brani | prev_active_section.attr('style', ''); |
99 | b3c1328b | Olga Brani | } else {
|
100 | b3c1328b | Olga Brani | prev_active_section.attr('style', 'visibility: hidden; padding-top: '+title_height+'px;'); |
101 | b3c1328b | Olga Brani | } |
102 | b3c1328b | Olga Brani | } |
103 | b3c1328b | Olga Brani | |
104 | b3c1328b | Olga Brani | if (self.small(parent)) {
|
105 | b3c1328b | Olga Brani | section.attr('style', ''); |
106 | b3c1328b | Olga Brani | } else {
|
107 | b3c1328b | Olga Brani | section.css('padding-top', title_height);
|
108 | b3c1328b | Olga Brani | } |
109 | b3c1328b | Olga Brani | |
110 | b3c1328b | Olga Brani | section.addClass('active');
|
111 | b3c1328b | Olga Brani | |
112 | b3c1328b | Olga Brani | if (prev_active_section !== null) { |
113 | b3c1328b | Olga Brani | prev_active_section.removeClass('active').attr('style', ''); |
114 | b3c1328b | Olga Brani | } |
115 | b3c1328b | Olga Brani | } |
116 | b3c1328b | Olga Brani | |
117 | b3c1328b | Olga Brani | setTimeout(function () {
|
118 | b3c1328b | Olga Brani | self.settings.toggled = false;
|
119 | b3c1328b | Olga Brani | }, 300);
|
120 | b3c1328b | Olga Brani | |
121 | b3c1328b | Olga Brani | settings.callback(); |
122 | b3c1328b | Olga Brani | }, |
123 | b3c1328b | Olga Brani | |
124 | b3c1328b | Olga Brani | resize : function () { |
125 | b3c1328b | Olga Brani | var sections = $('[data-section]'), |
126 | b3c1328b | Olga Brani | self = Foundation.libs.section; |
127 | b3c1328b | Olga Brani | |
128 | b3c1328b | Olga Brani | sections.each(function() {
|
129 | b3c1328b | Olga Brani | var $this = $(this), |
130 | b3c1328b | Olga Brani | active_section = $this.find('section.active, .section.active'), |
131 | b3c1328b | Olga Brani | settings = $.extend({}, self.settings, self.data_options($this)); |
132 | b3c1328b | Olga Brani | |
133 | b3c1328b | Olga Brani | if (active_section.length > 1) { |
134 | b3c1328b | Olga Brani | active_section |
135 | b3c1328b | Olga Brani | .not(':first')
|
136 | b3c1328b | Olga Brani | .removeClass('active')
|
137 | b3c1328b | Olga Brani | .attr('style', ''); |
138 | b3c1328b | Olga Brani | } else if (active_section.length < 1 |
139 | b3c1328b | Olga Brani | && !self.is_vertical($this)
|
140 | b3c1328b | Olga Brani | && !self.is_horizontal($this)
|
141 | b3c1328b | Olga Brani | && !self.is_accordion($this)) {
|
142 | b3c1328b | Olga Brani | |
143 | b3c1328b | Olga Brani | var first = $this.find('section, .section').first(); |
144 | b3c1328b | Olga Brani | first.addClass('active');
|
145 | b3c1328b | Olga Brani | |
146 | b3c1328b | Olga Brani | if (self.small($this)) { |
147 | b3c1328b | Olga Brani | first.attr('style', ''); |
148 | b3c1328b | Olga Brani | } else {
|
149 | b3c1328b | Olga Brani | first.css('padding-top', self.outerHeight(first.find('.title'))); |
150 | b3c1328b | Olga Brani | } |
151 | b3c1328b | Olga Brani | } |
152 | b3c1328b | Olga Brani | |
153 | b3c1328b | Olga Brani | if (self.small($this)) { |
154 | b3c1328b | Olga Brani | active_section.attr('style', ''); |
155 | b3c1328b | Olga Brani | } else {
|
156 | b3c1328b | Olga Brani | active_section.css('padding-top', self.outerHeight(active_section.find('.title'))); |
157 | b3c1328b | Olga Brani | } |
158 | b3c1328b | Olga Brani | |
159 | b3c1328b | Olga Brani | self.position_titles($this);
|
160 | b3c1328b | Olga Brani | |
161 | b3c1328b | Olga Brani | if (self.is_horizontal($this) && !self.small($this)) { |
162 | b3c1328b | Olga Brani | self.position_content($this);
|
163 | b3c1328b | Olga Brani | } else {
|
164 | b3c1328b | Olga Brani | self.position_content($this, false); |
165 | b3c1328b | Olga Brani | } |
166 | b3c1328b | Olga Brani | }); |
167 | b3c1328b | Olga Brani | }, |
168 | b3c1328b | Olga Brani | |
169 | b3c1328b | Olga Brani | is_vertical : function (el) { |
170 | b3c1328b | Olga Brani | return /vertical-nav/i.test(el.data('section')); |
171 | b3c1328b | Olga Brani | }, |
172 | b3c1328b | Olga Brani | |
173 | b3c1328b | Olga Brani | is_horizontal : function (el) { |
174 | b3c1328b | Olga Brani | return /horizontal-nav/i.test(el.data('section')); |
175 | b3c1328b | Olga Brani | }, |
176 | b3c1328b | Olga Brani | |
177 | b3c1328b | Olga Brani | is_accordion : function (el) { |
178 | b3c1328b | Olga Brani | return /accordion/i.test(el.data('section')); |
179 | b3c1328b | Olga Brani | }, |
180 | b3c1328b | Olga Brani | |
181 | b3c1328b | Olga Brani | is_tabs : function (el) { |
182 | b3c1328b | Olga Brani | return /tabs/i.test(el.data('section')); |
183 | b3c1328b | Olga Brani | }, |
184 | b3c1328b | Olga Brani | |
185 | b3c1328b | Olga Brani | set_active_from_hash : function () { |
186 | b3c1328b | Olga Brani | var hash = window.location.hash.substring(1), |
187 | b3c1328b | Olga Brani | sections = $('[data-section]'), |
188 | b3c1328b | Olga Brani | self = this;
|
189 | b3c1328b | Olga Brani | |
190 | b3c1328b | Olga Brani | sections.each(function () {
|
191 | b3c1328b | Olga Brani | var section = $(this), |
192 | b3c1328b | Olga Brani | settings = $.extend({}, self.settings, self.data_options(section));
|
193 | b3c1328b | Olga Brani | |
194 | b3c1328b | Olga Brani | if (hash.length > 0 && settings.deep_linking) { |
195 | b3c1328b | Olga Brani | section |
196 | b3c1328b | Olga Brani | .find('section, .section')
|
197 | b3c1328b | Olga Brani | .attr('style', '') |
198 | b3c1328b | Olga Brani | .removeClass('active');
|
199 | b3c1328b | Olga Brani | section |
200 | b3c1328b | Olga Brani | .find('.content[data-slug="' + hash + '"]') |
201 | b3c1328b | Olga Brani | .closest('section, .section')
|
202 | b3c1328b | Olga Brani | .addClass('active');
|
203 | b3c1328b | Olga Brani | } |
204 | b3c1328b | Olga Brani | }); |
205 | b3c1328b | Olga Brani | }, |
206 | b3c1328b | Olga Brani | |
207 | b3c1328b | Olga Brani | position_titles : function (section, off) { |
208 | b3c1328b | Olga Brani | var titles = section.find('.title'), |
209 | b3c1328b | Olga Brani | previous_width = 0,
|
210 | b3c1328b | Olga Brani | self = this;
|
211 | b3c1328b | Olga Brani | |
212 | b3c1328b | Olga Brani | if (typeof off === 'boolean') { |
213 | b3c1328b | Olga Brani | titles.attr('style', ''); |
214 | b3c1328b | Olga Brani | |
215 | b3c1328b | Olga Brani | } else {
|
216 | b3c1328b | Olga Brani | titles.each(function () {
|
217 | b3c1328b | Olga Brani | $(this).css('left', previous_width); |
218 | b3c1328b | Olga Brani | previous_width += self.outerWidth($(this)); |
219 | b3c1328b | Olga Brani | }); |
220 | b3c1328b | Olga Brani | } |
221 | b3c1328b | Olga Brani | }, |
222 | b3c1328b | Olga Brani | |
223 | b3c1328b | Olga Brani | position_content : function (section, off) { |
224 | b3c1328b | Olga Brani | var titles = section.find('.title'), |
225 | b3c1328b | Olga Brani | content = section.find('.content'),
|
226 | b3c1328b | Olga Brani | self = this;
|
227 | b3c1328b | Olga Brani | |
228 | b3c1328b | Olga Brani | if (typeof off === 'boolean') { |
229 | b3c1328b | Olga Brani | content.attr('style', ''); |
230 | b3c1328b | Olga Brani | section.attr('style', ''); |
231 | b3c1328b | Olga Brani | } else {
|
232 | b3c1328b | Olga Brani | section.find('section, .section').each(function () { |
233 | b3c1328b | Olga Brani | var title = $(this).find('.title'), |
234 | b3c1328b | Olga Brani | content = $(this).find('.content'); |
235 | b3c1328b | Olga Brani | |
236 | b3c1328b | Olga Brani | content.css({left: title.position().left - 1, top: self.outerHeight(title) - 2}); |
237 | b3c1328b | Olga Brani | }); |
238 | b3c1328b | Olga Brani | |
239 | b3c1328b | Olga Brani | // temporary work around for Zepto outerheight calculation issues.
|
240 | b3c1328b | Olga Brani | if (typeof Zepto === 'function') { |
241 | b3c1328b | Olga Brani | section.height(this.outerHeight(titles.first()));
|
242 | b3c1328b | Olga Brani | } else {
|
243 | b3c1328b | Olga Brani | section.height(this.outerHeight(titles.first()) - 2); |
244 | b3c1328b | Olga Brani | } |
245 | b3c1328b | Olga Brani | } |
246 | b3c1328b | Olga Brani | |
247 | b3c1328b | Olga Brani | }, |
248 | b3c1328b | Olga Brani | |
249 | b3c1328b | Olga Brani | small : function (el) { |
250 | b3c1328b | Olga Brani | var settings = $.extend({}, this.settings, this.data_options(el)); |
251 | b3c1328b | Olga Brani | if (this.is_tabs(el)) { |
252 | b3c1328b | Olga Brani | return false; |
253 | b3c1328b | Olga Brani | } |
254 | b3c1328b | Olga Brani | if (el && this.is_accordion(el)) { |
255 | b3c1328b | Olga Brani | return true; |
256 | b3c1328b | Olga Brani | } |
257 | b3c1328b | Olga Brani | if ($('html').hasClass('lt-ie9')) { |
258 | b3c1328b | Olga Brani | return true; |
259 | b3c1328b | Olga Brani | } |
260 | b3c1328b | Olga Brani | if ($('html').hasClass('ie8compat')) { |
261 | b3c1328b | Olga Brani | return true; |
262 | b3c1328b | Olga Brani | } |
263 | b3c1328b | Olga Brani | return $(this.scope).width() < 768; |
264 | b3c1328b | Olga Brani | }, |
265 | b3c1328b | Olga Brani | |
266 | b3c1328b | Olga Brani | off : function () { |
267 | b3c1328b | Olga Brani | $(this.scope).off('.fndtn.section'); |
268 | b3c1328b | Olga Brani | $(window).off('.fndtn.section'); |
269 | b3c1328b | Olga Brani | $(document).off('.fndtn.section') |
270 | b3c1328b | Olga Brani | } |
271 | b3c1328b | Olga Brani | }; |
272 | b3c1328b | Olga Brani | }(Foundation.zj, this, this.document)); |