МедияУики беседа:Monobook.js/2006
от Уикипедия, свободната енциклопедия
Съдържание |
[редактиране] Цифрови трансформации английска->БДС
Това е функцията, която е описана на Потребител беседа:Петко/monobook.js, ако желаете да я доогледате и добавите, или да свалите временно защитата, за да го направя.
Това се добавя някъде:
function zamena_5ko() { //Исключаем из обработки всё ("<" и ">") ѣز bgmaps и др. r=/(?:(\b([0-1]?[0-9]|2[0-4])\.(?:00|30)\b)|(?:\<nowiki\>.+?\<\/nowiki\>)|(\<math\>.+?\<\/math\>)|(&#x?[0-9a-f]+;)|(<([^>]*)>)|(=\s?'.*?')|(=\s?".*?")|(\[\[[^\[\]]+\]\])|((bgmaps|sat)=.*$)|(\[[a-z]+:\/\/[^\]]+\])|\b[a-z0-9\._-]+@[a-z0-9\.-]+)/gmi; // Руснаците са хитри, ама ние сме по-хитри: a_petko=txt.match(r); txt = txt.replace(r, "\x03\x04\x05"); // Разделяне: r=/([=-]?[^,\.\w][1-9]\d*)(\d{3}\b)/gm; var tmp = txt; while(1) { txt=txt.replace(r, "$1 $2"); if(tmp == txt) break; tmp = txt; } // Разделител на хилядите: tmp = txt; r=/(\d)[, ](\d\d\d(?:\D|$))/gm; while(1) { txt=txt.replace(r, "$1 $2"); if(tmp == txt) break; tmp = txt; } // Десетична точка: r=/(\d)\.(\d+(?:[-\D\n\r]|$))/gm; txt=txt.replace(r, "$1,$2"); // Край. // Ако е четирицифрено, се пише слято: r=/(\b\d) (\d\d\d(?:[^\d&]|$))/gm; txt=txt.replace(r, "$1$2"); // Всичко обратно: i=0; r=/\x03\x04\x05/; while (r.test(txt)) { txt = txt.replace(r, a_petko[i++]); } }
Това се променя в "obrabotka()":
function obrabotka() {
към
function obrabotka(bds) {
По-надолу:
else{ zamena();
да стане на:
else{ if(!bds)zamena(); else zamena_5ko();
Там, дето е "данни за още бутони с код по желание"
var extraMiscButtons = new Array( // код_за_изпълнение заглавие показан_текст // уикификатора new Array("obrabotka()", "Преобразуване на някои знаци", "#"),
се сменя на:
var extraMiscButtons = new Array( // код_за_изпълнение заглавие показан_текст // уикификатора new Array("obrabotka(0)", "Преобразуване на някои знаци", "#"), new Array("obrabotka(1)", "Преобразуване числа към БДС", "$"),
Знакът за долар е по предложение на Спас, може да се сложи и № (обаче да не би някой да си мисли, че така се въвежда "№"). А може и да се сложи "БДС".small() --Петко ± (Категория:ИнжИнери се премести) 09:05, 5 май 2006 (UTC)
- Петко, ако помниш, едно време пробвахме да сваляме защитата на медияуикийни страници, ама така и не се получи. Обикновения потребител все не го пускаше да редактира. Да видим все още ли е така... —Борислав 09:38, 5 май 2006 (UTC)
-
-
- Ми, добави го ти, няма опасност да се объркаш -- просто се добавя възможност за втората "zamena" с if-че. Пък, добре е и ти да го знаеш какво е, че ако (като) се скапе, да можеш да го запреш. --Петко ± (Категория:ИнжИнери се премести) 09:45, 5 май 2006 (UTC)
-
zamena_5ko:
- 12.345 -> 12,345 (ok)
- 12,345.678 -> 12 345,678 (ok)
- 12,345 -> 12 345 (!)
- 12 345,678 -> 12 345 678 (!)
Повторното изпълнение (напр. double-click) не е добре, може да е хиляди в англ. нотация, но може да е дроб в българска. За потребителя Петко е лесно, но за цялата Уикипедия не е идиотоусточиво. Поздрави, Златко ± (беседа) 10:49, 5 май 2006 (UTC)
- Вярно е това -- ще опитам да го сменя. Аз преди три седмици написах кода и предложих да го тестваме, преди да го въвеждаме -- трябваше да се обадиш междувременно. Ако искате още да го тестваме. --Петко ± (Категория:ИнжИнери се премести) 11:02, 5 май 2006 (UTC)
[редактиране] Чакай!! !
Трябва да го вземеш от уики-кода, а не от страницата, защото има няколко знака , които не се виждат. --Петко ± (Категория:ИнжИнери се премести) 10:04, 5 май 2006 (UTC)
[редактиране] Молба за корекция
След забележката на Златко, моля администратор да въведе следната промяна във функцията zamena_5ko():
След реда:
txt = txt.replace(r, "\x03\x04\x05");
се добавят няколко команди, така че да стане така (отворете раздела за редактиране, за да копирате кода, иначе не става):
txt = txt.replace(r, "\x03\x04\x05"); r=/\d+,\d+,\d[\d,]*/g; a_zlatko = txt.match(r); i=0; while (r.test(txt)) { txt = txt.replace(r, a_zlatko[i++].replace(/,/g, '')); }
И по-надолу:
// Разделител на хилядите: tmp = txt; r=/(\d)[, ](\d\d\d(?:\D|$))/gm;
редът, започващ с r=/ се променя:
// Разделител на хилядите: tmp = txt; r=/(\d) (\d\d\d(?:\D|$))/gm;
И пак, има нужда да се внимава -- оставили сме няколко бъга, така че перфекционистите да имат удоволствието да ги открият. Всеки, който открие и съобщи за грешка, ще получи за награда нова променлива, наречена на него. --Петко ± (Категория:ИнжИнери се премести) 11:43, 5 май 2006 (UTC)
[редактиране] Доклад за промените
Замених всички начални интервали с табулации. Така размера на файла доста се намалява.
Пренаписах функцията LinkFA, защото ме учуди колко неефективно беше написана. Главата ме заболя, като си дадох сметка, колко операции прави, за да постигне желания резултат. Сега хем кода е олекотен, хем фунцкията е доста по-бърза.
Бутнах и двете функции за динамично показване на кутии. Направих го, защото имаха грешки (в случая не фатални), като в крайна сметка и там малко намаля кода.
Понеже страницата е големичка, горе излиза съобщението за размера й. Помня, че сутринта ми показваше 34 килобайта. Сега, след като е добавена и функцията на Петко, размера е 30 К. Жестоко, нали? —Борислав 14:20, 5 май 2006 (UTC)
- Неблагодарен си Бори, и не оценяваш обектното програмиране и code reuse
. Иначе не е просто жестоко, даже си е супер страхотно
- все пак (почти) всеки потребител ще зарежда 4 kB по-малко, което значително ще олекоти трафика. Наистина добра работа! -- Златко ± (беседа) 14:42, 5 май 2006 (UTC)
- Браво, наистина е супер! Обаче теоритично още отслабване може да се приложи
. Ако във функцията zamena() -- всичките раздели, които започват с коментар "//Исключаем из обработки" се заместят с първите три команди от zamena_5ko() (там, дето пише, че сме по-хитри, до \x05), а всичките им раздели, започващи с "Возвращаем обратно", се сменят с раздела "//Всичко обратно", пак там. Това не съм го пробвал и няма да имам време днес, обаче няма как да не стане. --Петко ± (Категория:ИнжИнери се премести) 14:50, 5 май 2006 (UTC)