Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 6527

Show
Ignore:
Timestamp:
04/16/07 00:02:33 (2 years ago)
Author:
mislav
Message:

setValue support; needs unit tests from Tobie

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/branches/form/src/form.js

    r6526 r6527  
    134134  }, 
    135135 
     136  setValue: function(element, value) { 
     137    element = $(element); 
     138    var method = element.tagName.toLowerCase(); 
     139    Form.Element.Serializers[method](element, value); 
     140    return element; 
     141  }, 
     142 
    136143  clear: function(element) { 
    137144    $(element).value = ''; 
     
    179186 
    180187var Field = Form.Element; 
    181 var $F = Form.Element.getValue; 
     188var $F = function(el, value) { 
     189  return Form.Element[value === undefined ? 'getValue' : 'setValue'](el, value);  
     190
    182191 
    183192/*--------------------------------------------------------------------------*/ 
    184193 
    185194Form.Element.Serializers = { 
    186   input: function(element) { 
     195  input: function(element, value) { 
    187196    switch (element.type.toLowerCase()) { 
    188197      case 'checkbox':   
    189198      case 'radio': 
    190         return Form.Element.Serializers.inputSelector(element); 
     199        return Form.Element.Serializers.inputSelector(element, value); 
    191200      default: 
    192         return Form.Element.Serializers.textarea(element); 
    193     } 
    194   }, 
    195  
    196   inputSelector: function(element) { 
    197     return element.checked ? element.value : null; 
    198   }, 
    199  
    200   textarea: function(element) { 
    201     return element.value; 
    202   }, 
    203    
    204   select: function(element) { 
     201        return Form.Element.Serializers.textarea(element, value); 
     202    } 
     203  }, 
     204 
     205  inputSelector: function(element, value) { 
     206    return value === undefined ? 
     207      (element.checked ? element.value : null) : 
     208      (element.checked = !!value); 
     209  }, 
     210 
     211  textarea: function(element, value) { 
     212    return value === undefined ? element.value : (element.value = value); 
     213  }, 
     214   
     215  select: function(element, indexes) { 
    205216    return this[element.type == 'select-one' ?  
    206       'selectOne' : 'selectMany'](element); 
    207   }, 
    208    
    209   selectOne: function(element) { 
    210     var index = element.selectedIndex; 
    211     return index >= 0 ? this.optionValue(element.options[index]) : null; 
    212   }, 
    213    
    214   selectMany: function(element) { 
     217      'selectOne' : 'selectMany'](element, indexes); 
     218  }, 
     219   
     220  selectOne: function(element, index) { 
     221    if (index === undefined) { 
     222      index = element.selectedIndex; 
     223      return index >= 0 ? this.optionValue(element.options[index]) : null; 
     224    } 
     225    else element.selectedIndex = index; 
     226  }, 
     227   
     228  selectMany: function(element, indexes) { 
    215229    var values, length = element.length; 
    216230    if (!length) return null; 
     
    218232    for (var i = 0, values = []; i < length; i++) { 
    219233      var opt = element.options[i]; 
    220       if (opt.selected) values.push(this.optionValue(opt)); 
     234      if (indexes === undefined) { if (opt.selected) values.push(this.optionValue(opt)); } 
     235      else opt.selected = indexes.include(i); 
    221236    } 
    222237    return values;