>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Редактор исходного кода для Thunderbird http://forum.mozilla-russia.org/viewtopic.php?id=17781 |
Infocatcher > 30-06-2007 22:12:35 |
Сначала вопрос. Исходник – Edit HTML Source. Так вот, я пересобрал исходник и кое-чего добавил. В окне составления сообщения: edithtmlsrc.oninputApply = true => автоматическое применение текущего кода (можно не жать Ctrl+S) По нажатию Ctrl+H автоматически заполняется поле «Найти:»: Может, кому полезно будет... А теперь вопросы. P. S. Надо бы добавить возможность удаление всего форматирования... |
Infocatcher > 02-07-2007 20:42:07 |
Добавил: Edit HTML Source 2 0.0.2.6 [5,9 кб] Как можно получить состояние прокрутки определенного textbox'а? Выделить код Код:var theBox = document.commandDispatcher.focusedElement; var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; // ... replace ... var nHeight = theBox.scrollHeight - oHeight; theBox.scrollTop = oPosition + nHeight; обращается к (как там это по-русски...) выделенному textbox'у. |
Anton > 02-07-2007 21:55:44 |
Суть вопроса непонятна, что если отыскать через DOM (getElement[s]By...) этот "определённый" textbox ? |
Infocatcher > 03-07-2007 02:12:07 |
Суть вопроса – не отловить определенный текстбокс, получить его состояние прокрутки. (sic!) Выделить код Код:var txtbox = document.getElementById("edithtmlsrc-text"); var oPosition = txtbox.scrollTop; var oHeight = txtbox.scrollHeight; alert(oPosition + "\n" + oHeight); // И все – undefined \n undefined // Остальное, естественно, уже бессмысленно // Или-таки руки у меня кривые... Т. е. надо: Можно, конечно, txtbox.focus();, а потом – код из моего предыдущего поста. Теперь, надеюсь, понятнее, что мне нужно? |
Anton > 03-07-2007 11:27:23 |
А, ну правильно, у textbox ведь вообще нет свойства scrollTop. |
Infocatcher > 03-07-2007 20:08:41 |
Anton |
Infocatcher > 13-07-2007 00:50:40 |
Немного поигрался с дизайном, вынес настройки на окно редактора. Edit HTML Source 2 0.0.2.9 [6,8 кб] Скрин: |
Infocatcher > 13-07-2007 21:53:58 |
Вопрос. Менее важный вопрос. Выделить код Код:var txtbox = document.getElementById("edithtmlsrc-text"); var input = txtbox.inputField; var startPos = input.selectionStart; var startText = txtbox.value.substring(0, startPos); var columnAr = startText.split("\n"); var startСolumn = columnAr[columnAr.length - 1].length; работает, но как-то не нравится мне создание лишнего массива... |
Anton > 14-07-2007 00:02:52 |
Так: http://forum.mozilla-russia.org/viewtopic.php?id=17617
Пример с lastIndexOf: http://pastebin.mozilla-russia.org/89714 |
Infocatcher > 14-07-2007 18:01:42 |
Anton А пока работает только вот так: Выделить код Код:var editHTMLsrc = { //... updateStatus: function() { var status = "Undefined"; var txtbox = document.getElementById("edithtmlsrc-text"); var input = txtbox.inputField; var startPos = input.selectionStart; var endPos = input.selectionEnd; var startText = txtbox.value.substring(0, startPos); var startLines = 1; for(var i = 0; i < startText.length; i++) if( startText.charAt(i) == "\n" ) startLines++; var li = startText.lastIndexOf ("\n"); var startColumn = li != -1 ? startText.substring (li).length : startText.length + 1; status = startLines + ":" + startColumn; if(startPos != endPos) { var selText = txtbox.value.substring(startPos, endPos); var selLenght = selText.length; var endText = txtbox.value.substring(0, endPos); var endLines = 1; for(var i = 0; i < endText.length; i++) if( endText.charAt(i) == "\n" ) endLines++; var li = endText.lastIndexOf ("\n"); var endColumn = li != -1 ? endText.substring (li).length : endText.length + 1; status = startLines + ":" + startColumn + " \u2013 " + endLines + ":" + endColumn + ", " + selLenght; } document.getElementById("edithtmlsrc-statusbar").setAttribute("label", status); setTimeout("editHTMLsrc.updateStatus()", 50); }, // ... }; Не фонтан, конечно... Но, по крайней мере, функцию установки статуса проверил. |
Anton > 14-07-2007 18:31:41 |
В примере с lastIndexOf есть пример и с watch. Что именно не понятно ? p.s. Кстати, мой код с lastIndexOf, можно слегка оптимизировать - substring(...).length - лишнее. p.p.s. Равно как и условие. |
Infocatcher > 14-07-2007 20:00:17 |
С примером всё понятно. Не получается «повесить» watch на изменение
Вот так: ? |
Anton > 14-07-2007 22:09:44 |
Выделить код Код:... load: function() { ... var tb = document. getElementById ("edithtmlsrc-text"); tb. inputField. watch ("selectionStart", this. watcher); }, watcher: function (pn, ov, nv) { var s = "property name: " + pn + "; old value: " + ov + "; new value: " + nv; var tb = document. getElementById ("watcher-textbox") tb. value = s; return nv; }, watchtest: function () { var tb = document. getElementById ("edithtmlsrc-text"); tb. inputField. selectionStart = 0; }, apply: function() { ... |
Infocatcher > 14-07-2007 23:38:49 |
А, вот, почему у меня не получалось... Я добавил код как есть плюс Жмем кнопку – работает (property name: selectionStart; old value: undefined; new value: 0). А вот на манипуляции с edithtmlsrc-text никак не реагирует. |
Anton > 15-07-2007 18:01:41 |
Так бы сразу и сказал. Выделить код Код:... load: function() { ... var tb = document. getElementById ("edithtmlsrc-text"); var ps = tb. editor. selection. QueryInterface (Components. interfaces. nsISelectionPrivate); ps. addSelectionListener (this. selectionListener); }, selectionListener: { QueryInterface: function (iid) { if ((iid instanceof Components. interfaces. nsISupport) || (iid instanceof Components. interfaces. nsISelectionListener)) return this; else throw Components. results. NS_ERROR_NO_INTERFACE; }, notifySelectionChanged: function (doc, selection, range) { var tb1 = document. getElementById ("edithtmlsrc-text"); var tb2 = document. getElementById ("watcher-textbox"); var s = "selectionStart: " + tb1. inputField. selectionStart + "; selectionEnd: " + tb1. inputField. selectionEnd; tb2. value = s; } }, apply: function() { ... |
Infocatcher > 16-07-2007 01:40:54 |
Anton пишет
Так я ж, вроде, и сказал:
Каким образом изменяется selectionStart – не уточнялось (к тому же, после кода с setTimeout можно было догадаться )... Edit HTML Source 2 0.0.2.10 [7,5 кб] (Почти не тестировал – что-нибудь может не работать...) Хммм... Почему-то ругается консоль: Выделить код Код:Ошибка: document.getElementById("taskPopup") has no properties Источник: chrome://edithtmlsrc/content/edithtmlsrc.js Строка: 4 На вот это: Выделить код Код:var editHTMLsrc = { init: function() { document.getElementById("taskPopup").addEventListener ( "popupshowing", function() { ... Но, несмотря на это, в текстовом режиме пункт действительно скрывается |
Anton > 16-07-2007 12:27:33 |
Телепаты, они такие - кто в отпусках, кто более высокооплачиваемую работу нашёл.
Один и тот же *.js включается в два разных *.xul. В одном id="taskPopup" есть, в другом - нет. Ничего особенного. |
Infocatcher > 16-07-2007 16:26:12 |
Ctrl+F, впрочем, не суть. А на самом деле я просто не знал (или не подумал...), что разные способы отлавливания изменений могут давать совсем даже неидентичный эффект. Еще раз спасибо за помощь. |