'use strict'; var extname = require('../extname'); /** * Constants */ var TARGET_TYPES = ['html', 'jade', 'pug', 'slm', 'slim', 'jsx', 'haml', 'less', 'sass', 'scss', 'twig']; var IMAGES = ['jpeg', 'jpg', 'png', 'gif']; var DEFAULT_TARGET = TARGET_TYPES[0]; /** * Transform module */ var transform = module.exports = exports = function (filepath, i, length, sourceFile, targetFile) { var type; if (targetFile && targetFile.path) { var ext = extname(targetFile.path); type = typeFromExt(ext); } if (!isTargetType(type)) { type = DEFAULT_TARGET; } var func = transform[type]; if (func) { return func.apply(transform, arguments); } }; /** * Options */ transform.selfClosingTag = false; /** * Transform functions */ TARGET_TYPES.forEach(function (targetType) { transform[targetType] = function (filepath) { var ext = extname(filepath); var type = typeFromExt(ext); var func = transform[targetType][type]; if (func) { return func.apply(transform[targetType], arguments); } }; }); transform.html.css = function (filepath) { return ''; }; transform.html.map = transform.html.js; transform.html.jsx = function (filepath) { return ''; }; transform.html.html = function (filepath) { return ''; }; transform.html.image = function (filepath) { return ''; }; /** * Transformations for jsx is like html * but always with self closing tags, invalid jsx otherwise */ Object.keys(transform.html).forEach(function (type) { transform.jsx[type] = function () { var originalOption = transform.selfClosingTag; transform.selfClosingTag = true; var result = transform.html[type].apply(transform.html, arguments); transform.selfClosingTag = originalOption; return result; }; }); function end() { return transform.selfClosingTag ? ' />' : '>'; } function typeFromExt(ext) { ext = ext.toLowerCase(); if (isImage(ext)) { return 'image'; } return ext; } function isImage(ext) { return IMAGES.indexOf(ext) > -1; } function isTargetType(type) { if (!type) { return false; } return TARGET_TYPES.indexOf(type) > -1; }