image-size.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. module.exports = function(environment) {
  2. var Dimension = require("../less/tree/dimension"),
  3. Expression = require("../less/tree/expression"),
  4. functionRegistry = require("./../less/functions/function-registry");
  5. function imageSize(functionContext, filePathNode) {
  6. var filePath = filePathNode.value;
  7. var currentFileInfo = functionContext.currentFileInfo;
  8. var currentDirectory = currentFileInfo.relativeUrls ?
  9. currentFileInfo.currentDirectory : currentFileInfo.entryPath;
  10. var fragmentStart = filePath.indexOf('#');
  11. var fragment = '';
  12. if (fragmentStart !== -1) {
  13. fragment = filePath.slice(fragmentStart);
  14. filePath = filePath.slice(0, fragmentStart);
  15. }
  16. var fileManager = environment.getFileManager(filePath, currentDirectory, functionContext.context, environment, true);
  17. if (!fileManager) {
  18. throw {
  19. type: "File",
  20. message: "Can not set up FileManager for " + filePathNode
  21. };
  22. }
  23. var fileSync = fileManager.loadFileSync(filePath, currentDirectory, functionContext.context, environment);
  24. if (fileSync.error) {
  25. throw fileSync.error;
  26. }
  27. var sizeOf = require('image-size');
  28. return sizeOf(fileSync.filename);
  29. }
  30. var imageFunctions = {
  31. "image-size": function(filePathNode) {
  32. var size = imageSize(this, filePathNode);
  33. return new Expression([
  34. new Dimension(size.width, "px"),
  35. new Dimension(size.height, "px")
  36. ]);
  37. },
  38. "image-width": function(filePathNode) {
  39. var size = imageSize(this, filePathNode);
  40. return new Dimension(size.width, "px");
  41. },
  42. "image-height": function(filePathNode) {
  43. var size = imageSize(this, filePathNode);
  44. return new Dimension(size.height, "px");
  45. }
  46. };
  47. functionRegistry.addMultiple(imageFunctions);
  48. };