ব্যবহারকারী:আফতাবুজ্জামান/সারিবদ্ধকারী.js
লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।
- ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
- গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
- ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
- অপেরা: Ctrl-F5 টিপুন।
// <nowiki> উৎস: en:User:Taavi/Aligner.js
window.alignerDebug = false;
window.alignerDefaultSearches = [
"{{infobox",
"{{তথ্যছক",
"{{speciesbox",
"{{taxobox",
"{{স্বয়ংক্রিয় শ্রেণীবিন্যাসবিদ্যা",
'{{automatic taxobox',
];
window.alignerExtraSearches = [];
mw.loader.using(['mediawiki.util'], function () {
if (mw.config.get('wgAction') !== 'edit' && mw.config.get('wgAction') !== 'submit') {
return;
}
mw.util.addPortletLink('p-cactions', 'javascript:void(0);', 'টেমপ্লেটের প্যারামিটার সারিবদ্ধ করুন', 'us-majavah-align');
$('#us-majavah-align').click(function () {
const splitParam = string => {
const split = string.split('=');
if (split.length <= 2) {
return split;
}
let first = split.shift();
return [first, split.join('=')];
};
const splitIntoParams = string => {
if (string.startsWith('{{') && string.endsWith('}}')) {
if (!string.includes('|')) {
return [string];
}
const results = splitIntoParams(string.slice(2, -2));
return ['{{' + results[0]].concat(splitIntoParams(string.slice(2, -2)).slice(1), ['}}']);
}
const params = [];
let temp = '';
let open = 0;
for (let i = 0; i < string.length; i++) {
const char = string[i];
temp += char;
if (char === '{' || char === '[') {
open += 1;
} else if (char === '}' || char === ']') {
open -= 1;
} else if (char === '|' && open === 0 && temp.trim() !== '|') {
params.push(temp.slice(0, -1).trim());
temp = '|';
}
}
params.push(temp);
return params;
};
const debug = string => {
if (window.alignerDebug) {
mw.notify(string);
}
};
const useWikEd = window.wikEd && window.wikEd.useWikEd;
if (useWikEd) {
window.wikEd.UpdateTextarea();
}
const editBox = $('#wpTextbox1');
if (!editBox) {
mw.notify('সম্পাদনা বাক্স খুঁজে পাওয়া যায়নি');
return;
}
const text = editBox.val();
if (!text || text.length === 0) {
mw.notify('সম্পাদনা বাক্সের মান খুঁজে পাওয়া যায়নি');
return;
}
const searches = window.alignerDefaultSearches.concat(window.alignerExtraSearches || []);
let count = 0;
const processInfobox = template => {
if (template === '') {
mw.notify('তথ্যছক খুঁজে পাওয়া যায়নি');
return;
}
if (open !== 0) {
console.error({ open });
mw.notify('টেমপ্লেটটি সঠিকভাবে বন্ধ করা হয়নি');
return;
}
let maxLength = 0;
const origTemplate = String(template);
const lines = template.split("\n");
const newLines = [];
for (let lineNumber in lines) {
const paramsInLine = splitIntoParams(lines[lineNumber].trim());
console.log({
line: lines[lineNumber].trim(),
paramsInLine,
});
for (let paramNumber in paramsInLine) {
let line = paramsInLine[paramNumber].trim();
if (!line.startsWith('|') || line.split('=').length !== 2) {
newLines.push(line);
continue;
}
let [firstPart, lastPart] = splitParam(line);
firstPart = firstPart.slice(1).trim();
if (firstPart.length > maxLength) {
maxLength = firstPart.length;
}
newLines.push('| ' + firstPart + '=' + lastPart);
}
}
let output = '';
maxLength += 2; // to include '| '
for (let lineNumber in newLines) {
let line = newLines[lineNumber];
const parts = splitParam(line);
if (parts.length < 2) {
output += line += "\n";
continue;
}
let firstPart = parts[0].trim();
console.log({ firstPart, maxLength });
while (firstPart.length < maxLength) {
firstPart += ' ';
}
output += firstPart + ' = ' + parts[1].trim() + "\n";
}
if (output.endsWith("\n")) {
output = output.slice(0, -1);
}
editBox.val(editBox.val().replace(origTemplate, output));
if (useWikEd) {
wikEd.UpdateFrame();
}
};
let template = '';
let open = 0;
for (let i = 0; i < text.length; i++) {
let foo = false;
for (let searchIndex in searches) {
const search = searches[searchIndex];
const searchLength = search.length;
if (text.length - i > searchLength) {
if ((text.slice(i, i + searchLength).toLowerCase() === search) || (text.slice(i, i + searchLength).toLowerCase() === search.replace(" ", "_"))) {
open += 1;
template += text[i];
foo = true;
}
}
}
if (open >= 1 && !foo) {
template += text[i];
if (text[i] == '{') {
open += 1;
} else if (text[i] == '}') {
open -= 1;
if (open === 0) {
count += 1;
processInfobox(template);
template = '';
}
}
}
}
mw.notify('সফলভাবে ' + String(count) + 'টি টেমপ্লেট সারিবদ্ধ করা হয়েছে। সংরক্ষণ করার আগে প্রাকদর্শন করতে ভুলবেন না।');
});
});
// </nowiki>