blob: 29911c17d1292038dbe5ac5ac6356d8c46c5098c [file] [log] [blame]
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
export var browserNames = {
E: 'Edge',
FF: 'Firefox',
S: 'Safari',
C: 'Chrome',
IE: 'IE',
O: 'Opera'
};
function getEntryStatus(status) {
switch (status) {
case 'experimental':
return '⚠️ Property is experimental. Be cautious when using it.️\n\n';
case 'nonstandard':
return '🚨️ Property is nonstandard. Avoid using it.\n\n';
case 'obsolete':
return '🚨️️️ Property is obsolete. Avoid using it.\n\n';
default:
return '';
}
}
export function getEntryDescription(entry, doesSupportMarkdown) {
var result;
if (doesSupportMarkdown) {
result = {
kind: 'markdown',
value: getEntryMarkdownDescription(entry)
};
}
else {
result = {
kind: 'plaintext',
value: getEntryStringDescription(entry)
};
}
if (result.value === '') {
return undefined;
}
return result;
}
export function textToMarkedString(text) {
return text.replace(/[\\`*_{}[\]()#+\-.!<>]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
}
function getEntryStringDescription(entry) {
if (!entry.description || entry.description === '') {
return '';
}
if (typeof entry.description !== 'string') {
return entry.description.value;
}
var result = '';
if (entry.status) {
result += getEntryStatus(entry.status);
}
result += entry.description;
var browserLabel = getBrowserLabel(entry.browsers);
if (browserLabel) {
result += '\n(' + browserLabel + ')';
}
if ('syntax' in entry) {
result += "\n\nSyntax: " + entry.syntax;
}
if (entry.references && entry.references.length > 0) {
result += '\n\n';
result += entry.references.map(function (r) {
return r.name + ": " + r.url;
}).join(' | ');
}
return result;
}
function getEntryMarkdownDescription(entry) {
if (!entry.description || entry.description === '') {
return '';
}
var result = '';
if (entry.status) {
result += getEntryStatus(entry.status);
}
var description = typeof entry.description === 'string' ? entry.description : entry.description.value;
result += textToMarkedString(description);
var browserLabel = getBrowserLabel(entry.browsers);
if (browserLabel) {
result += '\n\n(' + textToMarkedString(browserLabel) + ')';
}
if ('syntax' in entry && entry.syntax) {
result += "\n\nSyntax: " + textToMarkedString(entry.syntax);
}
if (entry.references && entry.references.length > 0) {
result += '\n\n';
result += entry.references.map(function (r) {
return "[" + r.name + "](" + r.url + ")";
}).join(' | ');
}
return result;
}
/**
* Input is like `["E12","FF49","C47","IE","O"]`
* Output is like `Edge 12, Firefox 49, Chrome 47, IE, Opera`
*/
export function getBrowserLabel(browsers) {
if (browsers === void 0) { browsers = []; }
if (browsers.length === 0) {
return null;
}
return browsers
.map(function (b) {
var result = '';
var matches = b.match(/([A-Z]+)(\d+)?/);
var name = matches[1];
var version = matches[2];
if (name in browserNames) {
result += browserNames[name];
}
if (version) {
result += ' ' + version;
}
return result;
})
.join(', ');
}