diff options
author | wei <> | 2006-08-12 05:34:54 +0000 |
---|---|---|
committer | wei <> | 2006-08-12 05:34:54 +0000 |
commit | 54d4919e3f1b00b644fa3c107acdf20159a1b154 (patch) | |
tree | 1c3e9cc679d4e08cc4beb06eee6f79838a34cb31 /framework/Web/Javascripts/prototype | |
parent | 6dd529fdc25404da07cf9256d92f2a94985c65fc (diff) |
Update active controls.
Diffstat (limited to 'framework/Web/Javascripts/prototype')
-rw-r--r-- | framework/Web/Javascripts/prototype/form.js | 60 | ||||
-rw-r--r-- | framework/Web/Javascripts/prototype/hash.js | 26 |
2 files changed, 49 insertions, 37 deletions
diff --git a/framework/Web/Javascripts/prototype/form.js b/framework/Web/Javascripts/prototype/form.js index 590f7f9f..41745353 100644 --- a/framework/Web/Javascripts/prototype/form.js +++ b/framework/Web/Javascripts/prototype/form.js @@ -7,17 +7,17 @@ var Field = { focus: function(element) { $(element).focus(); }, - + present: function() { for (var i = 0; i < arguments.length; i++) if ($(arguments[i]).value == '') return false; return true; }, - + select: function(element) { $(element).select(); }, - + activate: function(element) { element = $(element); element.focus(); @@ -32,16 +32,16 @@ var Form = { serialize: function(form) { var elements = Form.getElements($(form)); var queryComponents = new Array(); - + for (var i = 0; i < elements.length; i++) { var queryComponent = Form.Element.serialize(elements[i]); if (queryComponent) queryComponents.push(queryComponent); } - + return queryComponents.join('&'); }, - + getElements: function(form) { form = $(form); var elements = new Array(); @@ -53,19 +53,19 @@ var Form = { } return elements; }, - + getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); - + if (!typeName && !name) return inputs; - + var matchingInputs = new Array(); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || - (name && input.name != name)) + (name && input.name != name)) continue; matchingInputs.push(input); } @@ -111,25 +111,25 @@ Form.Element = { element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); - + if (parameter) { var key = encodeURIComponent(parameter[0]); if (key.length == 0) return; - + if (parameter[1].constructor != Array) parameter[1] = [parameter[1]]; - + return parameter[1].map(function(value) { return key + '=' + encodeURIComponent(value); }).join('&'); } }, - + getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); - + if (parameter) return parameter[1]; } @@ -137,13 +137,15 @@ Form.Element = { Form.Element.Serializers = { input: function(element) { + if(typeof(element.type) == "undefined") + return false; switch (element.type.toLowerCase()) { case 'submit': case 'hidden': case 'password': case 'text': return Form.Element.Serializers.textarea(element); - case 'checkbox': + case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); } @@ -158,12 +160,12 @@ Form.Element.Serializers = { textarea: function(element) { return [element.name, element.value]; }, - + select: function(element) { - return Form.Element.Serializers[element.type == 'select-one' ? + return Form.Element.Serializers[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, - + selectOne: function(element) { var value = '', opt, index = element.selectedIndex; if (index >= 0) { @@ -172,7 +174,7 @@ Form.Element.Serializers = { } return [element.name, value]; }, - + selectMany: function(element) { var value = []; for (var i = 0; i < element.length; i++) { @@ -196,15 +198,15 @@ Abstract.TimedObserver.prototype = { this.frequency = frequency; this.element = $(element); this.callback = callback; - + this.lastValue = this.getValue(); this.registerCallback(); }, - + registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, - + onTimerEvent: function() { var value = this.getValue(); if (this.lastValue != value) { @@ -235,14 +237,14 @@ Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; - + this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, - + onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { @@ -250,17 +252,17 @@ Abstract.EventObserver.prototype = { this.lastValue = value; } }, - + registerFormCallbacks: function() { var elements = Form.getElements(this.element); for (var i = 0; i < elements.length; i++) this.registerCallback(elements[i]); }, - + registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { - case 'checkbox': + case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; @@ -272,7 +274,7 @@ Abstract.EventObserver.prototype = { Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } - } + } } } diff --git a/framework/Web/Javascripts/prototype/hash.js b/framework/Web/Javascripts/prototype/hash.js index 7e8c6f5d..1589189c 100644 --- a/framework/Web/Javascripts/prototype/hash.js +++ b/framework/Web/Javascripts/prototype/hash.js @@ -3,35 +3,45 @@ var Hash = { for (var key in this) { var value = this[key]; if (typeof value == 'function') continue; - + var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, - + keys: function() { return this.pluck('key'); }, - + values: function() { return this.pluck('value'); }, - + merge: function(hash) { return $H(hash).inject($H(this), function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, - + toQueryString: function() { - return this.map(function(pair) { - return pair.map(encodeURIComponent).join('='); + return this.map(function(pair) + { + //special case for PHP, array post data. + if(typeof(pair[1]) == 'object' || typeof(pair[1]) == 'array') + { + return $A(pair[1]).collect(function(value) + { + return encodeURIComponent(pair[0])+'='+encodeURIComponent(value);
+ }).join('&');
+ } + else + return pair.map(encodeURIComponent).join('='); }).join('&'); }, - + inspect: function() { return '#<Hash:{' + this.map(function(pair) { return pair.map(Object.inspect).join(': '); |