Browse Source

Use event system on the client to handle ajax callbacks

release-0.6
thomascube 16 years ago
parent
commit
0e99d37a18
  1. 13
      program/include/rcube_json_output.php
  2. 4
      program/include/rcube_template.php
  3. 6
      program/js/app.js
  4. 8
      program/js/common.js

13
program/include/rcube_json_output.php

@ -33,6 +33,7 @@ class rcube_json_output
private $env = array();
private $texts = array();
private $commands = array();
private $callbacks = array();
private $message = null;
public $type = 'js';
@ -122,7 +123,12 @@ class rcube_json_output
*/
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 @@ class rcube_json_output
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);
}

4
program/include/rcube_template.php

@ -201,7 +201,9 @@ class rcube_template extends rcube_html_page
*/
public function command()
{
$this->js_commands[] = func_get_args();
$cmd = func_get_args();
if (strpos($cmd[0], 'plugin.') === false)
$this->js_commands[] = $cmd;
}

6
program/js/app.js

@ -3923,6 +3923,12 @@ function rcube_webmail()
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) {

8
program/js/common.js

@ -288,8 +288,8 @@ triggerEvent: function(evt, e)
{
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 @@ triggerEvent: function(evt, e)
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)

Loading…
Cancel
Save