MediaWiki:WikiEditor-insert-Zitat.js
Aus Bayernflora
Hinweis: Leeren Sie nach dem Speichern 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: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen
/* <pre>*/
/* global $, mw */
/*jslint es5: true, sloppy: true, todo: true, white: true, indent: 2 */
/*
This script is specific to this Wiki
insert a German {{Zitat|Literature key|alternative text}}
DEPENDENCIES:
* Template:Literatur
* Template:Literaturdaten
* Template:Zitat
* Property:Autor
* Kategorie:Literatur
* CSS classes vertical-align-top booktable
USAGE:
////////////////////////////////
if (mw.config.get('wgAction') == "edit"
|| mw.config.get('wgAction') == "submit" ) {
importScript("MediaWiki:WikiEditor-insert-Zitat.js");// Wizard to insert template:Zitat
}
////////////////////////////////
// fix LiquidThreads Version 2.1-alpha
function initFixEditorIcons4LiquidThreads () {
if($(".lqt-talkpage").length) {
mw.loader.using("ext.liquidThreads", function () {
// Extension LiquidThreads has a bug and does not load all i18n messages so do it manually
mw.loader.using('jquery.wikiEditor.dialogs.config', function () {
// mw.notify('jquery.wikiEditor.dialogs.config loaded');
$(".lqt-talkpage-header .lqt_start_discussion a, li.lqt-command.lqt-command-reply a").on("click", function () {
setTimeout(function() {
importScript("MediaWiki:WikiEditor-insert-Zitat.js");
setTimeout(function() {
// trigger wikiEditor-toolbar-doneInitialSections assigned in above file
$('#wpTextbox1').trigger('wikiEditor-toolbar-doneInitialSections');
// console.log("MediaWiki:Common.js. trigger('wikiEditor-toolbar-doneInitialSections') done (4000ms delay) ... ");
}, 2000);
}, 2000);
});
});// jquery.wikiEditor.dialogs.config
});// ext.liquidThreads
}
return null;
}// initFixEditorIcons4LiquidThreads()
//in MediaWiki:Common.js
$(document).ready(function() {
initFixEditorIcons4LiquidThreads();
});
////////////////////////////////
TODO
* Autor oder Herausgeber sind nicht speziefisch an Literaturquelle gebunden,
es werden ALLE Autoren oder ALLE Herausgeber gefunden, unabhängig, wo sie im Wiki auftauchen.
Ein Vorfilter ist nicht so leicht möglich (Internes Objekt?).
*/
var iconInsertLiteraturZitat = '//species-id.net/o/media/a/a3/Toolbar_insert_reference_text.png',
iconFormEdit = '//species-id.net/o/media/thumb/4/4d/Farm-Fresh_application_form_edit.png/22px-Farm-Fresh_application_form_edit.png',
literaturZitatTool = function () {
return {
dialogs: {
'insert-zitat': {
title: 'Assistent für ein Literaturzitat',
id: 'wikieditor-toolbar-zitat-dialog',
html: '<div class="wikieditor-toolbar-dialog-wrapper">\
<fieldset><div class="wikieditor-toolbar-table-form">\
Aus der ↗ :<a href="'+ mw.config.get("wgServer") + mw.config.get("wgArticlePath").replace(/\$1/,'Kategorie:Literatur')
+'" target="_blank">Kategorie:Literatur</a> stammende Referenzen können hier für ein Zitat ausgewählt werden.\
Geben Sie zuerst einen Autor ein, dann wird Ihnen eine Liste gefundener Literatureinträge gezeigt. Klicken Sie auf ein Zitat, dass Sie verwenden möchten – fügen gegebenenfalls einen anderen Anzeigetext hinzu – und klicken Sie abschließend auf Einfügen.<br/>\
Tip: Am Ende einer Wikiseite können Sie mit {{Literaturverzeichnis}} ein automatisches Verzeichnis erstellen.\
<div class="wikieditor-toolbar-field-wrapper">\
<table>\
<tr><td>\
<label for="wikieditor-toolbar-zitat-autor-search"><b>Autor suchen:</b></label>\
</td><td>\
<input type="text" id="wikieditor-toolbar-zitat-autor-search" placeholder="Autor eingeben" size="35"/> oder\
</td></tr>\
<tr><td>\
<label for="wikieditor-toolbar-zitat-herausgeber-search"><b>Herausgeber suchen:</b></label>\
</td><td>\
<input type="text" id="wikieditor-toolbar-zitat-herausgeber-search" placeholder="Herausgeber eingeben" size="35"/>\
</td></tr>\
</table><br/>\
<div style="overflow-y:scroll;max-height:30ex;margin-bottom:1ex;"><table class="vertical-align-top booktable" style="margin-bottom:0px;" id="wikieditor-toolbar-zitat-foundreferences" ></table></div>\
<code>{{Zitat|<input type="text" id="wikieditor-toolbar-zitat-text" placeholder="Literaturschlüssel" size="35"/>|<input type="text" id="wikieditor-toolbar-zitat-alttext" placeholder="Optionaler Alternativtext"/>}}</code>\
</div>\
</div>\
</fieldset>\
</div>',
init: function () {
// Insert translated strings into labels
$(this).find('[rel]').each(function () {
$(this).text(mw.msg($(this).attr('rel')));
});
/**
* list references in #wikieditor-toolbar-zitat-foundreferences
* @param {object} data from action=ask query.results
* @returns {undefined}
*/
function generateRefList (data) {
var results = data.query.results;
// console.log("generateRefList(data)");
// console.log(data);
$('#wikieditor-toolbar-zitat-foundreferences').html('');// reset list
if (!results) {
$('<tr><th>Zitiere</th><th>Literatureintrag</th></tr>'
+ '<tr><td colspan="2">Keinen Eintrag gefunden</td></tr>').appendTo('#wikieditor-toolbar-zitat-foundreferences');
} else {
$('<tr><th>Zitiere</th><th>Literatureintrag</th></tr>').appendTo('#wikieditor-toolbar-zitat-foundreferences');
$.map(results, function(itemresult, item) {
//console.log("DEBUG map(indexresult, item)");
//console.log(itemresult);
//console.log(item);
var pageName = itemresult.fulltext,
itemHtmlId = encodeURIComponent(pageName).replace(/'/,"%27").replace(/[%\.]/g,"_");// id with . is problematic
$.ajax({
url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
dataType: "json",
data: {
action: "parse",
text: "{{Literaturdaten|" + pageName + "}}",
format: "json"
}
})
.done(function(data) {
//console.log(data);
$.map(data.parse.text, function(refitem) {
$('<tr>'
+'<td id="insert_ref_'+itemHtmlId+'"></td>'
+'<td style="padding-left:1em!important;">'
+ '<div style="float:right;margin-left:5px;" title="Eintrag bearbeiten"><a '
+ ' href="'+ mw.config.get("wgServer") + mw.config.get("wgArticlePath").replace(/\$1/,'Special:FormEdit/Literatur/' + pageName.replace(/ /g,"_")) +'"'
+ ' target="_blank" '
+ ' >'
+ '<img src="' + iconFormEdit + '" />'
+ '</a></div>'
+ refitem
+ '</td>'
+'</tr>')
.appendTo('#wikieditor-toolbar-zitat-foundreferences');
$('<span>' + pageName.replace(/^(.*)\s+([^\s]+)$/,"$1 ($2)") + '</span>')
.button()
.on('click', function () {
$('#wikieditor-toolbar-zitat-text').val($(this).text());
return false;
})
.appendTo('#insert_ref_'+itemHtmlId);
});// map
});
});// map result
}// if else found data
}// function generateRefList(data)
/**
* generates a reflist form an Autor input. Used in autocomplete
* @param {object} ui autocomplete
* @param {string} property
* @returns generateRefList(data);
*/
function getAutorData2Reflist(ui, property) {
//http://wiki.bayernflora.de/w/api.php?action=ask&query=[[Autor::~*Vollrath, H.*]][[Kategorie:Literatur]]|%3FAutor|order%3Ddesc&format=jsonfm
$.ajax({// get pages for author
url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
dataType: "json",
data: {
action: "ask",
// Like Query does not work for strings longer than 40 characters http://sourceforge.net/p/semediawiki/mailman/message/31876801/
query: "[["+property+"::~*" + (ui.item.value.length > 40 ? ui.item.value : ui.item.value + "*") + "]][[Kategorie:Literatur]]|?"+property,
format: "json"
}
})
.done(function(data) {
//console.log(data);
if (typeof data.query.results === "object") {
generateRefList(data);
}
});
}// getAutorData2Reflist()
if (typeof mw !== "undefined"){
mw.loader.using("jquery.ui.autocomplete", function () {
$( "#wikieditor-toolbar-zitat-autor-search" ).autocomplete({
'source': function( request, response ) {
$.ajax({
url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
dataType: "json",
data: {
action: "sfautocomplete",
substr: $('#wikieditor-toolbar-zitat-autor-search').val().toLowerCase(),
category: "Literatur",// TODO cannot be combined. todo: filter only for Literatur (solution: internal objects "Literatureintrag hat Autor"?
property: "Autor",
format: "json"
}
})
.done(function(data) {
//console.log(data);
response( $.map(data.sfautocomplete, function(item) {
return { label: item.title, value: item.title };
}));
});
},
'select': function( event, ui ) {// when selecting Autor
getAutorData2Reflist(ui, "Autor");
}// select
/*,'focus': function( event, ui ) {// when focus Autor
getAutorData2Reflist(ui);
}// focus*/
});// autocomplete-autor
$( "#wikieditor-toolbar-zitat-herausgeber-search" ).autocomplete({
'source': function( request, response ) {
$.ajax({
url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
dataType: "json",
data: {
action: "sfautocomplete",
substr: $('#wikieditor-toolbar-zitat-herausgeber-search').val().toLowerCase(),
category: "Literatur",
property: "Herausgeber",
format: "json"
}
})
.done(function(data) {
//console.log(data);
response( $.map(data.sfautocomplete, function(item) {
return { label: item.title, value: item.title };
}));
});
},
'select': function( event, ui ) {// when selecting Herausgeber
getAutorData2Reflist(ui, "Herausgeber");
}// select
/*,'focus': function( event, ui ) {// when focus Autor
getAutorData2Reflist(ui);
}// focus*/
});// autocomplete
});
}
},// end init
dialog: {
dialogClass: 'wikiEditor-toolbar-dialog',
width: 650,
buttons: {
'wikieditor-toolbar-tool-reference-insert': function () {// use translated default buttons of insert-reference
var insertText = $('#wikieditor-toolbar-zitat-text').val(),
altText = $('#wikieditor-toolbar-zitat-alttext').val();
// Close the dialog
$(this).dialog('close');
$.wikiEditor.modules.toolbar.fn.doAction(
$(this).data('context'),
{
type: 'replace',
options: {
pre: '{{Zitat|',
peri: ( insertText.length === 0 ? "Literaturschlüssel fehlt" : insertText ) + (altText.length ? "|" + altText : "" ) ,
post: '}}'
}
},
$(this)
);
// Restore form state
// $('#wikieditor-toolbar-zitat-text').val('');
},
'wikieditor-toolbar-tool-reference-cancel': function () {// use translated default buttons of insert-reference
$(this).dialog('close');
}
},
open: function () {
if (!($(this).data('dialogkeypressset'))) {
$(this).data('dialogkeypressset', true);
// Execute the action associated with the first button
// when the user presses Enter
$(this).closest('.ui-dialog').keypress(function (e) {
if ((e.keyCode || e.which) === 13) {
var button = $(this).data('dialogaction') || $(this).find('button:first');
button.click();
e.preventDefault();
}
});
// Make tabbing to a button and pressing
// Enter do what people expect
$(this).closest('.ui-dialog').find('button').focus(function () {
$(this).closest('.ui-dialog').data('dialogaction', this);
});
}
}
}
}
}
};//end return object
};//module literaturZitatTool
////////////////////////////////
// assign to event in WikiEditor
$('#wpTextbox1').on('wikiEditor-toolbar-doneInitialSections', function () {
if(!$('#wikiEditor-ui-toolbar [title="Quellenangabe {{Zitat}}"]').length) {
$('#wpTextbox1').wikiEditor('addModule', literaturZitatTool());
$('#wpTextbox1').wikiEditor('addToToolbar', {
'section': 'main',
'group': 'insert',
'tools': {
'zitat': {
'label': 'Quellenangabe {{Zitat}}', // or use labelMsg for a localized label, see above
'type': 'button',
'icon': iconInsertLiteraturZitat,
'action': {
'type': 'dialog',
'module': 'insert-zitat'
}
}
}
});// END addToToolbar
}
});
/* </pre>*/