Ejemplo n.º 1
0
    /**
      * Adds AJAX autocomplete functionality to the text input field with the 
      * DOM ID specified by +field_id+.
      *
      * This function expects that the called action returns a HTML <ul> list,
      * or nothing if no entries should be displayed for autocompletion.
      *
      * You'll probably want to turn the browser's built-in autocompletion off,
      * so be sure to include a autocomplete="off" attribute with your text
      * input field.
      *
      * The autocompleter object is assigned to a Javascript variable named <tt>field_id</tt>_auto_completer.
      * This object is useful if you for example want to trigger the auto-complete suggestions through
      * other means than user input (for that specific case, call the <tt>activate</tt> method on that object). 
      * 
      * Required +options+ are:
      * <tt>url</tt>::       URL to call for autocompletion results
      *                       in url_for format.
      * 
      * Addtional +options+ are:
      * <tt>update</tt>::    Specifies the DOM ID of the element whose 
      *                       innerHTML should be updated with the autocomplete
      *                       entries returned by the AJAX request. 
      *                       Defaults to field_id + '_auto_complete'
      * <tt>with</tt>::      A JavaScript expression specifying the
      *                       parameters for the XMLHttpRequest. This defaults
      *                       to 'fieldname=value'.
      * <tt>indicator</tt>:: Specifies the DOM ID of an element which will be
      *                       displayed while autocomplete is running.
      * <tt>tokens</tt>::    A string or an array of strings containing
      *                       separator tokens for tokenized incremental 
      *                       autocompletion. Example: <tt>tokens => ','</tt> would
      *                       allow multiple autocompletion entries, separated
      *                       by commas.
      * <tt>min_chars</tt>:: The minimum number of characters that should be
      *                       in the input field before an Ajax call is made
      *                       to the server.
      * <tt>on_hide</tt>::   A Javascript expression that is called when the
      *                       autocompletion div is hidden. The expression
      *                       should take two variables: element and update.
      *                       Element is a DOM element for the field, update
      *                       is a DOM element for the div from which the
      *                       innerHTML is replaced.
      * <tt>on_show</tt>::   Like on_hide, only now the expression is called
      *                       then the div is shown.
      * <tt>select</tt>::    Pick the class of the element from which the value for 
      *                       insertion should be extracted. If this is not specified,
      *                       the entire element is used.
      * @deprecated 
      */
    function auto_complete_field($field_id, $options = array())
    {
        $function =  "var {$field_id}_auto_completer = new Ajax.Autocompleter(";
        $function .= "'{$field_id}', ";
        $function .= !empty($options['update']) ? "'{$options['update']}', " : "'{$field_id}_auto_complete', ";
        $function .= "'".UrlHelper::url_for($options['url'])."'";

        $js_options = array();
        if (!empty($options['tokens'])){
            $js_options['tokens'] = JavaScriptHelper::_array_or_string_for_javascript($options['tokens']) ;
        }
        if (!empty($options['with'])) {
            $js_options['callback'] = "function(element, value) { return {$options['with']} }";
        }
        if (!empty($options['indicator'])) {
            $js_options['indicator'] = "'{$options['indicator']}'";
        }
        if (!empty($options['select'])) {
            $js_options['select'] = "'{$options['select']}'";
        }

        $default_options = array(
        'on_show' => 'onShow',
        'on_hide' => 'onHide',
        'min_chars' => 'min_chars'
        );

        foreach ($default_options as $key=>$default_option) {
            if (!empty($options[$key])) {
                $js_options[$default_option] = $options[$key];
            }
        }
        $function .= ', '.JavaScriptHelper::_options_for_javascript($js_options).')';
        return JavaScriptHelper::javascript_tag($function);
    }