![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
12345c |
|
||||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Функция работает в IE6, FF1.07, NN8.1, Opera8.01, 9.01 (частично Opera 7.54, в том числе быстрая цитата). Все названные функции обычно требуются вместе, поэтому сделаны с общим корнем и разными входами. Добавлена функция insTagSel ("B+,I+") с сохранением выделения ранее выделенного участка, которая может быть полезна при каскадном выделении тегами.
Пример позволяет проверить работу вставки кодов как в textarea, так и в input. Переключение - чекбоксом. Адрес демонстрации - http://js2.ru/example/JsPrimeryCode-90.htm
Замечены 2 желательных улучшения (оба - для IE). 1) Есть тонкое различие в несфокусированных полях ввода - в которых нет фокуса и в которых его нет, но есть по умолчанию. В первом случае позиция курсора принята в конце текста, а во втором она оказывается в начале. После перезапуска страницы это наблюдается во всех не-Gecko-браузерах, во время работы - только в IE, потому что он не сохраняет позицию курсора и выделения при потере фокуса. В начале работы курсор надо ставить в конец текста, если по умолчанию в поле есть текст. Для Оперы в скрипте сделана правка начальной позиции, для IE она не имеет смысла, если не выполнено запоминание позиции курсора. 2) IE, чтобы быть похожим на всех, требует программной поддержки сохранения позиций выделения при потере фокуса. Это поможет, например, выйти из поля ввода, выделить текст в другом месте и сделать быструю цитату. Сейчас с этой функцией легко справляются остальные бр-ры. В них можно сохранить выделение или положение курсора, возвращаясь в поле ввода комбинацией "правый клик;Esc". Интересна необходимость применения setTimeout при установлении курсора в поле ввода (строки 26, 31). 20.08 - поправлена функция цитирования так, чтобы правильно понималось выделение в рабочем поле ввода (insField). FF не понимает выделение в других полях ввода (он этого никогда не умел). Это сообщение отредактировал(а) 12345c - 3.3.2008, 12:39 -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
||||||
|
|||||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Ссылки на другие похожие темы:
index.php?showtopic=35775 - функция (Sardar) вставки BB-кодов; index.php?showtopic=94640 - другие 2 варианта; index.php?showtopic=55935 - 3-й вариант (автор Black); index.php?showtopic=75913 - 4-й; index.php?showtopic=76915 - 5-й; index.php?showtopic=71824 - ссылка; index.php?showtopic=69531 - вставка смайлов index.php?showtopic=54474 - вставка кода картинки (нет скрипта); index.php?showtopic=30107 - ссылки на древние решения; index.php?showtopic=24028 - для IE; index.php?showtopic=18322 - для IE; |
|||
|
||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Добавлена в исходный код 1-го сообщения функция обращения к автору (кнопка "Автор!") - insTag('тег','имя_автора'), вставляет после курсора, но перед выделением. Такая кнопка нужна в форумах для быстрого копирования имени автора в поле. (Есть мысль, что её можно выполнять как выделение имени автора с последующим кликом по кнопке типа "Быстрая цитата" - интуитивно понятно, но непривычно.)
В Гекко обнаружено, что на более сложной странице, чем демонстрационная, возникают сильные глюки поля ввода по причине резервного копирования текста в defaultValue. Пришлось отказаться и ввести переменную defa. (Код скрипта в первом посте и в демо-примере исправлен.) В Опере 9.01 открылся свежий баг, связанный с невыполнением "Back" в поле INPUT. Не исправлял. Посмотрим, что будет с ней в следующих версиях. Не совсем корректно работает "Цитата", если выделение - в поле ввода. Функция цитирует выделение, вместо того, чтобы, интуитивно, обрамить выделение тегами. Не изменял, так как требует глубокой переработки функции (выделение сложной процедуры обнаружения места выделения), а цитирование не обязательно востребовано. Остаётся пожеланием сделать поведение выделения в IE, как в FF/Опере - чтобы не терялось при потере фокуса. Интересно, а что, если клик кнопки при внешнем выделении тоже будет что-то значить? Копирование выделенного в поле ввода с обрамлением тегами. Практически, то же, что цитата. Особо полезно было бы для ссылок, но в ссылке надо ещё вытащить УРЛ, что сильно усложняет скрипт. Не просто брать выделение, а проверять, нет ли пересечения со ссылкой. |
|||
|
||||
12345c |
|
||||||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Решил проблему с "Цитатой", если выделение в поле ввода. Оказывается, решается просто, без переработки алгоритма. Если выделенный в поле ввода текст совпал с "выделенным вообще, по .getSelection()", то обрамляем этот текст тегом цитаты. Иначе дописываем цитату после курсора.
============================= Кто подскажет, что за странный баг в Gecko, появляющийся в текущей версии примера? Появляется только при такой комбинации: 1) выделить участок в textarea; 2) выделить участок в INPUT; 3) чекбокс выключен, т.е. рабочая область - textarea ; 4) когда выделение на Input-е, кликаем по "Fast quote". Вылетает на функции (textarea).focus() такая ошибка (FF!.07, NN8.1):
Line 43:
Задержка не влияет - если бы не в 40-й строке
============================ Ответ от Sardar-a:
Это сообщение отредактировал(а) 12345c - 21.8.2006, 16:39 |
||||||||
|
|||||||||
F13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.8.2006 Репутация: нет Всего: нет |
12345c, мне очень понравился скрипт, но есть один небольшой ляп - при вставке автора в поле ввода скобка вместе с курсором перескакивает в конец:
Помогите исправить эту досадную ошибку... P.S. Кстати, в демонстрашке такая же ерунда... ![]() Это сообщение отредактировал(а) F13 - 30.8.2006, 23:13 |
|||
|
||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Исправил (в демо и в коде первого сообщения), спасибо за подсказку.
|
|||
|
||||
F13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.8.2006 Репутация: нет Всего: нет |
12345c, спасибо за отклик - все работает...
![]() Есть пожелания:
![]() Это сообщение отредактировал(а) F13 - 1.9.2006, 00:03 |
|||
|
||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
1) уже реализовано - достаточно написать insTag('URL');
2) это сильно зависит от структуры страницы, от того, где расположен в коде HTML ник цитируемого автора. Можно разве что подробно описать методику того, как написать доступ к нику автора (и дате сообщения). Если кратко, то создаёте на выделении TextRange (для FF что-то иное), рекурсивно проходите по узлам нод в поиске строки таблицы, например, с классом message (если сообщение лежит в <tr class=message>). Затем спускаетесь по дереву нод в то место, где у Вас дата и автор и достаёте их. Если такой класс не найден, выделение было вне сообщения. (Всё это делать в insCapt(), но для Оперы, может быть, раньше. ) 3) я это сделал как более содержательное действие - ставите пустые скобки цитаты, потом вписываете цитату. Но если надо не ставить - нет проблем, переписываете
|
|||
|
||||
F13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.8.2006 Репутация: нет Всего: нет |
||||
|
||||
12345c |
|
||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Заменяете строчку function insTagArg(s){insPic(s,brkR);} //'b',']' на
и строчку s1=brkL+s1+(s2==brkR?'=':brkR); //'[b]' or '[b=' на
Был текст: "Смотреть здесь" (слово "здесь" выделено по selection) После клика: "Смотреть [URL=[курсор]]здесь[/URL]" А в случае невыделенного участка или если курсора нет - так, как Вы сказали. |
||||
|
|||||
F13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.8.2006 Репутация: нет Всего: нет |
12345c, спасибо огромное за подсказку...
![]() |
|||
|
||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 2 Всего: 101 |
Сделаны 2 поправки функций скрипта, одна из который существенна, и отмечена одна особенность в IE, устранение которой привело бы к заметному увеличению кода - на 600-800 байт, поэтому оставлена как есть.
1) Поправка в IE для многострочных выделений. Было выставление курсора или выделения после операции - со сдвигом, зависящим от числа переносов строк от начала текста. 2) В FF было перескакивание на начало прокрутки длинного текста поля ввода, теперь положение прокрутки сохраняется. 3) Ообенность: IE по-прежнему игнорирует завершающие пустые переносы строк в выделении, но на удобстве пользования это не сказывается. Из области выделения они исключаются, но обычно они несущественны. Скрипт исправлен в первом сообщении темы (добавлено около 200 байт кода). |
|||
|
||||
Nikname |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Еще один вариант (работает под Mozilla & IE под другими не проверял):
Это сообщение отредактировал(а) Nikname - 16.10.2006, 14:18 |
|||
|
||||
Wheels |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 1.2.2007 Репутация: нет Всего: 1 |
Приветствую. Не могу зарегистрироваться на форуме у автора, поэтому пишу сюда. Такой вопрос по данному скрипту:
1) Правильно ли я внес изменения в код для небольшого усовершенствования функции с цитатой?
2) И такой вопрос - я попробовал задать новую функцию для вставки тегов типа [параметр1=параметр2]обрамленный текст[/параметр1] с помощью выпадающего списка <select>, но, вероятно, я делаю что-то неправильно. Не хочет работать оно (.
Почему? Заранее благодарен. |
||||
|
|||||
Wheels |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 1.2.2007 Репутация: нет Всего: 1 |
Оказывается название функции было неправильным ) Получилось:
Грамотно ли это? И такое изменение будет ли грамотным?
|
||||
|
|||||
![]() ![]() ![]() |
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |