thomascube
2009-06-01 0e99d37a18cf81b549b8fc7e8948e9bd338deaad
Use event system on the client to handle ajax callbacks

4 files modified
31 ■■■■ changed files
program/include/rcube_json_output.php 13 ●●●● patch | view | raw | blame | history
program/include/rcube_template.php 4 ●●● patch | view | raw | blame | history
program/js/app.js 6 ●●●●● patch | view | raw | blame | history
program/js/common.js 8 ●●●● patch | view | raw | blame | history
program/include/rcube_json_output.php
@@ -33,6 +33,7 @@
    private $env = array();
    private $texts = array();
    private $commands = array();
    private $callbacks = array();
    private $message = null;
    public $type = 'js';
@@ -122,7 +123,12 @@
     */
    public function command()
    {
        $this->commands[] = func_get_args();
        $cmd = func_get_args();
        if (strpos($cmd[0], 'plugin.') === 0)
          $this->callbacks[] = $cmd;
        else
          $this->commands[] = $cmd;
    }
    
    
@@ -227,8 +233,11 @@
        if (!empty($this->texts))
          $response['texts'] = $this->texts;
        // send response code
        // send function calls
        $response['exec'] = $this->get_js_commands() . $add;
        if (!empty($this->callbacks))
          $response['callbacks'] = $this->callbacks;
        echo json_serialize($response);
    }
program/include/rcube_template.php
@@ -201,7 +201,9 @@
     */
    public function command()
    {
        $this->js_commands[] = func_get_args();
        $cmd = func_get_args();
        if (strpos($cmd[0], 'plugin.') === false)
          $this->js_commands[] = $cmd;
    }
program/js/app.js
@@ -3923,6 +3923,12 @@
      console.log(response.exec);
      eval(response.exec);
    }
    // execute callback functions of plugins
    if (response.callbacks && response.callbacks.length) {
      for (var i=0; i < response.callbacks.length; i++)
        this.triggerEvent(response.callbacks[i][0], response.callbacks[i][1]);
    }
 
    // process the response data according to the sent action
    switch (response.action) {
program/js/common.js
@@ -288,8 +288,8 @@
{
  var ret, h;
  if (typeof e == 'undefined')
    e = {};
  if (typeof e == 'object')
    e = this;
  else if (typeof e == 'object')
    e.event = evt;
  
  if (this._events && this._events[evt] && !this._event_exec) {
@@ -297,9 +297,9 @@
    for (var i=0; i < this._events[evt].length; i++) {
      if ((h = this._events[evt][i])) {
        if (typeof h.func == 'function')
          ret = h.func.call ? h.func.call(h.obj, this, e) : h.func(this, e);
          ret = h.func.call ? h.func.call(h.obj, e) : h.func(e);
        else if (typeof h.obj[h.func] == 'function')
          ret = h.obj[h.func](this, e);
          ret = h.obj[h.func](e);
              
        // cancel event execution
        if (typeof ret != 'undefined' && !ret)