mirror of
https://github.com/less/less.js.git
synced 2026-05-01 03:00:22 -04:00
58 lines
2.0 KiB
JavaScript
58 lines
2.0 KiB
JavaScript
module.exports = function(environment) {
|
|
var Dimension = require('../less/tree/dimension'),
|
|
Expression = require('../less/tree/expression'),
|
|
functionRegistry = require('./../less/functions/function-registry');
|
|
|
|
function imageSize(functionContext, filePathNode) {
|
|
var filePath = filePathNode.value;
|
|
var currentFileInfo = functionContext.currentFileInfo;
|
|
var currentDirectory = currentFileInfo.relativeUrls ?
|
|
currentFileInfo.currentDirectory : currentFileInfo.entryPath;
|
|
|
|
var fragmentStart = filePath.indexOf('#');
|
|
var fragment = '';
|
|
if (fragmentStart !== -1) {
|
|
fragment = filePath.slice(fragmentStart);
|
|
filePath = filePath.slice(0, fragmentStart);
|
|
}
|
|
|
|
var fileManager = environment.getFileManager(filePath, currentDirectory, functionContext.context, environment, true);
|
|
|
|
if (!fileManager) {
|
|
throw {
|
|
type: 'File',
|
|
message: 'Can not set up FileManager for ' + filePathNode
|
|
};
|
|
}
|
|
|
|
var fileSync = fileManager.loadFileSync(filePath, currentDirectory, functionContext.context, environment);
|
|
|
|
if (fileSync.error) {
|
|
throw fileSync.error;
|
|
}
|
|
|
|
var sizeOf = require('image-size');
|
|
return sizeOf(fileSync.filename);
|
|
}
|
|
|
|
var imageFunctions = {
|
|
'image-size': function(filePathNode) {
|
|
var size = imageSize(this, filePathNode);
|
|
return new Expression([
|
|
new Dimension(size.width, 'px'),
|
|
new Dimension(size.height, 'px')
|
|
]);
|
|
},
|
|
'image-width': function(filePathNode) {
|
|
var size = imageSize(this, filePathNode);
|
|
return new Dimension(size.width, 'px');
|
|
},
|
|
'image-height': function(filePathNode) {
|
|
var size = imageSize(this, filePathNode);
|
|
return new Dimension(size.height, 'px');
|
|
}
|
|
};
|
|
|
|
functionRegistry.addMultiple(imageFunctions);
|
|
};
|