Ticket #2224: javascriptHelper.patch
| File javascriptHelper.patch, 5.9 kB (added by FabianLange, 1 year ago) |
|---|
-
JavascriptHelper.php
old new 16 16 * @subpackage helper 17 17 * @author Fabien Potencier <fabien.potencier@symfony-project.com> 18 18 * @author John Christopher <john.christopher@symfony-project.com> 19 * @author Fabian Lange <Fabian.Lange@web.de> 19 20 * @author David Heinemeier Hansson 20 21 * @version SVN: $Id$ 21 22 */ … … 75 76 } 76 77 77 78 /** 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 /** 78 100 * Returns a link that'll trigger a javascript function using the 79 101 * onclick handler and return false after the fact. 80 102 * … … 230 252 */ 231 253 function periodically_call_remote($options = array()) 232 254 { 233 $frequency = isset($options['frequency']) ? $options['frequency']: 10; // every ten seconds by default255 $frequency = isset($options['frequency']) ? _php_type_to_js($options['frequency']) : 10; // every ten seconds by default 234 256 $code = 'new PeriodicalExecuter(function() {'.remote_function($options).'}, '.$frequency.')'; 235 257 236 258 return javascript_tag($code); … … 593 615 unset($options[$key]); 594 616 } 595 617 596 foreach (array('tag', 'overlap', 'constraint', 'handle') as $option)597 {598 if (isset($options[$option]))599 {600 $options[$option] = "'{$options[$option]}'";601 }602 }603 604 618 if (isset($options['containment'])) 605 619 { 606 620 $options['containment'] = _array_or_string_for_javascript($options['containment']); 607 621 } 608 622 609 if (isset($options['hoverclass']))610 {611 $options['hoverclass'] = "'{$options['hoverclass']}'";612 }613 614 623 if (isset($options['only'])) 615 624 { 616 625 $options['only'] = _array_or_string_for_javascript($options['only']); … … 681 690 $options['accept'] = _array_or_string_for_javascript($options['accept']); 682 691 } 683 692 684 if (isset($options['hoverclass']))685 {686 $options['hoverclass'] = "'{$options['hoverclass']}'";687 }688 689 693 return javascript_tag("Droppables.add('$element_id', "._options_for_javascript($options).")"); 690 694 } 691 695 … … 853 857 } 854 858 if (isset($options['highlightcolor'])) 855 859 { 856 $js_options['highlightcolor'] = "'".$options['highlightcolor']."'";860 $js_options['highlightcolor'] = $options['highlightcolor']; 857 861 } 858 862 if (isset($options['highlightendcolor'])) 859 863 { 860 $js_options['highlightendcolor'] = "'".$options['highlightendcolor']."'";864 $js_options['highlightendcolor'] = $options['highlightendcolor']; 861 865 } 862 866 if (isset($options['loadTextURL'])) 863 867 { … … 904 908 } 905 909 if (isset($options['indicator'])) 906 910 { 907 $js_options['indicator'] = "'".$options['indicator']."'";911 $js_options['indicator'] = $options['indicator']; 908 912 } 909 913 if (isset($options['on_show'])) 910 914 { … … 941 945 $opts = array(); 942 946 foreach ($options as $key => $value) 943 947 { 944 $opts[] = "$key:$value";948 $opts[] = $key.":"._php_type_to_js($value,!in_array($key,get_js_options())); 945 949 } 946 950 sort($opts); 947 951 … … 964 968 { 965 969 $js_options = _build_callbacks($options); 966 970 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']; 969 973 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; 971 975 972 976 if (isset($options['form'])) 973 977 { … … 985 989 return _options_for_javascript($js_options); 986 990 } 987 991 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) 989 998 { 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; 991 1014 } 992 1015 993 1016 function _build_observer($klass, $name, $options = array()) … … 1002 1025 $javascript = 'new '.$klass.'("'.$name.'", '; 1003 1026 if (isset($options['frequency']) && $options['frequency'] > 0) 1004 1027 { 1005 $javascript .= $options['frequency'].", ";1028 $javascript .= _php_type_to_js($options['frequency']).", "; 1006 1029 } 1007 1030 $javascript .= "function(element, value) {"; 1008 1031 $javascript .= $callback.'});';