| Comments: |
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 04:31 pm |
|---|
| | | (Link) |
|
>попробую сделать кнопку для возвращения выделенному фрагменту или всему >комментарию Каледина его албанско-молдавского кстати. невозбранно спёр идею. щас себе приделаю. %-)
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:04 pm |
|---|
| | | (Link) |
|
Узнал много нового. for-in не даются. У меня так:
function TranslitToRus (s) {
if (s == 'Date:') return '\u0414\u0430\u0442\u0430:'; // return s; is worse, because even kaledins may write " Date: "
var res = "", len = s.length;
for (var f = 0; f < len; f++) {
var n = s.charAt(f);
var rus = trTable[n], dif = trTableDif[n];
if (dif) {
var n1 = s.charAt(f+1);
rus1 = dif[n1];
if (rus1) { rus = rus1; f++; }
}
res += rus?rus:n;
}
return res;
}
function DeKaledin(evt)
{
evt.preventDefault();
if (loadingPages) return false;
var ec = evt.currentTarget; // comment or text ?br?
var i = ec.childNodes[0]; //
var t = ec.childNodes[1]; // comment or text
var w = ec.childNodes[2]; // if exists
var v = doc.createElement("img");
v.setAttribute("width","22");
v.setAttribute("height","20"); // if pictures are not loaded
var u,v;
if (t.nodeName == "#comment")
{
v.setAttribute("src","http://lj.rossia.org/img/btn_prev.gif");
u = doc.createTextNode(t.nodeValue);
}
else // #text
{
v.setAttribute("src","http://lj.rossia.org/img/btn_next.gif");
u = doc.createComment(t.nodeValue);
}
ec.appendChild(v);
ec.appendChild(u);
if (w)
{
ec.removeChild(w);
}
else
{
w = doc.createElement("br");
ec.appendChild(w);
}
ec.removeChild(t);
ec.removeChild(i);
return false;
}
function UntranslitNode (node) {
if (!node) return;
if (node.nodeName == "#text")
{
var s = node.nodeValue;
node.nodeValue = TranslitToRus(s);
var pn = node.parentNode;
var t;
t = doc.createElement("img");
t.setAttribute("src","http://lj.rossia.org/img/btn_next.gif");
t.setAttribute("width","22");
t.setAttribute("height","20"); // if pictures are not loaded
var original_kal = doc.createComment(s);
var dl = document.createElement("a");
dl.href = "#";
dl.appendChild(t);
dl.appendChild(original_kal);
dl.addEventListener("click", DeKaledin, false);
pn.insertBefore(dl,node);
}
else
{
if (node.hasChildNodes)
{
var nn = Array(); // childNodes is alive
var i = node.childNodes.length;
for (var f = 0; f < i; f++) // for-in does not work as I expect
nn.push(node.childNodes[f]);
for (var f = 0; f < nn.length; f++)
UntranslitNode(nn[f]);
}
}
}
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:14 pm |
|---|
| | | (Link) |
|
>for-in не даются и не надо оно там. %-)
>if (loadingPages) return false; это чего?
в createElement() тэги лучше писать капсом (похуй, но так рекомендуют).
t.setAttribute() нужны только для тупой тормозиллы, в опере можно напрямую: t.width = 20;
>var nn = Array(); можно заменить на var nn = []; более того — тут ошибка: не = Array(), а = new Array(); потому что иначе не создаётся новый объект.
>for-in does not work as I expect и не будет, ибо childNodes() не массив, а for-in только для массивов и js-объектов (которые тоже массивы). childNodes() же — native object. вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл (ибо childNodes() отображает именно текущее состояние документа, а не снапшот).
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:33 pm |
|---|
| | | (Link) |
|
>if (loadingPages) return false; это чего? Это копировать-вставить:) См. UnfoldAll()
Читал бы я ещё подробно про работу с событиями, до утра бы сидел.
вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл Ну надо же:() Это-то понять ума большого не потребовало, а вот for-in или см. ниже я долго искал способ применить и не нашёл.
А можно ли childNodes скопировать в массив разом (с той же целью)?
Как я понимаю, редкость появления консоли в Опере вызвана try...catch, как же тогда проверять ошибки, держать исходники без отлова исключений, а потом снимать комментарии?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:44 pm |
|---|
| | | (Link) |
|
>Ну надо же:() Это-то понять ума большого не потребовало кому как. я об этом упоминаю, потому что неоднократно спотыкался. сужу по себе.
>а вот for-in или см. ниже я долго искал способ применить и не нашёл. у объектов нет метода-итератора, поэтому for-in не будет работать для native objects (в частности, любых коллекций нодов) никогда. это раз. два: надо быть очень аккуратным с for-in, потому что даже в простом массиве могут оказаться далеко не только те ключи, которые ты сам туда поместил.
>А можно ли childNodes скопировать в массив разом (с той же целью)? нет. praise the excellent API.
>Как я понимаю, редкость появления консоли в Опере вызвана try…catch нет, отсутствием ошибок. %-) а также флажком «я срал на вашу консоль, не показывайте мне эту хренотень».
>как же тогда проверять ошибки, держать исходники без отлова исключений, а >потом снимать комментарии? не делать try/catch вообще. у меня это: а) leftover'ы; б) обход дурацкого бага последних бет Оперы.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 28th, 2008 - 12:52 pm |
|---|
| | | (Link) |
|
А почему массив-то работал без "new", раз это ошибка?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 28th, 2008 - 02:26 pm |
|---|
| | | (Link) |
|
послабление от авторов для неаккуратных скриптописателей. встроеные типы вообще ведут себя неадекватно. рекомендую на это не полагаться, а писать new везде. пример, зачем:
function XA (z) {
this.data = z;
return this;
}
var a = XA(5);
a.data = 6;
var b = XA(4);
print(a.data);
print(b.data);запускаем в jsshell, наблюдаем две четвёрки. с new — 6 и 4, как и ожидалось.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:50 pm |
|---|
| | | (Link) |
|
>if (loadingPages) return false; это чего?
Я подумал, что это против загрузки страницы и перескока поля видимости с текущего места на, например, верх страницы.
Это не так?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:54 pm |
|---|
| | | (Link) |
|
нет. это флажок «я щаз догружаю next pages, потому что ты сам на [unfold all pages] кликнул, потому отстань, занят я».
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 28th, 2008 - 12:33 pm |
|---|
| | | (Link) |
|
Ну что ж, значит всё равно получилось правильно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:08 pm |
|---|
| | | (Link) |
|
Если мой метод не слишком жуток, можешь его вставить (может с пробелом если только после картинки)? Если ОСОБО жуток, напиши, почему (кроме того, что исходник я читал и тоже использовал).
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:15 pm |
|---|
| | | (Link) |
|
я тебе откаментил на исходник. а так — я успел приделать свой (и даже выложить) до твоего поста. %-)
кстати, «Date:» тоже заметил до и прибил. %-) | |