/cfObjective2008/coldfusion/lib/SpryUtils.js
JavaScript | 159 lines | 101 code | 20 blank | 38 comment | 37 complexity | 1473f1f6298cf921deb3b10b270b97ee MD5 | raw file
Possible License(s): Apache-2.0, MIT
- // SpryUtils.js - version 0.3 - Spry Pre-Release 1.6.1
- //
- // Copyright (c) 2007. Adobe Systems Incorporated.
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are met:
- //
- // * Redistributions of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- // * Redistributions in binary form must reproduce the above copyright notice,
- // this list of conditions and the following disclaimer in the documentation
- // and/or other materials provided with the distribution.
- // * Neither the name of Adobe Systems Incorporated nor the names of its
- // contributors may be used to endorse or promote products derived from this
- // software without specific prior written permission.
- //
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- // POSSIBILITY OF SUCH DAMAGE.
-
- var Spry; if (!Spry) Spry = {}; if (!Spry.Utils) Spry.Utils = {};
-
-
- Spry.Utils.submitForm = function(form, callback, opts)
- {
- if (!form)
- return true;
-
- if ( typeof form == 'string' )
- form = Spry.$(form) || document.forms[form];
-
- var frmOpts = {};
- frmOpts.method = form.getAttribute('method');
- frmOpts.url = form.getAttribute('action') || document.location.href;
- frmOpts.enctype = form.getAttribute('enctype');
-
- Spry.Utils.setOptions(frmOpts, opts);
-
- var submitData = Spry.Utils.extractParamsFromForm(form, frmOpts.elements);
- if (frmOpts.additionalData)
- submitData += "&" + frmOpts.additionalData;
-
- if (!frmOpts.enctype || frmOpts.enctype.toLowerCase() != 'multipart/form-data')
- {
- // Ajax submission of a form doesn't work for multipart/form-data!
- frmOpts.method = (frmOpts.method && frmOpts.method.toLowerCase() == "post") ? 'POST' : 'GET';
- if (frmOpts.method == "GET")
- {
- // Data will be submitted in the url.
- if (frmOpts.url.indexOf('?') == -1)
- frmOpts.url += '?';
- else
- frmOpts.url += '&';
- frmOpts.url += submitData;
- }
- else
- {
- // Send Content-Type header.
- if (!frmOpts.headers) frmOpts.headers = {};
- if (!frmOpts.headers['Content-Type'] || frmOpts.headers['Content-Type'].indexOf("application/x-www-form-urlencoded") ==-1 )
- frmOpts.headers['Content-Type'] = 'application/x-www-form-urlencoded';
-
- // Set the postData
- frmOpts.postData = submitData;
- }
-
- Spry.Utils.loadURL(frmOpts.method, frmOpts.url, true, callback, frmOpts);
- return false;
- }
-
- // Native submission when 'multipart/form-data' is used.
- return true;
- };
-
-
- Spry.Utils.extractParamsFromForm = function (form, elements)
- {
- if (!form)
- return '';
-
- if ( typeof form == 'string' )
- form = document.getElementById(form) || document.forms[form];
-
- var formElements;
- if (elements)
- formElements = ',' + elements.join(',') + ',';
-
- var compStack = new Array(); // key=value pairs
-
- var el;
- for (var i = 0; i < form.elements.length; i++ )
- {
- el = form.elements[i];
- if (el.disabled || !el.name)
- {
- // Don't submit disabled elements.
- // Don't submit elements without name.
- continue;
- }
-
- if (!el.type)
- {
- // It seems that this element doesn't have a type set,
- // so skip it.
- continue;
- }
-
- if (formElements && formElements.indexOf(',' + el.name + ',')==-1)
- continue;
-
- switch(el.type.toLowerCase())
- {
- case 'text':
- case 'password':
- case 'textarea':
- case 'hidden':
- case 'submit':
- compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value));
- break;
- case 'select-one':
- var value = '';
- var opt;
- if (el.selectedIndex >= 0) {
- opt = el.options[el.selectedIndex];
- value = opt.value || opt.text;
- }
- compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(value));
- break;
- case 'select-multiple':
- for (var j = 0; j < el.length; j++)
- {
- if (el.options[j].selected)
- {
- value = el.options[j].value || el.options[j].text;
- compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(value));
- }
- }
- break;
- case 'checkbox':
- case 'radio':
- if (el.checked)
- compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value));
- break;
- default:
- // file, button, reset
- break;
- }
- }
- return compStack.join('&');
- };