ColdFusion UI The Right Way: HTML version
Join the DZone community and get the full member experience.
Join For FreeBack when Adam Cameron and I launched the ColdFusion UI - The Right Way project, I mentioned that initially we would accept submissions from the community to build out the content before releasing an actual readable version. Turns out I kind of forgot to get around to doing that. The content in the GitHub repo is in Markdown, which is pretty readable, but it isn't exactly in a nice form to hand out to a junior developer.
Earlier this week I got off my rear and actually built a process to make this happen. I decided to give Grunt a try for the process and it worked out rather well. I did run into a few stumbling blocks but I was able to get past them all and I'm very happy with the result. My Grunt script now does all the following with one simple command:
- Clean out an output directory (to remove earlier versions)
- Convert the Markdown files to HTML using a template
- Find the demo folders and zip them
- Attach a bit of HTML to the files so that folks have a link for the download
I decided to put the output up on a S3 bucket. You can now read the docs here: http://static.raymondcamden.com/cfuitherightway/. I'll update the GitHub readme in a few moments to add this link as well. I'm tempted to extend my Grunt script to also push updates to S3. Heck, I could also have it do the git pull action as well. Anyway, for folks who may be curious, here is the script I'm using.
module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), clean: ['./output/'], copy: { main: { files: [ {expand:true, src:['./chapters/**','!./chapters/**/*.md'], dest: 'output/'} ] } }, markdown:{ all: { files: [ { expand: true, src:'./chapters/**/*.md', dest:'output/', ext:'.html' } ], options: { template:'template.html', preCompile:function(src, context) { }, postCompile:function(src, context) { /* Unfortunately we don't have access to the current path, so no easy way to skip index.html and introduction.html */ //set title back to blank context.title = ""; if(src.indexOf('<h1 id="introduction">Introduction</h1>') >= 0) { context.title = "Introduction"; return src; } if(src.indexOf('<h1 id="coldfusion-ui-the-right-way">ColdFusion UI - The Right Way</h1>') >= 0) { context.title = "ColdFusion UI - The Right Way"; return src; } var dl = '<p style="text-align:right"><a class="btn btn-info" href="demos.zip">Download Demo</a></p>'; src = dl + src; var titleArr = src.match(/<h1.*?>(.*?)<\/h1>/); if(titleArr && titleArr.length >= 2) context.title=titleArr[1]; return src; }, markdownOptions: { highlight:'auto' } } } } }); grunt.registerTask('zipDemos', "Zips demos appropriately.", function() { var sourceDirs = grunt.file.expand(['./chapters/**/demos','./chapters/**/demo']); var zipConfig = {}; sourceDirs.forEach(function(dir) { var outputZip = dir.replace("chapters", "output/chapters"); //use a uniform demos.zip, not demo if(outputZip.charAt(outputZip.length-1) === "o") outputZip += "s"; outputZip += ".zip"; dir += "/*"; zipConfig[dir] = { cwd:dir, src:dir, dest:outputZip }; grunt.config.set('zip', zipConfig); }); }); grunt.registerTask('zipCode', ['zipDemos','zip']); grunt.loadNpmTasks('grunt-markdown'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-zip'); // Default task(s). grunt.registerTask('default', ['clean','markdown', 'copy', 'zipCode']);
As always, any comments are welcome.
Published at DZone with permission of Raymond Camden, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Integrating AWS With Salesforce Using Terraform
-
Revolutionizing Algorithmic Trading: The Power of Reinforcement Learning
-
Building a Flask Web Application With Docker: A Step-by-Step Guide
-
Automating the Migration From JS to TS for the ZK Framework
Comments