#= require ./dom { matches } = Quails toArray = (e) -> Array.prototype.slice.call(e) Quails.serializeElement = (element, additionalParam) -> inputs = [element] inputs = toArray(element.elements) if matches(element, 'form') params = [] inputs.forEach (input) -> return unless input.name if matches(input, 'select') toArray(input.options).forEach (option) -> params.push(name: input.name, value: option.value) if option.selected else if input.checked or ['radio', 'checkbox', 'submit'].indexOf(input.type) == -1 params.push(name: input.name, value: input.value) params.push(additionalParam) if additionalParam params.map (param) -> if param.name? "#{encodeURIComponent(param.name)}=#{encodeURIComponent(param.value)}" else param .join('&') # Helper function that returns form elements that match the specified CSS selector # If form is actually a "form" element this will return associated elements outside the from that have # the html form attribute set Quails.formElements = (form, selector) -> if matches(form, 'form') toArray(form.elements).filter (el) -> matches(el, selector) else toArray(form.querySelectorAll(selector))