Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > вставка/удаление 4-х пробелов при нажатии |
Автор: pythonwin 25.9.2006, 11:59 | ||||||
Всем доброго времени суток! помогите, пожалуйста сделать вставку отступов на форуме по питону! есть определённый код - спасибо smartov, но у него есть одна ошибка которую нужно исправиль. задача:
проблема:
Код:
Более подробно: http://forum.vingrad.ru/index.php?showtopic=108940&view=all |
Автор: sergejzr 25.9.2006, 12:15 |
Модератор: [B]pythonwin, не следует дублировать темы![/B] |
Автор: pythonwin 25.9.2006, 12:36 |
Прошу прощения за это, но это было так задумано: 1) поместил в JS, т.к. проблему в коде могут устранить JS-ники 2) поместил в "Центр помощи", т.к. сюда заходят форумчане, у которых есть свободное время + есть желание помочь ближнему. ![]() 3) устал нажимать 4 пробела в форуме по питону ![]() ![]() |
Автор: pythonwin 25.9.2006, 12:53 |
решение этой проблемы поможет развитию форума по питону! ![]() |
Автор: Cr@$h 26.9.2006, 19:50 |
Так или иначе, обсуждение реализации лучше делать в одном месте и лучше в Обсуждении ИМХО. ![]() |
Автор: Sardar 26.9.2006, 21:31 | ||||||
Нужно селекцией добежать до начала строки, затем как было, разбить по строкам добавить пробелы. Для мозиллы просто, бежим с selectionStart пока не упрёмся в \n (10). Для ИЕ геморно, вчера вечером игрался, так и не порешал безглючно. Что бы к форуму прикрутить быстро нужно пользовать TextAreaSelectionHelper и HotKeyHandler обьекты. Пример на хоткеи:
В TextAreaSelectionHelper добавляем два метода indentBlock и unindentBlock. Это кривое ad-hoc решение, т.к. никогда не думал что в TextAreaSelectionHelper потребуеться копировать селекцию. Копия (скрытая, виртуальная, называй как хочешь) селекция нужна для работы с текстом, не меняя позиции реального курсора. Каркас indent может выглядеть так:
unindentBlock делаем точно также. Редизайном TextAreaSelectionHelper займусь позже (когда найду время ![]() Собстно для ИЕ глючный может быть таким, читать коменты почему в простых текстовых приложениях docment.selection не рулит (но рулит когда работаем вообще с документом):
Сильно не пинать ибо спал вчера 4 часа (сегодня 6, голова гудит... ![]() ![]() |
Автор: Cr@$h 27.9.2006, 08:49 | ||
Хорошо, давайте добивать код в JS. |
Автор: pythonwin 27.9.2006, 11:05 |
Ура, администрация одобрила! ![]() ![]() |
Автор: Sardar 27.9.2006, 13:11 |
Да какой полный код, мозилловскую часть напишет любой студент (не напишите сами, сделаю я, но позже). ИЕ'шную часть выложил выше, криво ибо набросок. Ссылкой http://sardar.vingrad.ru/vingradattaches/Vingrad_indent/Vingrad_indent.htm, открываем в IE, ctrl+[ отодвигает как напоминание "не юзать" ![]() |
Автор: Cr@$h 27.9.2006, 20:08 |
Скорее, я. ![]() ![]() |
Автор: pythonwin 28.9.2006, 07:44 | ||
Согласен! я - один из них. ![]() |
Автор: Cr@$h 28.9.2006, 21:28 |
Как дело придвигается? |
Автор: pythonwin 29.9.2006, 07:58 | ||
уже потестировал и сейчас напишу результаты. Добавлено @ 08:03 Sardar, потестировал есть несколько багов: 1) по условию:
а в реальности при нажатии "Ctrl+[" пробелы добавляются, хотя должны удаляться ![]() 2) если выделить блок (одна и более строк) и нажать "Ctrl+[", то после добавления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали. ![]() |
Автор: Zeroglif 29.9.2006, 10:07 |
Набросал под IE6/OP9 only - http://www.404.googlepages.com/indent_in_textarea.html - Отступы = 4 пробела. - Добавляем отступы с помощью TAB или Ctrl+], удаляем с помошью SHIFT+TAB или CTRL+[. - Если выделения нет, то и блока нет, просто добавляем/удаляем отступы слева от курсора. - Если выделение есть, то появляется блок, расширяем блок влево (то есть можно не выделять строку полностью). - Выделение постоянно на виду (мне так удобнее). Отпишитесь пока, то или не то по функционалу, дальше будем в приличный вид приводить и проч. |
Автор: pythonwin 29.9.2006, 10:59 | ||||||
Zeroglif, табы нельзя - только Ctrl+] и CTRL+[
спасибо, - потестирую! ![]() Добавлено @ 11:06
это не правильно ![]() ![]() а также, если выделить блок (одна и более строк) и нажать "Ctrl+]" или "Ctrl+[", то после добавления/удаления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали |
Автор: Zeroglif 29.9.2006, 11:35 | ||||
То есть это не должно быть похоже на обычное поведение текстового редактора для TAB/SHIFT+TAB? Где бы ни был курсор - нужно сдвигать всю строку на котрой курсор? Это можно сделать.
Не наблюдаю. При выделении (любом) должны двигаться строки, в которых живёт это выделение. Или тут тоже своя специфика? |
Автор: Zeroglif 29.9.2006, 11:52 |
Без кнопок TAB/SHIFT+TAB и простой курсор в строке тоже считает эту строку блоком (поведение как при выделении): http://www.404.googlepages.com/indent_in_textarea_no_tab.html |
Автор: pythonwin 29.9.2006, 12:13 | ||||||
1) нужно сделать так чтобы после нажатия Ctrl+] или Ctrl+[ строка или блок которую "сдвигают" после "сдвига" полностью выделялись ![]()
это баг:
нужно чтобы строка следующая за выделенным блоком не перемещалась к верхней. Эту ошибку можно повторить в IE6+ если дважды кликнуть по строке мышкой IDLE для Python можно скачать http://python.org/2.4 |
Автор: Zeroglif 29.9.2006, 13:02 | ||||
![]()
Я бы рад повторить ошибку, но чего-то не срастается, гадом буду, строки ниже/выше блока молчат, как партизаны. ![]() |
Автор: pythonwin 29.9.2006, 13:08 | ||
попробуй, так: 1) поставь курсор в начало строки 2) нажми Shift+End 3) нажми Ctrl+] Это для IE Добавлено @ 13:09 а я и не говорил что будет просто ![]() |
Автор: Zeroglif 29.9.2006, 13:33 |
Ага, теперь вижу, щас полечим... |
Автор: pythonwin 29.9.2006, 13:47 |
Замечательно! Жду! ![]() |
Автор: Zeroglif 30.9.2006, 21:21 |
Полечил... Проверяй функционал. Индент/аниндент по CTRL+]/CTRL+[. Строка выделяется полностью от начала и до конца, если в ней курсор или её зацепило выделением. Баг IE с невидимым \r в конце обошёл. http://www.404.googlepages.com/indent_in_textarea_no_tab2.html |
Автор: pythonwin 1.10.2006, 11:40 | ||
багов под IE6+ не нашел. ![]() Zeroglif, спасибо! теперь нужно сделать под FF и Mozilla. ![]() |
Автор: Zeroglif 1.10.2006, 19:03 | ||
Радостно. На здоровье. Я честно говоря случайно подвизался тут помогать, ибо мне стало жутко интересно, как будет выглядеть нормальная IE-реализация задачи, а вот FF меня совсем даже не греет (приколов дюже мало, не интересно), тем более, что:
Но набросал до кучи и для мозиллы, приколов не встретил, за исключением того, что выделение мышкой может захватывать \n строки на которой я её отпускаю, но браузер никак об этом не сигнализирует (не выделяет визуально). Может это уже известное поведение и я его (это известие) прохлопал... ![]() http://www.404.googlepages.com/indent-in-textarea-by-zeroglif.html |
Автор: pythonwin 2.10.2006, 08:38 | ||
я думаю что это не всё ![]() Добавлено @ 08:41 Zeroglif, спа
спасибо, - потестирую! ![]() Этот пример работает и для IE, FF, Opera и Mozilla? Добавлено @ 08:43 Zeroglif, в IE открыл ссылку и получил какой-то набор иероглифов. ![]() |
Автор: pythonwin 2.10.2006, 15:47 | ||
баловался с разными кодировками, но ничего не получается ![]() |
Автор: Zeroglif 2.10.2006, 15:58 |
Да. В textarea мусор или вместо страницы мусор? Там шрифты заданы, может из-за этого... или googlepages плющит (бывает, он же в бете). Я переложу попозже. |
Автор: pythonwin 2.10.2006, 16:22 |
вместо страницы мусор какие? http://www.404.googlepages.com/indent-in-textarea-by-zeroglif.html нормально открывает в FF и Mozilla, но в IE вместо странички выдает иероглифы ![]() Добавлено @ 16:35 Zeroglif, http://www.404.googlepages.com/indent-in-textarea-by-zeroglif.html - заработало! ![]() |
Автор: Cr@$h 2.10.2006, 16:47 |
У меня на ИЕ 6+ всё идеально. |
Автор: pythonwin 2.10.2006, 16:58 |
у меня IE6+ и багов уже не вижу. ![]() Добавлено @ 17:06 надо ещё и под под оперой потестировать, но я оперой не пользуюсь и поэтому многих тонкостей не знаю - вопрос: "Кто сможет потестировать под оперой?" |
Автор: Cr@$h 2.10.2006, 17:11 |
Я, вечером. |
Автор: pythonwin 2.10.2006, 17:21 |
хорошо! ![]() |
Автор: pythonwin 3.10.2006, 14:36 |
Какие результаты? ![]() |
Автор: S.A.P. 3.10.2006, 14:41 |
pythonwin, плачевные ![]() |
Автор: pythonwin 3.10.2006, 14:47 | ||
![]() S.A.P., спасибо! тогда можно будет для оперы их заменить на что-то другое. Добавлено @ 14:53 чем можно заменить в опере "Ctrl + ]" и "Ctrl + ["? |
Автор: Zeroglif 3.10.2006, 15:07 |
Чем угодно в настройках горячих клавиш Оперы. Это уже проблема пользователя. Или хочешь пользоваться привычными клавишами Оперы или привычными клавишами индента. ![]() |
Автор: pythonwin 3.10.2006, 15:14 | ||
т.е. предлагаешь пользователям перенастроить в опере горячие клавиши? |
Автор: Zeroglif 3.10.2006, 15:32 |
К примеру, в в Опере клавиши CTRL+J настроены на Ссылки на странице, а здесь, на форуме - это тег движущегося текста. Мне нужно просить винград переделать шорткат этого тега? Не думаю. |
Автор: pythonwin 3.10.2006, 15:35 |
не понял. |
Автор: Zeroglif 3.10.2006, 15:45 |
Сорри за абракадабру. Энтер нажал случайно. То ли локтем, то ли головой. ![]() Я тебе предлагал вариант TAB/SHIFT+TAB, будет в опере работать без изменения горячих клавиш. Но проще настроить Оперу. ![]() |
Автор: pythonwin 3.10.2006, 16:57 | ||||
Бывает! ![]()
Zeroglif, спасибо! я тебя понял! ![]() Cr@$h, что скажешь? |
Автор: Cr@$h 3.10.2006, 17:07 | ||
У меня всё работает.
И такого не наблюдаю, всё нормально. Tab в IE заставляет бегать по всем элементам страницы. ИМХО оставить как есть, зачем менять. В моей Опере почему-то всё нормально. |
Автор: pythonwin 3.10.2006, 17:22 |
что собираем подписи и просим администрацию внедрить? |
Автор: Cr@$h 3.10.2006, 17:48 |
Да, теперь всё готово, ядумаю. воя идея, предлагаю тебе же и создать тему в Обсуждении. Предоставить скрипт, указать темы, где всё обсуждалось, сказать, что он оттестировался. Попросить внедрить его в обработку этих клавиш на всех форумах. Потом после внедрения напишу в новостях Винграда и на шапке Python (с разработчиками). |
Автор: pythonwin 3.10.2006, 18:02 |
Cr@$h, Хорошо! Но только завтра - поздно уже ![]() |
Автор: Cr@$h 3.10.2006, 18:04 |
![]() ![]() |
Автор: pythonwin 4.10.2006, 13:46 | ||
создал тему http://forum.vingrad.ru/index.php?showtopic=114892&view=findpost&p=877214 |
Автор: Zeroglif 4.10.2006, 14:47 | ||
Немножко прокомментировал скрипт, чтоб было понятно, если будут править, менять чего-нибудь, оптимизировать и т.п., внедрять, в общем. Всё. Пост сдал. ![]()
|
Автор: pythonwin 4.10.2006, 15:45 |
Zeroglif, спасибо! +1 |
Автор: 12345c 4.10.2006, 16:07 |
Почитал эту тему первый раз и поудивлялся - где используют такую кодировку клавиш? Обычно в редакторах (UltraEdit - пример) добавляют табы или пробелы, нажимая на клавишу Tab, если выделена строка или группа строк (выделение должно охватывать хотя бы 1 перенос строки). Удаление табов или группы пробелов - Shift+Tab. Использование Ctrl+[ , когда курсор просто в строке - очень уж неочевидно. |
Автор: GIK 4.10.2006, 16:19 |
А что-за конструкция в строке 15, зачем там две скобки? |
Автор: pythonwin 4.10.2006, 17:14 | ||
кому как, но питонщика например это нормально! ![]() хотя возможно и в других языках используется. 12345c, сможешь внедрить этот скрипт к нам на форум? наверное - функциональное программирование в JS ![]() |
Автор: 12345c 4.10.2006, 18:24 |
Скрипты JS к форуму писал Sardar, насколько я понимаю, поэтому внедрять лучше ему, чтобы не нарушить некоторые другие идеи. Да и внедрять надо совсем не этот скрипт, а взять функционал кнопок Ж,Н,П,... и базироваться на нём. Вопросы совместимости браузеров решатся сами собой, так как имеющийся скрипт совместимый. Потом, возникают вопросы отображения функциональности, затрагивается дизайн. И остаётся вопрос, почему обделять другие форумы и почему делать только по Ctrl+[ . |
Автор: Zeroglif 4.10.2006, 19:25 | ||||
Согласен. В принципе, хозяину всего js-наполнения форума (Sardar?) удобнее перебрать скрипт под себя или даже написать свой (решение проблем IE понятны), под свою модульную систему. Клавиши оттуда вытащить и проч.
Мне было тоже енто весьма удивительно, изначально я вставил в скрипт дополнительно обычную схему индента по TAB, но заказчик заругался. ![]() Какие две из шести круглых и восьми квадратных? ![]() |
Автор: Sardar 4.10.2006, 20:24 | ||
Помимо меня писали скрипты sergej.z(транслит, подсветка, селекция и т.д.) и Girder (всё самое последнее вкусное). На досуге посмотрю, перенсу на текущие форумские скрипты. Сейчас занят одной, на первый взгляд бесполезной, но интересной фичей - расширяю функционал TextAreaSelectionHelper'a, что бы человеческая селекция была. Для вас это может означать например ctrl+shift+T, появляються: [][/]; кусор в первом теге, пишем тег, он одновременно пишеться в обоих тегах; затем tab, курсор прыгает в текст между тегами, пишем содержимое; снова tab и мы после закрывающего тега (shift+tab - перед открывающим). Конечно многое можно на этом построить ![]() |
Автор: pythonwin 5.10.2006, 07:14 | ||||
теперь почему именно Ctrl+] и Ctrl+[ 1) этот набор клавиш используется в IDLE питона и поэтому писать код питона привычней Ctrl+] и Ctrl+[ 2) если заменить их на табы, то осложниться жизнь у пользователей, которые пользуются Tab, для навигации Добавлено @ 07:28 хотя лучше, чтобы пользователь мог сам для себя настраивать горячие клавиши. ![]() |
Автор: smartov 5.10.2006, 11:21 |
Zeroglif, красивый код! Здорово. |
Автор: pythonwin 5.10.2006, 11:29 |
все кто за этот код и за внедрение его на форуме - поддержите пожалуйста http://forum.vingrad.ru/index.php?showtopic=114892 |
Автор: pythonwin 5.10.2006, 13:00 | ||
http://forum.vingrad.ru/index.php?showtopic=114892&view=findpost&p=878528
|
Автор: pythonwin 5.10.2006, 13:59 | ||
http://forum.vingrad.ru/index.php?showtopic=114892&view=findpost&p=878641
|
Автор: 12345c 5.10.2006, 18:05 | ||
В общем, если админы согласны, то задача такая. Вырезать страницу форума со скриптами и сделать добавку наподобие кнопок "Жирный" и т.п. Результат будет в виде кнопки с квадратными скобками в ряду других. Вот кто какую работу может выполнить - выполняйте. Первую часть работы сделал - взял страницу, скопировал скрипты, и стили для красоты, а может, и для работы важны будут. Убрал рекламный мусор. Сменил пути к скриптам. Теперь страница ничего, кроме рисунков, дополнительно не просит. Но они неважны для скриптов. Далее, смотрим, что кнопки генерируются скриптом (function getHtml_f), а функции, вызываемые по клику кнопки, лежат в ToolMenu.js (function ubbc_wrapTags, ...) и в MyLib.js . Например
На основании скопированных файлов можно писать дополнение, согласовав вышеназванные вопросы. (Заодно, я в форуме по JS в своё время сделал полезный скрипт поиска по группе разделов, который стоит сейчас в приветствии. Можно распространить возможность вставки скрипта в любой форум. Для каждого будет своя группа родственных разделов. Например, в теории веб-дизайна, надо охватывать поиск по вёрстке сайтов, по работе с готовыми скриптами и прочее.) Ещё, если касаться JS-скриптов, то разработан скрипт группового выделения опций в мультиселект-списке (лежит в разделе "Наши скрипты"). Не мешало бы его использовать при выборе области поиска на странице поиска. Эту тему тоже можно перенести в раздел "Наши скрипты", если (и когда) автор темы пожелает. (Где тут файл прикрепляют? не нашёл, разместил на хостинге: http://javascript.aho.ru/files/vingradScripts.rar ) Добавлено @ 18:08 (27 КБа в архиве, пользуйтесь, если кто будет писать скрипт, для экономии времени на обработку примера страницы.) |
Автор: pythonwin 5.10.2006, 18:09 |
12345c, спасибо! ![]() но разбираться буду завтра - поздно уже! ![]() |
Автор: 12345c 5.10.2006, 18:26 |
Кстати, если использовать только в Питоне, то скрипт можно разместить в "Правилах форума", для чего достаточно обратиться к модератору. Поэтому можно вставить и сделанный скрипт, разница будет в том, что он займёт больше примерно на 1 КБа кода на обработку курсора и выделения текста в разных бр-рах. А в имеющихся скриптах эта обработка уже есть. Нужно всего 2 числа - selStart и selEnd (или как их зовут здесь), чтобы указать начало и конец выделения в textarea или есть ли оно вообще (или при равенстве чисел - указание на наличие курсора). Остальное - не более 500 байт. |
Автор: pythonwin 5.10.2006, 19:10 |
12345c, этот скрипт можно использовать не только в питоне. ![]() |
Автор: Cr@$h 6.10.2006, 17:34 |
Вот именно. Предлагаю вводить везде. Создаю опросник, который обещал. |
Автор: pythonwin 9.10.2006, 11:21 | ||
Cr@$h, ссылку дай пожалуйста. ![]() |
Автор: Cr@$h 10.10.2006, 00:22 |
http://forum.vingrad.ru/index.php?showtopic=115292 |
Автор: pythonwin 10.10.2006, 07:52 |
Cr@$h, спасибо! ![]() |