ميدياويكي: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]]
window.AjaxEdit = {};
window.AjaxEdit.Click = function (ajaxEditAnchor) {
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-", ""); //translcusions...
var hdr = $(ajaxEditAnchor).parent().parent();
var sectionName = hdr.children(".mw-headline").first().text();
if (window.tabbedLanguages && !hdr.is(":header")) {
sectionName = window.tabbedLanguages[window.currentLanguageTab];
}
$("#ajaxedit-wrapper").remove();
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);
var textarea = $("<textarea></textarea>").attr({ rows: rowHeight }).text(wikitext);
var saveButton = $('<button>احفظ</button>').click(function () {
window.AjaxEdit.Save(section, sectionName, textarea.val(), title).then(function () {
new mw.Api().parse(new mw.Title(mw.config.get("wgPageName"))).then(function (newHtml) {
$("#mw-content-text").html(newHtml);
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.Main();
// run NavToggle stuff
});
});
}).css("margin-left", "3px");
var cancelButton = $('<button>ألغ</button>').click(function () {
$("#ajaxedit-wrapper").remove();
});
var previewDiv = $("<div></div>").css({
"border-style": "solid", "border-width": "1px 1px 1px 4px",
"border-radius": "0.33em", "border-color": "#a3d3ff" }).hide();
var loadPreview = function loadPreview() {
new mw.Api().parse(textarea.val(), { title: mw.config.get("wgPageName") }).done(function (html) {
previewDiv.html(html);
});
};
var previewIntervalId = -1;
var livePreviewCheckbox = $("<input type='checkbox'/>").attr("id", "ajaxedit-live-preview-checkbox").on("change", function () {
if ($(this).is(':checked')) {
previewDiv.show("slow");
loadPreview();
previewIntervalId = setInterval(loadPreview, 500);
} else {
clearInterval(previewIntervalId);
previewDiv.hide("fast");
previewDiv.empty();
}
});
var wrapper = $("<div></div>").attr("id", "ajaxedit-wrapper").css({ width: "auto", "margin": 0, "overflow": "hidden" }).append(textarea).append(saveButton).append(livePreviewCheckbox).append('<label for="ajaxedit-live-preview-checkbox">معاينة مباشرة</label>').append(cancelButton).append(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) {
var scriptLink = "";
if (mw.config.get("wgSiteName") !== "Wiktionary")
scriptLink += "wikt:";
if (mw.config.get("wgContentLanguage") !== "ar")
scriptLink += "ar:";
scriptLink += "MediaWiki:Gadget-AjaxEdit.js";
var data = {
format: 'json',
action: 'edit',
title: title,
section: sectionID,
summary: "/* " + sectionName + " */",
text: sectionText,
token: mw.user.tokens.get('csrfToken')
};
return $.post(mw.util.wikiScript('api'), data, function (data) {
if (data && data.edit && data.edit.result == 'Success') {
mw.notify("تمام");
} else if (data && data.error) {
mw.notify('Error: API returned error code "' + data.error.code + '": ' + data.error.info);
}
}).fail(function (xhr) {
mw.notify('Error: Request failed.');
}, "json");
};
window.AjaxEdit.Main = function () {
$(".mw-editsection > .mw-editsection-bracket:contains(']')").each(function () {
var btn = $('<a>عَـــدِّل</a>').attr("onclick", "AjaxEdit.Click(this)");
$(this).before(", ").before(btn);
});
};
if (mw.config.get('wgAction') == "view")
$(window.AjaxEdit.Main);