Files
2024-12-17 17:34:10 +01:00

218 lines
8.6 KiB
JavaScript

/**
* @package JEM
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
* @author Sascha Karnatz
*/
/**
* Comments in German
* Function: dieses Javascript ermoeglicht es automatisch die Metatags zu befuellen
*/
// Variablen werden als global definiert, da sie ueber mehrere Funktion hinweg genutzt werden
var $keyword; // Array - aufgeschlitete Variablen, welche einem HTML-Tag zugeordnet werden kann
var $keywords; // String - Verbindungsvariable zur noch nicht umgeschriebenen Variante der Keywords
var $manual_keywords = ""; // String - Speichert alle manuell eingefuegen Keywords ab
var $description; // String - die Beschreibung
var $description_vars; // Array - HTML - Tags, die mit einem onchange versehen werden
var $inputbox = ""; // String - es wird mit Hilfe dieser Variable ermittel, ob der User Beschreibung bzw. Keywords angeklickt hat
var $meta_error; // String - Fehler, der in der jeweiligen Sprache ausgegeben wird
function starter($msg) { // Funktion, welche beim Starten der Seite aufgerufen werden
get_keywords(); // leider funktionier window.onload nicht, da sonst die Popupfenster Fehler verursachen
get_description();
switchstart();
$meta_error = $msg;
}
function switchstart() { // Diese Funktion uebergibt alle relevanten Feldern ein onchange
try {
if ($keyword.length > 0) {
for (var i = 0; i < $keyword.length; i++) {
document.getElementById($keyword[i]).onchange = seo_switch;
}
}
if ($description_vars.length > 0) {
for (var i = 0; i < $description_vars.length; i++) {
document.getElementById($description_vars[i]).onchange = seo_switch;
}
}
} catch (e) {
//alert("Error occurred! JEM SEO - Javascript stopped!");
}
}
function seo_switch() { // Bei jeder Veraenderung werden beide Funktionen aufgerufen
include_keyword();
include_description();
}
function get_keywords() {
$keywords = $("#meta_keywords").val(); // Keywords auslesenen
var $Nullvalue = "[NULL]";
$manual_keywords = ""; // die Anzeige der nicht zuordbaren Variable wird geleert
$keyword = $keywords.split(","); // in eine Array aufspalten
for (var i = 0; i < $keyword.length; i++) { // und alle Leerzeichen entfernen
try { // Die Abfrage wird Fehlersicher gemacht
$keyword[i] = $keyword[i].replace(/ /g, "");
$keyword[i] = $keyword[i].replace(/\[/g, "");
$keyword[i] = $keyword[i].replace(/\]/g, "");
document.getElementById($keyword[i]).value; // ein Fehler wird provoziert, falls dieses Element nicht vorhanden ist
} catch (e) {
if ($manual_keywords != "") { // das nicht verwendete Keyword wird neu abgespeichert
$manual_keywords += ", ";
}
$manual_keywords += $keyword[i];
$keyword[i] = $Nullvalue; // Falls eine angegebene ID nicht vorhanden ist, wird diese aus dem Array entfernt
}
}
var $keyword_count = 0;
var $keyword_length = $keyword.length;
i = 0;
while (i < $keyword_length) {
if ($keyword[i] == $Nullvalue) {
$keyword[i] = $keyword[$keyword.length - $keyword_count - 1];
$keyword[$keyword.length - $keyword_count - 1] = $Nullvalue;
$keyword_length--;
$keyword_count++;
} else {
i++;
}
}
for (i = 0; i < $keyword_count; i++) {
$keyword.pop();
}
}
function get_description() {
$description = $("#meta_description").val(); // uebergebene Bechreibung wird aufgerufen und eingefuegt
if ($description != "") {
var Ergebnis = $description.split("["); // alle relevanten Teile werden getrennt
if (Ergebnis.length > 1) {
$description_vars = new Array(Ergebnis.length - 1); // Neues Array zum eintragen der geforderten Variablen wird angelegt
for (var i = 1; i < Ergebnis.length; i++) {
var inputarray = Ergebnis[i].substring(0, (Ergebnis[i].indexOf("]"))); // die einzelnen Variablen werden aus dem Satz ausgelesen
try { // Die Abfrage wird Fehlersicher gemacht
$description_vars[i - 1] = inputarray;
document.getElementById($description_vars[i - 1]).value;
} catch (e) {
$description_vars.pop();
}
}
} else {
$description_vars = new Array(0);
}
} else {
$description_vars = new Array(0);
}
}
function include_keyword() {
var $keywords = "";
for (var i = 0; i < $keyword.length; i++) { // Es werden alle keywords ausgelesen
if ($keywords != "") {
$keywords += ", ";
}
if (document.getElementById($keyword[i]).tagName == "SELECT") { // es wird unterschieden zwischen normalen Inputfeld und Selectfeld
if (document.getElementById($keyword[i]).value != 0) { // um auch korrekt abspeichern zu koennen wird das Komma richtig gesetzt
$keywords += get_selected_option($keyword[i]); // Auslesen des Wertes aus dem Selectfeld
} else {
$keywords += "[" + $keyword[i] + "]";
}
} else if (document.getElementById($keyword[i]).value != "") {
$keywords += document.getElementById($keyword[i]).value; //Auslesen des Wertes aus dem Inputfeld
} else {
$keywords += "[" + $keyword[i] + "]";
}
}
if ($manual_keywords != "") {
if ($keywords != "") {
$manual_keywords = ", " + $manual_keywords;
}
$keywords = $keywords + $manual_keywords;
}
document.getElementById("meta_keywords").value = $keywords;
}
function include_description() {
var desc_split, desc_value, desc_length;
var desc_output = $description; // Es wird die urspruengliche Ausgabe abgespeichert, da diese im spaeteren Verlauf geaendert wird
for (var i = 0; i < $description_vars.length; i++) {
desc_value = "[" + $description_vars[i] + "]"; // Der Wert wird auf Default gesetzt, damit er ausgegeben werden kann, falls ein deafulteinstellung gewaehlt wird
if (document.getElementById($description_vars[i]).tagName == "SELECT") { // es wird wieder unterschieden zwischen Select und Inputfeld
if (document.getElementById($description_vars[i]).value != 0) {
desc_value = get_selected_option($description_vars[i]);
}
} else {
if (document.getElementById($description_vars[i]).value != "") {
desc_value = document.getElementById($description_vars[i]).value;
}
}
desc_split = desc_output.split("[" + $description_vars[i] + "]"); // Der Satz wird in zwei Teile geteilt
desc_output = ""; // der auszugebene Satz wird geloescht, damit er mit den beiden Haelften wieder befuellt werden kann
desc_length = desc_split.length;
for (var j = 0; j < desc_length; j++) {
desc_output += desc_split[j];
if (j < desc_length - 1) {
desc_output += desc_value; // der Wert wird zwischen beide Texthaelften geschrieben
}
}
}
document.getElementById("meta_description").value = desc_output;
}
function insert_keyword($keyword) {
try {
var $input = document.getElementById($inputbox).value;
if ($inputbox == "meta_keywords") {
if ($input != "") {
$input += ",";
}
}
$input += " " + $keyword;
document.getElementById($inputbox).value = $input;
change_metatags();
} catch (e) {
alert($meta_error);
}
}
function change_metatags() {
if ($inputbox == "meta_keywords") {
$keywords = document.getElementById($inputbox).value;
get_keywords();
} else {
$description = document.getElementById($inputbox).value;
get_description();
}
switchstart();
}
function get_inputbox($input) {
if ($input == "meta_keywords") {
document.getElementById($input).value = $keywords;
} else {
document.getElementById($input).value = $description;
}
$inputbox = $input;
}
function get_selected_option($selectfield) {
var $buffer;
for (i = 0; i < document.getElementById($selectfield).length; i++) {
if (document.getElementById($selectfield).options[i].value == document.getElementById($selectfield).value) {
$buffer = document.getElementById($selectfield).options[i].text;
break;
}
}
return $buffer;
}