root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / foundation / foundation.forms.js @ 77d5883f
History | View | Annotate | Download (13 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.forms = { |
7 | b3c1328b | Olga Brani | name : 'forms', |
8 | b3c1328b | Olga Brani | |
9 | b3c1328b | Olga Brani | version : '4.0.4', |
10 | b3c1328b | Olga Brani | |
11 | b3c1328b | Olga Brani | settings : {
|
12 | b3c1328b | Olga Brani | disable_class: 'no-custom' |
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 | |
18 | b3c1328b | Olga Brani | if (typeof method === 'object') { |
19 | b3c1328b | Olga Brani | $.extend(true, this.settings, method); |
20 | b3c1328b | Olga Brani | } |
21 | b3c1328b | Olga Brani | |
22 | b3c1328b | Olga Brani | if (typeof method != 'string') { |
23 | b3c1328b | Olga Brani | if (!this.settings.init) { |
24 | b3c1328b | Olga Brani | this.events();
|
25 | b3c1328b | Olga Brani | } |
26 | b3c1328b | Olga Brani | |
27 | b3c1328b | Olga Brani | this.assemble();
|
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 | assemble : function () { |
36 | b3c1328b | Olga Brani | $('form.custom input[type="radio"]', $(this.scope)).not('[data-customforms="disabled"]') |
37 | b3c1328b | Olga Brani | .each(this.append_custom_markup);
|
38 | b3c1328b | Olga Brani | $('form.custom input[type="checkbox"]', $(this.scope)).not('[data-customforms="disabled"]') |
39 | b3c1328b | Olga Brani | .each(this.append_custom_markup);
|
40 | b3c1328b | Olga Brani | $('form.custom select', $(this.scope)).not('[data-customforms="disabled"]') |
41 | b3c1328b | Olga Brani | .each(this.append_custom_select);
|
42 | b3c1328b | Olga Brani | }, |
43 | b3c1328b | Olga Brani | |
44 | b3c1328b | Olga Brani | events : function () { |
45 | b3c1328b | Olga Brani | var self = this; |
46 | b3c1328b | Olga Brani | |
47 | b3c1328b | Olga Brani | $(this.scope) |
48 | b3c1328b | Olga Brani | .on('change.fndtn.forms', 'form.custom select:not([data-customforms="disabled"])', function (e) { |
49 | b3c1328b | Olga Brani | self.refresh_custom_select($(this)); |
50 | b3c1328b | Olga Brani | }) |
51 | b3c1328b | Olga Brani | .on('click.fndtn.forms', 'form.custom label', function (e) { |
52 | b3c1328b | Olga Brani | var $associatedElement = $('#' + self.escape($(this).attr('for')) + ':not([data-customforms="disabled"])'), |
53 | b3c1328b | Olga Brani | $customCheckbox,
|
54 | b3c1328b | Olga Brani | $customRadio;
|
55 | b3c1328b | Olga Brani | if ($associatedElement.length !== 0) { |
56 | b3c1328b | Olga Brani | if ($associatedElement.attr('type') === 'checkbox') { |
57 | b3c1328b | Olga Brani | e.preventDefault(); |
58 | b3c1328b | Olga Brani | $customCheckbox = $(this).find('span.custom.checkbox'); |
59 | b3c1328b | Olga Brani | |
60 | b3c1328b | Olga Brani | //the checkbox might be outside after the label
|
61 | b3c1328b | Olga Brani | if ($customCheckbox.length == 0) { |
62 | b3c1328b | Olga Brani | $customCheckbox = $(this).next('span.custom.checkbox'); |
63 | b3c1328b | Olga Brani | } |
64 | b3c1328b | Olga Brani | //the checkbox might be outside before the label
|
65 | b3c1328b | Olga Brani | if ($customCheckbox.length == 0) { |
66 | b3c1328b | Olga Brani | $customCheckbox = $(this).prev('span.custom.checkbox'); |
67 | b3c1328b | Olga Brani | } |
68 | b3c1328b | Olga Brani | self.toggle_checkbox($customCheckbox);
|
69 | b3c1328b | Olga Brani | } else if ($associatedElement.attr('type') === 'radio') { |
70 | b3c1328b | Olga Brani | e.preventDefault(); |
71 | b3c1328b | Olga Brani | $customRadio = $(this).find('span.custom.radio'); |
72 | b3c1328b | Olga Brani | //the radio might be outside after the label
|
73 | b3c1328b | Olga Brani | if ($customRadio.length == 0) { |
74 | b3c1328b | Olga Brani | $customRadio = $(this).next('span.custom.radio'); |
75 | b3c1328b | Olga Brani | } |
76 | b3c1328b | Olga Brani | //the radio might be outside before the label
|
77 | b3c1328b | Olga Brani | if ($customRadio.length == 0) { |
78 | b3c1328b | Olga Brani | $customRadio = $(this).prev('span.custom.radio'); |
79 | b3c1328b | Olga Brani | } |
80 | b3c1328b | Olga Brani | self.toggle_radio($customRadio);
|
81 | b3c1328b | Olga Brani | } |
82 | b3c1328b | Olga Brani | } |
83 | b3c1328b | Olga Brani | }) |
84 | b3c1328b | Olga Brani | .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { |
85 | b3c1328b | Olga Brani | var $this = $(this), |
86 | b3c1328b | Olga Brani | $dropdown = $this.closest('div.custom.dropdown'), |
87 | b3c1328b | Olga Brani | $select = $dropdown.prev(); |
88 | b3c1328b | Olga Brani | |
89 | b3c1328b | Olga Brani | // make sure other dropdowns close
|
90 | b3c1328b | Olga Brani | if(!$dropdown.hasClass('open')) |
91 | b3c1328b | Olga Brani | $(self.scope).trigger('click'); |
92 | b3c1328b | Olga Brani | |
93 | b3c1328b | Olga Brani | e.preventDefault(); |
94 | b3c1328b | Olga Brani | if (false === $select.is(':disabled')) { |
95 | b3c1328b | Olga Brani | $dropdown.toggleClass('open'); |
96 | b3c1328b | Olga Brani | |
97 | b3c1328b | Olga Brani | if ($dropdown.hasClass('open')) { |
98 | b3c1328b | Olga Brani | $(self.scope).on('click.fndtn.forms.customdropdown', function () { |
99 | b3c1328b | Olga Brani | $dropdown.removeClass('open'); |
100 | b3c1328b | Olga Brani | $(self.scope).off('.fndtn.forms.customdropdown'); |
101 | b3c1328b | Olga Brani | }); |
102 | b3c1328b | Olga Brani | } else {
|
103 | b3c1328b | Olga Brani | $(self.scope).on('.fndtn.forms.customdropdown'); |
104 | b3c1328b | Olga Brani | } |
105 | b3c1328b | Olga Brani | return false; |
106 | b3c1328b | Olga Brani | } |
107 | b3c1328b | Olga Brani | }) |
108 | b3c1328b | Olga Brani | .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { |
109 | b3c1328b | Olga Brani | var $this = $(this), |
110 | b3c1328b | Olga Brani | $customDropdown = $this.closest('div.custom.dropdown'), |
111 | b3c1328b | Olga Brani | $select = $customDropdown.prev(), |
112 | b3c1328b | Olga Brani | selectedIndex = 0;
|
113 | b3c1328b | Olga Brani | |
114 | b3c1328b | Olga Brani | e.preventDefault(); |
115 | b3c1328b | Olga Brani | e.stopPropagation(); |
116 | b3c1328b | Olga Brani | |
117 | b3c1328b | Olga Brani | if ( ! $(this).hasClass('disabled')) { |
118 | b3c1328b | Olga Brani | $('div.dropdown').not($customDropdown).removeClass('open'); |
119 | b3c1328b | Olga Brani | |
120 | b3c1328b | Olga Brani | var $oldThis= $this |
121 | b3c1328b | Olga Brani | .closest('ul')
|
122 | b3c1328b | Olga Brani | .find('li.selected');
|
123 | b3c1328b | Olga Brani | $oldThis.removeClass('selected'); |
124 | b3c1328b | Olga Brani | |
125 | b3c1328b | Olga Brani | $this.addClass('selected'); |
126 | b3c1328b | Olga Brani | |
127 | b3c1328b | Olga Brani | $customDropdown
|
128 | b3c1328b | Olga Brani | .removeClass('open')
|
129 | b3c1328b | Olga Brani | .find('a.current')
|
130 | b3c1328b | Olga Brani | .html($this.html());
|
131 | b3c1328b | Olga Brani | |
132 | b3c1328b | Olga Brani | $this.closest('ul').find('li').each(function (index) { |
133 | b3c1328b | Olga Brani | if ($this[0] == this) { |
134 | b3c1328b | Olga Brani | selectedIndex = index; |
135 | b3c1328b | Olga Brani | } |
136 | b3c1328b | Olga Brani | |
137 | b3c1328b | Olga Brani | }); |
138 | b3c1328b | Olga Brani | $select[0].selectedIndex = selectedIndex; |
139 | b3c1328b | Olga Brani | |
140 | b3c1328b | Olga Brani | //store the old value in data
|
141 | b3c1328b | Olga Brani | $select.data('prevalue', $oldThis.html()); |
142 | b3c1328b | Olga Brani | $select.trigger('change'); |
143 | b3c1328b | Olga Brani | } |
144 | b3c1328b | Olga Brani | }); |
145 | b3c1328b | Olga Brani | |
146 | b3c1328b | Olga Brani | this.settings.init = true; |
147 | b3c1328b | Olga Brani | }, |
148 | b3c1328b | Olga Brani | |
149 | b3c1328b | Olga Brani | append_custom_markup : function (idx, sel) { |
150 | b3c1328b | Olga Brani | var $this = $(sel).hide(), |
151 | b3c1328b | Olga Brani | type = $this.attr('type'), |
152 | b3c1328b | Olga Brani | $span = $this.next('span.custom.' + type); |
153 | b3c1328b | Olga Brani | |
154 | b3c1328b | Olga Brani | if ($span.length === 0) { |
155 | b3c1328b | Olga Brani | $span = $('<span class="custom ' + type + '"></span>').insertAfter($this); |
156 | b3c1328b | Olga Brani | } |
157 | b3c1328b | Olga Brani | |
158 | b3c1328b | Olga Brani | $span.toggleClass('checked', $this.is(':checked')); |
159 | b3c1328b | Olga Brani | $span.toggleClass('disabled', $this.is(':disabled')); |
160 | b3c1328b | Olga Brani | }, |
161 | b3c1328b | Olga Brani | |
162 | b3c1328b | Olga Brani | append_custom_select : function (idx, sel) { |
163 | b3c1328b | Olga Brani | var self = Foundation.libs.forms,
|
164 | b3c1328b | Olga Brani | $this = $( sel ), |
165 | b3c1328b | Olga Brani | $customSelect = $this.next( 'div.custom.dropdown' ), |
166 | b3c1328b | Olga Brani | $customList = $customSelect.find( 'ul' ), |
167 | b3c1328b | Olga Brani | $selectCurrent = $customSelect.find( ".current" ), |
168 | b3c1328b | Olga Brani | $selector = $customSelect.find( ".selector" ), |
169 | b3c1328b | Olga Brani | $options = $this.find( 'option' ), |
170 | b3c1328b | Olga Brani | $selectedOption = $options.filter( ':selected' ), |
171 | b3c1328b | Olga Brani | copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], |
172 | b3c1328b | Olga Brani | maxWidth = 0,
|
173 | b3c1328b | Olga Brani | liHtml = '',
|
174 | b3c1328b | Olga Brani | $listItems,
|
175 | b3c1328b | Olga Brani | $currentSelect = false; |
176 | b3c1328b | Olga Brani | |
177 | b3c1328b | Olga Brani | if ($this.hasClass(self.settings.disable_class)) return; |
178 | b3c1328b | Olga Brani | |
179 | b3c1328b | Olga Brani | if ($customSelect.length === 0) { |
180 | b3c1328b | Olga Brani | var customSelectSize = $this.hasClass( 'small' ) ? 'small' : |
181 | b3c1328b | Olga Brani | $this.hasClass( 'medium' ) ? 'medium' : |
182 | b3c1328b | Olga Brani | $this.hasClass( 'large' ) ? 'large' : |
183 | b3c1328b | Olga Brani | $this.hasClass( 'expand' ) ? 'expand' : ''; |
184 | b3c1328b | Olga Brani | |
185 | b3c1328b | Olga Brani | $customSelect = $('<div class="' + ['custom', 'dropdown', customSelectSize ].concat(copyClasses).filter(function(item, idx,arr){ if(item == '') return false; return arr.indexOf(item) == idx; }).join( ' ' ) + '"><a href="#" class="selector"></a><ul /></div>'); |
186 | b3c1328b | Olga Brani | $selector = $customSelect.find(".selector"); |
187 | b3c1328b | Olga Brani | $customList = $customSelect.find("ul"); |
188 | b3c1328b | Olga Brani | liHtml = $options.map(function() { return "<li>" + $( this ).html() + "</li>"; } ).get().join( '' ); |
189 | b3c1328b | Olga Brani | $customList.append(liHtml);
|
190 | b3c1328b | Olga Brani | $currentSelect = $customSelect.prepend('<a href="#" class="current">' + $selectedOption.html() + '</a>' ).find( ".current" ); |
191 | b3c1328b | Olga Brani | $this
|
192 | b3c1328b | Olga Brani | .after( $customSelect )
|
193 | b3c1328b | Olga Brani | .hide(); |
194 | b3c1328b | Olga Brani | |
195 | b3c1328b | Olga Brani | } else {
|
196 | b3c1328b | Olga Brani | liHtml = $options.map(function() { |
197 | b3c1328b | Olga Brani | return "<li>" + $( this ).html() + "</li>"; |
198 | b3c1328b | Olga Brani | }) |
199 | b3c1328b | Olga Brani | .get().join('');
|
200 | b3c1328b | Olga Brani | $customList
|
201 | b3c1328b | Olga Brani | .html('')
|
202 | b3c1328b | Olga Brani | .append(liHtml); |
203 | b3c1328b | Olga Brani | |
204 | b3c1328b | Olga Brani | } // endif $customSelect.length === 0
|
205 | b3c1328b | Olga Brani | $customSelect.toggleClass('disabled', $this.is( ':disabled' ) ); |
206 | b3c1328b | Olga Brani | $listItems = $customList.find( 'li' ); |
207 | b3c1328b | Olga Brani | |
208 | b3c1328b | Olga Brani | $options.each( function ( index ) { |
209 | b3c1328b | Olga Brani | if ( this.selected ) { |
210 | b3c1328b | Olga Brani | $listItems.eq( index ).addClass( 'selected' ); |
211 | b3c1328b | Olga Brani | |
212 | b3c1328b | Olga Brani | if ($currentSelect) { |
213 | b3c1328b | Olga Brani | $currentSelect.html( $( this ).html() ); |
214 | b3c1328b | Olga Brani | } |
215 | b3c1328b | Olga Brani | |
216 | b3c1328b | Olga Brani | } |
217 | b3c1328b | Olga Brani | if ($(this).is(':disabled')) { |
218 | b3c1328b | Olga Brani | $listItems.eq( index ).addClass( 'disabled' ); |
219 | b3c1328b | Olga Brani | } |
220 | b3c1328b | Olga Brani | }); |
221 | b3c1328b | Olga Brani | |
222 | b3c1328b | Olga Brani | //
|
223 | b3c1328b | Olga Brani | // If we're not specifying a predetermined form size.
|
224 | b3c1328b | Olga Brani | //
|
225 | b3c1328b | Olga Brani | if (!$customSelect.is('.small, .medium, .large, .expand')) { |
226 | b3c1328b | Olga Brani | |
227 | b3c1328b | Olga Brani | // ------------------------------------------------------------------------------------
|
228 | b3c1328b | Olga Brani | // This is a work-around for when elements are contained within hidden parents.
|
229 | b3c1328b | Olga Brani | // For example, when custom-form elements are inside of a hidden reveal modal.
|
230 | b3c1328b | Olga Brani | //
|
231 | b3c1328b | Olga Brani | // We need to display the current custom list element as well as hidden parent elements
|
232 | b3c1328b | Olga Brani | // in order to properly calculate the list item element's width property.
|
233 | b3c1328b | Olga Brani | // -------------------------------------------------------------------------------------
|
234 | b3c1328b | Olga Brani | |
235 | b3c1328b | Olga Brani | $customSelect.addClass( 'open' ); |
236 | b3c1328b | Olga Brani | //
|
237 | b3c1328b | Olga Brani | // Quickly, display all parent elements.
|
238 | b3c1328b | Olga Brani | // This should help us calcualate the width of the list item's within the drop down.
|
239 | b3c1328b | Olga Brani | //
|
240 | b3c1328b | Olga Brani | var self = Foundation.libs.forms;
|
241 | b3c1328b | Olga Brani | self.hidden_fix.adjust( $customList );
|
242 | b3c1328b | Olga Brani | |
243 | b3c1328b | Olga Brani | maxWidth = ( self.outerWidth($listItems) > maxWidth ) ? self.outerWidth($listItems) : maxWidth; |
244 | b3c1328b | Olga Brani | |
245 | b3c1328b | Olga Brani | Foundation.libs.forms.hidden_fix.reset(); |
246 | b3c1328b | Olga Brani | |
247 | b3c1328b | Olga Brani | $customSelect.removeClass( 'open' ); |
248 | b3c1328b | Olga Brani | |
249 | b3c1328b | Olga Brani | } // endif
|
250 | b3c1328b | Olga Brani | |
251 | b3c1328b | Olga Brani | }, |
252 | b3c1328b | Olga Brani | |
253 | b3c1328b | Olga Brani | refresh_custom_select : function ($select) { |
254 | b3c1328b | Olga Brani | var self = this; |
255 | b3c1328b | Olga Brani | var maxWidth = 0, |
256 | b3c1328b | Olga Brani | $customSelect = $select.next(), |
257 | b3c1328b | Olga Brani | $options = $select.find('option'); |
258 | b3c1328b | Olga Brani | |
259 | b3c1328b | Olga Brani | $customSelect.find('ul').html(''); |
260 | b3c1328b | Olga Brani | |
261 | b3c1328b | Olga Brani | $options.each(function () { |
262 | b3c1328b | Olga Brani | var $li = $('<li>' + $(this).html() + '</li>'); |
263 | b3c1328b | Olga Brani | $customSelect.find('ul').append($li); |
264 | b3c1328b | Olga Brani | }); |
265 | b3c1328b | Olga Brani | |
266 | b3c1328b | Olga Brani | // re-populate
|
267 | b3c1328b | Olga Brani | $options.each(function (index) { |
268 | b3c1328b | Olga Brani | if (this.selected) { |
269 | b3c1328b | Olga Brani | $customSelect.find('li').eq(index).addClass('selected'); |
270 | b3c1328b | Olga Brani | $customSelect.find('.current').html($(this).html()); |
271 | b3c1328b | Olga Brani | } |
272 | b3c1328b | Olga Brani | if ($(this).is(':disabled')) { |
273 | b3c1328b | Olga Brani | $customSelect.find('li').eq(index).addClass('disabled'); |
274 | b3c1328b | Olga Brani | } |
275 | b3c1328b | Olga Brani | }); |
276 | b3c1328b | Olga Brani | |
277 | b3c1328b | Olga Brani | // fix width
|
278 | b3c1328b | Olga Brani | $customSelect.removeAttr('style') |
279 | b3c1328b | Olga Brani | .find('ul').removeAttr('style'); |
280 | b3c1328b | Olga Brani | $customSelect.find('li').each(function () { |
281 | b3c1328b | Olga Brani | $customSelect.addClass('open'); |
282 | b3c1328b | Olga Brani | if (self.outerWidth($(this)) > maxWidth) { |
283 | b3c1328b | Olga Brani | maxWidth = self.outerWidth($(this)); |
284 | b3c1328b | Olga Brani | } |
285 | b3c1328b | Olga Brani | $customSelect.removeClass('open'); |
286 | b3c1328b | Olga Brani | }); |
287 | b3c1328b | Olga Brani | }, |
288 | b3c1328b | Olga Brani | |
289 | b3c1328b | Olga Brani | toggle_checkbox : function ($element) { |
290 | b3c1328b | Olga Brani | var $input = $element.prev(), |
291 | b3c1328b | Olga Brani | input = $input[0]; |
292 | b3c1328b | Olga Brani | |
293 | b3c1328b | Olga Brani | if (false === $input.is(':disabled')) { |
294 | b3c1328b | Olga Brani | input.checked = ((input.checked) ? false : true); |
295 | b3c1328b | Olga Brani | $element.toggleClass('checked'); |
296 | b3c1328b | Olga Brani | |
297 | b3c1328b | Olga Brani | $input.trigger('change'); |
298 | b3c1328b | Olga Brani | } |
299 | b3c1328b | Olga Brani | }, |
300 | b3c1328b | Olga Brani | |
301 | b3c1328b | Olga Brani | toggle_radio : function ($element) { |
302 | b3c1328b | Olga Brani | var $input = $element.prev(), |
303 | b3c1328b | Olga Brani | $form = $input.closest('form.custom'), |
304 | b3c1328b | Olga Brani | input = $input[0]; |
305 | b3c1328b | Olga Brani | |
306 | b3c1328b | Olga Brani | if (false === $input.is(':disabled')) { |
307 | b3c1328b | Olga Brani | $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]').next().not($element).removeClass('checked'); |
308 | b3c1328b | Olga Brani | if ( !$element.hasClass('checked') ) { |
309 | b3c1328b | Olga Brani | $element.toggleClass('checked'); |
310 | b3c1328b | Olga Brani | } |
311 | b3c1328b | Olga Brani | input.checked = $element.hasClass('checked'); |
312 | b3c1328b | Olga Brani | |
313 | b3c1328b | Olga Brani | $input.trigger('change'); |
314 | b3c1328b | Olga Brani | } |
315 | b3c1328b | Olga Brani | }, |
316 | b3c1328b | Olga Brani | |
317 | b3c1328b | Olga Brani | escape : function (text) { |
318 | b3c1328b | Olga Brani | return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); |
319 | b3c1328b | Olga Brani | }, |
320 | b3c1328b | Olga Brani | |
321 | b3c1328b | Olga Brani | hidden_fix : {
|
322 | b3c1328b | Olga Brani | /**
|
323 | b3c1328b | Olga Brani | * Sets all hidden parent elements and self to visibile.
|
324 | b3c1328b | Olga Brani | *
|
325 | b3c1328b | Olga Brani | * @method adjust
|
326 | b3c1328b | Olga Brani | * @param {jQuery Object} $child
|
327 | b3c1328b | Olga Brani | */
|
328 | b3c1328b | Olga Brani | |
329 | b3c1328b | Olga Brani | // We'll use this to temporarily store style properties.
|
330 | b3c1328b | Olga Brani | tmp : [],
|
331 | b3c1328b | Olga Brani | |
332 | b3c1328b | Olga Brani | // We'll use this to set hidden parent elements.
|
333 | b3c1328b | Olga Brani | hidden : null, |
334 | b3c1328b | Olga Brani | |
335 | b3c1328b | Olga Brani | adjust : function( $child ) { |
336 | b3c1328b | Olga Brani | // Internal reference.
|
337 | b3c1328b | Olga Brani | var _self = this; |
338 | b3c1328b | Olga Brani | |
339 | b3c1328b | Olga Brani | // Set all hidden parent elements, including this element.
|
340 | b3c1328b | Olga Brani | _self.hidden = $child.parents().andSelf().filter( ":hidden" ); |
341 | b3c1328b | Olga Brani | |
342 | b3c1328b | Olga Brani | // Loop through all hidden elements.
|
343 | b3c1328b | Olga Brani | _self.hidden.each( function() {
|
344 | b3c1328b | Olga Brani | |
345 | b3c1328b | Olga Brani | // Cache the element.
|
346 | b3c1328b | Olga Brani | var $elem = $( this ); |
347 | b3c1328b | Olga Brani | |
348 | b3c1328b | Olga Brani | // Store the style attribute.
|
349 | b3c1328b | Olga Brani | // Undefined if element doesn't have a style attribute.
|
350 | b3c1328b | Olga Brani | _self.tmp.push( $elem.attr( 'style' ) ); |
351 | b3c1328b | Olga Brani | |
352 | b3c1328b | Olga Brani | // Set the element's display property to block,
|
353 | b3c1328b | Olga Brani | // but ensure it's visibility is hidden.
|
354 | b3c1328b | Olga Brani | $elem.css( { 'visibility' : 'hidden', 'display' : 'block' } ); |
355 | b3c1328b | Olga Brani | }); |
356 | b3c1328b | Olga Brani | |
357 | b3c1328b | Olga Brani | }, // end adjust
|
358 | b3c1328b | Olga Brani | |
359 | b3c1328b | Olga Brani | /**
|
360 | b3c1328b | Olga Brani | * Resets the elements previous state.
|
361 | b3c1328b | Olga Brani | *
|
362 | b3c1328b | Olga Brani | * @method reset
|
363 | b3c1328b | Olga Brani | */
|
364 | b3c1328b | Olga Brani | reset : function() { |
365 | b3c1328b | Olga Brani | // Internal reference.
|
366 | b3c1328b | Olga Brani | var _self = this; |
367 | b3c1328b | Olga Brani | // Loop through our hidden element collection.
|
368 | b3c1328b | Olga Brani | _self.hidden.each( function( i ) {
|
369 | b3c1328b | Olga Brani | // Cache this element.
|
370 | b3c1328b | Olga Brani | var $elem = $( this ), |
371 | b3c1328b | Olga Brani | _tmp = _self.tmp[ i ]; // Get the stored 'style' value for this element.
|
372 | b3c1328b | Olga Brani | |
373 | b3c1328b | Olga Brani | // If the stored value is undefined.
|
374 | b3c1328b | Olga Brani | if( _tmp === undefined ) |
375 | b3c1328b | Olga Brani | // Remove the style attribute.
|
376 | b3c1328b | Olga Brani | $elem.removeAttr( 'style' ); |
377 | b3c1328b | Olga Brani | else
|
378 | b3c1328b | Olga Brani | // Otherwise, reset the element style attribute.
|
379 | b3c1328b | Olga Brani | $elem.attr( 'style', _tmp ); |
380 | b3c1328b | Olga Brani | |
381 | b3c1328b | Olga Brani | }); |
382 | b3c1328b | Olga Brani | // Reset the tmp array.
|
383 | b3c1328b | Olga Brani | _self.tmp = []; |
384 | b3c1328b | Olga Brani | // Reset the hidden elements variable.
|
385 | b3c1328b | Olga Brani | _self.hidden = null;
|
386 | b3c1328b | Olga Brani | |
387 | b3c1328b | Olga Brani | } // end reset
|
388 | b3c1328b | Olga Brani | |
389 | b3c1328b | Olga Brani | }, |
390 | b3c1328b | Olga Brani | |
391 | b3c1328b | Olga Brani | off : function () { |
392 | b3c1328b | Olga Brani | $(this.scope).off('.fndtn.forms'); |
393 | b3c1328b | Olga Brani | } |
394 | b3c1328b | Olga Brani | }; |
395 | b3c1328b | Olga Brani | }(Foundation.zj, this, this.document)); |