Hey Eugen, Now that Sling CMS 0.9.0 is out I was thinking adding markdown support to Sling CMS would be a great addition (in part because I have a use case for it for filtered user generated content)
I've created an issue for it: https://issues.apache.org/jira/browse/SLING-7819 Do you want to create a PR for integrating this? How can I help? Thanks, Dan On Wed, Jun 20, 2018 at 10:16 PM Daniel Klco <[email protected]> wrote: > > > On Sun, Jun 17, 2018, 9:26 PM Eugen Stan <[email protected]> wrote: > >> 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. >> > > I've used markdown a fair bit and agree for text heavy use cases. > > >> What do you think? Daniel, would you help me shape this so it can be >> included in Sling CMS ? > > > Totally. It'd seem like we'd need to include a markdown editor, script and > model to render the markdown content. That way we could show a HTML editor > and a markdown editor which might be nice from anyone coming from a > markdown too such as Jekyll. > > Not related: I haven't seen a Sling CMS feature >> in Sling Karaf features. I would like to add one in the near future. >> > > That'd be great! > > >> >> 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 >> >>
