'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;
}