VulpesOS/gaia/shared/js/dialer/utils.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

174 lines
5 KiB
JavaScript
Executable file

'use strict';
/* exported Utils */
var Utils = {
prettyDate: function ut_prettyDate(time) {
var f = Intl.DateTimeFormat(navigator.languages, {
hour12: navigator.mozHour12,
hour: 'numeric',
minute: 'numeric'
});
return f.format(new Date(time));
},
/**
* Renders localized time duration to a given dom node
* @param {HTMLElement} node that will hold the time duration content
* @param {Number} time duration in ms
* @param {String} l10nPrefix prefix used to select the right l10n id.
* Default value 'callDuration'.
*/
prettyDuration: function(node, duration, l10nPrefix) {
var elapsed = new Date(duration);
var h = elapsed.getUTCHours();
var m = elapsed.getUTCMinutes();
var s = elapsed.getUTCSeconds();
var l10nId = l10nPrefix || 'callDuration';
var durationL10n = {
h: h + '',
m: m + '',
s: s + ''
};
if (l10nId === 'callDuration') {
// Pad the args with a leading 0 if we're displaying them in purely
// digital format.
durationL10n = {
h: (h > 9 ? '' : '0') + h,
m: (m > 9 ? '' : '0') + m,
s: (s > 9 ? '' : '0') + s
};
}
if (l10nPrefix === 'callDurationTextFormat' && h === 0 && m === 0) {
// Special case: only display in seconds format (i.e. "5 s") with text
// formatting, as digital formatting doesn't support this.
l10nId += 'Seconds';
} else {
l10nId += h > 0 ? 'Hours' : 'Minutes';
}
navigator.mozL10n.setAttributes(node, l10nId, durationL10n);
},
setHeaderDate: function ut_setHeaderDate(elem, time) {
var diff = (Date.now() - time) / 1000;
var day_diff = Math.floor(diff / 86400);
var formattedTime;
if (isNaN(day_diff)) {
elem.setAttribute('data-l10n-id', 'incorrectDate');
return;
} else if (day_diff === 0) {
elem.setAttribute('data-l10n-id', 'today');
return;
} else if (day_diff === 1) {
elem.setAttribute('data-l10n-id', 'yesterday');
return;
} else if (day_diff < 6) {
formattedTime = (new Date(time)).toLocaleString(navigator.languages, {
weekday: 'long',
});
} else {
formattedTime = (new Date(time)).toLocaleString(navigator.languages, {
year: '2-digit',
month: '2-digit',
day: '2-digit'
});
}
elem.removeAttribute('data-l10n-id');
elem.textContent = formattedTime;
},
getPhoneNumberPrimaryInfo: function ut_getPhoneNumberPrimaryInfo(matchingTel,
contact) {
if (contact) {
if (contact.name && contact.name.length && contact.name[0] !== '') {
return contact.name;
} else if (contact.org && contact.org.length && contact.org[0] !== '') {
return contact.org;
}
}
if (matchingTel) {
return matchingTel.value;
}
return null;
},
toCamelCase: function ut_toCamelCase(str) {
return str.replace(/\-(.)/g, function replacer(str, p1) {
return p1.toUpperCase();
});
},
_phoneTypesL10n: {
'mobile': 'phone_type_mobile',
'home': 'phone_type_home',
'work': 'phone_type_work',
'personal': 'phone_type_personal',
'faxHome': 'phone_type_fax_home',
'faxOffice': 'phone_type_fax_office',
'faxOther': 'phone_type_fax_other',
'other': 'phone_type_other'
},
/**
* In case of a call linked to a contact, the additional information of the
* phone number subject of the call consists in the type and carrier
* associated with this phone number.
*
* Each call is associated with an *unique number* and this phone number can
* belong to n specific contact(s). We don't care about the contact having
* more than one phone number, as we are only interested in the additional
* information of the current call that is associated with *one and only one*
* phone number.
*
* The type of the phone number will be localized if we have a matching key.
*/
getPhoneNumberAdditionalInfo:
function ut_getPhoneNumberAdditionalInfo(matchingTel) {
// In case that there is no stored type for this number, we default to
// "Mobile".
var type = matchingTel.type || 'mobile';
var carrier = matchingTel.carrier;
if (Array.isArray(type)) {
type = type[0];
}
var id;
var args = {};
if (this._phoneTypesL10n.hasOwnProperty(type)) {
id = this._phoneTypesL10n[type];
} else {
id = 'phone_type_custom';
args.type = type;
}
if (carrier) {
id += '_and_carrier';
args.carrier = carrier;
}
return {
id: id,
args: Object.keys(args).length ? args : null
};
},
/**
* Checks if the passed string is one of the predefined phone types that we
* localize when displayed.
*
* @param {String} type A string representing the phone type
* @return {Boolean} true if the string is one of the predefined phone types,
* false otherwise.
*/
isPhoneType: function ut_isPhoneType(type) {
return this._phoneTypesL10n.hasOwnProperty(type);
}
};