Development

#2224: javascriptHelper.patch

You must first sign up to be able to contribute.

Ticket #2224: javascriptHelper.patch

File javascriptHelper.patch, 5.9 kB (added by FabianLange, 1 year ago)
  • JavascriptHelper.php

    old new  
    1616 * @subpackage helper 
    1717 * @author     Fabien Potencier <fabien.potencier@symfony-project.com> 
    1818 * @author     John Christopher <john.christopher@symfony-project.com> 
     19 * @author     Fabian Lange <Fabian.Lange@web.de> 
    1920 * @author     David Heinemeier Hansson 
    2021 * @version    SVN: $Id$ 
    2122 */ 
     
    7576  } 
    7677 
    7778  /** 
     79   * Returns options that can have a javascript expression. 
     80   * These options will not be quoted additionally if they are a string 
     81   */ 
     82  function get_js_options() 
     83  { 
     84    static $js_options; 
     85    if (!$js_options) 
     86    { 
     87      $js_options = array_merge(array( 
     88        'parameters', 'onUpdate', 'onDrop', 'onShow', 'onHide', 'afterUpdateElement', 'insertion' 
     89        ), get_ajax_options()); 
     90      foreach (get_callbacks() as $callback) 
     91      { 
     92        $js_options[] = 'on'.ucfirst($callback); 
     93      } 
     94    } 
     95 
     96    return $js_options; 
     97  } 
     98 
     99  /** 
    78100   * Returns a link that'll trigger a javascript function using the 
    79101   * onclick handler and return false after the fact. 
    80102   * 
     
    230252   */ 
    231253  function periodically_call_remote($options = array()) 
    232254  { 
    233     $frequency = isset($options['frequency']) ? $options['frequency'] : 10; // every ten seconds by default 
     255    $frequency = isset($options['frequency']) ? _php_type_to_js($options['frequency']) : 10; // every ten seconds by default 
    234256    $code = 'new PeriodicalExecuter(function() {'.remote_function($options).'}, '.$frequency.')'; 
    235257 
    236258    return javascript_tag($code); 
     
    593615      unset($options[$key]); 
    594616    } 
    595617 
    596     foreach (array('tag', 'overlap', 'constraint', 'handle') as $option) 
    597     { 
    598       if (isset($options[$option])) 
    599       { 
    600         $options[$option] = "'{$options[$option]}'"; 
    601       } 
    602     } 
    603  
    604618    if (isset($options['containment'])) 
    605619    { 
    606620      $options['containment'] = _array_or_string_for_javascript($options['containment']); 
    607621    } 
    608622 
    609     if (isset($options['hoverclass'])) 
    610     { 
    611       $options['hoverclass'] = "'{$options['hoverclass']}'"; 
    612     } 
    613  
    614623    if (isset($options['only'])) 
    615624    { 
    616625      $options['only'] = _array_or_string_for_javascript($options['only']); 
     
    681690      $options['accept'] = _array_or_string_for_javascript($options['accept']); 
    682691    } 
    683692 
    684     if (isset($options['hoverclass'])) 
    685     { 
    686       $options['hoverclass'] = "'{$options['hoverclass']}'"; 
    687     } 
    688  
    689693    return javascript_tag("Droppables.add('$element_id', "._options_for_javascript($options).")"); 
    690694  } 
    691695 
     
    853857      } 
    854858      if (isset($options['highlightcolor'])) 
    855859      { 
    856         $js_options['highlightcolor'] = "'".$options['highlightcolor']."'"
     860        $js_options['highlightcolor'] = $options['highlightcolor']
    857861      } 
    858862      if (isset($options['highlightendcolor'])) 
    859863      { 
    860         $js_options['highlightendcolor'] = "'".$options['highlightendcolor']."'"
     864        $js_options['highlightendcolor'] = $options['highlightendcolor']
    861865      } 
    862866      if (isset($options['loadTextURL'])) 
    863867      { 
     
    904908    } 
    905909    if (isset($options['indicator'])) 
    906910    { 
    907       $js_options['indicator']  = "'".$options['indicator']."'"
     911      $js_options['indicator']  = $options['indicator']
    908912    } 
    909913    if (isset($options['on_show'])) 
    910914    { 
     
    941945    $opts = array(); 
    942946    foreach ($options as $key => $value) 
    943947    { 
    944       $opts[] = "$key:$value"
     948      $opts[] = $key.":"._php_type_to_js($value,!in_array($key,get_js_options()))
    945949    } 
    946950    sort($opts); 
    947951 
     
    964968  { 
    965969    $js_options = _build_callbacks($options); 
    966970 
    967     $js_options['asynchronous'] = (isset($options['type']) && ($options['type'] == 'synchronous')) ? 'false' : 'true'
    968     if (isset($options['method'])) $js_options['method'] = _method_option_to_s($options['method'])
     971    $js_options['asynchronous'] = (isset($options['type']) && ($options['type'] == 'synchronous')) ? false : true
     972    if (isset($options['method'])) $js_options['method'] = $options['method']
    969973    if (isset($options['position'])) $js_options['insertion'] = "Insertion.".sfInflector::camelize($options['position']); 
    970     $js_options['evalScripts'] = (!isset($options['script']) || $options['script'] == '0' || $options['script'] == false) ? 'false' : 'true'
     974    $js_options['evalScripts'] = (!isset($options['script']) || $options['script'] == '0' || $options['script'] == false) ? false : true
    971975 
    972976    if (isset($options['form'])) 
    973977    { 
     
    985989    return _options_for_javascript($js_options); 
    986990  } 
    987991 
    988   function _method_option_to_s($method) 
     992  /** 
     993   * converts the given PHP type to the corresponding javascript type. 
     994   * @param option (typically from option array) as PHP type 
     995   * @return string javascript type equivalent 
     996   */ 
     997  function _php_type_to_js($option,$quoteStrings = true) 
    989998  { 
    990     return (is_string($method) && $method[0] != "'") ? "'$method'" : $method; 
     999    $asString = $option; 
     1000    if($quoteStrings && is_string($option) && $option[0] != "'" && $option[0] != "[") 
     1001    {  
     1002      //strings need to be sincle quoted 
     1003      $asString = "'$option'"; 
     1004    } else if (is_bool($option)) 
     1005    { 
     1006      //booleans need to be true or false (php will print 1 or nothing) 
     1007      $asString = ($option===true ? 'true' : 'false'); 
     1008    } else if (is_numeric($option)) 
     1009    { 
     1010      //numbers as they are but unquoted. 
     1011      $asString = $option; 
     1012    } 
     1013    return $asString; 
    9911014  } 
    9921015 
    9931016  function _build_observer($klass, $name, $options = array()) 
     
    10021025    $javascript  = 'new '.$klass.'("'.$name.'", '; 
    10031026    if (isset($options['frequency']) && $options['frequency'] > 0) 
    10041027    { 
    1005       $javascript .= $options['frequency'].", "; 
     1028      $javascript .= _php_type_to_js($options['frequency']).", "; 
    10061029    } 
    10071030    $javascript .= "function(element, value) {"; 
    10081031    $javascript .= $callback.'});';