-
Notifications
You must be signed in to change notification settings - Fork 308
using markdown in content #237
Comments
Have you looked into this any more? I like the idea. I am planning to make some time on the weekend to get things cleaned up. I have had a lot of things going on. |
I did look at it. It seemed the path of least resistance, though not the best architecture, was to do this in the theme. This is some coffeescript that I wrote to live in the theme. It uses async b/c I prefer it, pygmentize-bundled, which requires python (I wanted code formatting and pygmentize is the best), and marked. marked = require 'marked'
pygmentize = require 'pygmentize-bundled'
async = require 'async'
opts = {
gfm: true
tables: true
breaks: false
pedantic: false
sanitize: true
highlight: (code, lang, callback) ->
console.log 'pygmentizing'
switch lang
when 'js' then myLang = 'js'
else myLang = lang
pygmentize(
{
lang: myLang
format: 'html'
options:
cssclass: 'codehilite'
# nowrap: true
linenos: true
}
code
(err, result) ->
if err
callback err
else
callback null, result.toString()
)
}
module.exports = {
markdown: (contentObj, callback) ->
async.waterfall(
[
doMarked = (cb) ->
marked contentObj.content, opts, cb
]
done = (err, rendered) ->
contentObj.content = rendered
callback err, contentObj
)
} The package.json for the theme: {
"name": "my-calipso-theme",
"description": "my calipso theme",
"version": "0.0.1",
"dependencies": {
"pygmentize-bundled": "~2.1.0",
"marked": "~0.2.9",
"async": "~0.2.9"
}
} In use: calipso = require 'calipso'
async = require 'async'
renderer = require '../../renderer'
module.exports = (req, options, callback) ->
async.waterfall(
[
getContent = (cb) ->
options.getContent req, { alias: "lorem", clickEdit: false }, cb
render = (contentObj, cb) ->
renderer.markdown contentObj, cb
]
done = (err, contentObj) ->
if req.session && req.session.user && req.session.user.isAdmin
contentObj.content = "
<div title=\"#{req.t("Double click to edit content block ...")}\"
class=\"content-block\" id=\"#{contentObj._id}\">
#{contentObj.content}</div>"
callback err, { content: contentObj.content }
) I also added compass support. In app.js: if (app.config.get('libraries:compass:enable')) {
app.mwHelpers.compassMiddleware = function (themePath) {
var getConfig = function(name) {
return app.config.get('libraries:compass:' + name);
};
var mw = compass({
project: themePath,
sass: getConfig('sourceDir'),
css: getConfig('destDir'),
libs: getConfig('libs'),
img: getConfig('imgDir'),
cache: getConfig('cache'),
logging: getConfig('logging'),
mode: getConfig('mode')
});
mw.tag = 'theme.compass';
return mw;
};
app.use(app.mwHelpers.compassMiddleware(''));
} And, to make a long story short, the more I dug into the architecture, the more I wanted something that was more content management, I wanted something that In any case, I just dumped that code in this issue so that you might leverage Thank your for working with me as I explored. |
I'm planning to enable the use of markdown for content instead of html.
There are several ways I could (or might be able to) do this.
My goal is to find or create a place in the framework to do this kind of content processing, and to enable the use of modules to do it -- markdown processing would be one option, but of course others could be authored as modules as well.
I'd like to allow content processing at content creation time such that one can author the content (and have it be saved as the content definition) and also have the final result (html) pre-generated for use when displaying. I guess this would alter the content schema :(
If that won't fly, I can personally live with doing the source->html transformation at runtime, in which case I guess I'm looking at Theme.js
Any thoughts?
I'm not going to launch into this today, FYI. I still have some learning to do -- and more importantly wanted to get a discussion going about how to do content processing of this sort.
The text was updated successfully, but these errors were encountered: