lvqclКонечно, конечно

. Впрочем, комментарии я как раз с удовольствием бы послушал. Даже от "dozen'a".
Продолжаю "поток сознания":
Черт, еще одна неприятность - кажись, удаление объекта по указателю не работает. По технологии "левой ноги", стало быть, нужно сгенерить дочерний фрейм с приказом удалить объект, а затем убить и сам фрейм? Весело...
Та-а-ак! А куда же повесить инициализацию на морде, чтобы она сработала до FRAMESET? Инициализацию запустить можно, наскоко я прнимаю, только из BODY, а FRAMESET еще в хидере. Таким образом, ребенок может запуститься раньше, чем завершится инициализация. И помешать этому лично я не вижу никакой возможности. Да, начинаю понимать, ПОЧЕМУ фреймы могут не нравиться - лезут поперед батьки в пекло. И как же мы раньше это обходили? Ах, да - у нас толщина клиента не менялась... Что же делать? Ага! А если флаг поставить?
Вот зараза! Флаг ставится, флаг виден, без FRAMESET по окончании инициализации снимается, а вот вместе... видимо, фрейм перехватывает управление, и не дает завершить инициализацию. Господа, а что там вместо onLoad можно предложить? Что-то я слыхивал про передачу фокуса... Ах, нет - все еще хуже: сам факт наличия FRAMESET в хидере уже есть основание "положить" на BODY. Оригинально!
Еще раз формулируем задачу: нужен один "вечно живущий" фрейм (я уж буду пока использовать этот термин), предназначенный исключительно для хранения инструментария (методы, классы, тексты основного набора функций). Над ним (вынужденно, поскольку тело функции внутри переменной непригодно для ее вызова) - второй (уже перезаписываемый) фрейм для хранения тел функций переменного состава (толщина клиента). И уже над ними - рабочие фреймы, состав которых определяется конкретной задачей. Вопрос: как это реализовать? Ах, да - до "появления на свет" второго фрейма, первый должен завершить инициализацию.
Пока суть да дело, попробуем сосредоточить тела функций на морде, а инициализацию провести из ребенка. Ух ты! Неужто работает? Ребята, а ведь это, кажись, альтернатива! И после перезаписи "толщины клиента" ре-инициализацию тоже можно выполнять из ребенка... В обчем, тьфу-тьфу.

Теперь попробуем скроить что-нить читабельное из броузера. Что нам нужно? Пока что заведем три основных объекта: c(CLASSES), d(DATA) и m(METHODS). Извиняюсь за мало прорубаемую нотацию - вся эта кухня у меня предназначена для генератора, а там все подробно излагается. Для броузера же нотация вполне съедобна - ничуть не хуже, чем любая другая (разве что компактнее).
Для затравки - перечень раннего "барахла" (просьба уточнять, дополнять, модифицировать).
Методы:
- анти-eval
- закрытие окна (Close/Delete)
- открытие окна (Create/Open)
- передача фокуса
- перечень методов/свойств объекта
- получение индекса объекта в массиве
- получение значения поля/удаление поля
- прорисовка (конструктор) объекта/класса
- прорисовка окна/фрейма, перемещение окна
- создание класса/объекта по существующему классу
Классы: button, checkbox, form, frame, hidden, image, link, option, password, radio, select, table, text, textarea, textbutton
Теги: BODY, CSS, END, HEAD, HTML, MAIN, META, SCRIPT, TITLE
Что нам нужно из методов-функций? Начальный "джентльменский набор": eval, document.close/write, new Array/Object, indexOf, substring. Плюс парсер для работы в объектах. Из данных - разделитель параметров строки объектов. Из классов... Вау! Пока ваще ничего - эта хреновина уже рисует страницы.
Короче говоря, в первом приближении старые наработки восстановлены. Раньше вся эта кухня меняла набор фреймов и палитру, как перчатки, делала итерационные запросы в зависимости от текущих данных и т.д. Теперь аккуратненько все проверим, расставив данные по нужным файлам, и займемся, наконец, классами и методами на объектах. Второй фрейм пока не нужен - затирается.
Что-то мне подсказывает, что он вообще не понадобится: объем базовых функций ничтожен (на данный момент - стыдно сказать - 478 байт), и я не вижу решительно никаких поводов для его сколько-нибудь серьезного увеличения.Продолжение следует...
Добавление от 31.07.2009 09:23:
Ну что молчим? Как там с "изобретением колеса", "номерами палат", "дохлыми" возможностями JS/IE3, "излишне усложненными структурами", "уровенем примерно 1999-го года", "слабыми представлениями принципов работы клиент-серверных приложений", толстыми и тонкими клиентами, "полноценными приложениями", супер-пупер-библиотеками?
Что ж вы, черти, приуныли? 
Продолжаю "поток сознания":
Так. Программирование в объектах худо-бедно работает. Возможна и рекурсия, т.е. технология стека очередей. Реализована также двухпоточная технология (сопрограммы). Теоретически можно сделать и многопоточную, но я пока не вижу этому применения. Что у нас новенького появилось? Всего-то две функции (общим весом в 157 байт): инициализация группы полей, да выполнение двух потоков (шаблон и данные). Инициализация, кстати, идет уже и через строку методов. Ах, да - завел еще один глобальный объект b(BODY) для хранения указателей на текущие объекты (т.е. для повышения универсальности кода).
Многострочные переменные, кажись, не работают. Для генератора это по фигу, а ручками писать создает некоторые неудобства. Регистр переменных важен - это неплохо. С кавычками еще морока будет... Господа, а какие еще есть кавычки (кроме двойной и одинарной). Мне бы еще пару-тройку. Чтобы в теле строки можно было использовать кавычки, а сами строки "обувать" во что-то иное.
Теперь - классы. В первую очередь - для юзера: окна, палитры, выпадающие списки и прочая хрень. Делаем минимальный набор по классам и их атрибутам, по мере необходимости пополняем. В первую очередь - окно броузера (или фрейм). Конструктор, стало быть - строка методов для его прорисовки. Пока все. Ах, да - список дочерних фреймов плюс родитель, да еще уровень иерархии (для организации доступа). Еще не помешает имя, и список событий (для обработчиков).
Конструктор окна - это в первом приближении: HEAD (TITLE, META, STYLE, SCRIPT) + BODY. Пущай будут пока атрибутами, как и сам конструктор или палитра. Впрочем, нет: палитра - вполне себе класс.
Итак, класс "фрейм" (окно, страница):
- имя класса
- имя родительского фрейма
- список имен дочерних фреймов (массив)
- уровень иерархии в группе фреймов
- используемые события (массив)
- конструктор класса (у самого класса - по умолчанию)
- палитра
Что-то коряво получается. Начнем-ка лучше с палитры - проще.
Класс "палитра":
- имя класса
- конструктор класса (видимо, только у класса - у объектов не нужен)
- цвет фона (в терминах HTML - BGCOLOR)
- цвет обычного текста (TEXT)
- цвет выделенного текста (LINK)
- цвет особо выделенного текста (ALINK)
- цвет "заблокированного" текста (VLINK)
Видимо, в BODY нужно держать ссылку на текущую палитру (в DATA - на палитру по умолчанию). Коструктор будет выглядеть примерно так (шаблон для сопрограммы):
var I='Qw"#"Q';
Иначе говоря, предназначен пока для выдачи по document.write, обрамляет цвет кавычками, и пришпиливает впереди знак '#'( - разделитель параметров, - код перехода к сопрограмме).
Создание класса (забавно, но имена атрибутов в классе вроде как и не нужны):
var I=`ic,"p",m.o()ic.p,"c",'Qw"#"Q'`;
Ну вот и приплыли: обратный апостроф на кавычку не тянет

. Впрочем, не поможет - еще и разделитель параметров, код передачи сопрограмме... Значит, делать будем в два приема. Примерно так:
var J='Qw"#"Q';
var I='ic,"p",m.o()ic.p,"c",J';
Это - работает.
Итак, класс (в первом приближении) заведен. Теперь инициализация объекта палитры. Ух ты! Даже не ожидал. Переменной pal в коде нет (заводится динамически, в строке методов), но... взгляните на код:
Первый alert генерит ошибку, и прекращает выполнение программы - дескать, "не определен объект pal". Если же его убрать - второй прекрасно работает, т.е. видит не только саму переменную, но и ее поля "внутре" (в данном случае выдает цвет фона). Отлично!
Хм. А на хрена нам вообще этот объект? Пущай все палитры в классе и сидят как массив. Не, это уж совсем неприлично. Да и неудобно с индексами. Положим-ка мы их в DATA, а то там окромя разделителей ни хрена нет. Штучки три - с белым, черным и синим фоном. И в BODY по умолчанию - с белым.
Упс! Парсер написан неправильно. Точнее, рекурсивный вызов работает, сопрограммы без рекурсии - тоже, а вот вместе... Ладно, не горит. Опосля как-нить, устал я что-то.
Продолжение следует...