Add basic client-side AJAX wrappers
authorJesse Weaver <pianohacker@gmail.com>
Mon, 7 Sep 2009 05:00:59 +0000 (23:00 -0600)
committerJesse Weaver <pianohacker@gmail.com>
Mon, 7 Sep 2009 05:01:32 +0000 (23:01 -0600)
koha-tmpl/intranet-tmpl/prog/en/js/ajax.js [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
koha-tmpl/intranet-tmpl/prog/img/spinner-small.gif [new file with mode: 0644]

diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/ajax.js b/koha-tmpl/intranet-tmpl/prog/en/js/ajax.js
new file mode 100644 (file)
index 0000000..95d59e7
--- /dev/null
@@ -0,0 +1,84 @@
+if ( KOHA === undefined ) var KOHA = {};
+
+KOHA.AJAX = {
+    Submit: function ( options ) {
+        var error_callback = options.error;
+        $.extend( options, {
+            cache: false,
+            dataType: 'json',
+            type: 'POST',
+            error: function ( xhr, stat, error ) { KOHA.AJAX.BaseError( error_callback, xhr, stat, error ) },
+        } );
+        $.ajax( options );
+    },
+    BaseError: function ( callback, xhr, stat, e ) {
+        KOHA.xhr = xhr;
+        if ( !xhr.getResponseHeader( 'content-type' ).match( 'application/json' ) ) {
+            // Something really failed
+            humanMsg.displayAlert( _( 'Internal Server Error, please reload the page' ) );
+            return;
+        }
+
+        var error = eval( '(' + xhr.responseText + ')' );
+
+        if ( error.type == 'auth' ) {
+            humanMsg.displayMsg( _( 'You need to log in again, your session has timed out' ) );
+        }
+
+        if ( callback ) {
+            callback( error );
+        } else {
+            humanMsg.displayAlert( _( 'Error; your data might not have been saved' ) );
+        }
+    },
+    MarkRunning: function ( selector, text ) {
+        text = text || _( 'Loading...' );
+        $( selector )
+            .attr( 'disabled', 'disabled' )
+            .each( function () {
+                var $image = $( '<img src="/intranet-tmpl/prog/img/spinner-small.gif" alt="" class="spinner" />' );
+                switch ( this.localName.toLowerCase() ) {
+                    case 'input':
+                        $( this ).data( 'original-text', this.value );
+                        this.value = text;
+                        break;
+                    case 'a':
+                        $( this )
+                            .data( 'original-text', $( this ).text )
+                            .text( text )
+                            .before( $image )
+                            .bind( 'click.disabled', function () { return false; } );
+                        break;
+                    case 'button':
+                        $( this )
+                            .data( 'original-text', $( this ).text() )
+                            .text( text )
+                            .prepend( $image );
+                        break;
+                }
+            } );
+    },
+    MarkDone: function ( selector ) {
+        $( selector )
+            .removeAttr( 'disabled' )
+            .each( function () {
+                switch ( this.localName.toLowerCase() ) {
+                    case 'input':
+                        this.value = $( this ).data( 'original-text' );
+                        break;
+                    case 'a':
+                        $( this )
+                            .text( $( this ).data( 'original-text' ) )
+                            .unbind( 'click.disabled' )
+                            .prevAll( 'img.spinner' ).remove();
+                        break;
+                    case 'button':
+                        $( this )
+                            .text( $( this ).data( 'original-text' ) )
+                            .find( 'img.spinner' ).remove();
+                        break;
+                }
+            } )
+            .removeData( 'original-text' );
+    }
+}
index 7810bef..c9b151c 100644 (file)
@@ -1,4 +1,5 @@
 // staff-global.js
+if ( KOHA === undefined ) var KOHA = {};
 
 function _(s) { return s } // dummy function for gettext
 
diff --git a/koha-tmpl/intranet-tmpl/prog/img/spinner-small.gif b/koha-tmpl/intranet-tmpl/prog/img/spinner-small.gif
new file mode 100644 (file)
index 0000000..9fb0339
Binary files /dev/null and b/koha-tmpl/intranet-tmpl/prog/img/spinner-small.gif differ