mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-27 16:08:47 +03:00
Update formFactor to be a list
This commit is contained in:
parent
a9247154e0
commit
f6fbf170e3
@ -129,10 +129,14 @@
|
||||
itemListToArray = function (header) {
|
||||
if (!header) return undefined;
|
||||
var arr = [];
|
||||
var tokens = strip(/\\?\"/g, header).split(', ');
|
||||
var tokens = strip(/\\?\"/g, header).split(',');
|
||||
for (var i = 0; i < tokens.length; i++) {
|
||||
var token = tokens[i].split(';v=');
|
||||
if (tokens[i].indexOf(';') > -1) {
|
||||
var token = trim(tokens[i]).split(';v=');
|
||||
arr[i] = { brand : token[0], version : token[1] };
|
||||
} else {
|
||||
arr[i] = tokens[i];
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
},
|
||||
@ -157,7 +161,7 @@
|
||||
return str.replace(pattern, EMPTY);
|
||||
},
|
||||
stripQuotes = function (val) {
|
||||
return typeof val === STR_TYPE ? strip(/\"/g, val) : val;
|
||||
return typeof val === STR_TYPE ? strip(/\\?\"/g, val) : val;
|
||||
},
|
||||
trim = function (str, len) {
|
||||
if (typeof(str) === STR_TYPE) {
|
||||
@ -239,7 +243,7 @@
|
||||
return (i === UNKNOWN) ? undefined : i;
|
||||
}
|
||||
}
|
||||
return str;
|
||||
return map.hasOwnProperty('*') ? map['*'] : str;
|
||||
};
|
||||
|
||||
///////////////
|
||||
@ -263,10 +267,11 @@
|
||||
formFactorMap = {
|
||||
'embedded' : 'Automotive',
|
||||
'mobile' : 'Mobile',
|
||||
'tablet' : 'Tablet',
|
||||
'tablet' : ['Tablet', 'EInk'],
|
||||
'smarttv' : 'TV',
|
||||
'wearable' : ['VR', 'XR'],
|
||||
'?' : 'Unknown'
|
||||
'wearable' : ['VR', 'XR', 'Watch'],
|
||||
'?' : ['Desktop', 'Unknown'],
|
||||
'*' : undefined
|
||||
};
|
||||
|
||||
//////////////
|
||||
@ -947,7 +952,7 @@
|
||||
[PLATFORM, stripQuotes(uach[CH_HEADER_PLATFORM])],
|
||||
[PLATFORMVER, stripQuotes(uach[CH_HEADER_PLATFORM_VER])],
|
||||
[ARCHITECTURE, stripQuotes(uach[CH_HEADER_ARCH])],
|
||||
[FORMFACTOR, stripQuotes(uach[CH_HEADER_FORM_FACTOR])],
|
||||
[FORMFACTOR, itemListToArray(uach[CH_HEADER_FORM_FACTOR])],
|
||||
[BITNESS, stripQuotes(uach[CH_HEADER_BITNESS])]
|
||||
]);
|
||||
} else {
|
||||
@ -1029,8 +1034,7 @@
|
||||
};
|
||||
|
||||
this.parseCH = function () {
|
||||
var ua = this.ua,
|
||||
uaCH = this.uaCH,
|
||||
var uaCH = this.uaCH,
|
||||
rgxMap = this.rgxMap;
|
||||
|
||||
switch (this.itemType) {
|
||||
@ -1063,7 +1067,16 @@
|
||||
this.set(MODEL, uaCH[MODEL]);
|
||||
}
|
||||
if (uaCH[FORMFACTOR]) {
|
||||
this.set(TYPE, strMapper(uaCH[FORMFACTOR], formFactorMap));
|
||||
var ff;
|
||||
if (typeof uaCH[FORMFACTOR] !== 'string') {
|
||||
var idx = 0;
|
||||
while (!ff && idx < uaCH[FORMFACTOR].length) {
|
||||
ff = strMapper(uaCH[FORMFACTOR][idx++], formFactorMap);
|
||||
}
|
||||
} else {
|
||||
ff = strMapper(uaCH[FORMFACTOR], formFactorMap);
|
||||
}
|
||||
this.set(TYPE, ff);
|
||||
}
|
||||
break;
|
||||
case UA_OS:
|
||||
|
@ -466,17 +466,26 @@ describe('Map UA-CH headers', function () {
|
||||
it('Can detect form-factor from client-hints', function () {
|
||||
|
||||
const FFVR = {
|
||||
'sec-ch-ua-form-factor' : 'VR'
|
||||
'sec-ch-ua-form-factor' : '"VR"'
|
||||
};
|
||||
|
||||
const FFEInk = {
|
||||
'sec-ch-ua-form-factor' : '"Tablet", "EInk"'
|
||||
};
|
||||
|
||||
const FFUnknown = {
|
||||
'sec-ch-ua-form-factor' : 'Unknown'
|
||||
'sec-ch-ua-form-factor' : '"Unknown"'
|
||||
};
|
||||
|
||||
UAParser(FFVR).withClientHints().then(function (ua) {
|
||||
assert.strictEqual(ua.device.type, 'wearable');
|
||||
});
|
||||
|
||||
UAParser(FFEInk).withClientHints().then(function (ua) {
|
||||
assert.strictEqual(ua.device.type, 'tablet');
|
||||
});
|
||||
|
||||
|
||||
UAParser(FFUnknown).withClientHints().then(function (ua) {
|
||||
assert.strictEqual(ua.device.type, undefined);
|
||||
});
|
||||
|
@ -40,7 +40,8 @@ test('read client hints data', async ({ page }) => {
|
||||
version: '110'
|
||||
}
|
||||
],
|
||||
platform: 'New OS'
|
||||
platform: 'New OS',
|
||||
formFactor: 'New Form Factor'
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -54,6 +55,7 @@ test('read client hints data', async ({ page }) => {
|
||||
|
||||
expect(uap).toHaveProperty('browser.name', 'New Browser');
|
||||
expect(uap).toHaveProperty('os.name', 'New OS');
|
||||
expect(uap).toHaveProperty('device.type', undefined);
|
||||
});
|
||||
|
||||
test('detect Brave', async ({ page }) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user