Coder Social home page Coder Social logo

hyoo-ru / mam_mol Goto Github PK

View Code? Open in Web Editor NEW
666.0 24.0 56.0 611.81 MB

$mol - fastest reactive micro-modular compact flexible lazy ui web framework.

Home Page: http://mol.hyoo.ru

License: MIT License

TypeScript 94.83% HTML 0.82% CSS 3.57% JavaScript 0.76% GLSL 0.01%
reactivity oorp framework javascript typescript components micro-modular isomorphic lazy-evaluation lazy-loading bundler bem self-descriptive lazy-rendering mam mol virtual-rendering

mam_mol's Issues

Конфликт значений по умолчанию

Пример:

$my_habhub_gister $mol_carder
    content < sectioner $mol_sectioner
        head < title \
        content < content null

Нужно кидать исключение, если значения по умолчанию не совпадают для одного и того же свойства.

Float

  • Смещается вниз по мере скролла.

Add versions to generated package.json

  • Версию зависимостей нужно брать текущую установленную.
  • Версию пакета нужно автоматически увеличивать (минорную часть). Мажорную нужно брать из цифрового суффикса.

Подсветка синтаксиса tree для WebStorm

Нужно с нуля запилить плагин для подсветки синтаксиса tree.

  • Должны показываться как ошибки пробелы в начале строк
  • Должно показываться как ошибка отсутствия перевода строки в конце файла
  • Должна быть поддержка светлых и тёмных тем
  • Пробелы в конце строк должны быть заметны
  • Типы токенов: сырые данные, обычные имена, имена состоящие исключительно из пунктуационных символов, имена начинающиеся на пунктуационные символы, имена заканчивающиеся на пунктуационные символы.

Текущий устаревший плагин: https://github.com/nin-jin/tree-plugin
Дока по написанию плагинов: http://www.jetbrains.org/intellij/sdk/docs/

Subcomponents throws errors before destruction

Атомы сейчас обновляются по слоям в зависимости от глубины зависимостей.
У дочерней компоненты может быть меньшая глубина, чем у родительской, из-за чего она используя свежие данные валится с ошибкой и только после этого, родительская компонента её удаляет. Это тормоза и куча ошибок в консоли. Нужно обновлять атомы ещё и в зависимости от приоритета целевого атома. Вложенные компоненты должны иметь соответственно меньший приоритет.

$mol_notify

  • Единый способ уведомления пользователя.
  • По возможности использовать системные средства.

Restoring of selection

При реализации подсветки синтаксиса необходимо восстанавливать выделение в правильном положении. Аналогично и при перезагрузке страницы.

Combobox

  • Показывает текущее значение
  • Позволяет выбрать значение из списка по клику
  • Позволяет ввести текст для фильтрации списка

Agreement - demo app for agreement of procurements

Необходимо реализовать полноценное приложение с интеграцией с SAP ERP.

Экраны

  1. Авторизация.
  2. Список заявок на закупку.
  3. Подробности по заявке.

Checkbox must use icon

Сейчас $mol_checker использует символ галки, вместо этого нужно внедрить иконку. Кроме того, стоит отказаться от :before в пользу явной вставки иконки с возможностью эту иконку перегрузить.

Нужно реализовать:

  • $mol_checker_expander - поворащивающийся шеврон.
  • $mol_checker_ticker - чекбокс.

По умолчанию $mol_checker не должен добавлять особой визуализации, только поведение.

Visual design concept

Нужно продумать следующие вещи..

Адаптивная раскладка

  • Как задаются размеры.
  • Как размеры адаптируются под размер родительского блока.
  • Как меняется раскладка блоков в зависимости от размера родительского блока.

Можно пощупать пример адаптации под размер: http://nin-jin.github.io/form/

Стилизация

  • Какие формулы вычисления цвета используем (цветовая схема, сколько цветов, правила для цветов линий, шрифтов, цвета при наведении/фокусе, цвета для выключенного функционала).
  • Как задаются базовые константы (базовый цвет, акцентный цвет, гамма, фоновое изображение).

Можно пощупать пример перекраски интерфейса под базовый цвет: http://nin-jin.github.io/friends/
Через консоль разработчика можно задать другие цвета и даже изображение.

Шрифты

  • Какой набор шрифтов используем.
  • Какие размеры, как изменяем их в зависимости от назначения или размеров родительского блока.

Желательно использовать стандартные шрифты, но они разные в разных системах - это стоит иметь ввиду.

Конкуренты

Design of basic components

Все контролы должны быть выполнены в 3 состояниях:

  1. Основной.
  2. При наведении/фокусе.
  3. Недоступный к изменению.

Все поля должны поддерживать следующие состояния заполненности:

  1. Не заполненное опциональное. В пустом поле показывается подсказка.
  2. Заполненное необходимое. Показывается введённое значение.

Все поля должны поддерживать следующие состояния проверки:

  1. Пустое, требующее ввода.
  2. Правильно заполненное.
  3. Заполненное неправильно. Рядом должна показываться ошибка.

Контролы:

  • Гиперссылка.
  • Кнопка. Варианты: обычные, основного действия, опасного действия. Внутри кнопки может быть текст, иконка или их комбинация.
  • Чекбокс. Варианты: не выбран, выбран.
  • Радио кнопки. Варианты: выбрана, не выбрана. Возможно стоит совместить с "таббаром", который по сути тоже является группой радиокнопок.
  • Поле ввода строки.
  • Поле ввода числа. Дополнительно должны быть контролы увеличение/уменьшения на единицу.
  • Поле ввода многострочного текста.

Buttons

Состояния кнопок

  • выключена
  • нормальное
  • при наведении/фокусе

Типы кнопок

  • Обычная
  • Привлекающая внимание
  • Опасная

Содержимое

  • Текст
  • Иконка
  • Текст с иконкой

События

  • Нажатия. Если кнопка выключена, то нажатия не должны работать.

WebSockets

Двухсторонняя синхронизация через сокеты.

Panels

Горизонтальный стек панелей. При нехватке места боковые панели должны скрываться и появляться лишь по наведению мыши на край экрана или по свайпу.

Defers

Нужно выделить отложенное исполнение кода в том же обработчике событий в отдельный модуль. Заодно им можно заполифилить setImmediate.

Architecture design concept

  • Ленивое автоматическое подключение модулей.
  • Поддержка разных окружений (изоморфность).
  • Объявление компонент.
  • Инстанцирование компонент с перегрузкой свойств.
  • Прозрачное расширение автогенерированных компонент.
  • Объявление реактивных свойств.
  • Отслеживание ссылок на объекты.
  • Каскадное обновление зависимостей.
  • Поддержка асихронности.
  • Реакция на исключения без их перехвата.
  • Уничтожение компонент при потере ссылок на них.
  • Автогенерация BEM аттрибутов/классов для элементов.
  • Реакция на циклические завсимости.
  • Реактивный браузерный рендеринг.
  • Серверный рендеринг.
  • Декларативное описание компонент.
  • Написание тестов.
  • Логирование.
  • Автоматическое сохранения состояния между перезагрузками.
  • Иммутабельные структуры данных.

Grider

Ветка grider.
$mol_gider - компонент для рисования гридов
$mol_app_taxon - демонстрирует гриды в действии на примере приложения

Что нужно поправить:

  • Нужно реализовать чекбоксы через svg иконки
  • Сейчас чекбоксы налезают на шапку - нужно это поправить.
  • Нужно скрывать задисейбленные экспандеры.
  • Нужно выводить в шапке не имена полей, а соответствующие им лейблы, задаваемые конфигом.
  • Нужно добавить колонок разных типов, чтобы было штук 30.
  • Когда будет готов бэкенд - прикрутить его для получения данных.

Documentation

Links

Внутренние гиперссылки. Переключают хеш, без перезагрузки страницы. Могут быть открыты в отдельной вкладке стандартными средствами. Ссылка, ведущая на текущую страницу не должна выглядеть активируемой.

Builder

Структура кода выглядит следующим образом:

  1. Каждая директория - некоторый модуль.
  2. Корневые модули - пакеты.
  3. В каждом модуле могут быть файлы исходников и вложенные модули.

При сборке, точкой входа задаётся какой-либо модуль. В нём создаётся модуль "-build", в который собираются js- и css-бандлы, включающие в себя исходники указанного модуля и всех рекурсивно вложенных модулей, а также все, каскадно подцепленные, зависимости.

Зависимости ищутся на основе типа файла:

  • *.ts, *.jam.js: ищутся незакомментированные вхождения вида $mol_state_arg.value и интерпретируются как зависимость от модулей: mol, mol/state, 'mol/state/arg,mol/state/arg/value`.
  • *.css: аналогично ищутся вхождения вида: .mol_viewer_error, [mol_viewer_error], [mol_viewer_error="foo"]

Если модуль по пути не находится, то зависимость игнорируется. Зависимость от модуля эквивалентна зависимости от всех его исходников, но не от вложенных модулей.

Если не находится пакет, то он ищется в реестре пакетов (локальный файл с картой соответствия "имя пакета" - "ссылка на репозиторий"). Если находится в реестре, то автоматически чекаутится через гит. Если нет - кидается исключение.

Соглашение: достаточно поставить перед именем модуля дефис и он исключается из сборки.

В "-build" модуле генерируются бандлы следующих типов:

  • index.js - сюда собираются все скрипты. В том числе и сгенерированные из *.ts и *.,view.tree исходников.
  • index.css - сюда собираются все стили.

Рядом копируются все картинки и правятся ссылки на них из css. Также в целях отладки в "-build" собирается "карта зависимостей".

Исходники могут содержать "теги" в имени, например: router.env=web.ts. При билде можно указать env=web и тогда такой исходник будет учитываться, либо env=node и тогда такой исходник будет проигнорирован.

Пример запуска билда:

pms build mol/app/demo stage=release env=web

Чтиво: pms-stub

Error about $mol_icon_chevron in travis

Error: 
/home/travis/build/eigenmethod/mol/app/demo/-/view.tree/demo.view.tree.ts:83:13
 Cannot find name '$mol_icon_chevron'.
/home/travis/build/eigenmethod/mol/app/supplies/detailer/-/view.tree/detailer.view.tree.ts:16:13
 Cannot find name '$mol_icon_chevron'.
/home/travis/build/eigenmethod/mol/checker/expander/-/view.tree/expander.view.tree.ts:6:13
 Cannot find name '$mol_icon_chevron'.
    at $mol_build.sourcesJS (/home/travis/build/eigenmethod/mol/build/build.node.ts:236:29)
    at $mol_atom.pull (/home/travis/build/eigenmethod/mol/atom/atom.ts:128:26)
    at $mol_atom.actualize (/home/travis/build/eigenmethod/mol/atom/atom.ts:117:21)
    at $mol_atom.get (/home/travis/build/eigenmethod/mol/atom/atom.ts:71:9)
    at $mol_build.descr.value [as sourcesJS] (/home/travis/build/eigenmethod/mol/mem/mem.ts:82:17)
    at $mol_build.bundleJS (/home/travis/build/eigenmethod/mol/build/build.node.ts:434:23)
    at $mol_atom.pull (/home/travis/build/eigenmethod/mol/atom/atom.ts:128:26)
    at $mol_atom.actualize (/home/travis/build/eigenmethod/mol/atom/atom.ts:117:21)
    at $mol_atom.get (/home/travis/build/eigenmethod/mol/atom/atom.ts:71:9)
    at $mol_build.descr.value [as bundleJS] (/home/travis/build/eigenmethod/mol/mem/mem.ts:82:17)

Ещё и не падает при ошибке.

Локально на винде не воспроизводится.

Url

  • Текстовое поле с url валидацией

HTTP

Необходима абстракция над http запросами, чтобы можно было передавать данные в различных форматах (Text, JSON, XML, FormData) и получать ответ в виде DOM/JSON/Text.

А сверху нужна абстракция над http ресурсами: задав uri можно принимать и отправлять изменения в том же формате.

DropDown

  • Всплывает рядом с другим блоком, показывая привязку к нему.
  • Подумать о поведении на мобилках.

Suggest

Думаю стоит сделать компонент $mol_suggester, который владеет $mol_stringer и $mol_lister. Последний показывается, если есть хотя бы одна подсказка.

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

Входные параметры:

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

Text field with hlighting

  • Автоматический размер поля под размер содержимого
  • Ленивый рендеринг содержимого
  • Подсветка синтаксиса по мере ввода

Modal

  • Модальное окно, открываемое из какого-либо компонента.
  • Подумать об ограничении модальности (блокировать не всё приложение, а его часть).
  • Подумать о его необходимости.

Number

Нужно реализовать поле ввода численного значения - $mol_number.
Внутри стоит использовать $mol_stringer для ручного ввода значения, а по бокам окружить его кнопками "+" и "-". Кроме того стоит предусмотреть изменение значения колесом мыши.
Стоит заодно добавить в $mol_stringer возможность отфильтровывать недопустимые символы.

Progress

Показывает процент чего-то от общего числа.

Ranges

Нужна поддержка "ленивых диапазонов", которые умеют отдавать свой размер и генерировать элементы (создавать объекты, загружать данные и тп) лишь по требованию. Нужна максимальная совместимость с обычными массивами. Должна быть возможность передавать как диапазон, так и массив (автоприведение к диапазону?). Интегрировать диапазоны в рендерер, чтобы сделать его ещё более ленивым.

Test system

  • Запуск тестов при сборке
  • Сборка под разные платформы и прогон тестов в них.
  • Нужно подумать над ui тестами.

Switchers

Контролы:

[ ] check box
[ ] radio button

Могут быть с лейблом и без.

Need to reset of scrollTop when scrollHeight is small

Воспроизводится тут: http://eigenmethod.github.io/mol/perf/render/

  1. Рендерим список
  2. Крутим в конец
  3. Перезагружаем страницу
  4. Рендерим список
  5. Рендерятся все элементы, но скроллинг в самом начале.

Либо рендериться должны лишь видимые элементы, либо скроллинг должен быть в конце.

Forester

Компонент для отображения деревьев.

  • Каждый узел дерева может принимать параметром список вложенных узлов.
  • Если есть вложенные узлы, то должен показываться шеврон для сворачивания/разворачивания.

В demo приложении выводить содержимое readme.md

  • markdown нужно налету транслировать в html. Для этого нужно запилить #29.
  • Ссылки должны все работать.
  • Ссылки на демо примеры открывать тут же, не уходя со страницы - подумать как лучше реализовать.

Icons

Как минимум на первое время, нам нужно подыскать набор иконок в SVG формате, которые бы подошли нам по дизайну и имели подходящую лицензию.

Hlighter

Инлайн компонент, который подсвечивает вхождения подстроки.

Параметры:

  • Отображаемый текст
  • Подсвечиваемая подстрока

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.