Hello Daniel and all, I've been working to deliver a piece of functionality that leverages Markdown support and I think it can be a great addition for managing content inside a Sling, more specifically Sling CMS.
My work is by no means ready to be released into the open but I would like to share some ideas and get some feedback. I think it could make a great adition to Sling CMS. I've started from commonsmark-java [1] and I have made some PR's to add proper osgi support and Karaf features. Until they are upstreamed, I've published them to my public repository on bintray so you can test it out [2]. I'm currenlty using this functionality to manage terms of use and privacy policy files for our web platform. We have a requirement that they need to be translated and I believe that a text based format has many advantages in this situation than an office document. Most of them are related to the that: - content can be easily version controlled - content can be transformed easily into multiple output formats: html, text, pdf - content is easy to view/edit - rich text editors exist for markdown that can be added The way I am using it in my application is to register a Sling Model that allows me to convert from Markdown content to html on the fly (caching can be added). I've also defined a script "page/markdown" via sling:resourceType so I can leverage that functionality. My implementation is based on fling sample and uses thymeleaf. Bellow are some code snippets that I use. My implementation needs to handle content into multiple languages and we use a fallback mechanism: If requested language is not available, then we fallback to the default version - which is English version for most cases. ---- @Model(adaptables = {Resource.class, SlingHttpServletRequest.class}) @FieldDefaults(level = AccessLevel.PROTECTED) public class Page { @SlingObject Resource resource; @SlingObject(injectionStrategy = OPTIONAL) SlingHttpServletRequest request; @OSGiService HtmlRenderer htmlRenderer; @OSGiService Parser parser; List<PageTranslation> translations; PageTranslation requestedTranslation; @PostConstruct protected void resolveContent() { Locale lang = requestedLanguage(); translations = getPageTranslations(); log.warn("Parsing translation for resources {}", translations); try { requestedTranslation = findRequestedTranslationOrUseDefault(); } catch (Exception e) { log.warn("Exception getting content ", e); } } private List<PageTranslation> getPageTranslations() { List<PageTranslation> translations = new ArrayList<>(); resource .getChild("lang") .getChildren() .forEach( resource1 -> { PageTranslation translation = resource1.adaptTo(PageTranslation.class); if (translation != null) { translations.add(translation); } }); return translations; } public String getTitle() { return requestedTranslation.getTitle(); } public String getLanguage() { return requestedTranslation.getLanguage(); } public String getContent() { String content = requestedTranslation.getContent(); Node doc = parser.parse(content); return htmlRenderer.render(doc); } ---- I'm hoping this can be added to Sling CMS, pending the markdown changes are upstreamed. I believe text based formats are cool and they solve some problems in an interesting way. What do you think? Daniel, would you help me shape this so it can be included in Sling CMS ? Not related: I haven't seen a Sling CMS feature in Sling Karaf features. I would like to add one in the near future. Other notes: I've targeted asciidoc via asciidoctor but there are issues with running asciidoctorj in osgi. Regards, Eugen [1] https://github.com/atlassian/commonmark-java/pulls [2] https://bintray.com/netdava/maven/commonmark-java