MediaWiki:Common.js/Datatables.js

MediaWiki-Schnittstellenseite
< MediaWiki:Common.js
Version vom 13. Juli 2023, 12:44 Uhr von Markus Scholz (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
// Das Script Datatables.js lädt Datatables in der Version 1.13.5 und nimmt tabellenpezifische Anpassungen vor, insbesondere für die Toolliste

// Parameter des Querystrings zurückgeben, siehe Quelle https://stackoverflow.com/questions/979975/how-to-get-the-value-from-the-url-parameter
var querystring = function () {
 	var query_string = {};
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (typeof query_string[pair[0]] === "undefined") {
			query_string[pair[0]] = pair[1];
		} else if (typeof query_string[pair[0]] === "string") {
			var arr = [ query_string[pair[0]], pair[1] ];
			query_string[pair[0]] = arr;
		} else {
			query_string[pair[0]].push(pair[1]);
		}
	} 
	return query_string;
} ();

// Toolliste
if (mw.config.get( 'wgPageName' ) === 'Portal:Tools') {

  // Das Script datatables-1.10.19.min.js erstellt interaktive Tabellen mit Filterfunktionen
  // Der Quellcode wurde durch Sprymedia Ltd. unter der MIT-Lizenz bereitgestellt
  // Weitere Informationen unter http://www.datatables.net
  $.getScript( 'https://wiki.llz.uni-halle.de/resources/assets/js/datatables-1.13.5.min.js', function() {

  // Die Erweiterung fnGetColumnData wurde von Benedikt Forchhammer bereitgestellt
  $.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) {
    if ( typeof iColumn == "undefined" ) return new Array();
    if ( typeof bUnique == "undefined" ) bUnique = true;
    if ( typeof bFiltered == "undefined" ) bFiltered = true;
    if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;
    var aiRows;
    if (bFiltered == true) aiRows = oSettings.aiDisplay;
    else aiRows = oSettings.aiDisplayMaster; // all row numbers
    var asResultData = new Array();
    for (var i=0,c=aiRows.length; i<c; i++) {
      iRow = aiRows[i];
      var aData = this.fnGetData(iRow);
      var sValue = aData[iColumn];
      if (bIgnoreEmpty == true && sValue.length == 0) continue;
      else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;
      else asResultData.push(sValue);
    }
    return asResultData;
  };

  // Die Erweiterung fnFilterClear wurde von Allan Jardine bereitgestellt
  $.fn.dataTableExt.oApi.fnFilterClear  = function ( oSettings ) {
    oSettings.oPreviousSearch.sSearch = "";
    if ( typeof oSettings.aanFeatures.f != 'undefined' ) {
      var n = oSettings.aanFeatures.f;
      for ( var i=0, iLen=n.length ; i<iLen ; i++ ) {
        $('input', n[i]).val( '' );
      }
    }
    for ( var i=0, iLen=oSettings.aoPreSearchCols.length ; i<iLen ; i++ ) {
      oSettings.aoPreSearchCols[i].sSearch = "";
    }
    oSettings.oApi._fnReDraw( oSettings );
  };

  // Toolliste in diesem Wiki

    // Menüfeld füllen
    function fillSelectFilter( arrColumnData ) {
      var strAll = '';
      var expSeparator = / *,{1} */;
      var arrSelectList = new Array();
      for ( i = 0; i < arrColumnData.length; i++ ) {
        arrFieldData = arrColumnData[i].split(expSeparator);
	  for ( j = 0; j < arrFieldData.length; j++ ) {
            if (jQuery.inArray(arrFieldData[j], arrSelectList) > -1) {
              continue;
            } else {
              arrSelectList.push(arrFieldData[j]);
            }
          }
        }
        arrSelectList.sort();
        var strHtml = '<select><option value="">' + strAll + '</option>', i;
        for ( k = 0; k < arrSelectList.length; k++ ) {
          strHtml += '<option value="' + arrSelectList[k] + '">' + arrSelectList[k] + '</option>';
        }
        return strHtml + '</select>';
      }

    // Eigenschaften festlegen
    var objFilterTable = $(".datatable #tools").dataTable( {
      "bAutoWidth": true,
      "bFilter": true,
      "bInfo": false,
      "bLengthChange": false,
      "bPaginate": false,
      "bProcessing": false,
      "bSort": false,
      "bSortClasses": false,
      "oLanguage": {
        "sEmptyTable": "Die Tabelle ist leer.",
        "sSearch": "",
        "sZeroRecords": "Die Filter führen zu keinem Ergebnis.",
      },
      "columnDefs": [
        {
          "targets": [6, 7],
          "visible": false,
          "searchable": true
        }
      ]
    });

    // Toolbar erweitern
    $("#tools_filter").append("<div class='zusatzfilter'><label><input type='checkbox' id='intern'>Nur universitätsweite Tools anzeigen</label><label><input type='checkbox' id='datenschutzkonform'>Nur datenschutzkonforme Tools anzeigen</label></div>");
    $(".dataTables_filter input[type='search']").attr("placeholder", "Suchbegriff");

    // Filter erstellen
    $(".datatable thead td").each( function ( i ) {
      if ($(this).hasClass("selectFilter")){
        this.innerHTML = fillSelectFilter( objFilterTable.fnGetColumnData(i) );
        $("select", this).change( function () {
          objFilterTable.fnFilter( $(this).val(), i );
        });
      } else if ($(this).hasClass("inputFilter")) {
        this.innerHTML = '<input>';
      };
    });

    // Nicht-universelle Filter für die Toolliste
    $(".datatable thead input:eq(0)").keyup( function () {
      objFilterTable.fnFilter( $(this).val(), 0 );
    });
    $(".datatable thead input:eq(3)").keyup( function () {
      objFilterTable.fnFilter( $(this).val(), 3 );
    });
    $("#datenschutzkonform").click(function() {
      if ($(this).is(":checked")) {
        objFilterTable.fnFilter("Datenschutzkonform", 6);
      } else {
        objFilterTable.fnFilter("", 6);
      }
    });
    $("#intern").click(function() {
      if ($(this).is(":checked")) {
        objFilterTable.fnFilter("Universitätsweit", 7);
      } else {
        objFilterTable.fnFilter("", 7);
      }
    });

    // Alle Filter zurücksetzen
    $( ".datatable .aktionen a#resetFilter" ).click( function( ) {
      objFilterTable.fnFilterClear();
      $(".datatable thead td").each( function ( ) {
        $("input").val( '' );
        $("select").val( '' );
      });
      $("#datenschutzkonform").prop("checked", false);
      $("#intern").prop("checked", false);
    });

    // Kategorie vorauswählen
    var strKategorie = querystring.kategorie;
    if (typeof(strKategorie) !== 'undefined') {
      $(".datatable thead td").each( function ( i ) {
        if ( $(this).attr('id') == 'kategorie' ) {
          objFilterTable.fnFilter( strKategorie, i );
          $("select").val( strKategorie );
        }
      });
    }
  });
}

// Tool vorschlagen
if (mw.config.get( 'wgPageName' ) === 'Tool_vorschlagen') {

  // Formular absenden
  $(".formular .aktionen a#absenden").click( function(){
    var strKey = '<input type="hidden" name="key" value="pI32JzLW7zz8IsL4wm6zmtLBHoneKJUgeVgRahJ9ryLALdf3ZoYJHtM0yGglOZ7">';
    $(".formular form#vorschlagen").append(strKey).submit();
    alert("Das Formular wurde versendet.");
    $(".formular input, .formular select").each( function() {
      $(this).val('');
    });
  });
}

// Tool hinzufügen
if (mw.config.get( 'wgPageName' ) === 'Hilfe:Tool_hinzufügen') {

  // Auswahlmenüs füllen
  $.each (menü, function(feld, wert) {
    var strAll = '';
    var strHtml = '<option value="">' + strAll + '</option>';
    for ( i = 0; i < wert.length; i++ ) {
      strHtml += '<option value="' + wert[i] + '">' + wert[i] + '</option>';
    }
    $(".formular #" + feld + " select").prepend(strHtml);
  });

  // Auswahl hinzufügen
  $(".formular select").change(function (){
    var expSeparator = / *,{1} */;
    var strAdd = $(this).val();
    if (strAdd.length > 0) {
      var arrInput = new Array();
      if ($(this).next(".formular input").val().length > 0) {
        var arrInput = $(this).next(".formular input").val().split(expSeparator);
      }
      if ($.inArray(strAdd, arrInput) == -1) {
        arrInput.push(strAdd);
      }
      $(this).next(".formular input").val(arrInput.join(', '));
    }
  });

  // Quelltext für Toolliste
  $(".formular .aktionen#merkmale a#liste").click( function() {
    var strQuelltext = toolliste;
    $(".formular input, .formular textarea").each(function() {
      strQuelltext = strQuelltext.replace('{{' + $(this).parent().attr("id") + '}}', $(this).val().trim());
    });
    if ( $("#verfügbarkeit input").val().indexOf("Universitätsweit") > -1 ) {
      strQuelltext = strQuelltext.replace('{{label}}', ' class="label"');    
    } else {
      strQuelltext = strQuelltext.replace('{{label}}', '');    
    }
    $(".formular .quelltext textarea").val(strQuelltext);
    $(".formular .quelltext div").html('Diesen Quelltext in die <b>Toolliste</b> kopieren.');
  });

  // Quelltext für Detailseite
  $(".formular .aktionen#merkmale a#details").click( function() {
    var strQuelltext = detailseite;
    $(".formular input, .formular textarea").each(function() {
      strQuelltext = strQuelltext.replace('{{' + $(this).parent().attr("id") + '}}', $(this).val().trim());
    });
    $(".formular .quelltext textarea").val(strQuelltext);
    $(".formular .quelltext div").html('Diesen Quelltext in die <b>Detailseite</b> kopieren.');
  });

  // Detailseite erstellen
  $(".formular #seitenname input").keyup(function(){
    if ($(".formular #seitenname input").val().trim().length > 0) {
      var strLink = '<a id="erstellen" href="https://wiki.llz.uni-halle.de/index.php?title=' + $(".formular #seitenname input").val().trim() + '&action=edit" target="editor">Detailseite erstellen</a>';
      $(".formular .aktionen#quelltext a#erstellen").remove();
      $(".formular .aktionen#quelltext").append(strLink);
    } else {
      $(".formular .aktionen#quelltext a#erstellen").remove();
    }
  });
}