diff --git a/src/loaders/index.js b/src/loaders/index.js index 5189793..f468bc3 100644 --- a/src/loaders/index.js +++ b/src/loaders/index.js @@ -3,7 +3,7 @@ */ export { default as Loader } from './loader'; export { default as bitmapFontParser, parse as parseBitmapFontData } from './bitmapFontParser'; -export { default as spritesheetParser } from './spritesheetParser'; +export { default as spritesheetParser, getResourcePath } from './spritesheetParser'; export { default as textureParser } from './textureParser'; /** diff --git a/src/loaders/index.js b/src/loaders/index.js index 5189793..f468bc3 100644 --- a/src/loaders/index.js +++ b/src/loaders/index.js @@ -3,7 +3,7 @@ */ export { default as Loader } from './loader'; export { default as bitmapFontParser, parse as parseBitmapFontData } from './bitmapFontParser'; -export { default as spritesheetParser } from './spritesheetParser'; +export { default as spritesheetParser, getResourcePath } from './spritesheetParser'; export { default as textureParser } from './textureParser'; /** diff --git a/src/loaders/spritesheetParser.js b/src/loaders/spritesheetParser.js index 5f273b2..eda9584 100644 --- a/src/loaders/spritesheetParser.js +++ b/src/loaders/spritesheetParser.js @@ -6,7 +6,6 @@ { return function spritesheetParser(resource, next) { - let resourcePath; const imageResourceName = `${resource.name}_image`; // skip if no data, its not json, it isn't spritesheet data, or the image resource already exists @@ -28,15 +27,7 @@ parentResource: resource, }; - // Prepend url path unless the resource image is a data url - if (resource.isDataUrl) - { - resourcePath = resource.data.meta.image; - } - else - { - resourcePath = url.resolve(resource.url.replace(this.baseUrl, ''), resource.data.meta.image); - } + const resourcePath = getResourcePath(resource, this.baseUrl); // load the image for this sheet this.add(imageResourceName, resourcePath, loadOptions, function onImageLoad(res) @@ -56,3 +47,14 @@ }); }; } + +export function getResourcePath(resource, baseUrl) +{ + // Prepend url path unless the resource image is a data url + if (resource.isDataUrl) + { + return resource.data.meta.image; + } + + return url.resolve(resource.url.replace(baseUrl, ''), resource.data.meta.image); +} diff --git a/src/loaders/index.js b/src/loaders/index.js index 5189793..f468bc3 100644 --- a/src/loaders/index.js +++ b/src/loaders/index.js @@ -3,7 +3,7 @@ */ export { default as Loader } from './loader'; export { default as bitmapFontParser, parse as parseBitmapFontData } from './bitmapFontParser'; -export { default as spritesheetParser } from './spritesheetParser'; +export { default as spritesheetParser, getResourcePath } from './spritesheetParser'; export { default as textureParser } from './textureParser'; /** diff --git a/src/loaders/spritesheetParser.js b/src/loaders/spritesheetParser.js index 5f273b2..eda9584 100644 --- a/src/loaders/spritesheetParser.js +++ b/src/loaders/spritesheetParser.js @@ -6,7 +6,6 @@ { return function spritesheetParser(resource, next) { - let resourcePath; const imageResourceName = `${resource.name}_image`; // skip if no data, its not json, it isn't spritesheet data, or the image resource already exists @@ -28,15 +27,7 @@ parentResource: resource, }; - // Prepend url path unless the resource image is a data url - if (resource.isDataUrl) - { - resourcePath = resource.data.meta.image; - } - else - { - resourcePath = url.resolve(resource.url.replace(this.baseUrl, ''), resource.data.meta.image); - } + const resourcePath = getResourcePath(resource, this.baseUrl); // load the image for this sheet this.add(imageResourceName, resourcePath, loadOptions, function onImageLoad(res) @@ -56,3 +47,14 @@ }); }; } + +export function getResourcePath(resource, baseUrl) +{ + // Prepend url path unless the resource image is a data url + if (resource.isDataUrl) + { + return resource.data.meta.image; + } + + return url.resolve(resource.url.replace(baseUrl, ''), resource.data.meta.image); +} diff --git a/test/loaders/spritesheetParser.js b/test/loaders/spritesheetParser.js index 79f8c15..4d54805 100644 --- a/test/loaders/spritesheetParser.js +++ b/test/loaders/spritesheetParser.js @@ -60,11 +60,46 @@ .that.is.an.instanceof(PIXI.Texture); }); + it('should build the image url', function () + { + function getResourcePath(url, image) + { + return PIXI.loaders.getResourcePath({ + url, + data: { meta: { image } }, + }); + } + + let result = getResourcePath('http://some.com/spritesheet.json', 'img.png'); + + expect(result).to.be.equals('http://some.com/img.png'); + + result = getResourcePath('http://some.com/some/dir/spritesheet.json', 'img.png'); + expect(result).to.be.equals('http://some.com/some/dir/img.png'); + + result = getResourcePath('http://some.com/some/dir/spritesheet.json', './img.png'); + expect(result).to.be.equals('http://some.com/some/dir/img.png'); + + result = getResourcePath('http://some.com/some/dir/spritesheet.json', '../img.png'); + expect(result).to.be.equals('http://some.com/some/img.png'); + + result = getResourcePath('/spritesheet.json', 'img.png'); + expect(result).to.be.equals('/img.png'); + + result = getResourcePath('/some/dir/spritesheet.json', 'img.png'); + expect(result).to.be.equals('/some/dir/img.png'); + + result = getResourcePath('/some/dir/spritesheet.json', './img.png'); + expect(result).to.be.equals('/some/dir/img.png'); + + result = getResourcePath('/some/dir/spritesheet.json', '../img.png'); + expect(result).to.be.equals('/some/img.png'); + }); + // TODO: Test that rectangles are created correctly. // TODO: Test that bathc processing works correctly. // TODO: Test that resolution processing works correctly. // TODO: Test that metadata is honored. - // TODO: Test data-url code paths. }); function createMockResource(type, data)