Introduce new AJAX framework with improved class use
[infodrom.org/service.infodrom.org] / src / infodrom.js
index 869c8c7..fa61440 100644 (file)
@@ -1,31 +1,3 @@
-function ajax_request(funcname, params, callback, error_callback)
-{
-    if (params === null)
-       params = 'func='+funcname;
-    else if (typeof params == 'object')
-       params['func'] = funcname
-    else if (typeof params == 'string')
-       params = 'func='+funcname+'&'+params
-    else
-       return false;
-
-    $.post('/ajax.php', params,
-          function(data){
-              if (!data.status) {
-                  if (typeof data.error == 'string')
-                      var error = data.error;
-                  else
-                      var error = 'An error occurred'
-                  alert(error);
-                  if (typeof error_callback == 'function')
-                      error_callback(data);
-                  return;
-              }
-              if (typeof callback == 'function')
-                  callback(data);
-          });
-}
-
 function show_message(text, timeout)
 {
     if (typeof timeout == 'undefined') timeout = 3;
@@ -75,3 +47,59 @@ function hide_error(text)
     $('#error_div').hide();
     return false;
 }
+
+(function($){
+    $.fn.ltag = function() {
+       return this.prop("tagName").toLowerCase();
+    };
+
+    $.fn.center = function () {
+       this.css("position","absolute");
+       this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) +
+                                $(window).scrollTop()) + "px");
+       this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) +
+                                 $(window).scrollLeft()) + "px");
+       return this;
+    };
+
+$.invoke = function(name, parms, callback) {
+    if (typeof(parms) == 'string' && parms.length)
+       parms = 'route='+name+'&'+parms;
+    else if (typeof(parms) == 'object')
+       parms['route'] = name;
+    else
+       parms = 'route='+name;
+
+    $.post('/ajax.php',
+               parms,
+               function(data){
+                   if (!data.status) {
+                       if (data.error) {
+                           if (data.redirect_login) {
+                               show_message(data.error, 5);
+                               setTimeout(function(){window.location.href = '/';}, 5000);
+                               return;
+                           } else
+                               return show_error(data.error);
+                       } else
+                           return show_error('Fehler im Backend zu "'+name+'" aufgetreten');
+                   }
+                   if (typeof(data.html) == 'object')
+                       for (id in data.html) {
+                           var elem = $('#'+id);
+                           if (elem.length) {
+                               elem.html(data.html[id]);
+                           }
+                       }
+                   if (typeof(data.values) == 'object')
+                       for (id in data.values) {
+                           var elem = $('#'+id);
+                           if (elem.length)
+                               elem.val(data.values[id]);
+                       }
+
+                   if (typeof(callback) == 'function')
+                       return callback(data);
+               });
+};
+})(jQuery);