[dev] [Ajax/Imple/Autocomplete] problems creating an autocompleter

Jan Schneider jan at horde.org
Fri Sep 20 16:43:54 UTC 2013


Zitat von Jonah Dekeyzer <jonah at menzz.be>:

> I'm developing an own module for Horde (advocaat).
>
> I would like to add an autocompleter to some of my horde forms.
>
> I figured out that the autocompleter used in IMP, KRONOLITH, ...  
> makes use of Imple.
>
> In order to test I created a file test.php: which contains:
> ---------------------------------------------------------------
> <?php
> require_once __DIR__ . '/lib/Application.php';
> Horde_Registry::appInit('advocaat');
>
> $page_output->header(array('title' => 'test'));
>
> $injector->getInstance('Horde_Core_Factory_Imple')->create('Advocaat_Ajax_Imple_CnAutoCompleter',  
> array(
>     'box' => 'cnACBox',
>     'id' => 'cn',
>     'pretty' => true
> ));
>
> ?>
> <div>
> <label for="cn">CN: </label>
> <input id="cn" />
> </div>
>
> <?php
>
> $page_output->footer();
> ------------------------------------------------------
>
>
>
> I also created a advocaat/lib/Ajax/Imple/CnAutoCompleter.php:
> ------------------------------------------------------
> <?php
> class Advocaat_Ajax_Imple_CnAutoCompleter extends  
> Horde_Core_Ajax_Imple_AutoCompleter
> {
>     /**
>      */
>     protected function _getAutoCompleter()
>     {
>         $opts = array();
>
>         foreach (array('box', 'triggerContainer') as $val) {
>             if (isset($this->_params[$val])) {
>                 $opts[$val] = $this->_params[$val];
>             }
>         }
>
>         return empty($this->_params['pretty'])
>             ? new Horde_Core_Ajax_Imple_AutoCompleter_Ajax($opts)
>             : new Horde_Core_Ajax_Imple_AutoCompleter_Pretty($opts);
>     }
>
>     /**
>      */
>     protected function _handleAutoCompleter($input)
>     {
>             return array($input, "other value");  // this is a  
> simple array for testing.  I wil add some functions here in the  
> future.
>     }
> }
> --------------------------------------------------------------------------
>
> I tried to test the CnAutoCompleter in Kronolith to make sure  
> CnAutoCompleter.php was working.
>
> So i copied the CnAutoCompleter.php to kronolith/lib/Ajax/Imple/.  
> and renamed the class to Kronolith_ (and so on).
> Next I changed a TagAutoCompleter to CnAutoCompleter in  
> kronolith/index.php and I could see that my CnAutoCompleter.php  
> worked in the Tag field of the event.
>
>
> I searched further and I added in the file advocaat/lib/Ajax/Application.php:
> -----------------------------------
> <?php
> class Advocaat_Ajax_Application extends Horde_Core_Ajax_Application
> {
>     /**
>      * Application specific initialization tasks should be done in here.
>      */
>     protected function _init()
>     {
>         // This adds the 'noop' action to the current application.
>         $this->addHandler('Advocaat_Ajax_Application_Handler');
>         $this->addHandler('Horde_Core_Ajax_Application_Handler_Imple');
>     }
>
> }
> -----------------------------------
>
>
> The autocompleter stil was not working so I searched further.
>
> Now I believe that I have to create a file advocaat/js/advocaat.js
>
> Based on what I saw in kronolith/js/kronolith.js, I created:
> ------------------------------------
> <?php
> AdvocaatCore = {
>         clickHandler: function(e, dblclick)
>         {
>                 if (e.isRightClick() || typeof e.element != 'function') {
>                         return;
>                 }
>
>                 var elt = e.element(),
>                         orig = e.element(),
>                         id, tmp, calendar;
>
>                 while (Object.isElement(elt)) {
>                         id = elt.readAttribute('id');
>
>                         switch (id) {
>                         case 'cn':
>                                  
> HordeImple.AutoCompleter.cns.addNewItemNode(elt.getText());
>                                 e.stop();
>                                 break;
>                         }
>                 }
>         }
> };
>
> /* Initialize global event handlers. */
> document.observe('dom:loaded', AdvocaatCore.onDomLoad.bind(AdvocaatCore));
>
> /* Extend AJAX exception handling. */
> HordeCore.onException =  
> HordeCore.onException.wrap(AdvocaatCore.onException.bind(AdvocaatCore));
> ------------------------------------
>
>
>
> My autocompleter is not working.
>
> Did I make a mistake?
> Is there an extra file I need to create?
>
>
>
>
> Thx,
>
>
> Jonah

What exactly isn't working? And do you get any error messages?
-- 
Jan Schneider
The Horde Project
http://www.horde.org/



More information about the dev mailing list