Pull to refresh
35
0
Станислав @d4rkr00t

Frontend Developer

Send message
Мы в Atlassian тоже используем ProseMirror как основу для редакторов в BitBucket, Confluence, Jira, etc…  Пример можно посмотреть на нашем сайте дизайн системы: atlaskit.atlassian.com/examples/editor/editor-core/kitchen-sink

Тоже переходили с TinyMCE так как менеджить его очень тяжело, HTML не самый удобный формат для хранения данных.

Вообще ваш опыт очень похож на то что мы делаем. Мы также пытались решить forwards compatibility с использование unsupportedBlock который, по описанию, выглядит один в один как ваш :) Но мы также используем подмножество ProseMirror JSON как дата формат. Интересно послушать почему по Вашему мнению он не удобен для хранения данных? И у нас также есть json schema для валидации документов.

Одна из самых больших проблем для нас – это переиспользование реакт компонентов из дизайн системы внутри контента редактора. Как я понимаю вы делаете что-то похоже но с Vue, или у вас только plain ProseMirror?
я уже точно не помню как я делал, но возможно добавить директивы и сервисы на лету
можно реализовать ленивую подгрузку с помощью resolve в роутере, но у меня не получилось красиво описывать зависимости и приходилось на каждый роут писать руками все что нужно ему и всем его зависимостям.
Я свой блог разгонял до 100 из 100, сейчас 97 из 100 и то потому что поднял css в head.
У USE чище наверно, но я же не добавляю теги руками, а только размечаю комментариями куда плагин их добавит. Плюс на выходе у меня просто html без кастомных тегов. Также мне не нужно каждый файл прописывать вручную. И в моем подходе можно использовать всю мощь и гибкость грунта, то есть я могу изменить процесс обработки файлов так как мне нужно.

А так, установка и настройка занимает минут 10 — 15. И в итоге подход получается более универсальным, так как можно не только с nodejs и express использовать.
Ну я опять таки растянул на 150% и почти не осталось места.

У меня тоже 150% удобно читать, а то при 100% шрифт мелковат получается
Решил подобную задачу с помощью Grunt тасков:

grunt-include-source
Вставляет теги script и css в html один раз при добавлении нового файла

grunt-usemin
Пробегает по html и находит все коментарии вида:

<!-- build:js /app/app.min.js -->
<script src="/js/app.js"></script>
...
<!-- endbuild -->

И прогоняет их через concat, uglifyjs для js, и csso и autoprefixer для сss, и заменяет эти коментарии на подключение собранного файла, то есть для примера выше будет:

<script src="/app/app.min.js"></script>


Плюс в дальнейшем добавлю grunt-filerev, что бы он менял номер ревизии у файлов во избежании загрузки из кэша браузера старых вместо новых версий файла.

Вполне себе так удобно и очень гибко. Возможно конечно настройка и займет немного больше времени.
И Ionic. Но там еще интеграция с AngularJS. Есть мелкие недочеты но оч. симпатичный и удобный.
Может получится если их все прописать в paths

paths: {
    sidebar: 'directives/sidebar/sidebar',
    sidebarScrollWrapper: 'directives/sidebar/sidebar-scroll-wrapper',
    breadcrumbs: 'directives/breadcrumb/breadcrumbs',
    add-form: 'directives/add-form/add-form',
}
Делал для себя небольшой загрузчик для angular с помощью requirejs. Он как раз работает на основе роутов. Надо попробоать сжать с помощью RequireJS Optimizer и посмотреть как он будет работать)

Но код для подключения зависимостей примерно так выглядит:

.state('docs',
      lazyLoadProvider.lazy({
        url: '/',
        templateUrl: '/core/views/docs_list.html',
        controller:  'controllers/DocsListCtrl',
        dependencies: [
          'directives/sidebar/sidebar',
          'directives/sidebar/sidebar-scroll-wrapper',
          'directives/breadcrumb/breadcrumbs',
          'directives/add-form/add-form',

          'services/sidebarListService'
        ]
      }))


На выходе он генерирует обычный для ngRoute, uiRoute — объект, с методом resolve в котором и происходит разрешение зависимостей, и пока они не разрешены, роут не срабатывает.

Правда есть минус, что приходится описывать все зависимости в параметре dependencies и нельзя сделать:


define(['myDirective', 'myService'], ....)
Как я понял все модули подключаются сразу? То есть нет возможности в зависимости от роута грузить определенные директивы, фильтры, сервисы?
У меня вообще не открывается. Говорит заблокирован по решению бла бла бла…
а простите, это что-то у меня было, наверно скрипты не догрузились
Хм, правда Ставропольский край, Пятигорск, через прокси грузиться на прямую нет
Можно было просто дать ссылку на wtfjs.com/ там это все есть и даже больше, гораздо больше
На вкус и цвет, как говорится, все фломастеры разные.

Мое имхо, это гараздо менее удобно, чем дать ссылку на таблицу в гугло доксе и все, там и хранилище и средство просмотра, и скачивать постоянно не надо…
Какая-то нездоровая тенденция в современно мире: там, где можно использовать готовый продукт, все почему-то предпочитают использовать сервисы.
Недавно рассказывали про сервис отправки email (казалось бы что может быть проще mail() в любом языке программирования и списка обычным текстом). Я понимаю, что «все лучше как сервис», но какой-то предел должен быть.

И сыпятся вопросы, почему же письма в спам улетают, а что бы не улетали надо через sendmail какой-нибудь слать через тот же gmail, а потом интересно становится открыли ли письмо или нет, перешли по ссылке или нет и т.д.

Вот скажите, не проще ли было посылать обычные get/head запросы на свой http-сервер, где бы они просто складывались в лог в csv виде?

А потом найти чем разгребать эти логи, а потом как поделиться с коллегой.

Information

Rating
Does not participate
Location
Пятигорск, Ставропольский край, Россия
Date of birth
Registered
Activity