web2py_component timeout, issue 576, thanks Alan
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 1.99.4 (2012-02-28 14:45:29) stable
|
||||
Version 1.99.4 (2012-02-28 15:09:09) stable
|
||||
|
||||
@@ -102,9 +102,51 @@ function web2py_ajax_page(method, action, data, target) {
|
||||
});
|
||||
}
|
||||
|
||||
function web2py_component(action,target) {
|
||||
jQuery(function(){web2py_ajax_page('get',action,null,target);});
|
||||
}
|
||||
function web2py_component(action, target, timeout, times){
|
||||
jQuery(function(){
|
||||
var element = $("#" + target).get(0);
|
||||
var statement = "$('#" + target + "').get(0).reload();";
|
||||
element.reload = function (){
|
||||
// Continue if times is Infinity or
|
||||
// the times limit is not reached
|
||||
if (this.reload_check()){
|
||||
web2py_ajax_page('get', action, null, target);} }; // reload
|
||||
// Method to check timing limit
|
||||
element.reload_check = function (){
|
||||
if (this.reload_counter == Infinity){return true;}
|
||||
else {
|
||||
if (!isNaN(this.reload_counter)){
|
||||
this.reload_counter -= 1;
|
||||
if (this.reload_counter < 0){
|
||||
if (!this.run_once){
|
||||
clearInterval(this.timing);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else{return true;}
|
||||
} }
|
||||
return false;}; // reload check
|
||||
if (!isNaN(timeout)){
|
||||
element.timeout = timeout;
|
||||
element.reload_counter = times;
|
||||
if (times > 1){
|
||||
// Multiple or infinite reload
|
||||
// Run first iteration
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
element.run_once = false;
|
||||
element.timing = setInterval(statement, timeout);
|
||||
element.reload_counter -= 1;
|
||||
}
|
||||
else if (times == 1) {
|
||||
// Run once with timeout
|
||||
element.run_once = true;
|
||||
element.setTimeout = setTimeout;
|
||||
element.timing = setTimeout(statement, timeout);
|
||||
}
|
||||
} else {
|
||||
// run once (no timeout specified)
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
} }); }
|
||||
|
||||
function web2py_comet(url,onmessage,onopen,onclose) {
|
||||
if ("WebSocket" in window) {
|
||||
|
||||
@@ -102,9 +102,51 @@ function web2py_ajax_page(method, action, data, target) {
|
||||
});
|
||||
}
|
||||
|
||||
function web2py_component(action,target) {
|
||||
jQuery(function(){web2py_ajax_page('get',action,null,target);});
|
||||
}
|
||||
function web2py_component(action, target, timeout, times){
|
||||
jQuery(function(){
|
||||
var element = $("#" + target).get(0);
|
||||
var statement = "$('#" + target + "').get(0).reload();";
|
||||
element.reload = function (){
|
||||
// Continue if times is Infinity or
|
||||
// the times limit is not reached
|
||||
if (this.reload_check()){
|
||||
web2py_ajax_page('get', action, null, target);} }; // reload
|
||||
// Method to check timing limit
|
||||
element.reload_check = function (){
|
||||
if (this.reload_counter == Infinity){return true;}
|
||||
else {
|
||||
if (!isNaN(this.reload_counter)){
|
||||
this.reload_counter -= 1;
|
||||
if (this.reload_counter < 0){
|
||||
if (!this.run_once){
|
||||
clearInterval(this.timing);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else{return true;}
|
||||
} }
|
||||
return false;}; // reload check
|
||||
if (!isNaN(timeout)){
|
||||
element.timeout = timeout;
|
||||
element.reload_counter = times;
|
||||
if (times > 1){
|
||||
// Multiple or infinite reload
|
||||
// Run first iteration
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
element.run_once = false;
|
||||
element.timing = setInterval(statement, timeout);
|
||||
element.reload_counter -= 1;
|
||||
}
|
||||
else if (times == 1) {
|
||||
// Run once with timeout
|
||||
element.run_once = true;
|
||||
element.setTimeout = setTimeout;
|
||||
element.timing = setTimeout(statement, timeout);
|
||||
}
|
||||
} else {
|
||||
// run once (no timeout specified)
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
} }); }
|
||||
|
||||
function web2py_comet(url,onmessage,onopen,onclose) {
|
||||
if ("WebSocket" in window) {
|
||||
|
||||
@@ -102,9 +102,51 @@ function web2py_ajax_page(method, action, data, target) {
|
||||
});
|
||||
}
|
||||
|
||||
function web2py_component(action,target) {
|
||||
jQuery(function(){web2py_ajax_page('get',action,null,target);});
|
||||
}
|
||||
function web2py_component(action, target, timeout, times){
|
||||
jQuery(function(){
|
||||
var element = $("#" + target).get(0);
|
||||
var statement = "$('#" + target + "').get(0).reload();";
|
||||
element.reload = function (){
|
||||
// Continue if times is Infinity or
|
||||
// the times limit is not reached
|
||||
if (this.reload_check()){
|
||||
web2py_ajax_page('get', action, null, target);} }; // reload
|
||||
// Method to check timing limit
|
||||
element.reload_check = function (){
|
||||
if (this.reload_counter == Infinity){return true;}
|
||||
else {
|
||||
if (!isNaN(this.reload_counter)){
|
||||
this.reload_counter -= 1;
|
||||
if (this.reload_counter < 0){
|
||||
if (!this.run_once){
|
||||
clearInterval(this.timing);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else{return true;}
|
||||
} }
|
||||
return false;}; // reload check
|
||||
if (!isNaN(timeout)){
|
||||
element.timeout = timeout;
|
||||
element.reload_counter = times;
|
||||
if (times > 1){
|
||||
// Multiple or infinite reload
|
||||
// Run first iteration
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
element.run_once = false;
|
||||
element.timing = setInterval(statement, timeout);
|
||||
element.reload_counter -= 1;
|
||||
}
|
||||
else if (times == 1) {
|
||||
// Run once with timeout
|
||||
element.run_once = true;
|
||||
element.setTimeout = setTimeout;
|
||||
element.timing = setTimeout(statement, timeout);
|
||||
}
|
||||
} else {
|
||||
// run once (no timeout specified)
|
||||
web2py_ajax_page('get', action, null, target);
|
||||
} }); }
|
||||
|
||||
function web2py_comet(url,onmessage,onopen,onclose) {
|
||||
if ("WebSocket" in window) {
|
||||
|
||||
+35
-3
@@ -108,7 +108,19 @@ class mybuiltin(object):
|
||||
|
||||
def LOAD(c=None, f='index', args=None, vars=None,
|
||||
extension=None, target=None,ajax=False,ajax_trap=False,
|
||||
url=None,user_signature=False, content='loading...',**attr):
|
||||
url=None,user_signature=False, timeout=None, times=1,
|
||||
content='loading...',**attr):
|
||||
""" LOAD a component into the action's document
|
||||
|
||||
Timing options:
|
||||
-times: An integer or string ("infinity"/"continuous")
|
||||
specifies how many times the component is requested
|
||||
-timeout (milliseconds): specifies the time to wait before
|
||||
starting the request or the frequency if times is greater than
|
||||
1 or "infinity".
|
||||
Timing options default to the normal behavior. The component
|
||||
is added on page loading without delay.
|
||||
"""
|
||||
from html import TAG, DIV, URL, SCRIPT, XML
|
||||
if args is None: args = []
|
||||
vars = Storage(vars or {})
|
||||
@@ -121,9 +133,29 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
||||
url = url or URL(request.application, c, f, r=request,
|
||||
args=args, vars=vars, extension=extension,
|
||||
user_signature=user_signature)
|
||||
script = SCRIPT('web2py_component("%s","%s")' % (url, target),
|
||||
_type="text/javascript")
|
||||
# timing options
|
||||
if isinstance(times, basestring):
|
||||
if times.upper() in ("INFINITY", "CONTINUOUS"):
|
||||
times = "Infinity"
|
||||
else:
|
||||
raise TypeError("Unsupported times argument %s" % times)
|
||||
elif isinstance(times, int):
|
||||
if times <= 0:
|
||||
raise ValueError("Times argument must be greater than zero, 'Infinity' or None")
|
||||
else:
|
||||
raise TypeError("Unsupported times argument type %s" % type(times))
|
||||
if timeout is not None:
|
||||
if not isinstance(timeout, (int, long)):
|
||||
raise ValueError("Timeout argument must be an integer or None")
|
||||
elif timeout <= 0:
|
||||
raise ValueError("Timeout argument must be greater than zero or None")
|
||||
statement = "web2py_component('%s','%s', %s, %s);" \
|
||||
% (url, target, timeout, times)
|
||||
else:
|
||||
statement = "web2py_component('%s','%s');" % (url, target)
|
||||
script = SCRIPT(statement, _type="text/javascript")
|
||||
return TAG[''](script, DIV(content,**attr))
|
||||
|
||||
else:
|
||||
if not isinstance(args,(list,tuple)):
|
||||
args = [args]
|
||||
|
||||
Reference in New Issue
Block a user