// Generated by CoffeeScript 1.6.2 var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; module.exports = function(BasePlugin) { var TextPlugin, _ref; return TextPlugin = (function(_super) { __extends(TextPlugin, _super); function TextPlugin() { _ref = TextPlugin.__super__.constructor.apply(this, arguments); return _ref; } TextPlugin.prototype.name = 'text'; TextPlugin.prototype.getText = function(opts) { var err, key, result, source, store, _ref1; source = opts.source, store = opts.store; key = source || ''; key = 'store.' + key.replace(/[#\{\(\n]/g, '').trim(); try { result = (_ref1 = eval(key)) != null ? _ref1 : source; } catch (_error) { err = _error; result = source; } return result; }; TextPlugin.prototype.populateText = function(opts, next) { var TaskGroup, balUtil, docpad, file, me, replaceElementCallback, source, templateData; me = this; docpad = this.docpad; balUtil = require('bal-util'); TaskGroup = require('taskgroup').TaskGroup; source = opts.source, templateData = opts.templateData, file = opts.file; replaceElementCallback = function(outerHTML, elementName, attributes, innerHTML, replaceElementCompleteCallback) { var extensions, replaceElementTasks, result; result = me.getText({ source: innerHTML, store: templateData }); replaceElementTasks = new TaskGroup().once('complete', function(err) { return replaceElementCompleteCallback(err, result); }); replaceElementTasks.addTask(function(complete) { return me.populateText({ file: file, templateData: templateData, source: result }, function(err, populateTextResult) { if (err) { return complete(err); } result = populateTextResult; return complete(); }); }); extensions = balUtil.getAttribute(attributes, 'type') || balUtil.getAttribute(attributes, 'render') || ''; if (extensions) { replaceElementTasks.addTask(function(complete) { var filename, parentExtension, parentFilename, renderTextOpts; filename = 'docpad-text-plugin'; parentExtension = file.get('outExtension') || file.get('extensionRendered'); parentFilename = file.get('filename'); if (extensions.indexOf('.') === -1 && (parentExtension || parentFilename)) { filename += '.' + (parentExtension || parentFilename); } filename += '.' + extensions; renderTextOpts = { filename: filename, templateData: templateData, renderSingleExtensions: 'auto', actions: ['renderExtensions'] }; return docpad.renderText(result, renderTextOpts, function(err, renderTextResult, document) { if (err) { return complete(err); } result = renderTextResult; return complete(); }); }); } return replaceElementTasks.run(); }; balUtil.replaceElementAsync(source, 't(?:ext)?', replaceElementCallback, next); return this; }; TextPlugin.prototype.extendTemplateData = function(opts) { var me, templateData; me = this; templateData = opts.templateData; templateData.t = function(str, opts) { var attrs, id, text; id = Math.random().toString().replace('.', ''); attrs = ''; if (opts.render) { opts.render = opts.render.toString().replace(/^['"]+|['"]+$/g, ''); attrs += " render=\"" + opts.render + "\""; } text = "" + str + ""; return text; }; return this; }; TextPlugin.prototype.renderDocument = function(opts, next) { var file, me, templateData; me = this; templateData = opts.templateData, file = opts.file; if (file.isText()) { return me.populateText({ file: file, templateData: templateData, source: opts.content }, function(err, result) { if (err) { return next(err); } opts.content = result; return next(); }); } else { return next(); } }; return TextPlugin; })(BasePlugin); };