Информационный портал
pocket versionPOCKET  wikiWIKI  FAQFAQ  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  ПрофильПрофиль  Войти и проверить личные сообщенияВойти и проверить личные сообщения  ВходВход

FB Editor - скрипты, вопросы...
На страницу 1, 2  След.
 
Найти сообщения без ответов
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Основы формата FB
Предыдущая тема :: Следующая тема  
Автор Сообщение


Юзич
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 07.02.2006
Сообщения: 120
Откуда: Республика Беларусь

СообщениеДобавлено: Вт Мар 28, 2006 20:54    Заголовок сообщения: FB Editor - скрипты, вопросы... Ответить с цитатой

Недавно пытался делать скрипты для FB Editor.
Вот что у меня получилось:

Этот скрипт вставляет в документ текущую дату.

Код:
function FBEScriptName() {
  return "FBE Insert Current Date Script";
}

function FBEGetFlags() {
  return 1;
}

function Run(body,desc) {
  var mm = new Date();
  body.Document.selection.createRange().pasteHTML(mm.getYear()+"."+mm.getMonth()+"."+mm.getDate());

}

А этот - конвертирует в выделенном фрагменте сточные буквы в заглавные.

Код:
function FBEScriptName() {
  return "FBE Text To UpperCase Script";
}

function FBEGetFlags() {
  return 1;
}

function Run(body,cp) {
  body.document.selection.createRange().pasteHTML(body.document.selection.createRange().text.toUpperCase());

Побочные эффекты - пропадает выделение полужирным шрифтом, курсив, линки, и т.д.
Если выделено больше одного абзаца, то все сливается в один абзац.
Sad

Question Вопрос на засыпку: как грамотно обратиться к выделенному фрагменту документа?
И есть ли нормальный справочник по функциям JavaScript (не руководство для WEB-кодеров), пользуясь которым, можно делать скрипты для FBE? Question

Вообще, такое впечатление, что JavaScript в FBE какой-то урезанный.

Напоследок. Как работает команда Words в меню Tools? Или она не закончена?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Вт Мар 28, 2006 21:47    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

Юзич писал(а):
Question Вопрос на засыпку: как грамотно обратиться к выделенному фрагменту документа?

body.document.selection.createRange().text.toUpperCase убивает тэги в выделенном фрагменте.

Функцию Run надо аккуратнее сделать, с сохранением существующих в фрагменте тэгов. Т.е. брать html фрагмента, конвертировать в UpperCase только текст (не трогая тэги), а потом вставлять новый html, а не текст.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Юзич
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 07.02.2006
Сообщения: 120
Откуда: Республика Беларусь

СообщениеДобавлено: Ср Мар 29, 2006 19:15    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

vvv писал(а):

Функцию Run надо аккуратнее сделать, с сохранением существующих в фрагменте тэгов. Т.е. брать html фрагмента, конвертировать в UpperCase только текст (не трогая тэги), а потом вставлять новый html, а не текст.

Потрясающе! Wink Shocked Вы сообщили мне то, что я и сам прекрасно знаю.
Теперь, если кто-нибудь скажет, как
vvv писал(а):
брать html фрагмента, ... а потом вставлять новый html, а не текст.
или посоветует справочник с примерами, будет совсем хорошо... Rolling Eyes
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Ср Мар 29, 2006 19:41    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

Юзич писал(а):

Теперь, если кто-нибудь скажет, как
vvv писал(а):
брать html фрагмента, ... а потом вставлять новый html, а не текст.

Взять: через outerHTML или innerHTML
Вставить: через pasteHTML

Примеры и детали - смотреть здесь:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/dhtml_reference_entry.asp

P.S. Для сложных фрагментов рекомендуется пользовать метод insertAdjacentHTML вместо pasteHTML. Во избежании появления несанкционированных тэгов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Ср Мар 29, 2006 23:11    Заголовок сообщения: Ответить с цитатой

А еще лучше работать по возможности не с html, а с dom-деревом, в данном случае это в высшей мере оправдано.
А справочник вам нужен именно для веб-кодера. Просто нужен хороший справочник по DOM. Я хожу частенько на
http://www.w3schools.com/js/
но и на сайте M$ очень прилично описано, в данном случае даже M$ предпочтительнее, ибо там MSHTML юзается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Юзич
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 07.02.2006
Сообщения: 120
Откуда: Республика Беларусь

СообщениеДобавлено: Вт Апр 04, 2006 21:04    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

vvv писал(а):
Юзич писал(а):

Теперь, если кто-нибудь скажет, как
vvv писал(а):
брать html фрагмента, ... а потом вставлять новый html, а не текст.

Взять: через outerHTML или innerHTML
Вставить: через pasteHTML


Не стыкуется с body.document.selection.createRange().

vvv писал(а):

Примеры и детали - смотреть здесь:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/dhtml_reference_entry.asp


Вот за ссылку - большое спасибо. Великолепный справочник.
Если бы еще найти что-то подобное в офлайновом виде...

vvv писал(а):

P.S. Для сложных фрагментов рекомендуется пользовать метод insertAdjacentHTML вместо pasteHTML. Во избежании появления несанкционированных тэгов.


Тоже не стыкуется с body.document.selection.createRange().

Добавлено спустя 6 минут 13 секунд:

GribUser писал(а):
А еще лучше работать по возможности не с html, а с dom-деревом, в данном случае это в высшей мере оправдано.
А справочник вам нужен именно для веб-кодера. Просто нужен хороший справочник по DOM. Я хожу частенько на
http://www.w3schools.com/js/
но и на сайте M$ очень прилично описано, в данном случае даже M$ предпочтительнее, ибо там MSHTML юзается.


Тоже большое спасибо. Полезная ссылка.

И все-таки... Как работает команда Words в меню Tools?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


LX
Главный экзекутор

Главный экзекутор

Зарегистрирован: 05.12.2004
Сообщения: 967
Откуда: Минск

СообщениеДобавлено: Ср Апр 05, 2006 18:45    Заголовок сообщения: Ответить с цитатой

Юзич писал(а):
Если бы еще найти что-то подобное в офлайновом виде...


MSDN есть в трехкомпактовом виде, могу поделиться. судя по твоей инфе, ты белорус -- так что если у тебя есть возможность встретиться в минске, кинь мне мессагу в приват
_________________
disinformation must be free!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Ср Апр 05, 2006 23:35    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

Юзич писал(а):

Не стыкуется с body.document.selection.createRange().

Попробуйте что-нибудь типа

var rng=body.document.selection.createRange()
var htm=rng.htmlText

P.S. Тэги в htmlText могут не всегда соответствовать ожидаемым. По той причине, что MSHTML извлекает содержимое Range как валидный (с точки зрения MSHTML) фрагмент. Поэтому порой может добавить туда неожиданные тэги.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Чт Апр 06, 2006 10:52    Заголовок сообщения: Ответить с цитатой

vvv писал(а):
Поэтому порой может добавить туда неожиданные тэги.
Я потому и говорю, что работать лучше с DOM-деревом, там все предсказуемо в случае с FBE - 100% валидный xhtml. При работе с обычным html в вебе я тоже стараюсь добраться до innerHTML, так как там могут быть глюки типа element.child.parent != element и т.п. Но с FBE такого можно не опасаться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Пт Апр 07, 2006 1:41    Заголовок сообщения: Ответить с цитатой

GribUser писал(а):
Я потому и говорю, что работать лучше с DOM-деревом

Конечно, лучше. И даже более того, работа с деревом - это единственный способ получения приличного html из IE.
BD и FBD именно так и работают. Но помню, сколько мне трудов стоило приручение IE на предмет корректного интерактивного редактирования. Так, чтобы пересекающиеся и вложенные тэги расщеплялись...
А Юзич, судя по всему, человек в этом деле новый, так что не знаю...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Пт Апр 07, 2006 14:30    Заголовок сообщения: Ответить с цитатой

vvv писал(а):
Но помню, сколько мне трудов стоило приручение IE на предмет корректного интерактивного редактирования.
У меня об источнике твоих трудностей с IE имеется своя версия Twisted Evil. Вероятность же получить глюки на выходе при работе с DOM минимальна для новичка, на мой взгляд... Ну тут все от человека зависит, конечно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Юзич
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 07.02.2006
Сообщения: 120
Откуда: Республика Беларусь

СообщениеДобавлено: Пт Апр 07, 2006 20:10    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

vvv писал(а):
Юзич писал(а):

Не стыкуется с body.document.selection.createRange().

Попробуйте что-нибудь типа

var rng=body.document.selection.createRange()
var htm=rng.htmlText



Спасибо!
После замены .text на .htmlText скрипт стал работать корректнее. В пределах секции. Confused Я смотрел содержимое переменной, перед обратной вставкой нужно отсекать тэги <DIV class="section"> и лишние <p>, если последний абзац был выделен не целиком. Но это уже мелочи.

А вообще, надо будет хорошенько расковырять body.js ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Пт Апр 07, 2006 21:41    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

Юзич писал(а):
Спасибо!
После замены .text на .htmlText скрипт стал работать корректнее. В пределах секции. Confused Я смотрел содержимое переменной, перед обратной вставкой нужно отсекать тэги <DIV class="section"> и лишние <p>, если последний абзац был выделен не целиком. Но это уже мелочи.

Эти "мелочи" - стиль работы IE в режиме редактирования с htmlText и PasteHtml. В данном случае повезло: искажения не фатальны. А может, например, сделать и вот так.

исходный html:
<p>это параграф</p>
html после htmlText и PasteHtml:
<p>это <p>параграф</p></p>

Что нормально для mshtml, но фатально для fb2... Sad

Для того, чтобы таких вещей не было, надо работать с полными элементами. Брать их надо через дерево или расширяя Range до полного элемента. А вставлять - либо через innerHtml (что проще, но иногда глючит), либо через insertAdjacentHTML (что надежно, т.к. всегда вставляет юзерный фрагмент, но реализуется посложнее).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Юзич
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 07.02.2006
Сообщения: 120
Откуда: Республика Беларусь

СообщениеДобавлено: Пн Апр 10, 2006 20:13    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

vvv писал(а):


А может, например, сделать и вот так.

исходный html:
<p>это параграф</p>
html после htmlText и PasteHtml:
<p>это <p>параграф</p></p>

Что нормально для mshtml, но фатально для fb2... Sad


Так и делает.

vvv писал(а):

Для того, чтобы таких вещей не было, надо работать с полными элементами. Брать их надо через дерево или расширяя Range до полного элемента. А вставлять - либо через innerHtml (что проще, но иногда глючит), либо через insertAdjacentHTML (что надежно, т.к. всегда вставляет юзерный фрагмент, но реализуется посложнее).


Это очень разумно, но надо еще озаботиться "вклейкой" отредактированного фрагмента в полный элемент. Если, допустим, выделено два полных абзаца и прловина третьго. А обратную вставку, если, опять же, допустим, выделена два абзаца секции, и часть следующего за ними элемента cite не отрабатывает корректно даже функция Copy/Paste FB Editor-а....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


vvv
Автор редактора BookDesigner

Автор редактора BookDesigner

Зарегистрирован: 06.10.2004
Сообщения: 349

СообщениеДобавлено: Пн Апр 17, 2006 20:30    Заголовок сообщения: Re: FB Editor - скрипты, вопросы... Ответить с цитатой

Юзич писал(а):
Это очень разумно, но надо еще озаботиться "вклейкой" отредактированного фрагмента в полный элемент. Если, допустим, выделено два полных абзаца и прловина третьго. А обратную вставку, если, опять же, допустим, выделена два абзаца секции, и часть следующего за ними элемента cite не отрабатывает корректно даже функция Copy/Paste FB Editor-а....

Поэтому и говорю, что обеспечить корректное интерактивное fb2-редактирование сложных фрагментов под IE непросто. Но если серьезно поработать, то можно. Трюк заключается в том, что первично выбранный TextRange надо расширить до полного. Полного в том смысле, что он должен включать полные html-фрагменты.

1. Начальный TextRange, выбранный мышкой, имееет входную и выходную точки. Координаты точек можно получить при помощи интерфейса HTMLWindow2 (.event.X,.event.Y), запросив их на событиях HtmlDoc_onmousedown и HtmlDoc_onmouseup.
2. Используя метод elementFromPoint, можно найти номера элементов, соответствующих входной и выходной точке.
3. Поднимаясь по дереву вверх от первого элемента и опускаясь вниз от последнего, можно найти полные начальный и конечный элементы. При помощи свойства nodeName.
4. Создать полный TextRange. При помощи метода moveToElementText. Сначала надо сделать TextRange, соответствующий полному начальному элементу (скажем, tr1). Потом TextRange, соответствующий полному конечному элементу (скажем, tr2). Затем с помошью метода setEndPoint создать полный TextRange (скажем, tr). А с tr уже можно работать методом PasteHtml, не опасаясь появления несанкционированных тэгов.

Все это, конечно, занудно. Но зато довольно эффективно давит IE-шный волюнтаризм.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Основы формата FB Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group