ميدياويكي:Gadget-AjaxEdit.js
ملاحظة: بعد النشر، أنت قد تحتاج إلى إفراغ الكاش الخاص بمتصفحك لرؤية التغييرات.
- فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
- جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
- إنترنت إكسبلورر/إيدج: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
- أوبرا: اضغط Ctrl-F5.
"use strict";
// وصف: باستعمال زر جديد "عَـــدِّل" يمكن للمستخدم تعديل أقسام معينة بدون تحميل صفحة التعديل بأكملها
// Dependencies: mediawiki.util, mediawiki.Uri, mediawiki.user, mediawiki.api
/* jshint maxerr:1048576, strict:true, undef:true, latedef:true, sub:true */
/* global mw, $ */
// المصدر: اقتباس من [[en:mediawiki:Gadget-AjaxEdit.js]]
(function ajaxEditIife() {
window.AjaxEdit = {};
window.AjaxEdit.scriptLink = "";
if (mw.config.get("wgSiteName") !== "Wiktionary")
window.AjaxEdit.scriptLink += "wikt:";
if (mw.config.get("wgContentLanguage") !== "en")
window.AjaxEdit.scriptLink += "en:";
window.AjaxEdit.scriptLink += "MediaWiki:Gadget-AjaxEdit.js";
window.AjaxEdit.Click = function (ajaxEditAnchor) {
var elements = {};
var _query = new mw.Uri($(ajaxEditAnchor)
.parent()
.find("a[href*='action=edit']")
.attr("href")).query,
title = _query.title,
section = _query.section;
section = section.replace("T-", ""); //transclusions...
var hdr = $(ajaxEditAnchor).parent().parent();
var sectionName = hdr.children(".mw-headline").first().text();
if (window.tabbedLanguages && !hdr.is(":header")) {
sectionName = window.tabbedLanguages[window.currentLanguageTab];
}
var data = { action: 'raw', title: title, section: section };
$.get(mw.util.wikiScript('index'), data).then(function (wikitext) {
var rowHeight = Math.min(15, 1 + wikitext.split("\n").length);
elements.textarea = $("<textarea/>")
.attr({ rows: rowHeight })
.addClass("mw-editfont-monospace")
.text(wikitext);
elements.textareaSummary = $("<input/>")
.attr({
type: "text",
maxlength: 500,
spellcheck: true,
name: "wpSummary",
})
.keydown(event, function() {
if (event.keyCode == 13) { // on enter
elements.saveButton.click();
}
});
function checkboxAndLabel(id, text) {
var checkbox = $("<input/>")
.attr({
"id": id,
"type": "checkbox",
});
var label = $("<label/>")
.attr("for", id)
.text(text);
return [checkbox, label];
}
var minorEdit = checkboxAndLabel("ajaxedit-minor-edit-checkbox", "تعديل طفيف");
elements.minorEditCheckbox = minorEdit[0], elements.minorEditLabel = minorEdit[1];
elements.saveButton = $("<button/>")
.text("احفظ")
.click(function () {
elements.textarea.attr('disabled', true);
elements.textareaSummary.attr('disabled', true);
window.AjaxEdit.Save(section, sectionName, elements.textarea.val(), title, elements.textareaSummary.val(), elements.minorEditCheckbox.prop("checked"))
.then(function (apiSaveResponse) {
if (apiSaveResponse.error) return; //if abusefilter was triggered
new mw.Api().get({page: mw.config.get("wgPageName"), action: "parse", prop: "text|categorieshtml"})
.then(function (newHtml) {
$("#ajaxedit-wrapper").remove();
$("#mw-content-text").html(newHtml.parse.text["*"]);
$("#catlinks").replaceWith(newHtml.parse.categorieshtml["*"]);
mw.loader.moduleRegistry["site"].state = "registered";
//mw.loader.moduleRegistry["site"].version="generate-unique-guid-here";
mw.loader.moduleRegistry["site"].script = undefined;
mw.loader.using("site", function () {});
window.AjaxEdit.Submain();
// run NavToggle stuff
});
});
})
.css("margin-left", "3px");
elements.cancelButton = $('<button/>')
.text("ألغ")
.click(function () {
$("#ajaxedit-wrapper").remove();
});
elements.previewDiv = $("<div/>")
.css({
"border-style": "solid", "border-width": "1px 1px 1px 4px",
"border-radius": "0.33em", "border-color": "#a3d3ff",
})
.hide();
function timestamp() {
return new Date().toISOString();
}
var previousText;
var previousTextTimestamp = timestamp();
function loadPreview() {
var newText = elements.textarea.val();
var textTimestamp = timestamp();
if (!previousText || previousText != newText) {
new mw.Api()
.parse(
newText,
{ title: mw.config.get("wgPageName"), pst: "true", preview: "true", sectionpreview: "true", disableeditsection: "true" }
)
.done(function (html) {
if (textTimestamp > previousTextTimestamp) {
elements.previewDiv.html(html);
previousTextTimestamp = textTimestamp;
}
});
}
previousText = newText;
}
var livePreview = checkboxAndLabel("ajaxedit-live-preview-checkbox", "معاينة مباشرة");
elements.livePreviewCheckbox = livePreview[0], elements.livePreviewLabel = livePreview[1];
elements.livePreviewCheckbox.on("change", function () {
if ($(this).prop("checked")) {
elements.previewDiv.show("slow");
loadPreview();
this.previewIntervalId = setInterval(loadPreview, 500);
} else {
clearInterval(this.previewIntervalId);
elements.previewDiv.hide("fast");
elements.previewDiv.empty();
}
});
var wrapper = $("<div/>")
.attr("id", "ajaxedit-wrapper")
.css({ width: "auto", "margin": 0, "overflow": "hidden" })
.append(elements.textarea)
.append(elements.textareaSummary)
.append(elements.saveButton)
.append(elements.livePreviewCheckbox)
.append(elements.livePreviewLabel)
.append(elements.minorEditCheckbox)
.append(elements.minorEditLabel)
.append(elements.cancelButton)
.append(elements.previewDiv);
//tabbed languages support
if ($(ajaxEditAnchor).is("#tabstable .editlangsection a")) {
$(".languageContainer:not(:hidden)")
.first()
.prepend(wrapper);
} else {
hdr.after(wrapper);
}
});
};
window.AjaxEdit.Save = function (sectionID, sectionName, sectionText, title, summary, minorEdit) {
var data = {
format: 'json',
action: 'edit',
title: title,
section: sectionID,
summary: "/* " + sectionName + " */ " + summary,
text: sectionText,
token: mw.user.tokens.get('csrfToken'),
minor: minorEdit,
};
return new mw.Api().post(data).then(function (response) {
if (response && response.edit && response.edit.result == 'Success') {
mw.notify("تمام");
} else if (response && response.error) {
mw.notify('Error: API returned error code "' + response.error.code + '": ' + response.error.info);
}
return response;
}).fail(function (xhr) {
mw.notify('Error: Request failed.');
$('#ajaxedit-wrapper *').attr('disabled', false);
});
};
window.AjaxEdit.Submain = function()
{
$(".mw-body-content .mw-editsection > .mw-editsection-bracket:contains(']')").each (function(){
var btn = $('<a/>').text("عَـــدِّل").on("click", function() { window.AjaxEdit.Click(this) });
$(this).before(", ").before(btn);
});
};
window.AjaxEdit.Main = function()
{
$(".mw-editsection > .mw-editsection-bracket:contains(']')").each (function(){
var btn = $('<a/>').text("عَـــدِّل").on("click", function() { window.AjaxEdit.Click(this) });
$(this).before(", ").before(btn);
});
};
if (mw.config.get('wgAction') == "view")
$(window.AjaxEdit.Main);
})();