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)

    Если понедельник начинается в субботу (и давно пора строить Алдан), другими словами суббота - понедельник следущей недели, то понедельник это…

  • 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