Не верь, не бойся, не проси - [entries|archive|friends|userinfo]
phantom

[ website | My Website ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

[Mar. 24th, 2008|07:54 am]
Previous Entry Add to Memories Tell A Friend Next Entry
LinkLeave a comment

Comments:
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:31 pm
(Link)
>попробую сделать кнопку для возвращения выделенному фрагменту или всему
>комментарию Каледина его албанско-молдавского

кстати. невозбранно спёр идею. щас себе приделаю. %-)
[User Picture]
From:[info]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]
From:[info]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]
From:[info]ppkk
Date:March 27th, 2008 - 10:33 pm
(Link)
>if (loadingPages) return false;
это чего?

Это копировать-вставить:)
См. UnfoldAll()…
Читал бы я ещё подробно про работу с событиями, до утра бы сидел.

вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл
Ну надо же:() Это-то понять ума большого не потребовало, а вот for-in или см. ниже я долго искал способ применить и не нашёл.

А можно ли childNodes скопировать в массив разом (с той же целью)?

Как я понимаю, редкость появления консоли в Опере вызвана try...catch, как же тогда проверять ошибки, держать исходники без отлова исключений, а потом снимать комментарии?
[User Picture]
From:[info]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]
From:[info]ppkk
Date:March 28th, 2008 - 12:52 pm
(Link)
А почему массив-то работал без "new", раз это ошибка?
[User Picture]
From:[info]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]
From:[info]ppkk
Date:March 27th, 2008 - 10:50 pm
(Link)
>if (loadingPages) return false;
это чего?


Я подумал, что это против загрузки страницы и перескока поля видимости с текущего места на, например, верх страницы.

Это не так?
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:54 pm
(Link)
нет. это флажок «я щаз догружаю next pages, потому что ты сам на [unfold all pages] кликнул, потому отстань, занят я».
[User Picture]
From:[info]ppkk
Date:March 28th, 2008 - 12:33 pm
(Link)
Ну что ж, значит всё равно получилось правильно.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:08 pm
(Link)
Если мой метод не слишком жуток, можешь его вставить (может с пробелом если только после картинки)? Если ОСОБО жуток, напиши, почему (кроме того, что исходник я читал и тоже использовал).
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:15 pm
(Link)
я тебе откаментил на исходник. а так — я успел приделать свой (и даже выложить) до твоего поста. %-)

кстати, «Date:» тоже заметил до и прибил. %-)