Bug 9444 [Revised] Use DataTables in system preferences editor
[koha_fer] / koha-tmpl / intranet-tmpl / prog / en / js / pages / preferences.js
index bbc0b1b..96e9e99 100644 (file)
@@ -2,12 +2,13 @@
 
 KOHA.Preferences = {
     Save: function ( form ) {
-        data = $( form ).find( '.modified' ).serialize();
+        modified_prefs = $( form ).find( '.modified' );
+        data = modified_prefs.serialize();
         if ( !data ) {
-            humanMsg.displayAlert( 'Nothing to save' );
+            humanMsg.displayAlert( MSG_NOTHING_TO_SAVE );
             return;
         }
-        KOHA.AJAX.MarkRunning( $( form ).find( '.save-all' ), _( 'Saving...' ) );
+        KOHA.AJAX.MarkRunning( $( form ).find( '.save-all' ), _( MSG_SAVING ) );
         KOHA.AJAX.Submit( {
             data: data,
             url: '/cgi-bin/koha/svc/config/systempreferences/',
@@ -16,7 +17,13 @@ KOHA.Preferences = {
         } );
     },
     Success: function ( form ) {
-        humanMsg.displayAlert( 'Saved' );
+        var msg = "";
+        modified_prefs.each(function(){
+            var modified_pref = $(this).attr("id");
+            modified_pref = modified_pref.replace("pref_","");
+            msg += '<strong>Saved preference '+modified_pref+'</strong>\n';
+        });
+        humanMsg.displayAlert(msg);
 
         $( form )
             .find( '.modified-warning' ).remove().end()
@@ -26,19 +33,57 @@ KOHA.Preferences = {
 };
 
 $( document ).ready( function () {
-    $( '.prefs-tab .preference' ).change( function () {
+
+    $("table.preferences").dataTable($.extend(true, {}, dataTablesDefaults, {
+        "sDom": 't',
+        "aoColumnDefs": [
+            { "aTargets": [ -1 ], "bSortable": false, "bSearchable": false }
+        ],
+        "bPaginate": false
+    }));
+
+    function mark_modified() {
         $( this.form ).find( '.save-all' ).removeAttr( 'disabled' );
         $( this ).addClass( 'modified' );
-        var name_cell = $( this ).parent().parent().find( '.name-cell' );
-
-               if ( !name_cell.find( '.modified-warning' ).length ) name_cell.append( '<em class="modified-warning">(modified)</em>' );
+        var name_cell = $( this ).parents( '.name-row' ).find( '.name-cell' );
+               if ( !name_cell.find( '.modified-warning' ).length )
+            name_cell.append( '<em class="modified-warning">('+MSG_MODIFIED+')</em>' );
         KOHA.Preferences.Modified = true;
+    }
+
+    $( '.prefs-tab' )
+        .find( 'input.preference, textarea.preference' ).keyup( function () {
+            if ( this.defaultValue === undefined || this.value != this.defaultValue ) mark_modified.call( this );
+        } ).end()
+        .find( 'select.preference' ).change( mark_modified );
+    $('.preference-checkbox').change( function () {
+        $('.preference-checkbox').addClass('modified');
+        mark_modified.call(this);
     } );
 
-    if ( document.location.search.indexOf( 'jumpfield' ) != -1 ) {
-        document.location.hash = "highlighted";
+    $(".set_syspref").click(function() {
+        var s = $(this).attr('data-syspref');
+        var v = $(this).attr('data-value');
+        // populate the input with the value in data-value
+        $("#pref_"+s).val(v);
+        // pass the DOM element to trigger "modified" to enable submit button
+        mark_modified.call($("#pref_"+s)[0]);
+        return false;
+    });
+
+    window.onbeforeunload = function () {
+        if ( KOHA.Preferences.Modified ) {
+            return MSG_MADE_CHANGES;
+        }
     }
 
+    $( '.prefs-tab .action .cancel' ).click( function () { KOHA.Preferences.Modified = false } );
+
+    $( '.prefs-tab .save-all' ).attr( 'disabled', true ).click( function () {
+        KOHA.Preferences.Save( this.form );
+        return false;
+    } );
+
     $( '.prefs-tab .expand-textarea' ).show().click( function () {
         $( this ).hide().nextAll( 'textarea, input[type=submit]' )
             .animate( { height: 'show', queue: false } )
@@ -47,14 +92,28 @@ $( document ).ready( function () {
         return false;
     } ).nextAll( 'textarea, input[type=submit]' ).hide().css( { opacity: 0 } );
 
-    $( '.prefs-tab .save-all' ).attr( 'disabled', true ).click( function () {
-        KOHA.Preferences.Save( this.form );
-        return false;
-    } );
+    $("h3").attr("class","expanded").attr("title",MSG_CLICK_TO_EXPAND);
+    var collapsible = $(".collapsed,.expanded");
 
-    window.onbeforeunload = function () {
-        if ( KOHA.Preferences.Modified ) {
-            return _( "You have made changes to system preferences." );
+    $(collapsible).toggle(
+        function () {
+            $(this).addClass("collapsed").removeClass("expanded").attr("title",MSG_CLICK_TO_EXPAND);
+            $(this).next("div").hide();
+        },
+        function () {
+            $(this).addClass("expanded").removeClass("collapsed").attr("title",MSG_CLICK_TO_COLLAPSE);
+            $(this).next("div").show();
         }
+    );
+
+    if ( to_highlight ) {
+        var words = to_highlight.split( ' ' );
+        $( '.prefs-tab table' ).find( 'td, th' ).not( '.name-cell' ).each( function ( i, td ) {
+            $.each( words, function ( i, word ) { $( td ).highlight( word ) } );
+        } ).find( 'option, textarea' ).removeHighlight();
+    }
+
+    if ( search_jumped ) {
+        document.location.hash = "jumped";
     }
 } );