Все не просто. Значит есть что то вроде редактора. Блочного. Тоесть в него можно вставлять блоки разных типов и менять их местами. Например блок текста, блок заголовка, блок списка, блок разделитель.
Редактор это директива, ну и блоки тоже директивы. Например у нас есть переменна текста.
$scope.text = [{
"type": "title",
"state": "preview",
"content": {
"level": 1,
"text": "Это начало статьи"
}
}, {
"type": "markdown",
"content": {"text": "Теперь работаем надо самим уроком."},
"state": "preview"
}]
В данном примере 2 блока. Заголовок и текст, который можно писать в маркдауне.
Ну и директива, это что то вроде.
<editor>
<block>
<title content="content" />
</block>
<block>
<markdown content="content" />
</block>
</editor>
Это конечно супер упрощенно. В реале так стоит ng-repeat и каждый блок компилируется через $compile так как я из вставляю динамически основываясь на $scope.text[i].type.
Блоков очень много разных начиная от текста кончая видео, графиками, ...
Удобно что отдельнеый тип блока, это отдельная директива. Очень легко расширять и добовлять новые блоки.
Теперь вопрос. Может это очевидно уж простите но я не могу сообразить.
Как мне автоматически получить список всех возможных подключеных директив этого типа. Другими словам, внизу редактора, ест выбор, какой блок хотите добавить. Как мне сделать, что если кто то просто добавил файл с директивой блока в script src то блок автоматически появлялся там?
Я пологаю что все директивы типов блока редактора, надо вынести в отдельнй модуль. И что бы все если добавляли директивы, то добавляли в этот модуль только.
Еще вопрос, как к директиве, прикрепить метаданные? Например иконка блока, имя блока, некоторые параметры поведения?