Merge commit 'kc/master'
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / js / ajax.js
1 if ( KOHA === undefined ) var KOHA = {};
2
3 KOHA.AJAX = {
4     Submit: function ( options ) {
5         var error_callback = options.error;
6         $.extend( options, {
7             cache: false,
8             dataType: 'json',
9             type: 'POST',
10             error: function ( xhr, stat, error ) { KOHA.AJAX.BaseError( error_callback, xhr, stat, error ) },
11         } );
12         $.ajax( options );
13     },
14     BaseError: function ( callback, xhr, stat, e ) {
15         KOHA.xhr = xhr;
16         if ( !xhr.getResponseHeader( 'content-type' ).match( 'application/json' ) ) {
17             // Something really failed
18             humanMsg.displayAlert( _( 'Internal Server Error, please reload the page' ) );
19             return;
20         }
21
22         var error = eval( '(' + xhr.responseText + ')' );
23
24         if ( error.type == 'auth' ) {
25             humanMsg.displayMsg( _( 'You need to log in again, your session has timed out' ) );
26         }
27
28         if ( callback ) {
29             callback( error );
30         } else {
31             humanMsg.displayAlert( _( 'Error; your data might not have been saved' ) );
32         }
33     },
34     MarkRunning: function ( selector, text ) {
35         text = text || _( 'Loading...' );
36         $( selector )
37             .attr( 'disabled', 'disabled' )
38             .each( function () {
39                 var $image = $( '<img src="/intranet-tmpl/prog/img/spinner-small.gif" alt="" class="spinner" />' );
40                 switch ( this.localName.toLowerCase() ) {
41                     case 'input':
42                         $( this ).data( 'original-text', this.value );
43                         this.value = text;
44                         break;
45                     case 'a':
46                         $( this )
47                             .data( 'original-text', $( this ).text )
48                             .text( text )
49                             .before( $image )
50                             .bind( 'click.disabled', function () { return false; } );
51                         break;
52                     case 'button':
53                         $( this )
54                             .data( 'original-text', $( this ).text() )
55                             .text( text )
56                             .prepend( $image );
57                         break;
58                 }
59             } );
60     },
61     MarkDone: function ( selector ) {
62         $( selector )
63             .removeAttr( 'disabled' )
64             .each( function () {
65                 switch ( this.localName.toLowerCase() ) {
66                     case 'input':
67                         this.value = $( this ).data( 'original-text' );
68                         break;
69                     case 'a':
70                         $( this )
71                             .text( $( this ).data( 'original-text' ) )
72                             .unbind( 'click.disabled' )
73                             .prevAll( 'img.spinner' ).remove();
74                         break;
75                     case 'button':
76                         $( this )
77                             .text( $( this ).data( 'original-text' ) )
78                             .find( 'img.spinner' ).remove();
79                         break;
80                 }
81             } )
82             .removeData( 'original-text' );
83     }
84 }