ব্যবহারকারী:Yahya/সংগ্রহশালাভুক্তি.js
লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।
- ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
- গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
- ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
- অপেরা: Ctrl-F5 টিপুন।
//See details at [[:en:User:Σ/Testing facility/Archiver]]
//©[[:en:User:Σ]]
$.when( mw.loader.using(['mediawiki.util','mediawiki.api']), $.ready).done( function () {
if (mw.config.get("wgNamespaceNumber") % 2 == 0 && mw.config.get("wgNamespaceNumber") != 4)
// not a talk page and not project namespace
return;
if (mw.config.get("wgNamespaceNumber") == -1)
// is a special page
return;
$("head").append("<style>a.arkylink { font-weight:bold } .arkyhighlight { background-color:#D9E9FF }</style>");
var validSections = new Object();
var fromTos = new Object();
var wikiText = "";
var revStamp;
var startArchiveButton = mw.util.addPortletLink("p-tb", "#", "সংগ্রহশালায় স্থানান্তর", "pt-oeca", "Enter/exit the archival process", null, null);
var overlay = $(document.createElement("button"));
$(startArchiveButton).click(function(e) {
$(".arkylink").click();
$(".arky").toggle();
$("#archivebutton").toggle();
});
overlay.html("নির্বাচিত সকল আলোচনা সংগ্রহশালায় সরান")
.attr("id", 'archivebutton')
.css("position", 'sticky')
.css("bottom", 0)
.css("width", '100%')
.css("font-size", '200%');
$(document.body).append(overlay);
overlay.toggle();
overlay.click(function(e) {
var numOfThreads, archiveTarget;
var sections, archiveThis;
var cutOffset, revisedPage;
function cut(s, start, end) {
return s.substr(0, start) + s.substring(end);
}
cutOffset = numOfThreads = 0;
revisedPage = wikiText;
sections = $("a.arkylink").map(function() {
return $(this).attr("data-section");
});
if (!(numOfThreads = sections.length))
return alert("No threads selected, aborting");
archiveTarget = prompt(numOfThreads + "টি আলোচনা সংগ্রহশালায় নেওয়া হবে। এগুলো কোথায় স্থানান্তর করতে চান? (যেমন- ব্যবহারকারী:উদাহরণ/সংগ্রহশালা ১)", mw.config.get("wgPageName"));
if (!archiveTarget || archiveTarget == mw.config.get("wgPageName"))
return alert("সংগ্রহশালার লক্ষ্য নির্ধারণ করা হয়নি, ফেরত যাওয়া হচ্ছে..");
sections.each(function(i, n) {
revisedPage = cut(
revisedPage,
fromTos[n][0] - cutOffset,
fromTos[n][1] - cutOffset
);
cutOffset += fromTos[n][1] - fromTos[n][0];
});
archiveThis = sections.map(function() {
return wikiText.substring(fromTos[this][0], fromTos[this][1]);
}).toArray().join("");
console.log("archive this:" + archiveThis);
console.log("revised page:" + revisedPage);
if (1) new mw.Api().postWithToken("csrf", {action: 'edit', title: mw.config.get("wgPageName"), text: revisedPage, summary: numOfThreads + " টি আলোচনা [[" + archiveTarget + "|সংগ্রহশালায়]] নেওয়া হয়েছে", basetimestamp: revStamp, starttimestamp: revStamp})
.done(function(res1) {
alert("আলাপ পাতা থেকে বার্তাগুলো সফলভাবে মুছে ফেলা হয়েছে");
console.log(res1);
new mw.Api().postWithToken("csrf", {action: 'edit', title: archiveTarget, appendtext: "\n" + archiveThis, summary: "[[" + mw.config.get("wgPageName") + "]] থেকে সংগ্রহশালায় যোগ করা হয়েছে"})
.done(function(res2) {
alert("সফলভাবে সংগ্রহশালায় যুক্ত করা হয়েছে");
})
.fail(function(res2) {
alert("সংগ্রহশালায় যোগ করা যায়নি। দয়া করে হাতে আপনার সম্পাদনা পরীক্ষা করুন।");
})
.always(function(res2) {
console.log(res2);
window.location.reload();
});
})
.fail(function(res1) {
alert("আলাপ পাতা থেকে বার্তা সরানো যায়নি। সংগ্রহশালাভুক্তকরণের প্রক্রিয়া বন্ধ করা হচ্ছে।");
console.log(res1);
window.location.reload();
});
});
new mw.Api().get({action: 'parse', page: mw.config.get("wgPageName")}).done(function(dataShit) {
new mw.Api().get({action: 'query', pageids: mw.config.get("wgArticleId"), prop: ['revisions'], rvprop: ['content', 'timestamp']}).done(function(shit) {
var rv;
rv = shit.query.pages[mw.config.get("wgArticleId")].revisions[0];
wikiText = rv["*"];
revStamp = rv['timestamp'];
});
$(dataShit.parse.sections)
.filter(function(i, s) { return s.index == parseInt(s.index) })
.each(function(i, s) { validSections[s.index] = s });
for (var i in validSections) {
i = parseInt(i);
fromTos[i] = [
validSections[i].byteoffset,
validSections.hasOwnProperty(i+1)?validSections[i+1].byteoffset:Infinity
];
}
$("#mw-content-text").find(":header").find("span.mw-headline").each(function(i, title) {
var header, headerNum, editSection, sectionNumber;
header = $(this).parent();
headerNum = header.prop("tagName").substr(1, 1) * 1; // wtf javascript
editSection = header.find(".mw-editsection"); // 1st child
sectionNumber = header.find(".mw-editsection a:last");
if (sectionNumber[0]) {
// Note: href may not be set.
sectionNumber = sectionNumber.attr("href") && sectionNumber.attr("href").match(/§ion=(\d+)/);
if (sectionNumber)
sectionNumber = sectionNumber[1];
} else // eg <h2>not a real section</h2>
sectionNumber = undefined;
if (validSections.hasOwnProperty(sectionNumber))
editSection[0].innerHTML += " <span class=arky style=display:none><span class=mw-editsection-bracket>[</span><a data-header=" + headerNum + " " + "data-section=" + sectionNumber + " " + "onclick='$(this).closest(\":header\").toggleClass(\"arkyhighlight\");$(this).toggleClass(\"arkylink\");var archivable = $(\".arky a\"); for(var i=archivable.index(this); i<archivable.length; ++i) { if (archivable[i] == this) { continue; } if ($(archivable[i]).attr(\"data-header\") > " + headerNum + " && $(archivable[i]).hasClass(\"arkylink\") != $(this).hasClass(\"arkylink\")) { $(archivable[i]).click(); } else { break; } }'>archive</a><span class=mw-editsection-bracket>]</span></span>";
});
});
});