Development

Changeset 22649

You must first sign up to be able to contribute.

Changeset 22649

Show
Ignore:
Timestamp:
09/30/09 21:21:11 (4 years ago)
Author:
boutell
Message:

date widget now shows a single text field behaving per Rick's specifications, populates select elements behind the scenes.
Needs styling to look right. Also, uses jquery domready to hopefully avoid IE problems. John please test.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/pkToolkitPlugin/trunk/lib/widget/sfWidgetFormJQueryDate.class.php

    r21644 r22649  
    6868      $image = sprintf(', buttonImage: "%s", buttonImageOnly: true', $this->getOption('image')); 
    6969    } 
    70  
    71     return parent::render($name, $value, $attributes, $errors). 
    72            $this->renderTag('input', array('type' => 'hidden', 'size' => 10, 'id' => $id = $this->generateId($name).'_jquery_control', 'disabled' => 'disabled')). 
     70    return  
     71      // Parent class select controls, our interface to Symfony 
     72      '<span style="display: none">' . parent::render($name, $value, $attributes, $errors) . '</span>' . 
     73      // Autopopulated by jQuery.Datepicker, we also allow direct editing and have hooks relating to that 
     74      $this->renderTag('input', array('type' => 'text', 'size' => 10, 'id' => $id = $this->generateId($name).'_jquery_control', 'onBlur' => $prefix . "_update_linked($('#$id').val())")) . 
    7375           sprintf(<<<EOF 
    7476<script type="text/javascript"> 
     77$(function() 
     78{ 
    7579  function %s_read_linked() 
    7680  { 
    77     \$("#%s").val(\$("#%s").val() + "/" + \$("#%s").val() + "/" + \$("#%s").val()); 
    78  
     81    var sel = '#%s'; 
     82    var month = '#%s'; 
     83    var day = '#%s'; 
     84    var year = '#%s'; 
     85    val = \$(month).val() + "/" + \$(day).val() + "/" + \$(year).val(); 
     86    if (val === '//') 
     87    { 
     88      val = ''; 
     89    } 
     90    \$(sel).val(val); 
    7991    return {}; 
    8092  } 
     
    8294  function %s_update_linked(date) 
    8395  { 
    84     \$("#%s").val(date.substring(3, 5)); 
    85     \$("#%s").val(date.substring(0, 2)); 
    86     \$("#%s").val(date.substring(6, 10)); 
     96    var components = date.match(/(\d+)\/(\d+)\/(\d\d\d\d)/); 
     97    if (!components) 
     98    { 
     99      if (date.length) 
     100      { 
     101        alert("The date must be in MM/DD/YYYY format. Example: 09/29/2009. Hint: select a date from the calendar."); 
     102        $('#$id').focus(); 
     103      } 
     104      // TODO: a way to indicate it's mandatory 
     105      return; 
     106    } 
     107    var month = "#%s"; 
     108    var day = "#%s"; 
     109    var year = "#%s"; 
     110    \$(month).val(components[1]); 
     111    \$(day).val(components[2]); 
     112    \$(year).val(components[3]); 
    87113  } 
    88114 
     115  %s_read_linked(); 
     116   
    89117  \$("#%s").datepicker(\$.extend({}, { 
     118    dateFormat: "mm/dd/yyyy", 
    90119    minDate:    new Date(%s, 1 - 1, 1), 
    91120    maxDate:    new Date(%s, 12 - 1, 31), 
     
    95124    %s 
    96125  }, \$.datepicker.regional["%s"], %s)); 
     126}); 
    97127</script> 
    98128EOF 
    99129      , 
    100130      $prefix, $id, 
    101       $this->generateId($name.'[day]'), $this->generateId($name.'[month]'), $this->generateId($name.'[year]'), 
     131      $this->generateId($name.'[month]'), $this->generateId($name.'[day]'), $this->generateId($name.'[year]'), 
    102132      $prefix, 
    103       $this->generateId($name.'[day]'), $this->generateId($name.'[month]'), $this->generateId($name.'[year]'), 
     133      $this->generateId($name.'[month]'), $this->generateId($name.'[day]'), $this->generateId($name.'[year]'), 
     134      $prefix, 
    104135      $id, 
    105136      min($this->getOption('years')), max($this->getOption('years')),