Järjestelmäviesti:Gadget-Lomakkeet.js
Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.
- Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
- Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
- Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
(function () {
if ( mw.config.get("wgPageName").startsWith("Wikisanakirja") ||
mw.config.get("wgPageName").startsWith("Käyttäjä") ) {
jQuery(document).ready(function ($) {
var $formDivs = $(".oual-form");
console.log("Lomake 0.1");
$formDivs.each(function () {
var $this = $(this),
$form = $('<form name="createbox" class="createbox oual-form" action="/w/index.php" method="get"></form>'),
$inpTitle,
openInNewTab = true,
checkedPages = {}, // Sivut joiden olemassaolo on tarkistettu jo (true/false).
index = 1, // elementin järjestys
setTooltip = function ($elem, $hint) {
$hint.hide();
$elem.on("focus", function () {
$hint.show();
});
$elem.on("blur", function () {
$hint.hide();
});
$hint.on("click", function () {
$hint.hide();
});
};
if ( openInNewTab ) {
$form.attr("target", "_blank");
}
// Luetaan lomakekohtaiset elementit.
$this.find(".oual-input").each(function () {
var $this = $(this),
$label,
$input,
$hint,
$datalist,
params,
ex;
try {
params = JSON.parse($this.html());
} catch ( ex ) {
$this.replaceWith('<span class="error"><' + ex + ': ' + $this.text() + '></span>');
return;
}
if ( $this.hasClass("oual-title") ) { // Laatikko sivun nimen syöttöön
$input = $('<input type="text" />');
$input.attr("size", params.leveys);
$inpTitle = $input;
(function () {
var $parent = $this.parent().parent(), // div
$lnk = $parent.find('a'),
$cnt = $lnk.parent(),
$loader = $parent.find('img').parent();
$input.on('focus', function () {
// Piilotetaan sivulinkki.
//$cnt.hide();
});
$input.on('blur', function () {
var $this = $(this),
title = $this.val(),
q = {
action: 'render',
title: title,
},
url = mw.config.get("wgServer") + mw.config.get("wgScript"),
f_success = function () {
console.log("success");
checkedPages[title] = true;
$cnt.show();
$loader.hide();
$lnk.attr("href", mw.config.get("wgArticlePath").replace("$1", title));
$lnk.html(title);
},
f_fail = function () {
console.log("fail");
checkedPages[title] = false;
$cnt.hide();
$loader.hide();
};
if ( title ) {
if ( checkedPages[title] ) {
f_success();
} else {
$cnt.hide();
$loader.show();
$.get(url, q).done(function (resp) {
f_success();
}).fail(function (resp) {
f_fail();
});
}
}
});
}());
} else if ( $this.hasClass("oual-text") ) { // Tekstilaatikko, jossa on oletusarvoja.
$input = $('<input type="text" />');
if ( params.values ) {
$datalist = $('<datalist></datalist>');
$datalist.attr("id", "datalist-" + Math.floor(Math.random(1) * 100000));
$form.append($datalist);
$datalist.append(params.values.map(function (opt) { return $("<option></option>").append(opt); }));
$input.attr("list", $datalist.attr("id"));
}
$input.attr("size", params.leveys);
} else if ( $this.hasClass("oual-list") ) {
$input = $('<select></select>');
$input.append(params.values.map(function (opt) { return $("<option></option>").append(opt); }));
} else if ( $this.hasClass("oual-checkbox") ) {
$input = $('<input type="checkbox" />');
params.valinnainen = true; // checkbox voi aina olla tyhjä
} else if ( $this.hasClass("oual-submit") ) {
$input = $('<input type="submit" />');
$input.attr("class", params.class);
} else if ( $this.hasClass("oual-hidden") ) {
$input = $('<input type="hidden" />');
params.valinnainen = true; // voi olla aina tyhjä, koska käyttäjä ei pääse vaikuttamaan
} else {
$input = $('<span class="error">Tuntematon elementti: ' + $this.attr('class') + '.</span>');
}
$hint = $this.next(".oual-hint");
if ( !params.nimi ) {
$input.attr("name", "preloadparams[]");
$input.attr("index", index);
$hint.html($hint.html() + " [Parametri <strong>$" + index + "</strong>]");
index += 1;
} else {
$input.attr("name", params.nimi);
// Suhteellinen sivunnimi absoluuttiseksi.
if ( params.nimi === "preload" && params.arvo && params.arvo[0] === "/" ) {
params.arvo = mw.config.get("wgPageName") + params.arvo;
}
}
$input.attr("null", params.valinnainen);
$input.val(params.arvo || "");
setTooltip($input, $hint);
if ( params.selite ) {
$label = $('<label></label>');
$label.html(params.selite || "");
$label.append([ " ", $input ]);
if ( params["teksti/leveys"] ) {
$label.css("display", "inline-block");
$label.css("width", parseInt(params["selite/leveys"]) + "em");
}
$input = $label;
}
$this.replaceWith($input);
});
$this.after($form);
$form.append($this.children());
$this.remove();
$form.on("submit", function (e) {
var $first = null;
console.log("submit");
$(this).find("input").each(function () {
var $this = $(this);
if ( $this.val() === "" && !$this.attr("null") ) {
console.log("seis " + $this.attr("name"));
$this.css("border-color", "red");
$first = $first || $this;
e.preventDefault();
} else {
$this.css("border-color", "");
}
});
$first = $first || $inpTitle;
$first.focus();
});
});
}); // jQuery().ready()
} // ajoehdot
}());