diff --git a/__tests__/camera.test.ts b/__tests__/camera.test.ts
index 5edda712..03b8181b 100644
--- a/__tests__/camera.test.ts
+++ b/__tests__/camera.test.ts
@@ -14,19 +14,24 @@ const RICOH : Camera = {
describe('Camera', () => {
it('labels full text correctly', () => {
expect(formatCameraText(APPLE)).toBe('iPhone 11 Pro');
- expect(formatCameraText(APPLE, 'always')).toBe('Apple iPhone 11 Pro');
- expect(formatCameraText(APPLE, 'if-not-apple')).toBe('iPhone 11 Pro');
- expect(formatCameraText(APPLE, 'never')).toBe('iPhone 11 Pro');
+ expect(formatCameraText(APPLE, 'long')).toBe('Apple iPhone 11 Pro');
+ expect(formatCameraText(APPLE, 'medium')).toBe('iPhone 11 Pro');
+ expect(formatCameraText(APPLE, 'short')).toBe('11 Pro');
expect(formatCameraText(FUJIFILM)).toBe('Fujifilm X-T5');
expect(formatCameraText(CANON)).toBe('Canon EOS 800D');
+ expect(formatCameraText(NIKON, 'long'))
+ .toBe('Nikon Corporation Nikon D7000');
expect(formatCameraText(NIKON)).toBe('Nikon D7000');
expect(formatCameraText(RICOH)).toBe('RICOH GR III');
});
it('labels models correctly', () => {
- expect(formatCameraText(APPLE, 'never')).toBe('iPhone 11 Pro');
- expect(formatCameraText(APPLE, 'never', true)).toBe('11 Pro');
- expect(formatCameraText(APPLE_01, 'never', true)).toBe('iPhone 11');
- expect(formatCameraText(APPLE_02, 'never', true)).toBe('15 Pro Max');
+ expect(formatCameraText(APPLE, 'medium')).toBe('iPhone 11 Pro');
+ expect(formatCameraText(APPLE, 'short')).toBe('11 Pro');
+ expect(formatCameraText(APPLE_01, 'short')).toBe('iPhone 11');
+ expect(formatCameraText(APPLE_02, 'short')).toBe('15 Pro Max');
+ expect(formatCameraText(FUJIFILM, 'short')).toBe('X-T5');
+ expect(formatCameraText(RICOH, 'short')).toBe('GR III');
+ expect(formatCameraText(NIKON, 'short')).toBe('D7000');
});
});
diff --git a/src/camera/index.ts b/src/camera/index.ts
index 60bd7e0c..d909e972 100644
--- a/src/camera/index.ts
+++ b/src/camera/index.ts
@@ -57,8 +57,11 @@ export const cameraFromPhoto = (
export const formatCameraText = (
{ make, model: modelRaw }: Camera,
- includeMake: 'always' | 'never' | 'if-not-apple' = 'if-not-apple',
- removeIPhoneOnLongModels?: boolean,
+ length:
+ 'long' | // Unmodified make and model
+ 'medium' | // Make and model, with modifiers removed
+ 'short' // Model only
+ = 'medium',
) => {
// Capture simple make without modifiers like 'Corporation' or 'Company'
const makeSimple = make.match(/^(\S+)/)?.[1];
@@ -67,20 +70,23 @@ export const formatCameraText = (
modelRaw.toLocaleLowerCase().startsWith(makeSimple.toLocaleLowerCase())
);
let model = modelRaw;
- if (
- removeIPhoneOnLongModels &&
- model.includes('iPhone') &&
- model.length > 9
- ) {
- model = model.replace(/iPhone\s*/i, '');
+ switch (length) {
+ case 'long':
+ return `${make} ${model}`;
+ case 'medium':
+ return doesModelStartWithMake || make === 'Apple'
+ ? model
+ : `${make} ${model}`;
+ case 'short':
+ model = doesModelStartWithMake
+ ? model.replace(makeSimple, '').trim()
+ : model;
+ if (
+ model.includes('iPhone') &&
+ model.length > 9
+ ) {
+ model = model.replace(/iPhone\s*/i, '');
+ }
+ return model;
}
- return (
- includeMake === 'never' ||
- doesModelStartWithMake ||
- (includeMake === 'if-not-apple' && make === 'Apple')
- ) ? model
- : `${make} ${model}`;
};
-
-export const formatCameraModelTextShort = (camera: Camera) =>
- formatCameraText(camera, 'never', true);
diff --git a/src/image-response/CameraImageResponse.tsx b/src/image-response/CameraImageResponse.tsx
index e698bd0a..0ec26f6f 100644
--- a/src/image-response/CameraImageResponse.tsx
+++ b/src/image-response/CameraImageResponse.tsx
@@ -40,7 +40,6 @@ export default function CameraImageResponse({
icon: