1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
15: abstract class Horde_Core_Ajax_Imple_AutoCompleter extends Horde_Core_Ajax_Imple
16: {
17: 18: 19: 20: 21: 22: 23: 24: 25:
26: public function __construct($params)
27: {
28: if (empty($params['triggerId'])) {
29: $params['triggerId'] = $this->_randomid();
30: }
31:
32: if (empty($params['triggerContainer'])) {
33: $params['triggerContainer'] = $this->_randomid();
34: }
35:
36: parent::__construct($params);
37: }
38:
39: 40: 41:
42: public function attach()
43: {
44: $params = array(
45: '"' . $this->_params['triggerId'] . '"'
46: );
47:
48: $config = $this->_attach(array('tokens' => array(',', ';')));
49:
50: Horde::addScriptFile('autocomplete.js', 'horde');
51: Horde::addScriptFile('keynavlist.js', 'horde');
52: Horde::addScriptFile('liquidmetal.js', 'horde');
53: if (isset($config['ajax'])) {
54: $func = 'Ajax.Autocompleter';
55: $params[] = '"' . $this->_getUrl($config['ajax'], $GLOBALS['registry']->getApp(), array('input' => $this->_params['triggerId'])) . '"';
56: } elseif (isset($config['browser'])) {
57: $func = 'Autocompleter.Local';
58: $params[] = $config['browser'];
59: $config['params'] = array_merge(array(
60: 'partialSearch' => 1,
61: 'fullSearch' => 1,
62: 'score' => 1
63: ), $config['params']);
64: } elseif (isset($config['pretty'])) {
65: Horde::addScriptFile('prettyautocomplete.js', 'horde');
66: $func = 'PrettyAutocompleter';
67: $config['params'] = array_merge(array(
68: 'boxClass' => 'hordeACBox kronolithLongField',
69: 'trigger' => $this->_params['triggerId'],
70: 'triggerContainer' => $this->_params['triggerContainer'],
71: 'uri' => (string)$this->_getUrl($config['pretty'], $GLOBALS['registry']->getApp()),
72: 'deleteIcon' => (string)Horde_Themes::img('delete-small.png'),
73: 'box' => !empty($this->_params['box']) ? $this->_params['box'] : ''
74: ), $config['params']);
75:
76: if (!empty($this->_params['existing'])) {
77: $config['params']['existing'] = $this->_params['existing'];
78: }
79: } else {
80: return;
81: }
82:
83: $config['raw_params'] = !empty($config['raw_params']) ? $config['raw_params'] : array();
84: foreach ($config['raw_params'] as $name => $val) {
85: $config['params'][$name] = 1;
86: }
87:
88: $js_params = Horde_Serialize::serialize($config['params'], Horde_Serialize::JSON);
89:
90: foreach ($config['raw_params'] as $name => $val) {
91: $js_params = str_replace('"' . $name . '":1', '"' . $name . '":' . $val, $js_params);
92: }
93:
94: Horde::addScriptFile('effects.js', 'horde');
95:
96: Horde::addInlineScript((isset($config['var']) ? $config['var'] . ' = ' : '') . 'new ' . $func . '(' . implode(',', $params) . ',' . $js_params . ')', empty($this->_params['no_onload']) ? 'dom' : null);
97: }
98:
99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119:
120: abstract protected function _attach($js_params);
121:
122: }
123: