/** * Makes the element with the DOM ID specified by +element_id+ receive * dropped draggable elements (created by draggable_element). * and make an AJAX call By default, the action called gets the DOM ID * of the element as parameter. * * Example: * <?= $scriptaculous_helper->drop_receiving_element("my_cart", array('url' => * array('controller' => "cart", 'action' => "add" ))) ?> * * You can change the behaviour with various options, see * http://script.aculo.us for more documentation. */ public function drop_receiving_element($element_id, $options = array()) { $options['with'] = !empty($options['with']) ? $options['with'] : "'id='" . urlencode(element . id); $options['onDrop'] = !empty($options['onDrop']) ? $options['onDrop'] : "function(element){" . AkPrototypeHelper::remote_function($options) . "}"; foreach ($options as $key => $option) { /** * @todo: fix this code when implemented PrototypeHelper * * if (in_array(AkPrototypeHelper::AJAX_OPTIONS[$option])) { * unset($options[$option]); * } */ } if (in_array($options['accept'])) { $options['accept'] = AkJavascriptHelper::array_or_string_for_javascript($options['accept']); } if (in_array($options['hoverclass'])) { $options['hoverclass'] = "'{$options['hoverclass']}'"; } return AkJavascriptHelper::javascript_tag("Droppables.add('{$element_id}', " . AkJavascriptHelper::_options_for_javascript($options) . ")"); }
/** * 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 */ public 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 .= "'" . $this->_controller->ak_url_helper->url_for($options['url']) . "'"; $js_options = array(); if (!empty($options['tokens'])) { $js_options['tokens'] = AkJavascriptHelper::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 .= ', ' . AkJavascriptHelper::_options_for_javascript($js_options) . ')'; return AkJavascriptHelper::javascript_tag($function); }