masterspammer (masterspammer) wrote,
masterspammer
masterspammer

Category:
Во славу Бахуса начинаю писать то, во что хочу превратить кучу функций редактора. Про UI - потом.

Здесь под документом понимается DOM-дерево, возможно как документ, открытый в iframe, а возможно - фрагмент документа.

  • DocumentCursor - указатель на конкретное место в документе.

  • DocumentRange - по факту два курсора - "от" и "до", задающие диапазон. Буду ли реализовывать как класс, включающий два курсора или как частный случай DocumentCursor - не думал пока.

  • DocumentCursorPickle - сохранённое состояние курсора, независимое от документа - документ сохранён, после загружен, а курсор на то же месте. Вот для этого и нужен DocumentCursorPickle. Может выродится в строку, кстати, но пока это массив.

  • DocumentManipulator - класс, меняющий документ; сам по себе никакого документа не содержит и может работать то с одним, то с другим документом - что на вход подали, то и обрабатывается. Подаётся как правило DocumentCursor.

  • DocumentEditor - редактор конкретного документа, сам по себе содержит документ и курсор(ы). Неинтерактивен, но пригоден для автоматизации вида найти/заменить.

  • DocumentManualEditor - то же, но изменение курсора и редактирование может происходить и "извне" кода, пользователем - путём нажатия кнопок, тыкания мышью/пальцем и т.д... Эти действия могут перехватываться и как-то дообрабатываться. Нажатия экранных кнопок, события от меню и прочие ненепосредственные действия - вызывают обычные методы DocumentEditor. В принципе можно явно затребовать все действия выполнимыми неинтерактивно - легче будет обрабатывать историю - и так их сначала перехватывать и блокировать, а потом вызывать, но это не обязательно.

Про DocumentEditor и зачем он нужен - использовать execCommand не хочется совершенно, а часто ещё и не можется - видите в списке по ссылке formatInline? Вот и я не вижу. И визуальные тэги превалируют над структурными. И по-разному работает в разных браузерах и их версиях. А если сначала вызывать, а потом поправлять, то ломается история отмены и курсор ведёт себя... странно. Не надо так делать, а то до shadow DOM дойдёте :-) Ну и вообще никто не сказал, что всё это счастье видно пользователю - загрузить документ, найти/заменить в нём что-то и сохранить - довольно типовая автоматика.

Интересно, что немалая часть реализована давным-давно и работает начиная с 6-го IE (гыыы!)

Не пишу про историю и отмену, пока обдумываю как лучше реализовать, чтоб с одной стороны не прибивать гвоздями к редактору (для автоматизации оно не нужно), а с другой - не затачивать только под него (штука полезная сама по себе); где-то тут же нужна связь истории с командами и событиями, порождаемыми UI. Не пишу про работу со списками, таблицам и прочим - она архитектурно тривиальна, хотя те же списки в execCommand намертво связаны с blockquote и их пришлось писать почти с нуля.
Tags: javascript, wisiwyg, Планы, ХочетсяСтранного
Subscribe

  • (no subject)

    Лазерный рефлектометр (виброрефлектометр) - почти что священный Грааль (SpellChecker подсказывает "грабель", ну да, пусть будет "свяженный Грабель")…

  • Вспоминаю Гофмана и что-то бессытдно ржу

    Собственно Золотой Горшок - одна ведьма там возникла от взаимодействия одного из драконьих перьев «с какой-то свекловицей». С какой-то ЧЧЧЕГО??…

  • Охота пше* неволи

    Взял фанерины на боковины - а они кривые, две вообще расслоились (о чём я благополучно позабыл). Купил, разрезал, взгромоздил на велик и еле…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments