Foydalanuvchi:BrandonXLF/HotDefaultSort.js
Qiyofa
Eʼtibor bering: Oʻzgartirishlaringizni koʻrish uchun, yangi moslamalaringizning saqlashdan keyin, brauzer keshini tozalash kerak:
Mozilla / Firefox: Ctrl+Shift+R, IE: Ctrl+F5, Safari: Cmd+Shift+R, Konqueror: F5, Opera: Tools → Preferences orqali keshni tozalang.
/*** Hot Default Sort ***/
// Adds an default sort key editor at the bottom of the page near the categories
// Documentation at [[en:w:User:BrandonXLF/HotDefaultSort]]
// By [[en:w:User:BrandonXLF]]
// <nowiki>
mw.hook('wikipage.categories').add(function($cats) {
var sort = document.createElement('div'),
dsort = document.createElement('span'),
edit = document.createElement('input'),
dflt = document.createElement('span'),
status = document.createElement('span'),
actions = document.createElement('span'),
save = document.createElement('a'),
cancel = document.createElement('a'),
remove = document.createElement('a'),
modify = document.createElement('a'),
api = new mw.Api();
function resize() {
this.style.width = '0px';
this.style.width = this.scrollWidth + 2 + 'px';
}
function transformPage(transform) {
status.style.display = 'inline';
edit.disabled = true;
return api.edit(mw.config.get('wgPageName'), transform).fail(function(_, data) {
mw.notify(api.getErrorMessage(data), {
type: 'error',
tag: 'hotdefaultsort'
});
}).always(function() {
status.style.display = 'none';
edit.disabled = false;
});
}
function closeEditor() {
sort.replaceChild(dsort, edit);
actions.replaceChild(remove, save);
actions.replaceChild(modify, cancel);
}
function saveEditor() {
if (!edit.value) {
return removeSortKey().done(function() {
closeEditor();
});
}
return transformPage(function(rev) {
var catNS = mw.config.get('wgFormattedNamespaces')[14],
catRegex = new RegExp(
'(\\[\\[[' +
catNS.charAt(0).toLowerCase() +
catNS.charAt(0).toUpperCase() +
']' +
mw.util.escapeRegExp(catNS.substr(1)) +
'\\:.*)'
),
textParts = rev.content.replace(/\n*{{DEFAULTSORT:.*?}}\n*/g, '').split(catRegex),
main = textParts.shift() || '',
cats = textParts.join('');
return {
text: main + (main.endsWith('\n') ? '' : '\n\n') + '{{DEFAULTSORT:' + edit.value.trim() + '}}\n' + cats,
summary: 'Set {{DEFAULTSORT}} to ' + edit.value + ' using [[en:w:User:BrandonXLF/HotDefaultSort|Hot Default Sort]]'
};
}).done(function() {
dsort.innerText = edit.value;
modify.innerText = '(±)';
modify.title = 'Modify';
remove.style.display = 'inline';
dflt.style.display = 'none';
closeEditor();
});
}
function removeSortKey() {
return transformPage(function(rev) {
return {
text: rev.content.replace(/\n*{{DEFAULTSORT:.*?}}\n*/g, '\n\n'),
summary: 'Removed {{DEFAULTSORT}} using [[en:w:User:BrandonXLF/HotDefaultSort|Hot Default Sort]]'
};
}).done(function() {
dsort.innerText = mw.config.get('wgTitle');
modify.innerText = '(+)';
modify.title = 'Add';
remove.style.display = 'none';
dflt.style.display = 'inline';
});
}
api.get({
action: 'query',
pageids: mw.config.get('wgArticleId'),
prop: 'pageprops'
}).then(function(res) {
var unset = false,
pp = res.query.pages[mw.config.get('wgArticleId')].pageprops,
key = pp && pp.defaultsort ? pp.defaultsort : (unset = true) && mw.config.get('wgTitle');
sort.innerText = 'Standart tartiblash: ';
dsort.innerText = key;
sort.appendChild(dsort);
edit.style.minWidth = '100px';
['paste', 'keydown', 'keyup', 'keypress', 'input', 'change'].forEach(function(eventName) {
edit.addEventListener(eventName, resize);
});
edit.addEventListener('keydown', function(e) {
if (e.key == 'Enter') saveEditor();
});
dflt.innerText = '(no key)';
dflt.style.marginLeft = '0.25em';
dflt.style.display = unset ? 'inline' : 'none';
dflt.style.fontStyle = 'italic';
status.style.marginLeft = '0.25em';
status.style.display = 'none';
status.innerText = 'Saving...';
save.innerText = '(✓)';
save.style.marginLeft = '0.25em';
save.title = 'Save changes';
save.addEventListener('click', function() {
saveEditor();
});
cancel.innerText = '(x)';
cancel.style.marginLeft = '0.25em';
cancel.title = 'Cancel';
cancel.addEventListener('click', function() {
closeEditor();
});
remove.innerText = '(−)';
remove.title = 'Remove (replace with default)';
remove.style.marginLeft = '0.25em';
remove.style.display = unset ? 'none' : 'inline';
remove.addEventListener('click', function() {
removeSortKey();
});
modify.innerText = unset ? '(+)' : '(±)';
modify.title = unset ? 'Add' : 'Modify';
modify.style.marginLeft = '0.25em';
modify.addEventListener('click', function() {
sort.replaceChild(edit, dsort);
edit.value = window.hotDefaultSortInitKey ? window.hotDefaultSortInitKey(dsort.innerText, dflt.style.display === 'inline') : dsort.innerText;
resize.apply(edit);
actions.replaceChild(save, remove);
actions.replaceChild(cancel, modify);
});
actions.appendChild(remove);
actions.appendChild(modify);
sort.appendChild(dflt);
sort.appendChild(status);
sort.appendChild(actions);
$cats.append(sort);
});
});
// </nowiki>