1997 lines
125 KiB
JavaScript
1997 lines
125 KiB
JavaScript
|
"use strict";
|
||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||
|
});
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.Converter = exports.RuntimeRecord = exports.CommandSurfaceType = exports.ResourceType = exports.InputRuntimeLifeTime = exports.RuntimeSource = void 0;
|
||
|
const osfmos_1 = require("../lib/osfmos");
|
||
|
const constants_1 = require("./constants");
|
||
|
const conversionContext_1 = require("./conversionContext");
|
||
|
const iconBuilder_1 = require("./iconBuilder");
|
||
|
const localeBuilder_1 = require("./localeBuilder");
|
||
|
const MOS = require("./mosManifest");
|
||
|
const mosManifest_1 = require("./mosManifest");
|
||
|
const utilities_1 = require("./utilities");
|
||
|
const util = require("util");
|
||
|
const { Utils } = require('./osfUtils');
|
||
|
Utils.OverrideMethods();
|
||
|
var RuntimeSource;
|
||
|
(function (RuntimeSource) {
|
||
|
RuntimeSource["DefaultSettingSourceLocations"] = "DefaultSettingsSourceLocations";
|
||
|
RuntimeSource["ExecuteFunction"] = "ExecuteFunction";
|
||
|
RuntimeSource["SharedRuntimes"] = "SharedRuntimes";
|
||
|
RuntimeSource["ShowTaskpane"] = "ShowTaskpane";
|
||
|
RuntimeSource["LaunchEvent"] = "LaunchEvent";
|
||
|
})(RuntimeSource || (exports.RuntimeSource = RuntimeSource = {}));
|
||
|
var InputRuntimeLifeTime;
|
||
|
(function (InputRuntimeLifeTime) {
|
||
|
InputRuntimeLifeTime[InputRuntimeLifeTime["Short"] = 0] = "Short";
|
||
|
InputRuntimeLifeTime[InputRuntimeLifeTime["Long"] = 1] = "Long";
|
||
|
})(InputRuntimeLifeTime || (exports.InputRuntimeLifeTime = InputRuntimeLifeTime = {}));
|
||
|
var ResourceType;
|
||
|
(function (ResourceType) {
|
||
|
ResourceType["AllLocaleImages"] = "AllLocaleImages";
|
||
|
ResourceType["AllLocaleUrls"] = "AllLocaleUrls";
|
||
|
ResourceType["AllLocaleLongStrings"] = "AllLocaleLongStrings";
|
||
|
ResourceType["AllLocaleShortStrings"] = "AllLocaleShortStrings";
|
||
|
})(ResourceType || (exports.ResourceType = ResourceType = {}));
|
||
|
var CommandSurfaceType;
|
||
|
(function (CommandSurfaceType) {
|
||
|
CommandSurfaceType["None"] = "None";
|
||
|
CommandSurfaceType["Ribbon"] = "Ribbon";
|
||
|
CommandSurfaceType["ContextMenu"] = "ContextMenu";
|
||
|
})(CommandSurfaceType || (exports.CommandSurfaceType = CommandSurfaceType = {}));
|
||
|
class RuntimeRecord {
|
||
|
constructor() {
|
||
|
this._lifetime = MOS.RuntimesLifetime.Short;
|
||
|
this._isCapabilitiesSorted = false;
|
||
|
this._scriptResId = null;
|
||
|
}
|
||
|
sortCapabilities() {
|
||
|
if (!this._isCapabilitiesSorted && !utilities_1.Utilities.isNullOrUndefined(this._versionOverrideCapabilities)) {
|
||
|
Converter._sortCapabilitiesAlphabatically(this._versionOverrideCapabilities);
|
||
|
this._isCapabilitiesSorted = true;
|
||
|
}
|
||
|
}
|
||
|
getKey() {
|
||
|
return Converter._generateRuntimeLookupKey(this._resource, this._lifetime, this._versionOverrideCapabilities);
|
||
|
}
|
||
|
}
|
||
|
exports.RuntimeRecord = RuntimeRecord;
|
||
|
class Converter {
|
||
|
constructor(inputXml, locale) {
|
||
|
this._mosManifest = new mosManifest_1.MosManifest();
|
||
|
this._xmlManifest = new osfmos_1.OSF.Manifest.OfficeAppManifest(inputXml, locale, utilities_1.Utilities.getVerbosity());
|
||
|
this._localeBuilder = new localeBuilder_1.LocaleBuilder();
|
||
|
this._iconBuilder = new iconBuilder_1.IconBuilder();
|
||
|
this._uniqueSuffix = 0;
|
||
|
this._uniqueRuntimeSuffix = 0;
|
||
|
this._uniqueActionSuffix = 0;
|
||
|
this._uniqueViewSuffix = 0;
|
||
|
this._runtimeLookup = {};
|
||
|
this._addedExecuteFunctions = {};
|
||
|
}
|
||
|
getMosManifest() {
|
||
|
return this._mosManifest;
|
||
|
}
|
||
|
getLocaleBuilder() {
|
||
|
return this._localeBuilder;
|
||
|
}
|
||
|
convert() {
|
||
|
let context = new conversionContext_1.ConversionContext();
|
||
|
this._populateRoot(context);
|
||
|
}
|
||
|
downloadAndStoreIcons(folderPath) {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
yield this._iconBuilder.downloadAndStoreIcons(folderPath);
|
||
|
});
|
||
|
}
|
||
|
getNextUniqueSuffix() {
|
||
|
return ++this._uniqueSuffix;
|
||
|
}
|
||
|
getNextRuntimeSuffix() {
|
||
|
return ++this._uniqueRuntimeSuffix;
|
||
|
}
|
||
|
getNextActionSuffix() {
|
||
|
return ++this._uniqueActionSuffix;
|
||
|
}
|
||
|
getNextViewSuffix() {
|
||
|
return ++this._uniqueViewSuffix;
|
||
|
}
|
||
|
_populateRoot(context) {
|
||
|
this._mosManifest.$schema = constants_1.Constants.MosManifestSchemaVersionGA;
|
||
|
this._mosManifest.manifestVersion = constants_1.Constants.MosManifestGAVersion_1_17;
|
||
|
this._mosManifest.id = this._xmlManifest.getMarketplaceID();
|
||
|
this._mosManifest.version = this._xmlManifest.getMarketplaceVersion();
|
||
|
this._populateRootName();
|
||
|
this._populateRootDescription();
|
||
|
this._populateRootIcons();
|
||
|
this._mosManifest.accentColor = constants_1.Constants.DefaultAccessColor;
|
||
|
this._populateDeveloper();
|
||
|
this._populateLocalizationInfo();
|
||
|
this._populateRootPermissions();
|
||
|
this._populateRootDevicePermissions();
|
||
|
this._populateAuthorization();
|
||
|
this._populateWebApplicationInfos();
|
||
|
this._populateExtension(context);
|
||
|
this._populateRootRequirements();
|
||
|
this._populateValidDomains();
|
||
|
this._populateStaticTabs();
|
||
|
this._populateComposeExtensions();
|
||
|
this._populateGraphConnector();
|
||
|
this._populateConfigurableTabs();
|
||
|
this._populateBots();
|
||
|
this._populateConnectors();
|
||
|
this._populateActivities();
|
||
|
this._populateMeetingExtensionDefinition();
|
||
|
this._populateSubscriptionOffer();
|
||
|
this._populateShowLoadingIndicator();
|
||
|
this._populateIsFullScreen();
|
||
|
this._populateConfigurableProperties();
|
||
|
this._populateDefaultBlockUntilAdminAction();
|
||
|
this._populatePublisherDocsUrl();
|
||
|
this._populateDefaultInstallScope();
|
||
|
this._populateDefaultGroupCapability();
|
||
|
}
|
||
|
_populateRootName() {
|
||
|
let name = new MOS.Name();
|
||
|
name.short = utilities_1.Utilities.getLimitedString(this._xmlManifest.getDefaultDisplayName(), constants_1.Constants.MaxResourceStringLength30, "name.short truncated to %d characters");
|
||
|
name.full = utilities_1.Utilities.getLimitedString(this._xmlManifest.getDefaultDisplayName(), constants_1.Constants.MaxResourceStringLength100, "name.full truncated to %d characters");
|
||
|
this._populateLocaleSensitiveProperty(this._xmlManifest.getDisplayName, constants_1.Constants.MosNameShort, null);
|
||
|
this._populateLocaleSensitiveProperty(this._xmlManifest.getDisplayName, constants_1.Constants.MosNameFull, null);
|
||
|
this._mosManifest.name = name;
|
||
|
}
|
||
|
_populateRootDescription() {
|
||
|
let description = new MOS.Description();
|
||
|
let legacyDescription = this._xmlManifest.getDefaultDescription();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(legacyDescription)) {
|
||
|
description.short = utilities_1.Utilities.getLimitedString(legacyDescription, constants_1.Constants.MaxResourceStringLength80, "description.short truncated to %d characters");
|
||
|
description.full = legacyDescription;
|
||
|
}
|
||
|
this._populateLocaleSensitiveProperty(this._xmlManifest.getDescription, constants_1.Constants.MosDescriptionShort, constants_1.Constants.MaxResourceStringLength80);
|
||
|
this._populateLocaleSensitiveProperty(this._xmlManifest.getDescription, constants_1.Constants.MosDescriptionFull, constants_1.Constants.MaxResourceStringLength4000);
|
||
|
this._mosManifest.description = description;
|
||
|
}
|
||
|
_populateRootIcons() {
|
||
|
let icons = new MOS.Icons();
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale();
|
||
|
let defaultIconUrl = this._xmlManifest.getIconUrl(defaultLocale);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(defaultIconUrl)) {
|
||
|
defaultIconUrl = this._xmlManifest.getDefaultIconUrl();
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(defaultIconUrl)) {
|
||
|
defaultIconUrl = constants_1.Constants.IconsOutline + ".png";
|
||
|
}
|
||
|
icons.outline = this._iconBuilder.addIconAndGetReference(defaultIconUrl, true, true);
|
||
|
let defaultHighResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(defaultLocale);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(defaultHighResolutionIconUrl)) {
|
||
|
defaultHighResolutionIconUrl = this._xmlManifest.getDefaultHighResolutionIconUrl();
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(defaultHighResolutionIconUrl)) {
|
||
|
defaultHighResolutionIconUrl = constants_1.Constants.IconsColor + ".png";
|
||
|
}
|
||
|
icons.color = this._iconBuilder.addIconAndGetReference(defaultHighResolutionIconUrl, true, true);
|
||
|
this._mosManifest.icons = icons;
|
||
|
}
|
||
|
_populateDeveloper() {
|
||
|
let developer = new MOS.Developer();
|
||
|
developer.name = utilities_1.Utilities.getLimitedString(this._xmlManifest.getProviderName(), constants_1.Constants.MaxResourceStringLength32, "developer.name truncated to %d characters");
|
||
|
developer.mpnId = undefined;
|
||
|
let supportUrl = this._xmlManifest.getSupportUrl(this._xmlManifest.getDefaultLocale()) || constants_1.Constants.DefaultDeveloperUrl;
|
||
|
utilities_1.Utilities.log("Using <SupportUrl> from legacy manifest to populate developer.privacyUrl, developer.termsOfUseUrl and developer.websiteUrl in metaos manifest.");
|
||
|
developer.privacyUrl = supportUrl;
|
||
|
developer.termsOfUseUrl = supportUrl;
|
||
|
developer.websiteUrl = supportUrl;
|
||
|
this._mosManifest.developer = developer;
|
||
|
}
|
||
|
_populateLocalizationInfo() {
|
||
|
let localizationInfo = new MOS.LocalizationInfo();
|
||
|
localizationInfo.defaultLanguageTag = localeBuilder_1.LocaleBuilder.fixLocaleCasing(this._xmlManifest.getDefaultLocale());
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale != localizationInfo.defaultLanguageTag) {
|
||
|
let additionalLanguages = new MOS.AdditionalLanguages();
|
||
|
additionalLanguages.languageTag = seenLocale;
|
||
|
additionalLanguages.file = utilities_1.Utilities.createLocaleFileName(seenLocale);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(localizationInfo.additionalLanguages)) {
|
||
|
localizationInfo.additionalLanguages = [];
|
||
|
}
|
||
|
localizationInfo.additionalLanguages.push(additionalLanguages);
|
||
|
}
|
||
|
}
|
||
|
this._mosManifest.localizationInfo = localizationInfo;
|
||
|
}
|
||
|
_populateWebApplicationInfos() {
|
||
|
this._populateWebApplicationInfoFromContentAndTaskpane();
|
||
|
this._populateWebApplicationInfoFromMailbox();
|
||
|
}
|
||
|
_populateWebApplicationInfoFromMailbox() {
|
||
|
var _a, _b;
|
||
|
let overrideIndexes = this._getMailHostOverrides();
|
||
|
let mosWebApplicationInfo = new MOS.WebApplicationInfo();
|
||
|
for (let overrideIndex of overrideIndexes) {
|
||
|
let webApplicationInfo = (_b = (_a = this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost]) === null || _a === void 0 ? void 0 : _a[overrideIndex]) === null || _b === void 0 ? void 0 : _b._webApplicationInfo;
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(webApplicationInfo) ||
|
||
|
(utilities_1.Utilities.isNullOrUndefined(webApplicationInfo["_webApplicationId"]) && utilities_1.Utilities.isNullOrUndefined(webApplicationInfo["_webApplicationResource"]))) {
|
||
|
continue;
|
||
|
}
|
||
|
mosWebApplicationInfo.id = webApplicationInfo["_webApplicationId"];
|
||
|
mosWebApplicationInfo.resource = webApplicationInfo["_webApplicationResource"];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(this._mosManifest.webApplicationInfo)) {
|
||
|
this._mosManifest.webApplicationInfo = mosWebApplicationInfo;
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("MetaOS schema currently only supports one webapplicationInfo but we have found more than one in this manifest MailHost override: " + overrideIndex + ". " + " app: " + this._xmlManifest.getDisplayName(this._xmlManifest.getDefaultLocale()) + " WI:6224818");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateWebApplicationInfoFromContentAndTaskpane() {
|
||
|
let mosWebApplicationInfo = new MOS.WebApplicationInfo();
|
||
|
let shouldBeAdded = false;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest.getWebApplicationId())) {
|
||
|
mosWebApplicationInfo.id = this._xmlManifest.getWebApplicationId();
|
||
|
shouldBeAdded = true;
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest.getWebApplicationResource())) {
|
||
|
mosWebApplicationInfo.resource = this._xmlManifest.getWebApplicationResource();
|
||
|
shouldBeAdded = true;
|
||
|
}
|
||
|
if (shouldBeAdded) {
|
||
|
this._mosManifest.webApplicationInfo = mosWebApplicationInfo;
|
||
|
}
|
||
|
}
|
||
|
_populateRootPermissions() {
|
||
|
}
|
||
|
_populateRootDevicePermissions() {
|
||
|
}
|
||
|
_populateAuthorization() {
|
||
|
let mosAuthorization = new MOS.Authorization();
|
||
|
let permissions = this._xmlManifest.getPermission();
|
||
|
let mosPermissions = null;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(permissions)) {
|
||
|
mosPermissions = new MOS.Permissions2();
|
||
|
mosPermissions.resourceSpecific = [];
|
||
|
let mosResourceSpecific = new MOS.ResourceSpecific();
|
||
|
mosResourceSpecific.name = Converter._mosPermissionfromXmlPermission(permissions, this._xmlManifest._target);
|
||
|
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
|
||
|
mosPermissions.resourceSpecific.push(mosResourceSpecific);
|
||
|
mosAuthorization.permissions = mosPermissions;
|
||
|
}
|
||
|
let extendedPermissions = this._xmlManifest.getExtendedPermissions(osfmos_1.OSF.VersionOverridesNumber.V1_1);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extendedPermissions) && extendedPermissions.length > 0) {
|
||
|
for (let perm of extendedPermissions) {
|
||
|
if (perm === constants_1.Constants.InputAppendOnSend) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
|
||
|
mosPermissions = new MOS.Permissions2();
|
||
|
mosPermissions.resourceSpecific = [];
|
||
|
}
|
||
|
let mosResourceSpecific = new MOS.ResourceSpecific();
|
||
|
mosResourceSpecific.name = constants_1.Constants.MailboxItemAppendOnSendUser;
|
||
|
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
|
||
|
mosPermissions.resourceSpecific.push(mosResourceSpecific);
|
||
|
mosAuthorization.permissions = mosPermissions;
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logWarning("Ignoring unsupported ExtendedPermission: %s", perm);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
let supportsSharedFolders = this._xmlManifest.getSupportsSharedFolders(osfmos_1.OSF.VersionOverridesNumber.V1_1, constants_1.Constants.InputDesktopFormFactor);
|
||
|
if (supportsSharedFolders) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
|
||
|
mosPermissions = new MOS.Permissions2();
|
||
|
mosPermissions.resourceSpecific = [];
|
||
|
}
|
||
|
let mosResourceSpecific = new MOS.ResourceSpecific();
|
||
|
mosResourceSpecific.name = constants_1.Constants.MailboxAccessSharedFoldersUser;
|
||
|
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
|
||
|
mosPermissions.resourceSpecific.push(mosResourceSpecific);
|
||
|
mosAuthorization.permissions = mosPermissions;
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
|
||
|
this._mosManifest.authorization = mosAuthorization;
|
||
|
}
|
||
|
}
|
||
|
_populateExtension(context) {
|
||
|
let extension = new MOS.Extensions();
|
||
|
this._populateAlternates(extension);
|
||
|
this._populateContextMenus(extension);
|
||
|
this._populateGetStartedMessages(context, extension);
|
||
|
this._populateKeyboards(extension);
|
||
|
this._populateExtensionRequirements(extension);
|
||
|
this._populateRuntimes(context, extension);
|
||
|
this._populateRibbonsAndContextMenus(context, extension);
|
||
|
this._populateAutoRunEvents(context, extension);
|
||
|
this._populateFormSettings(extension);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(this._mosManifest.extensions)) {
|
||
|
this._mosManifest.extensions = [];
|
||
|
}
|
||
|
this._addRuntimeActionLocalizedDisplayNames(extension.runtimes);
|
||
|
this._mosManifest.extensions.push(extension);
|
||
|
}
|
||
|
_populateAlternates(extension) {
|
||
|
let alternates = [];
|
||
|
let defaultLocale = this._xmlManifest.getDefaultLocale();
|
||
|
let iconUrl = this._xmlManifest.getDefaultIconUrl();
|
||
|
let highResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(defaultLocale);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(iconUrl) ||
|
||
|
!utilities_1.Utilities.isNullOrUndefined(highResolutionIconUrl)) {
|
||
|
let alternate = new MOS.Alternates();
|
||
|
alternate.alternateIcons = new MOS.AlternateIcons();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(iconUrl)) {
|
||
|
alternate.alternateIcons.icon.url = iconUrl;
|
||
|
let iconSize = constants_1.Constants.LegacyWXPAppIconSize;
|
||
|
if (this._xmlManifest._hostType && this._xmlManifest.getTarget() == osfmos_1.OSF.OfficeAppType.MailApp) {
|
||
|
iconSize = constants_1.Constants.LegacyMailAppIconSize;
|
||
|
}
|
||
|
alternate.alternateIcons.icon.size = iconSize;
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale !== defaultLocale) {
|
||
|
const locIconUrl = this._xmlManifest.getIconUrl(seenLocale);
|
||
|
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(constants_1.Constants.AlternatesIconUrl, alternates.length);
|
||
|
this._localeBuilder.addLocaleString(seenLocale, formattedValue, locIconUrl);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(highResolutionIconUrl)) {
|
||
|
alternate.alternateIcons.highResolutionIcon.url = highResolutionIconUrl;
|
||
|
let highResolutionIconSize = constants_1.Constants.LegacyWXPAppHighResolutionIconSize;
|
||
|
alternate.alternateIcons.highResolutionIcon.size = highResolutionIconSize;
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale !== defaultLocale) {
|
||
|
const locHighResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(seenLocale);
|
||
|
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(constants_1.Constants.AlternatesHighResolutionIconUrl, alternates.length);
|
||
|
this._localeBuilder.addLocaleString(seenLocale, formattedValue, locHighResolutionIconUrl);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
alternates.push(alternate);
|
||
|
}
|
||
|
let equivalentAddins = this._xmlManifest.getEquivalentAddins();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(equivalentAddins) && equivalentAddins.length > 0) {
|
||
|
for (const equivalentAddin of equivalentAddins) {
|
||
|
let alternate = new MOS.Alternates();
|
||
|
alternate.prefer = new MOS.Prefer();
|
||
|
if (equivalentAddin.isComAddin()) {
|
||
|
alternate.prefer.comAddin = new MOS.ComAddin();
|
||
|
alternate.prefer.comAddin.progId = equivalentAddin.getProgId();
|
||
|
}
|
||
|
else if (equivalentAddin.isXLLCompatible()) {
|
||
|
alternate.prefer.xllCustomFunctions = new MOS.XllCustomFunctions();
|
||
|
alternate.prefer.xllCustomFunctions.fileName = equivalentAddin.getFileName();
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logWarning("Unknown equivalent add-in type encountered.");
|
||
|
continue;
|
||
|
}
|
||
|
alternates.push(alternate);
|
||
|
}
|
||
|
}
|
||
|
if (alternates.length > 0) {
|
||
|
extension.alternates = alternates;
|
||
|
}
|
||
|
}
|
||
|
_populateAutoRunEvents(context, extension) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost])) {
|
||
|
return;
|
||
|
}
|
||
|
let overrides = this._getMailHostOverrides();
|
||
|
if (overrides.length == 0) {
|
||
|
return;
|
||
|
}
|
||
|
let autoRunEvents = [];
|
||
|
for (let overrideId of overrides) {
|
||
|
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(constants_1.Constants.InputMailHost, overrideId, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, constants_1.Constants.InputMailHost, overrideId);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
|
||
|
for (let extensionPoint of addinCommandsExtensionPoints) {
|
||
|
if (extensionPoint[constants_1.Constants.InputType] === constants_1.Constants.InputLaunchEvent &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputEvents])) {
|
||
|
let autoRunEvent = null;
|
||
|
for (let innerEvent of extensionPoint[constants_1.Constants.InputEvents]) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(autoRunEvent)) {
|
||
|
autoRunEvent = new MOS.AutoRunEvents();
|
||
|
autoRunEvent.events = [];
|
||
|
autoRunEvent.requirements = new MOS.RequirementsExtensionElement();
|
||
|
autoRunEvent.requirements.capabilities = [];
|
||
|
autoRunEvent.requirements.scopes = [];
|
||
|
autoRunEvent.requirements.scopes.push(MOS.Scopes.Mail);
|
||
|
Converter._mergeInVersionOverrideRequirements(context.getCurrentVersionOverrideCapabilities(), autoRunEvent.requirements);
|
||
|
autoRunEvents.push(autoRunEvent);
|
||
|
}
|
||
|
let mosEvent = new MOS.Events();
|
||
|
let runtime = null;
|
||
|
const runtimeUrl = extensionPoint[constants_1.Constants.InputResid];
|
||
|
const runtimeKey = Converter._generateRuntimeLookupKey(runtimeUrl, MOS.RuntimesLifetime.Short, context.getCurrentVersionOverrideCapabilities());
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtimeKey)) {
|
||
|
runtime = this._runtimeLookup[runtimeKey];
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtime)) {
|
||
|
let actionId = innerEvent[constants_1.Constants.InputFunctionName];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(actionId)) {
|
||
|
actionId = innerEvent[constants_1.Constants.InputAction];
|
||
|
actionId = this._createUniqueActionId(actionId);
|
||
|
utilities_1.Utilities.logError("Unable to get functionName from LaunchEvent. Using %s instead.", actionId);
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
|
||
|
runtime.actions = [];
|
||
|
}
|
||
|
let action = new MOS.ExtensionRuntimesActionsItem();
|
||
|
action.id = actionId;
|
||
|
action.displayName = actionId;
|
||
|
mosEvent.actionId = actionId;
|
||
|
action.type = MOS.ExtensionRuntimesActionsItemType.ExecuteFunction;
|
||
|
this._addRuntimeExecuteAction(runtime, action, runtimeKey);
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime), "Expected runtime to be cached.");
|
||
|
utilities_1.Utilities.logError("Did not find runtime %s for autorunevent.", runtimeKey);
|
||
|
}
|
||
|
const sendMode = innerEvent[constants_1.Constants.InputSendMode];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(sendMode) && sendMode.length > 0) {
|
||
|
mosEvent.options = new MOS.Options();
|
||
|
mosEvent.options.sendMode = Converter._mosSendModeFromXmlSendMode(sendMode);
|
||
|
}
|
||
|
mosEvent.type = Converter._legacyLaunchEventToMosEventType(innerEvent[constants_1.Constants.InputType]);
|
||
|
autoRunEvent.events.push(mosEvent);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
if (autoRunEvents.length > 0) {
|
||
|
extension.autoRunEvents = autoRunEvents;
|
||
|
}
|
||
|
}
|
||
|
_populateContextMenus(extension) {
|
||
|
}
|
||
|
_populateGetStartedMessages(context, extension) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputWorkbook])) {
|
||
|
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Workbook);
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputDocument])) {
|
||
|
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Document);
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputPresentation])) {
|
||
|
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Presentation);
|
||
|
}
|
||
|
}
|
||
|
_fillGetStartedMessagesFromVersionOverrides(context, extension, manifestHostType) {
|
||
|
var hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
|
||
|
var versionOverride = this._xmlManifest._versionOverrides[hostType];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(versionOverride)) {
|
||
|
return;
|
||
|
}
|
||
|
var getStartedNode = versionOverride[constants_1.Constants.InputGetStartedNode];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(getStartedNode)) {
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, null);
|
||
|
let getStartedMessage = new MOS.GetStartedMessages();
|
||
|
getStartedMessage.title = getStartedNode[constants_1.Constants.InputTitle];
|
||
|
getStartedMessage.description = getStartedNode[constants_1.Constants.InputDescription];
|
||
|
getStartedMessage.learnMoreUrl = getStartedNode[constants_1.Constants.InputLearnMoreUrl];
|
||
|
getStartedMessage.requirements = new MOS.RequirementsExtensionElement();
|
||
|
getStartedMessage.requirements.capabilities = Converter._cloneCapabilities(context.getCurrentVersionOverrideCapabilities());
|
||
|
extension.getStartedMessages = [];
|
||
|
extension.getStartedMessages.push(getStartedMessage);
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
_populateKeyboards(extension) {
|
||
|
this._xmlManifest.getExtendedOverrides();
|
||
|
}
|
||
|
_populateFormSettings(extension) {
|
||
|
var _a, _b;
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost])) {
|
||
|
return;
|
||
|
}
|
||
|
const formSettings = this._xmlManifest.getFormSettings();
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale();
|
||
|
for (let item in formSettings) {
|
||
|
const formSetting = formSettings[item][constants_1.Constants.InputDesktopSettings];
|
||
|
const sourceLocation = (_a = formSetting === null || formSetting === void 0 ? void 0 : formSetting.SourceLocation) === null || _a === void 0 ? void 0 : _a[defaultLocale];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(sourceLocation)) {
|
||
|
extension.audienceClaimUrl = sourceLocation;
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale !== defaultLocale) {
|
||
|
const locFormSetting = (_b = formSetting === null || formSetting === void 0 ? void 0 : formSetting.SourceLocation) === null || _b === void 0 ? void 0 : _b[seenLocale];
|
||
|
this._localeBuilder.addLocaleString(seenLocale, constants_1.Constants.ExtensionAudienceClaimUrl, locFormSetting);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateExtensionRequirements(extension) {
|
||
|
var _a;
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined((_a = this._xmlManifest.getRequirements()) === null || _a === void 0 ? void 0 : _a.sets)) {
|
||
|
requirements.capabilities = Converter._getCapabilitiesFromLegacyRequirementSets(this._xmlManifest.getRequirements().sets);
|
||
|
}
|
||
|
this._addScopesFromHosts(requirements);
|
||
|
extension.requirements = requirements;
|
||
|
}
|
||
|
static _getCapabilitiesFromLegacyRequirementSets(sets) {
|
||
|
let capabilities = null;
|
||
|
for (let i = 0; i < sets.length; i++) {
|
||
|
let requirementSet = sets[i];
|
||
|
let capability = new MOS.Capabilities();
|
||
|
capability.name = requirementSet.name;
|
||
|
capability.minVersion = requirementSet.version;
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
|
||
|
capabilities = [];
|
||
|
}
|
||
|
capabilities.push(capability);
|
||
|
}
|
||
|
return capabilities;
|
||
|
}
|
||
|
_populateRibbonsAndContextMenus(context, extension) {
|
||
|
let ribbons = [];
|
||
|
let contextMenus = [];
|
||
|
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Mailbox, ribbons, contextMenus);
|
||
|
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Workbook, ribbons, contextMenus);
|
||
|
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Document, ribbons, contextMenus);
|
||
|
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Presentation, ribbons, contextMenus);
|
||
|
if (ribbons.length > 0) {
|
||
|
extension.ribbons = ribbons;
|
||
|
}
|
||
|
if (contextMenus.length > 0) {
|
||
|
extension.contextMenus = contextMenus;
|
||
|
}
|
||
|
context.setCurrentRibbonIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
context.setCurrentContextMenuIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
_addRuntimeActionLocalizedDisplayNames(runtimes) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(runtimes)) {
|
||
|
return;
|
||
|
}
|
||
|
for (var runtimeIdx = 0; runtimeIdx < runtimes.length; runtimeIdx++) {
|
||
|
var runtime = runtimes[runtimeIdx];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtime) && !utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
|
||
|
for (var actionIdx = 0; actionIdx < runtime.actions.length; actionIdx++) {
|
||
|
var action = runtime.actions[actionIdx];
|
||
|
this._addConstantResourceForAllSeenLocales(action.displayName, constants_1.Constants.RuntimesActionsDisplayName, runtimeIdx, actionIdx, null, null, null, null);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_addRibbonOrContextMenuForHostType(context, manifestHostType, ribbons, contextMenus) {
|
||
|
if (!this._doesHostHaveContentInManifest(manifestHostType)) {
|
||
|
return;
|
||
|
}
|
||
|
context.setManifestHostType(manifestHostType);
|
||
|
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
|
||
|
if (Converter._isWXP(hostType)) {
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, osfmos_1.OSF.VersionOverridesNumber.V1_0.toString());
|
||
|
let functionFileResid = Converter._getFunctionFileResid(hostType, null, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid) && !utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputDesktopFormFactor])) {
|
||
|
context.setCurrentFunctionFileResid(functionFileResid[constants_1.Constants.InputDesktopFormFactor]);
|
||
|
}
|
||
|
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, null, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
|
||
|
this._addRibbonOrContextMenuForManifestSection(context, hostType, null, addinCommandsExtensionPoints, ribbons, contextMenus);
|
||
|
}
|
||
|
context.setCurrentFunctionFileResid(null);
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
else if (hostType === constants_1.Constants.InputMailHost) {
|
||
|
let supportedVersionOverrides = Converter._getMailHostVersionOVerrides();
|
||
|
for (let vo of supportedVersionOverrides) {
|
||
|
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, vo);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
|
||
|
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion) && !utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion[constants_1.Constants.InputDesktopFormFactor])) {
|
||
|
context.setCurrentFunctionFileResid(functionFileResidVersion[constants_1.Constants.InputDesktopFormFactor]);
|
||
|
}
|
||
|
this._addRibbonOrContextMenuForManifestSection(context, hostType, vo, addinCommandsExtensionPoints, ribbons, contextMenus);
|
||
|
context.setCurrentFunctionFileResid(null);
|
||
|
}
|
||
|
let addinCommandsExtensionPointsMobile = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputMobileFormFactor, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsMobile) && addinCommandsExtensionPointsMobile.length > 0) {
|
||
|
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion) && !utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion[constants_1.Constants.InputMobileFormFactor])) {
|
||
|
context.setCurrentFunctionFileResid(functionFileResidVersion[constants_1.Constants.InputMobileFormFactor]);
|
||
|
}
|
||
|
this._addRibbonOrContextMenuForManifestSection(context, hostType, vo, addinCommandsExtensionPointsMobile, ribbons, contextMenus);
|
||
|
context.setCurrentFunctionFileResid(null);
|
||
|
}
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Unsupported host skipping processing for host type: %s", hostType);
|
||
|
}
|
||
|
context.setManifestHostType(null);
|
||
|
}
|
||
|
_addRibbonOrContextMenuForManifestSection(context, versionOverrideHostIndex, versionOverrideIndex, addinCommandsExtensionPoints, ribbons, contextMenus) {
|
||
|
let len = addinCommandsExtensionPoints.length;
|
||
|
for (let idx = 0; idx < len; idx++) {
|
||
|
let extPoint = addinCommandsExtensionPoints[idx];
|
||
|
let extensionPointType = extPoint[constants_1.Constants.InputType];
|
||
|
if (Converter._isRibbonCommandSurface(extensionPointType)) {
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.Ribbon);
|
||
|
let ribbon = new MOS.Ribbons();
|
||
|
Converter._incrementCurrentRibbonIndex(context);
|
||
|
ribbon.tabs = [];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputTabs])) {
|
||
|
for (let tabIdx = 0; tabIdx < extPoint[constants_1.Constants.InputTabs].length; tabIdx++) {
|
||
|
const tab = extPoint[constants_1.Constants.InputTabs][tabIdx];
|
||
|
context.setCurrentTabIndex(tabIdx);
|
||
|
const mosTab = this._populateTab(context, tab);
|
||
|
context.setCurrentTabIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
ribbon.tabs.push(mosTab);
|
||
|
}
|
||
|
}
|
||
|
ribbon.contexts = [];
|
||
|
ribbon.contexts.push(Converter._getRibbonContextFromCommandSurface(extPoint[constants_1.Constants.InputType]));
|
||
|
ribbon.requirements = new MOS.RequirementsExtensionElement();
|
||
|
this._populateRibbonAndContextMenuRequirements(context, ribbon.requirements);
|
||
|
utilities_1.Utilities.log("Adding ribbon for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
|
||
|
ribbons.push(ribbon);
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
|
||
|
}
|
||
|
else if (Converter._isContextMenuCommandSurface(extensionPointType)) {
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.ContextMenu);
|
||
|
let contextMenu = new MOS.ContextMenus;
|
||
|
if (context.getCurrentContextMenuIndex() === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
context.setCurrentContextMenuIndex(0);
|
||
|
}
|
||
|
else {
|
||
|
context.setCurrentContextMenuIndex(context.getCurrentContextMenuIndex() + 1);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputChildren])) {
|
||
|
for (let menuNodeIdx = 0; menuNodeIdx < extPoint[constants_1.Constants.InputChildren].length; menuNodeIdx++) {
|
||
|
const menuNode = extPoint[constants_1.Constants.InputChildren][menuNodeIdx];
|
||
|
const mosMenu = new MOS.ExtensionCommonCustomControlMenu();
|
||
|
context.setCurrentContextMenuMenuIndex(menuNodeIdx);
|
||
|
for (let menuControlIdx = 0; menuControlIdx < menuNode[constants_1.Constants.InputChildren].length; menuControlIdx++) {
|
||
|
const menuControl = menuNode[constants_1.Constants.InputChildren][menuControlIdx];
|
||
|
context.setCurrentContextMenuMenuControlIndex(menuControlIdx);
|
||
|
this._populateMenuControl(context, mosMenu, menuControl);
|
||
|
const mosContextMenuMenu = new MOS.Menus();
|
||
|
mosContextMenuMenu.type = menuNode[constants_1.Constants.InputType] === constants_1.Constants.InputContextMenuCell ?
|
||
|
MOS.MenusType.Cell : MOS.MenusType.Text;
|
||
|
for (let ctxmnIdx = 0; ctxmnIdx < mosMenu.items.length; ctxmnIdx++) {
|
||
|
mosContextMenuMenu.controls.push((mosMenu.items[ctxmnIdx]));
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(contextMenu.menus)) {
|
||
|
contextMenu.menus = [];
|
||
|
}
|
||
|
contextMenu.menus.push(mosContextMenuMenu);
|
||
|
}
|
||
|
context.setCurrentContextMenuMenuControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
context.setCurrentContextMenuMenuIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
contextMenu.requirements = new MOS.RequirementsExtensionElement();
|
||
|
this._populateRibbonAndContextMenuRequirements(context, contextMenu.requirements);
|
||
|
utilities_1.Utilities.log("Adding contextMenu for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
|
||
|
contextMenus.push(contextMenu);
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
|
||
|
}
|
||
|
else if (Converter._isMobileCommandSurface(extensionPointType)) {
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.Ribbon);
|
||
|
let ribbon = new MOS.Ribbons();
|
||
|
ribbon.tabs = [];
|
||
|
ribbon.tabs[0] = new MOS.ExtensionRibbonsArrayTabsItem();
|
||
|
ribbon.tabs[0].customMobileRibbonGroups = [];
|
||
|
ribbon.tabs[0].groups = [];
|
||
|
let placeholderGroup = new MOS.ExtensionRibbonsCustomTabGroupsItem();
|
||
|
placeholderGroup.label = "placeholder";
|
||
|
placeholderGroup.controls = [];
|
||
|
let placeholderControl = new MOS.ExtensionCommonCustomGroupControlsItem();
|
||
|
placeholderControl.actionId = "";
|
||
|
placeholderControl.label = "";
|
||
|
placeholderControl.id = "";
|
||
|
placeholderControl.type = MOS.ExtensionCommonCustomGroupControlsItemType.Menu;
|
||
|
placeholderControl.icons = [];
|
||
|
let placeholderIcon = new MOS.ExtensionCommonIcon();
|
||
|
placeholderIcon.url = "https://placeholder";
|
||
|
placeholderIcon.size = 32;
|
||
|
placeholderControl.icons.push(placeholderIcon);
|
||
|
placeholderControl.supertip = new MOS.ExtensionCommonSuperToolTip();
|
||
|
placeholderControl.supertip.description = "";
|
||
|
placeholderControl.supertip.title = "";
|
||
|
placeholderGroup.controls.push(placeholderControl);
|
||
|
ribbon.tabs[0].groups.push(placeholderGroup);
|
||
|
let customMobileGroup = new MOS.ExtensionRibbonsCustomMobileGroupItem();
|
||
|
customMobileGroup.id = this._createUniqueId("customMobileGroup");
|
||
|
customMobileGroup.label = customMobileGroup.id;
|
||
|
ribbon.tabs[0].customMobileRibbonGroups[0] = customMobileGroup;
|
||
|
ribbon.tabs[0].id = this._createUniqueId("mobileTab");
|
||
|
ribbon.tabs[0].label = ribbon.tabs[0].id;
|
||
|
ribbon.contexts = [];
|
||
|
ribbon.contexts.push(Converter._getRibbonContextFromCommandSurface(extPoint[constants_1.Constants.InputType]));
|
||
|
ribbon.requirements = new MOS.RequirementsExtensionElement();
|
||
|
this._populateRibbonAndContextMenuRequirements(context, ribbon.requirements);
|
||
|
ribbon.requirements.formFactors = [];
|
||
|
ribbon.requirements.formFactors.push(MOS.FormFactors.Mobile);
|
||
|
var mobileControl = null;
|
||
|
switch (extensionPointType) {
|
||
|
case constants_1.Constants.InputMobileMessageReadCommandSurface:
|
||
|
case constants_1.Constants.InputMobileOnlineMeetingCommandSurface:
|
||
|
case constants_1.Constants.InputMobileLogEventAppointmentAttendee:
|
||
|
Converter._incrementCurrentRibbonIndex(context);
|
||
|
context.setCurrentTabIndex(0);
|
||
|
context.setCurrentCustomMobileGroupIndex(0);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup])) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputId])) {
|
||
|
customMobileGroup.id = extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputId];
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabel]) ||
|
||
|
!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabelResId])) {
|
||
|
customMobileGroup.label = this._populateControlLocalizedField(context, extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabelResId], extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength32, ResourceType.AllLocaleShortStrings, constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsLabel);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl])) {
|
||
|
mobileControl = extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl];
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputControl])) {
|
||
|
mobileControl = extPoint[constants_1.Constants.InputControl];
|
||
|
}
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(mobileControl)) {
|
||
|
context.setCurrentControlIndex(0);
|
||
|
customMobileGroup.controls = [];
|
||
|
customMobileGroup.controls[0] = new MOS.ExtensionRibbonsCustomMobileControlButtonItem();
|
||
|
this._populateMobileControlProperties(context, customMobileGroup.controls[0], mobileControl);
|
||
|
context.setCurrentControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
context.setCurrentCustomMobileGroupIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
context.setCurrentTabIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
break;
|
||
|
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
|
||
|
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
|
||
|
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
|
||
|
break;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unrecognized mobile command surface: " + extensionPointType);
|
||
|
}
|
||
|
ribbon.tabs[0].customMobileRibbonGroups[0] = customMobileGroup;
|
||
|
utilities_1.Utilities.log("Adding ribbon for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
|
||
|
ribbons.push(ribbon);
|
||
|
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateRibbonAndContextMenuRequirements(context, requirements) {
|
||
|
this._addRequirementSubelementScopesFromHost(context, requirements);
|
||
|
requirements.formFactors.push(MOS.FormFactors.Desktop);
|
||
|
}
|
||
|
_addRequirementSubelementScopesFromHost(context, requirements) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(requirements.scopes)) {
|
||
|
requirements.scopes = [];
|
||
|
}
|
||
|
let scope = Converter._getRequirementsScopeFromManifestHostType(context.getManifestHostType());
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(scope)) {
|
||
|
requirements.scopes.push(scope);
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(requirements.formFactors)) {
|
||
|
requirements.formFactors = [];
|
||
|
}
|
||
|
Converter._mergeInVersionOverrideRequirements(context.getCurrentVersionOverrideCapabilities(), requirements);
|
||
|
}
|
||
|
static _mergeInVersionOverrideRequirements(versionOverrideCapabilities, requirements) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideCapabilities)) {
|
||
|
return;
|
||
|
}
|
||
|
for (let capability of versionOverrideCapabilities) {
|
||
|
let matchingCapability = null;
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(requirements.capabilities)) {
|
||
|
requirements.capabilities = [];
|
||
|
}
|
||
|
else {
|
||
|
matchingCapability = Converter._getMatchingCapability(requirements.capabilities, capability);
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(matchingCapability)) {
|
||
|
requirements.capabilities.push(capability);
|
||
|
}
|
||
|
else {
|
||
|
let incomingMin = utilities_1.Utilities.isNullOrUndefined(capability.minVersion) ? null : +capability.minVersion;
|
||
|
let existingMin = utilities_1.Utilities.isNullOrUndefined(matchingCapability.minVersion) ? null : +matchingCapability.minVersion;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(existingMin) && !Number.isNaN(existingMin) && !Number.isNaN(incomingMin)) {
|
||
|
if (incomingMin > existingMin) {
|
||
|
matchingCapability.minVersion = incomingMin.toString();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
static _getMatchingCapability(capabilities, capability) {
|
||
|
for (let cap of capabilities) {
|
||
|
if (cap.name === capability.name) {
|
||
|
return cap;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
static _capabilitiesContainCapability(capabilities, capability) {
|
||
|
for (let cap of capabilities) {
|
||
|
if (cap.name === capability.name &&
|
||
|
cap.maxVersion === capability.maxVersion &&
|
||
|
cap.minVersion === capability.minVersion) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
_populateTab(context, tab) {
|
||
|
let mosTab;
|
||
|
let mosGroups = [];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(tab[constants_1.Constants.InputLabel])) {
|
||
|
mosTab = new MOS.ExtensionRibbonsArrayTabsItem();
|
||
|
mosTab.builtInTabId = tab[constants_1.Constants.InputId];
|
||
|
}
|
||
|
else {
|
||
|
mosTab = new MOS.ExtensionRibbonsArrayTabsItem();
|
||
|
mosTab.id = tab[constants_1.Constants.InputId];
|
||
|
mosTab.label = tab[constants_1.Constants.InputLabel];
|
||
|
}
|
||
|
this._populateGroups(context, mosGroups, tab[constants_1.Constants.InputChildren]);
|
||
|
mosTab.groups = mosGroups;
|
||
|
return mosTab;
|
||
|
}
|
||
|
_populateGroups(context, mosGroups, groups) {
|
||
|
for (let idx = 0; idx < groups.length; idx++) {
|
||
|
let group = groups[idx];
|
||
|
let mosGroup = new MOS.ExtensionCommonCustomGroup();
|
||
|
context.setCurrentGroupIndex(idx);
|
||
|
this._populateGroup(context, mosGroup, group);
|
||
|
context.setCurrentGroupIndex(-1);
|
||
|
mosGroups.push(mosGroup);
|
||
|
}
|
||
|
}
|
||
|
_populateGroup(context, mosGroup, group) {
|
||
|
mosGroup.id = group[constants_1.Constants.InputId];
|
||
|
mosGroup.label = this._getResourceAndWriteLocalizedValues(group[constants_1.Constants.InputLabelResId], group[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, context.getCurrentVersionOverrideNumber(), constants_1.Constants.RibbonsTabsGroupsLabel, ResourceType.AllLocaleShortStrings, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex());
|
||
|
this._populateGroupIcons(context, mosGroup, group[constants_1.Constants.InputIcon], group[constants_1.Constants.InputIconResId]);
|
||
|
mosGroup.controls = [];
|
||
|
this._populateGroupControls(context, mosGroup.controls, group[constants_1.Constants.InputChildren]);
|
||
|
}
|
||
|
_populateGroupIcons(context, group, groupIcons, groupIconResIds) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(groupIcons)) {
|
||
|
return;
|
||
|
}
|
||
|
let iconIdx = 0;
|
||
|
for (let size in groupIcons) {
|
||
|
const url = groupIcons[size];
|
||
|
const mosIcon = new MOS.ExtensionCommonIcon();
|
||
|
context.setCurrentIconIndex(iconIdx);
|
||
|
let fileShortName = this._iconBuilder.addIconAndGetReference(url, !utilities_1.Utilities._writeImageUrls, false);
|
||
|
mosIcon.url = fileShortName;
|
||
|
mosIcon.size = +size;
|
||
|
this._populateLocaleSensitiveProperty;
|
||
|
this._getResourceAndWriteLocalizedValues(groupIconResIds[size], fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsIconsUrl : constants_1.Constants.RibbonsTabsGroupsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(group.icons)) {
|
||
|
group.icons = [];
|
||
|
}
|
||
|
group.icons.push(mosIcon);
|
||
|
iconIdx++;
|
||
|
}
|
||
|
}
|
||
|
_createUniqueId(legacyId) {
|
||
|
let uniqueSuffix = this.getNextUniqueSuffix();
|
||
|
return legacyId + "_" + uniqueSuffix;
|
||
|
}
|
||
|
_createUniqueActionId(id) {
|
||
|
let uniqueSuffix = this.getNextActionSuffix();
|
||
|
return id + "_" + uniqueSuffix;
|
||
|
}
|
||
|
_createUniqueViewId(id) {
|
||
|
let uniqueSuffix = this.getNextViewSuffix();
|
||
|
return id + "_" + uniqueSuffix;
|
||
|
}
|
||
|
_populateGroupControls(context, mosControls, controls) {
|
||
|
for (let idx = 0; idx < controls.length; idx++) {
|
||
|
let control = controls[idx];
|
||
|
context.setCurrentControlIndex(idx);
|
||
|
switch (control[constants_1.Constants.InputControlType]) {
|
||
|
case constants_1.Constants.InputButton:
|
||
|
let buttonControl = new MOS.ExtensionCommonCustomGroupControlsItem();
|
||
|
this._populateButtonControl(context, buttonControl, control);
|
||
|
mosControls.push(buttonControl);
|
||
|
break;
|
||
|
case constants_1.Constants.InputMenu:
|
||
|
let menuControl = new MOS.ExtensionCommonCustomControlMenu();
|
||
|
this._populateMenuControl(context, menuControl, control);
|
||
|
mosControls.push(menuControl);
|
||
|
break;
|
||
|
default:
|
||
|
throw "need to handle legacy control type: " + control[constants_1.Constants.InputControlType];
|
||
|
}
|
||
|
}
|
||
|
context.setCurrentControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
_populateMenuControl(context, menuControl, control) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(control === null || control === void 0 ? void 0 : control[constants_1.Constants.InputChildren]) || control[constants_1.Constants.InputChildren].length == 0) {
|
||
|
return;
|
||
|
}
|
||
|
this._populateControlProperties(context, menuControl, control);
|
||
|
for (let idx = 0; idx < control[constants_1.Constants.InputChildren].length; idx++) {
|
||
|
let menuItemObject = control[constants_1.Constants.InputChildren][idx];
|
||
|
let menuItem = new MOS.ExtensionCommonCustomControlMenuItem();
|
||
|
context.setCurrentMenuItemIndex(idx);
|
||
|
context.setCurrentContextMenuMenuControlMenuItemIndex(idx);
|
||
|
this._populateMenuItem(context, menuItem, menuItemObject);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(menuControl.items)) {
|
||
|
menuControl.items = [];
|
||
|
}
|
||
|
menuControl.items.push(menuItem);
|
||
|
}
|
||
|
context.setCurrentMenuItemIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
context.setCurrentContextMenuMenuControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
_populateMenuItem(context, menuItemControl, control) {
|
||
|
let menuItemObject = control[constants_1.Constants.InputMenuItem];
|
||
|
this._populateControlProperties(context, menuItemControl, control);
|
||
|
}
|
||
|
_populateControlProperties(context, mosControl, control) {
|
||
|
let isRibbon = context.isInRibbon();
|
||
|
let isMenuItem = false;
|
||
|
if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputButton) {
|
||
|
let mosButton = mosControl;
|
||
|
mosButton.enabled = control[constants_1.Constants.InputEnabled];
|
||
|
mosButton.id = control[constants_1.Constants.InputId];
|
||
|
mosButton.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsLabel : constants_1.Constants.ContextMenusMenusControlsLabel);
|
||
|
mosButton.type = MOS.ExtensionCommonCustomGroupControlsItemType.Button;
|
||
|
mosButton.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
|
||
|
control[constants_1.Constants.InputOverridenByRibbonApi];
|
||
|
}
|
||
|
else if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputMenuItem) {
|
||
|
let mosMenuItem = mosControl;
|
||
|
mosMenuItem.enabled = control[constants_1.Constants.InputEnabled];
|
||
|
mosMenuItem.id = control[constants_1.Constants.InputId];
|
||
|
mosMenuItem.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsLabel : constants_1.Constants.ContextMenusMenusControlsItemsLabel);
|
||
|
mosMenuItem.type = MOS.ExtensionCommonCustomControlMenuItemType.MenuItem;
|
||
|
mosMenuItem.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
|
||
|
control[constants_1.Constants.InputOverridenByRibbonApi];
|
||
|
isMenuItem = true;
|
||
|
}
|
||
|
else if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputMenu) {
|
||
|
let mosMenu = mosControl;
|
||
|
mosMenu.id = control[constants_1.Constants.InputId];
|
||
|
mosMenu.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsLabel : constants_1.Constants.ContextMenusMenusControlsLabel);
|
||
|
mosMenu.type = MOS.ExtensionCommonCustomControlMenuType.Menu;
|
||
|
mosMenu.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
|
||
|
control[constants_1.Constants.InputOverridenByRibbonApi];
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Unrecognized control: " + control[constants_1.Constants.InputControlType]);
|
||
|
return;
|
||
|
}
|
||
|
if (control[constants_1.Constants.InputControlType] !== constants_1.Constants.InputMenu) {
|
||
|
this._populateControlAction(context, mosControl, control);
|
||
|
}
|
||
|
this._populateControlSupertip(context, mosControl, control);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputIcon])) {
|
||
|
mosControl[constants_1.Constants.MosIcons] = [];
|
||
|
this._populateControlIcons(context, mosControl[constants_1.Constants.MosIcons], control[constants_1.Constants.InputIcon], control[constants_1.Constants.InputIconResId], isMenuItem);
|
||
|
}
|
||
|
}
|
||
|
_populateMobileControlProperties(context, mosMobileControl, control) {
|
||
|
mosMobileControl.type = MOS.ExtensionRibbonsCustomMobileControlButtonItemType.MobileButton;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputLabel]) || !utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputLabelResId])) {
|
||
|
mosMobileControl.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength32, ResourceType.AllLocaleShortStrings, constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsControlsLabel);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction])) {
|
||
|
this._populateControlAction(context, mosMobileControl, control);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputId])) {
|
||
|
mosMobileControl.id = control[constants_1.Constants.InputId];
|
||
|
}
|
||
|
else {
|
||
|
mosMobileControl.id = this._createUniqueId("mobileControl");
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputIcon])) {
|
||
|
mosMobileControl.icons = [];
|
||
|
this._populateMobileControlIcon(context, mosMobileControl.icons, control[constants_1.Constants.InputIcon]);
|
||
|
}
|
||
|
}
|
||
|
_populateMobileControlIcon(context, mosMobileControlIcons, icon) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(icon) && !utilities_1.Utilities.isNullOrUndefined(icon[constants_1.Constants.InputImages])) {
|
||
|
context.setCurrentIconIndex(0);
|
||
|
for (var idx = 0; idx < icon[constants_1.Constants.InputImages].length; idx++) {
|
||
|
let image = icon[constants_1.Constants.InputImages][idx];
|
||
|
let mosIcon = new MOS.ExtensionCustomMobileIcon();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputScale])) {
|
||
|
mosIcon.scale = Number(image[constants_1.Constants.InputScale]);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputSize])) {
|
||
|
mosIcon.size = Number(image[constants_1.Constants.InputSize]);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputResid])) {
|
||
|
mosIcon.url = this._getResourceAndWriteLocalizedValues(image[constants_1.Constants.InputResid], null, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsControlsIconsUrl, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentCustomMobileGroupIndex(), context.getCurrentControlIndex(), context.getCurrentIconIndex());
|
||
|
}
|
||
|
mosMobileControlIcons.push(mosIcon);
|
||
|
context.setCurrentIconIndex(context.getCurrentIconIndex() + 1);
|
||
|
}
|
||
|
}
|
||
|
context.setCurrentIconIndex(conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
_populateControlLocalizedField(context, labelResId, defaultValue, maxLength, resourceType, resourceString) {
|
||
|
if (context.isInRibbon()) {
|
||
|
return this._getResourceAndWriteLocalizedValues(labelResId, defaultValue, maxLength, context.getCurrentVersionOverrideNumber(), resourceString, resourceType, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentCustomMobileGroupIndex() == conversionContext_1.ConversionContext.UnsetIndex ? context.getCurrentGroupIndex() : context.getCurrentCustomMobileGroupIndex(), context.getCurrentControlIndex(), context.getCurrentMenuItemIndex());
|
||
|
}
|
||
|
else {
|
||
|
return this._getResourceAndWriteLocalizedValues(labelResId, defaultValue, maxLength, context.getCurrentVersionOverrideNumber(), resourceString, resourceType, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentContextMenuMenuControlMenuItemIndex(), conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
}
|
||
|
_populateButtonControl(context, buttonControl, control) {
|
||
|
this._populateControlProperties(context, buttonControl, control);
|
||
|
}
|
||
|
_populateControlAction(context, mosControl, control) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction])) {
|
||
|
let runtimeUrl = null;
|
||
|
let functionName = control[constants_1.Constants.InputAction][constants_1.Constants.InputFunctionName];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid])) {
|
||
|
runtimeUrl = control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid];
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(functionName)) {
|
||
|
runtimeUrl = context.getCurrentFunctionFileResid();
|
||
|
}
|
||
|
let runtime = null;
|
||
|
let runtimeLookupKey = Converter._generateRuntimeLookupKey(runtimeUrl, MOS.RuntimesLifetime.Short, context.getCurrentVersionOverrideCapabilities());
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtimeLookupKey)) {
|
||
|
runtime = this._runtimeLookup[runtimeLookupKey];
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(runtime)) {
|
||
|
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime), "Expected runtime to be cached.");
|
||
|
utilities_1.Utilities.logError("Did not find runtime. " + runtimeLookupKey);
|
||
|
return;
|
||
|
}
|
||
|
let actionId = constants_1.Constants.InputAction;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionName)) {
|
||
|
actionId = functionName;
|
||
|
}
|
||
|
else {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId])) {
|
||
|
actionId = control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId];
|
||
|
}
|
||
|
actionId = this._createUniqueActionId(actionId);
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
|
||
|
runtime.actions = [];
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid])) {
|
||
|
let action = new MOS.ExtensionRuntimesActionsItem();
|
||
|
action.id = actionId;
|
||
|
action.pinnable = control[constants_1.Constants.InputAction][constants_1.Constants.InputPinnable];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId])) {
|
||
|
action.view = this._createUniqueViewId(constants_1.Constants.MosView);
|
||
|
}
|
||
|
else {
|
||
|
action.view = control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId];
|
||
|
}
|
||
|
action.displayName = actionId;
|
||
|
action.type = MOS.ExtensionRuntimesActionsItemType.OpenPage;
|
||
|
utilities_1.Utilities.log("Adding ShowTaskpane action: " + action.id);
|
||
|
runtime.actions.push(action);
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputFunctionName])) {
|
||
|
let action = new MOS.ExtensionRuntimesActionsItem();
|
||
|
action.id = actionId;
|
||
|
action.displayName = actionId;
|
||
|
action.type = MOS.ExtensionRuntimesActionsItemType.ExecuteFunction;
|
||
|
utilities_1.Utilities.log("Adding ExecuteAction action: " + action.id);
|
||
|
runtime.actions.push(action);
|
||
|
}
|
||
|
mosControl[constants_1.Constants.MosActionId] = actionId;
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Expected action and sourceLocation in button or menu control.");
|
||
|
}
|
||
|
}
|
||
|
_controlTypeFromString(controlType) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(controlType)) {
|
||
|
switch (controlType) {
|
||
|
case constants_1.Constants.InputButton:
|
||
|
return MOS.ExtensionCommonCustomGroupControlsItemType.Button;
|
||
|
}
|
||
|
}
|
||
|
throw "unable to find control type:" + controlType;
|
||
|
}
|
||
|
_populateControlIcons(context, mosControlIcons, icons, iconResIds, isMenuItem) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(icons)) {
|
||
|
return;
|
||
|
}
|
||
|
let iconIdx = 0;
|
||
|
for (let size in icons) {
|
||
|
const url = icons[size];
|
||
|
const resId = iconResIds[size];
|
||
|
context.setCurrentIconIndex(iconIdx);
|
||
|
const mosIcon = new MOS.ExtensionCommonIcon();
|
||
|
let fileShortName = this._iconBuilder.addIconAndGetReference(url, !utilities_1.Utilities._writeImageUrls, false);
|
||
|
if (context.isInRibbon()) {
|
||
|
if (isMenuItem) {
|
||
|
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsControlsItemsIconsUrl : constants_1.Constants.RibbonsTabsGroupsControlsItemsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentControlIndex(), context.getCurrentMenuItemIndex(), context.getCurrentIconIndex());
|
||
|
}
|
||
|
else {
|
||
|
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsControlsIconsUrl : constants_1.Constants.RibbonsTabsGroupsControlsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentControlIndex(), context.getCurrentIconIndex());
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (isMenuItem) {
|
||
|
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.ContextMenusMenusControlsItemsIconsUrl : constants_1.Constants.ContextMenusMenusControlsItemsIconsFile, ResourceType.AllLocaleImages, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentContextMenuMenuControlMenuItemIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
else {
|
||
|
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.ContextMenusMenusControlsIconsUrl : constants_1.Constants.ContextMenusMenusControlsIconsFile, ResourceType.AllLocaleImages, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
|
||
|
}
|
||
|
}
|
||
|
mosIcon.url = fileShortName;
|
||
|
mosIcon.size = +size;
|
||
|
mosControlIcons.push(mosIcon);
|
||
|
iconIdx++;
|
||
|
}
|
||
|
}
|
||
|
_populateControlSupertip(context, mosControl, control) {
|
||
|
let supertip = control[constants_1.Constants.InputSupertip];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(supertip)) {
|
||
|
return;
|
||
|
}
|
||
|
let isRibbon = context.isInRibbon();
|
||
|
if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomGroupControlsItemType.Button) {
|
||
|
let mosButton = mosControl;
|
||
|
mosButton.supertip = new MOS.ExtensionCommonSuperToolTip();
|
||
|
mosButton.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsSupertipDescription);
|
||
|
mosButton.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsSupertipTitle);
|
||
|
}
|
||
|
else if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomControlMenuItemType.MenuItem) {
|
||
|
let mosMenuItem = mosControl;
|
||
|
mosMenuItem.supertip = new MOS.ExtensionCommonSuperToolTip();
|
||
|
mosMenuItem.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsItemsSupertipDescription);
|
||
|
mosMenuItem.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsItemsSupertipTitle);
|
||
|
}
|
||
|
else if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomControlMenuType.Menu) {
|
||
|
let mosMenu = mosControl;
|
||
|
mosMenu.supertip = new MOS.ExtensionCommonSuperToolTip();
|
||
|
mosMenu.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsSupertipDescription);
|
||
|
mosMenu.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsSupertipTitle);
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Unexpected control: " + control[constants_1.Constants.InputControlType]);
|
||
|
}
|
||
|
}
|
||
|
_addScopesFromHosts(requirements) {
|
||
|
requirements.scopes = [];
|
||
|
for (let host in this._xmlManifest.getHosts()) {
|
||
|
switch (this._xmlManifest.getHosts()[host]) {
|
||
|
case osfmos_1.OSF.ManifestHostType.Workbook:
|
||
|
requirements.scopes.push(MOS.Scopes.Workbook);
|
||
|
break;
|
||
|
case osfmos_1.OSF.ManifestHostType.Document:
|
||
|
requirements.scopes.push(MOS.Scopes.Document);
|
||
|
break;
|
||
|
case osfmos_1.OSF.ManifestHostType.Presentation:
|
||
|
requirements.scopes.push(MOS.Scopes.Presentation);
|
||
|
break;
|
||
|
case osfmos_1.OSF.ManifestHostType.Notebook:
|
||
|
utilities_1.Utilities.assert(false, "need to implement notebook scope");
|
||
|
break;
|
||
|
case osfmos_1.OSF.ManifestHostType.Mailbox:
|
||
|
requirements.scopes.push(MOS.Scopes.Mail);
|
||
|
break;
|
||
|
case osfmos_1.OSF.ManifestHostType.Drawing:
|
||
|
utilities_1.Utilities.assert(false, "need to implement drawing scope");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (requirements.scopes.length == 0) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._hostType) && this._xmlManifest.getTarget() == osfmos_1.OSF.OfficeAppType.MailApp) {
|
||
|
requirements.scopes.push(MOS.Scopes.Mail);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateRuntimes(context, extension) {
|
||
|
let runtimes = [];
|
||
|
let collectedRuntimeRecords = [];
|
||
|
this._collectRuntimes(context, collectedRuntimeRecords);
|
||
|
this._runtimeLookup = {};
|
||
|
this._createMosRuntimesFromRuntimeRecords(collectedRuntimeRecords, runtimes, this._runtimeLookup);
|
||
|
extension.runtimes = runtimes;
|
||
|
}
|
||
|
_createMosRuntimesFromRuntimeRecords(runtimeRecords, runtimes, runtimeLookup) {
|
||
|
if (this._xmlManifest.getTarget() != osfmos_1.OSF.OfficeAppType.TaskPaneApp && this._xmlManifest.getTarget() != osfmos_1.OSF.OfficeAppType.MailApp) {
|
||
|
return;
|
||
|
}
|
||
|
if (runtimeRecords.length == 0) {
|
||
|
console.error('\x1b[31m%s\x1b[0m', 'No supported runtime found in "' + utilities_1.Utilities._inputXmlFilePath + '", so the converted manifest is invalid. ' +
|
||
|
'Please note that some elements such as ContentPane and DetectedEntity are not supported by metaOS manifest.');
|
||
|
process.exitCode = 1;
|
||
|
}
|
||
|
let idxRuntime = -1;
|
||
|
for (let idxRuntimeRecord = 0; idxRuntimeRecord < runtimeRecords.length; idxRuntimeRecord++) {
|
||
|
let runtimeRecord = runtimeRecords[idxRuntimeRecord];
|
||
|
let key = runtimeRecord.getKey();
|
||
|
let runtime = runtimeLookup[key];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(runtime)) {
|
||
|
runtime = new MOS.Runtimes();
|
||
|
idxRuntime++;
|
||
|
runtime.id = "runtime_" + this.getNextRuntimeSuffix();
|
||
|
runtime.requirements = Converter._cloneRequirements(runtimeRecord._requirements);
|
||
|
runtime.requirements.capabilities = runtimeRecord._versionOverrideCapabilities;
|
||
|
runtime.type = MOS.RuntimesType.General;
|
||
|
runtime.lifetime = runtimeRecord._lifetime;
|
||
|
if (runtimeRecord._source == RuntimeSource.ShowTaskpane ||
|
||
|
runtimeRecord._source == RuntimeSource.ExecuteFunction ||
|
||
|
runtimeRecord._source == RuntimeSource.SharedRuntimes ||
|
||
|
runtimeRecord._source == RuntimeSource.LaunchEvent) {
|
||
|
runtime.code.page = this._getResourceAndWriteLocalizedValues(runtimeRecord._resource, null, constants_1.Constants.MaxResourceStringLength2048, runtimeRecord._versionOverridesNumber, constants_1.Constants.RuntimesPage, ResourceType.AllLocaleUrls, idxRuntime);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtimeRecord._scriptResId)) {
|
||
|
runtime.code.script = this._getResourceAndWriteLocalizedValues(runtimeRecord._scriptResId, null, constants_1.Constants.MaxResourceStringLength2048, runtimeRecord._versionOverridesNumber, constants_1.Constants.RuntimesScript, ResourceType.AllLocaleUrls, idxRuntime);
|
||
|
}
|
||
|
}
|
||
|
else if (runtimeRecord._source == RuntimeSource.DefaultSettingSourceLocations) {
|
||
|
runtime.code.page = runtimeRecord._localeResources[this._xmlManifest.getDefaultLocale()];
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Unrecognized runtimerecord._source: " + runtimeRecord._source + "runtime.source: " + runtimeRecord._source);
|
||
|
}
|
||
|
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime.code.page), "runtime.code.page should not be null");
|
||
|
runtimes.push(runtime);
|
||
|
runtimeLookup[key] = runtime;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtimeRecord._localeResources)) {
|
||
|
for (let locale in runtimeRecord._localeResources) {
|
||
|
if (locale == this._xmlManifest.getDefaultLocale()) {
|
||
|
continue;
|
||
|
}
|
||
|
let resourceTemplate = "";
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtime.code.page)) {
|
||
|
resourceTemplate = constants_1.Constants.RuntimesPage;
|
||
|
let resourceName = util.format(resourceTemplate, idxRuntime);
|
||
|
this._localeBuilder.addLocaleString(locale, resourceName, runtimeRecord._localeResources[locale]);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtime.code.script)) {
|
||
|
resourceTemplate = constants_1.Constants.RuntimesScript;
|
||
|
let resourceName = util.format(resourceTemplate, idxRuntime);
|
||
|
this._localeBuilder.addLocaleString(locale, resourceName, runtimeRecord._localeResources[locale]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_collectRuntimes(context, collectedRuntimes) {
|
||
|
for (let formFactor in osfmos_1.OSF.FormFactor) {
|
||
|
try {
|
||
|
let formFactorsSourceLocation = this._xmlManifest.getDefaultSourceLocation(formFactor);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(formFactorsSourceLocation)) {
|
||
|
this._addRuntimeForFormFactor(collectedRuntimes, formFactor, formFactorsSourceLocation);
|
||
|
}
|
||
|
}
|
||
|
catch (_a) {
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
for (let manifestHostType in osfmos_1.OSF.ManifestHostType) {
|
||
|
if (manifestHostType === osfmos_1.OSF.ManifestHostType.Mailbox ||
|
||
|
manifestHostType === osfmos_1.OSF.ManifestHostType.Document ||
|
||
|
manifestHostType === osfmos_1.OSF.ManifestHostType.Presentation ||
|
||
|
manifestHostType === osfmos_1.OSF.ManifestHostType.Workbook) {
|
||
|
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType])) {
|
||
|
if (Converter._isWXP(hostType)) {
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, osfmos_1.OSF.VersionOverridesNumber.V1_0.toString());
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType]._runtimes)) {
|
||
|
this._collectRuntimeRecordsFromRuntimes(context, collectedRuntimes, this._xmlManifest._versionOverrides[hostType]._runtimes, manifestHostType, RuntimeSource.SharedRuntimes);
|
||
|
}
|
||
|
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, null, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
|
||
|
let functionFileResid = Converter._getFunctionFileResid(hostType, null, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid)) {
|
||
|
this._collectRuntimesFromFunctionFiles(context, functionFileResid, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
|
||
|
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPoints, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
else if (hostType === constants_1.Constants.InputMailHost) {
|
||
|
let supportedVersionOverrides = Converter._getMailHostVersionOVerrides();
|
||
|
for (let vo of supportedVersionOverrides) {
|
||
|
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, vo);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType][vo])) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType][vo]._runtimes)) {
|
||
|
this._collectRuntimeRecordsFromRuntimes(context, collectedRuntimes, this._xmlManifest._versionOverrides[hostType][vo]._runtimes, manifestHostType, RuntimeSource.SharedRuntimes);
|
||
|
}
|
||
|
let addinCommandsExtensionPointsVersionsDesktop = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
|
||
|
let addinCommandsExtensionPointsVersionsMobile = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputMobileFormFactor, this._xmlManifest);
|
||
|
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion)) {
|
||
|
this._collectRuntimesFromFunctionFiles(context, functionFileResidVersion, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsVersionsDesktop)) {
|
||
|
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPointsVersionsDesktop, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsVersionsMobile)) {
|
||
|
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPointsVersionsMobile, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPoints, collectedRuntimes, manifestHostType) {
|
||
|
for (let extensionPointIdx = 0; extensionPointIdx < addinCommandsExtensionPoints.length; extensionPointIdx++) {
|
||
|
let extensionPoint = addinCommandsExtensionPoints[extensionPointIdx];
|
||
|
if (Converter._isRibbonCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputTabs])) {
|
||
|
for (let tabIdx = 0; tabIdx < extensionPoint[constants_1.Constants.InputTabs].length; tabIdx++) {
|
||
|
var tab = extensionPoint[constants_1.Constants.InputTabs][tabIdx];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(tab[constants_1.Constants.InputChildren])) {
|
||
|
for (let groupIdx = 0; groupIdx < tab[constants_1.Constants.InputChildren].length; groupIdx++) {
|
||
|
var group = tab[constants_1.Constants.InputChildren][groupIdx];
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(group) && !utilities_1.Utilities.isNullOrUndefined(group[constants_1.Constants.InputChildren])) {
|
||
|
this._collectRuntimeRecordsFromActions(context, collectedRuntimes, group[constants_1.Constants.InputChildren], manifestHostType);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (Converter._isMobileCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
|
||
|
var control;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputGroup]) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl])) {
|
||
|
control = extensionPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl];
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputControl])) {
|
||
|
control = extensionPoint[constants_1.Constants.InputControl];
|
||
|
}
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(control)) {
|
||
|
utilities_1.Utilities.logError("Unable to find <Control> inside of mobile form factor.");
|
||
|
continue;
|
||
|
}
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
if (control.actionType == constants_1.Constants.InputShowTaskpane &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(control.action.sourceLocationResid)) {
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, control.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
|
||
|
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
|
||
|
}
|
||
|
}
|
||
|
else if (Converter._isContextMenuCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputChildren])) {
|
||
|
for (let menuNodeIdx = 0; menuNodeIdx < extensionPoint[constants_1.Constants.InputChildren].length; menuNodeIdx++) {
|
||
|
const menuNode = extensionPoint[constants_1.Constants.InputChildren][menuNodeIdx];
|
||
|
for (let menuControlIdx = 0; menuControlIdx < menuNode[constants_1.Constants.InputChildren].length; menuControlIdx++) {
|
||
|
const menuControl = menuNode[constants_1.Constants.InputChildren][menuControlIdx];
|
||
|
this._collectRuntimeRecordsFromActions(context, collectedRuntimes, menuControl[constants_1.Constants.InputChildren], manifestHostType);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (extensionPoint[constants_1.Constants.InputType] === constants_1.Constants.InputLaunchEvent) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputResid])) {
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, extensionPoint[constants_1.Constants.InputResid], requirements, RuntimeSource.LaunchEvent, manifestHostType);
|
||
|
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logWarning("LaunchEvent extension point does not have SourceLocation with resid.");
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.log("Skipping extension point %s for runtime collection.", extensionPoint[constants_1.Constants.InputType]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_collectRuntimesFromFunctionFiles(context, functionFileResid, collectedRuntimes, manifestHostType) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid)) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputDesktopFormFactor])) {
|
||
|
this._addRuntimeRecordForFunctionFileFormFactor(context, functionFileResid[constants_1.Constants.InputDesktopFormFactor], constants_1.Constants.InputDesktopFormFactor, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputMobileFormFactor])) {
|
||
|
this._addRuntimeRecordForFunctionFileFormFactor(context, functionFileResid[constants_1.Constants.InputMobileFormFactor], constants_1.Constants.InputMobileFormFactor, collectedRuntimes, manifestHostType);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_addRuntimeRecordForFunctionFileFormFactor(context, resid, formFactor, collectedRuntimes, manifestHostType) {
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
requirements.formFactors = [];
|
||
|
requirements.formFactors.push(Converter._legacyFormFactorToMOSFormFactor(formFactor));
|
||
|
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, resid, requirements, RuntimeSource.ExecuteFunction, manifestHostType);
|
||
|
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
|
||
|
}
|
||
|
static _legacyFormFactorToMOSFormFactor(formFactor) {
|
||
|
switch (formFactor) {
|
||
|
case constants_1.Constants.InputDesktopFormFactor:
|
||
|
return MOS.FormFactors.Desktop;
|
||
|
case constants_1.Constants.InputMobileFormFactor:
|
||
|
return MOS.FormFactors.Mobile;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unrecognized formfactor: " + formFactor);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
static _isRibbonCommandSurface(commandSurface) {
|
||
|
return commandSurface === constants_1.Constants.InputPrimaryCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMessageComposeCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMessageReadCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputAppointmentOrganizerCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputAppointmentAttendeeCommandSurface;
|
||
|
}
|
||
|
static _isContextMenuCommandSurface(commandSurface) {
|
||
|
return commandSurface === constants_1.Constants.InputContextMenuCommandSurface;
|
||
|
}
|
||
|
static _isMobileCommandSurface(commandSurface) {
|
||
|
return commandSurface === constants_1.Constants.InputMobileMessageReadCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMobileMessageComposeCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMobileAppointmentOrganizerCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMobileOnlineMeetingCommandSurface ||
|
||
|
commandSurface === constants_1.Constants.InputMobileLogEventAppointmentAttendee;
|
||
|
}
|
||
|
static _getRibbonContextFromCommandSurface(commandSurface) {
|
||
|
switch (commandSurface) {
|
||
|
case constants_1.Constants.InputPrimaryCommandSurface:
|
||
|
return MOS.Contexts.Default;
|
||
|
case constants_1.Constants.InputMessageComposeCommandSurface:
|
||
|
return MOS.Contexts.MailCompose;
|
||
|
case constants_1.Constants.InputMessageReadCommandSurface:
|
||
|
return MOS.Contexts.MailRead;
|
||
|
case constants_1.Constants.InputAppointmentOrganizerCommandSurface:
|
||
|
return MOS.Contexts.MeetingDetailsOrganizer;
|
||
|
case constants_1.Constants.InputAppointmentAttendeeCommandSurface:
|
||
|
return MOS.Contexts.MeetingDetailsAttendee;
|
||
|
case constants_1.Constants.InputMobileLogEventAppointmentAttendee:
|
||
|
return MOS.Contexts.LogEventMeetingDetailsAttendee;
|
||
|
case constants_1.Constants.InputMobileMessageReadCommandSurface:
|
||
|
case constants_1.Constants.InputMobileMessageComposeCommandSurface:
|
||
|
return MOS.Contexts.Default;
|
||
|
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
|
||
|
return MOS.Contexts.MeetingDetailsAttendee;
|
||
|
case constants_1.Constants.InputMobileAppointmentOrganizerCommandSurface:
|
||
|
return MOS.Contexts.MeetingDetailsOrganizer;
|
||
|
case constants_1.Constants.InputMobileOnlineMeetingCommandSurface:
|
||
|
return MOS.Contexts.OnlineMeetingDetailsOrganizer;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unsupported command surface: " + commandSurface);
|
||
|
return MOS.Contexts.Default;
|
||
|
}
|
||
|
}
|
||
|
static _getFunctionFileResid(versionOverrideHostIndex, versionOverrideIndex, xmlManifest) {
|
||
|
let functionFileResid = null;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex])) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) && !utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputFunctionFileResid])) {
|
||
|
functionFileResid = xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputFunctionFileResid];
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex]) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputFunctionFileResid])) {
|
||
|
functionFileResid = xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputFunctionFileResid];
|
||
|
}
|
||
|
}
|
||
|
return functionFileResid;
|
||
|
}
|
||
|
static _getAddinCommandsExtensionPoints(versionOverrideHostIndex, versionOverrideIndex, formFactor, xmlManifest) {
|
||
|
let addinCommandsExtensionPoints = null;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex])) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) && !utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputAddinCommandsExtensionPoints])) {
|
||
|
addinCommandsExtensionPoints = xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor];
|
||
|
}
|
||
|
else if (!utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex]) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints] &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor]))) {
|
||
|
addinCommandsExtensionPoints = xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor];
|
||
|
}
|
||
|
}
|
||
|
return addinCommandsExtensionPoints;
|
||
|
}
|
||
|
static _cloneRequirements(requirements) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(requirements)) {
|
||
|
return null;
|
||
|
}
|
||
|
let req = new MOS.RequirementsExtensionElement();
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(requirements.capabilities)) {
|
||
|
req.capabilities = undefined;
|
||
|
}
|
||
|
else {
|
||
|
req.capabilities = Converter._cloneCapabilities(requirements.capabilities);
|
||
|
}
|
||
|
req.formFactors = !utilities_1.Utilities.isNullOrUndefined(requirements.formFactors) ? requirements.formFactors.map((x) => x) : undefined;
|
||
|
req.formFactors = !utilities_1.Utilities.isNullOrUndefined(requirements.formFactors) ? requirements.formFactors.map((x) => x) : undefined;
|
||
|
req.scopes = !utilities_1.Utilities.isNullOrUndefined(requirements.scopes) ? requirements.scopes.map((x) => x) : undefined;
|
||
|
return req;
|
||
|
}
|
||
|
static _cloneCapabilities(capabilities) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
|
||
|
return undefined;
|
||
|
}
|
||
|
let caps = [];
|
||
|
for (let i = 0; i < capabilities.length; i++) {
|
||
|
let capability = capabilities[i];
|
||
|
let cap = new MOS.Capabilities();
|
||
|
cap.name = capability.name;
|
||
|
cap.minVersion = capability.minVersion;
|
||
|
cap.maxVersion = capability.maxVersion;
|
||
|
caps.push(cap);
|
||
|
}
|
||
|
return caps;
|
||
|
}
|
||
|
_addRuntimeForFormFactor(runtimeRecords, formFactor, sourceLocation) {
|
||
|
let runtimeRecord = this._createRuntimeRecord(null, sourceLocation, new MOS.RequirementsExtensionElement(), RuntimeSource.DefaultSettingSourceLocations, null);
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
let localeSourceLocation = this._xmlManifest.getSourceLocation(seenLocale, formFactor);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(localeSourceLocation)) {
|
||
|
runtimeRecord._localeResources[seenLocale] = localeSourceLocation;
|
||
|
}
|
||
|
}
|
||
|
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
|
||
|
}
|
||
|
_collectRuntimeRecordsFromRuntimes(context, runtimeRecords, runtimes, manifestHostType, source) {
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
for (let idx = 0; idx < runtimes.getRuntimes().length; idx++) {
|
||
|
let runtime = runtimes.getRuntimes()[idx];
|
||
|
let scriptResId;
|
||
|
let lifetime = MOS.RuntimesLifetime.Short;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(runtime.Overrides)) {
|
||
|
for (let override of runtime.Overrides) {
|
||
|
if (override.Type === "javascript") {
|
||
|
scriptResId = override.Resid;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (runtime.LifeTime === InputRuntimeLifeTime.Long) {
|
||
|
lifetime = MOS.RuntimesLifetime.Long;
|
||
|
}
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, runtime.Resid, requirements, source, manifestHostType, scriptResId, lifetime);
|
||
|
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
|
||
|
}
|
||
|
}
|
||
|
_collectRuntimeRecordsFromActions(context, runtimeRecords, controls, manifestHostType) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(controls === null || controls === void 0 ? void 0 : controls.length))
|
||
|
return;
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
for (let idx = 0; idx < controls.length; idx++) {
|
||
|
let control = controls[idx];
|
||
|
if (control.actionType !== constants_1.Constants.InputShowTaskpane && control.controlType !== constants_1.Constants.InputMenu) {
|
||
|
continue;
|
||
|
}
|
||
|
switch (control.controlType) {
|
||
|
case constants_1.Constants.InputButton:
|
||
|
case constants_1.Constants.InputMenuItem:
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, control.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
|
||
|
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
|
||
|
break;
|
||
|
case constants_1.Constants.InputMenu:
|
||
|
for (let menuIdx = 0; menuIdx < control.children.length; menuIdx++) {
|
||
|
let menuControl = control.children[menuIdx];
|
||
|
if (menuControl.actionType === constants_1.Constants.InputShowTaskpane) {
|
||
|
let runtimeRecord = this._createRuntimeRecord(context, menuControl.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
|
||
|
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_createRuntimeRecord(context, resource, requirements, source, manifestHostType, scriptResId = null, lifetime = MOS.RuntimesLifetime.Short) {
|
||
|
let runtimeRecord = new RuntimeRecord();
|
||
|
runtimeRecord._resource = resource;
|
||
|
runtimeRecord._requirements = requirements;
|
||
|
runtimeRecord._source = source;
|
||
|
runtimeRecord._manifestHostType = manifestHostType;
|
||
|
runtimeRecord._localeResources = {};
|
||
|
runtimeRecord._lifetime = lifetime;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(scriptResId)) {
|
||
|
runtimeRecord._scriptResId = scriptResId;
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(context)) {
|
||
|
runtimeRecord._versionOverridesNumber = context.getCurrentVersionOverrideNumber();
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(context) && !utilities_1.Utilities.isNullOrUndefined(context.getCurrentVersionOverrideCapabilities())) {
|
||
|
runtimeRecord._versionOverrideCapabilities = context.getCurrentVersionOverrideCapabilities();
|
||
|
}
|
||
|
return runtimeRecord;
|
||
|
}
|
||
|
_addRuntimeRecord(runtimeRecord, runtimeRecords) {
|
||
|
utilities_1.Utilities.log("Adding runtime record: " + runtimeRecord._resource);
|
||
|
runtimeRecords.push(runtimeRecord);
|
||
|
}
|
||
|
_populateRootRequirements() {
|
||
|
}
|
||
|
_populateLocaleSensitiveProperty(propertyGetter, mosPropertyName, maxLength) {
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale();
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale != defaultLocale) {
|
||
|
utilities_1.Utilities.log("handling %s for locale: %s", mosPropertyName, seenLocale);
|
||
|
let localizedPropertyValue = propertyGetter.apply(this._xmlManifest, [seenLocale]);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(localizedPropertyValue)) {
|
||
|
let finalValue = localizedPropertyValue;
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(maxLength)) {
|
||
|
finalValue = utilities_1.Utilities.getLimitedString(localizedPropertyValue, maxLength, mosPropertyName + " truncated to %d characters in localized file " + seenLocale);
|
||
|
}
|
||
|
this._localeBuilder.addLocaleString(seenLocale, mosPropertyName, finalValue);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateValidDomains() {
|
||
|
const appDomains = this._xmlManifest.getAppDomains();
|
||
|
this._mosManifest.validDomains = [];
|
||
|
for (let domain of appDomains) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(domain)) {
|
||
|
this._mosManifest.validDomains.push(domain);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_populateStaticTabs() {
|
||
|
}
|
||
|
_populateComposeExtensions() {
|
||
|
}
|
||
|
_populateGraphConnector() {
|
||
|
}
|
||
|
_populateConfigurableTabs() {
|
||
|
}
|
||
|
_populateBots() {
|
||
|
}
|
||
|
_populateConnectors() {
|
||
|
}
|
||
|
_populateActivities() {
|
||
|
}
|
||
|
_populateMeetingExtensionDefinition() {
|
||
|
}
|
||
|
_populateSubscriptionOffer() {
|
||
|
}
|
||
|
_populateShowLoadingIndicator() {
|
||
|
}
|
||
|
_populateIsFullScreen() {
|
||
|
}
|
||
|
_populateConfigurableProperties() {
|
||
|
}
|
||
|
_populateDefaultBlockUntilAdminAction() {
|
||
|
}
|
||
|
_populatePublisherDocsUrl() {
|
||
|
}
|
||
|
_populateDefaultInstallScope() {
|
||
|
}
|
||
|
_populateDefaultGroupCapability() {
|
||
|
}
|
||
|
getOfficeAppManifest() {
|
||
|
return this._xmlManifest;
|
||
|
}
|
||
|
getJSON() {
|
||
|
return this._mosManifest.toJSON();
|
||
|
}
|
||
|
_getMailHostOverrides() {
|
||
|
let overrides = [];
|
||
|
for (let overrideVersion in this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost]) {
|
||
|
overrides.unshift(overrideVersion);
|
||
|
}
|
||
|
return overrides;
|
||
|
}
|
||
|
_doesHostHaveContentInManifest(manifestHostType) {
|
||
|
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
|
||
|
return !utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType]);
|
||
|
}
|
||
|
_getResourceAndWriteLocalizedValues(resId, defaultValue, maxLength, versionOverridesNumber, resourceTemplate, resourceType, index1 = undefined, index2 = undefined, index3 = undefined, index4 = undefined, index5 = undefined, index6 = undefined) {
|
||
|
let resources = this._xmlManifest.getResources(versionOverridesNumber);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(resources)) {
|
||
|
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
|
||
|
}
|
||
|
let allLocaleResources = resources[resourceType];
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(allLocaleResources)) {
|
||
|
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
|
||
|
}
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId]) || utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId][defaultLocale])) {
|
||
|
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
|
||
|
}
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale !== defaultLocale && !utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId][seenLocale])) {
|
||
|
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(resourceTemplate, index1, index2, index3, index4, index5, index6);
|
||
|
if (resourceType === ResourceType.AllLocaleImages) {
|
||
|
const packageReference = this._iconBuilder.addIconAndGetReference(allLocaleResources[resId][seenLocale], !utilities_1.Utilities._writeImageUrls, false);
|
||
|
this._localeBuilder.addLocaleString(seenLocale, formattedValue, packageReference);
|
||
|
}
|
||
|
else {
|
||
|
this._localeBuilder.addLocaleString(seenLocale, formattedValue, allLocaleResources[resId][seenLocale]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const valueObtained = utilities_1.Utilities.isNullOrUndefined(defaultValue) ? allLocaleResources[resId][defaultLocale] : defaultValue;
|
||
|
return (maxLength == constants_1.Constants.MaxResourceStringLengthAny) ? valueObtained : utilities_1.Utilities.truncateString(valueObtained, maxLength);
|
||
|
}
|
||
|
_addConstantResourceForAllSeenLocales(value, resourceTemplate, index1, index2, index3, index4, index5, index6) {
|
||
|
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
|
||
|
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
|
||
|
if (seenLocale !== defaultLocale) {
|
||
|
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(resourceTemplate, index1, index2, index3, index4, index5, index6);
|
||
|
this._localeBuilder.addLocaleString(seenLocale, formattedValue, value);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
static _incrementCurrentRibbonIndex(context) {
|
||
|
if (context.getCurrentRibbonIndex() === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
context.setCurrentRibbonIndex(0);
|
||
|
}
|
||
|
else {
|
||
|
context.setCurrentRibbonIndex(context.getCurrentRibbonIndex() + 1);
|
||
|
}
|
||
|
}
|
||
|
static _formatResourceStringWithVariableNumberParameters(resourceTemplate, index1 = undefined, index2 = undefined, index3 = undefined, index4 = undefined, index5 = undefined, index6 = undefined) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(index1) || index1 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return resourceTemplate;
|
||
|
}
|
||
|
else if (utilities_1.Utilities.isNullOrUndefined(index2) || index2 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return util.format(resourceTemplate, index1);
|
||
|
}
|
||
|
else if (utilities_1.Utilities.isNullOrUndefined(index3) || index3 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return util.format(resourceTemplate, index1, index2);
|
||
|
}
|
||
|
else if (utilities_1.Utilities.isNullOrUndefined(index4) || index4 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return util.format(resourceTemplate, index1, index2, index3);
|
||
|
}
|
||
|
else if (utilities_1.Utilities.isNullOrUndefined(index5) || index5 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return util.format(resourceTemplate, index1, index2, index3, index4);
|
||
|
}
|
||
|
else if (utilities_1.Utilities.isNullOrUndefined(index6) || index6 === conversionContext_1.ConversionContext.UnsetIndex) {
|
||
|
return util.format(resourceTemplate, index1, index2, index3, index4, index5);
|
||
|
}
|
||
|
else {
|
||
|
return util.format(resourceTemplate, index1, index2, index3, index4, index5, index6);
|
||
|
}
|
||
|
}
|
||
|
_addRuntimeExecuteAction(runtime, action, runtimeKey) {
|
||
|
utilities_1.Utilities.assert(action.type == MOS.ExtensionRuntimesActionsItemType.ExecuteFunction, "Expected an executeFunction type of action.");
|
||
|
const runtimeActionKey = Converter._generateExecuteActionKey(runtimeKey, action.id);
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(this._addedExecuteFunctions[runtimeActionKey]) || !this._addedExecuteFunctions[runtimeActionKey]) {
|
||
|
runtime.actions.push(action);
|
||
|
this._addedExecuteFunctions[runtimeActionKey] = true;
|
||
|
utilities_1.Utilities.log("Added action %s for key: %s", action.id, runtimeActionKey);
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.log("Skipped adding action %s for key: %s because an identical one already exists.", action.id, runtimeActionKey);
|
||
|
}
|
||
|
}
|
||
|
static _getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType) {
|
||
|
switch (manifestHostType) {
|
||
|
case osfmos_1.OSF.ManifestHostType.Document:
|
||
|
return constants_1.Constants.InputDocument;
|
||
|
case osfmos_1.OSF.ManifestHostType.Workbook:
|
||
|
return constants_1.Constants.InputWorkbook;
|
||
|
case osfmos_1.OSF.ManifestHostType.Presentation:
|
||
|
return constants_1.Constants.InputPresentation;
|
||
|
case osfmos_1.OSF.ManifestHostType.Mailbox:
|
||
|
return constants_1.Constants.InputMailHost;
|
||
|
default:
|
||
|
throw "unsupported manifest host type: " + manifestHostType;
|
||
|
}
|
||
|
}
|
||
|
static _getCapabilityVersionFromNumericVersion(overrideText) {
|
||
|
switch (overrideText) {
|
||
|
case osfmos_1.OSF.VersionOverridesNumber.V1_0.toString():
|
||
|
return constants_1.Constants.MosV100;
|
||
|
case osfmos_1.OSF.VersionOverridesNumber.V1_1.toString():
|
||
|
return constants_1.Constants.MosV101;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unrecognized override version: " + overrideText);
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
static _getNumericOverrideVersionFromString(overrideText) {
|
||
|
switch (overrideText) {
|
||
|
case osfmos_1.OSF.VersionOverridesNumber.V1_0.toString():
|
||
|
return osfmos_1.OSF.VersionOverridesNumber.V1_0;
|
||
|
case osfmos_1.OSF.VersionOverridesNumber.V1_1.toString():
|
||
|
return osfmos_1.OSF.VersionOverridesNumber.V1_1;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unrecognized override version: " + overrideText);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
static _getRequirementsScopeFromManifestHostType(manifestHostType) {
|
||
|
switch (manifestHostType) {
|
||
|
case osfmos_1.OSF.ManifestHostType.Mailbox:
|
||
|
return MOS.Scopes.Mail;
|
||
|
case osfmos_1.OSF.ManifestHostType.Workbook:
|
||
|
return MOS.Scopes.Workbook;
|
||
|
case osfmos_1.OSF.ManifestHostType.Document:
|
||
|
return MOS.Scopes.Document;
|
||
|
case osfmos_1.OSF.ManifestHostType.Presentation:
|
||
|
return MOS.Scopes.Presentation;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unsupported manifestHostType " + manifestHostType);
|
||
|
}
|
||
|
}
|
||
|
static _mosSendModeFromXmlSendMode(sendMode) {
|
||
|
switch (sendMode.toLowerCase()) {
|
||
|
case constants_1.Constants.InputSendModeBlock:
|
||
|
return MOS.OptionsSendMode.Block;
|
||
|
case constants_1.Constants.InputSendModePromptUser:
|
||
|
return MOS.OptionsSendMode.PromptUser;
|
||
|
case constants_1.Constants.InputSendModeSoftBlock:
|
||
|
return MOS.OptionsSendMode.SoftBlock;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unsupported sendMode: '%s'. Setting to null.", sendMode);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
static _mosPermissionfromXmlPermission(permission, appType) {
|
||
|
if (appType === osfmos_1.OSF.OfficeAppType.ContentApp || appType === osfmos_1.OSF.OfficeAppType.TaskPaneApp) {
|
||
|
switch (permission) {
|
||
|
case osfmos_1.OSF.OsfControlPermission.Restricted:
|
||
|
return constants_1.Constants.DocumentRestrictedUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadDocument:
|
||
|
return constants_1.Constants.DocumentReadUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.WriteDocument:
|
||
|
return constants_1.Constants.DocumentWriteUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadAllDocument:
|
||
|
return constants_1.Constants.DocumentReadAllUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadWriteDocument:
|
||
|
return constants_1.Constants.DocumentReadWriteUser;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unknown <Permission> found for ContentApp/TaskpaneApp: " + permission);
|
||
|
}
|
||
|
}
|
||
|
else if (appType === osfmos_1.OSF.OfficeAppType.MailApp) {
|
||
|
switch (permission) {
|
||
|
case osfmos_1.OSF.OsfControlPermission.Restricted:
|
||
|
return constants_1.Constants.MailboxItemRestrictedUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadItem:
|
||
|
return constants_1.Constants.MailboxItemReadUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadWriteItem:
|
||
|
return constants_1.Constants.MailboxItemReadWriteUser;
|
||
|
case osfmos_1.OSF.OsfControlPermission.ReadWriteMailbox:
|
||
|
return constants_1.Constants.MailboxReadWriteUser;
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unknown <Permission> found for MailApp: " + permission);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
static _setVersionOverrideNumberAndCapabilitiesInContext(context, xmlManifest, hostType, versionOverridesIndex) {
|
||
|
let capabilities = null;
|
||
|
let versionOverride = null;
|
||
|
let versionOverrideIndexNumeric = null;
|
||
|
if (Converter._isWXP(hostType)) {
|
||
|
versionOverride = xmlManifest._versionOverrides[hostType];
|
||
|
}
|
||
|
else {
|
||
|
versionOverride = xmlManifest._versionOverrides[hostType][versionOverridesIndex];
|
||
|
versionOverrideIndexNumeric = Converter._getNumericOverrideVersionFromString(versionOverridesIndex);
|
||
|
}
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(versionOverride) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(versionOverride[constants_1.Constants.InputRequirements]) &&
|
||
|
!utilities_1.Utilities.isNullOrUndefined(versionOverride[constants_1.Constants.InputRequirements][constants_1.Constants.InputSets])) {
|
||
|
capabilities = Converter._getCapabilitiesFromLegacyRequirementSets(versionOverride[constants_1.Constants.InputRequirements][constants_1.Constants.InputSets]);
|
||
|
}
|
||
|
let capability = this._getImplicitCapabilityBasedOnVersionOverrideForHost(hostType, versionOverridesIndex);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(capability)) {
|
||
|
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
|
||
|
capabilities = [];
|
||
|
}
|
||
|
capabilities.push(capability);
|
||
|
}
|
||
|
let requirements = new MOS.RequirementsExtensionElement();
|
||
|
Converter._mergeInVersionOverrideRequirements(capabilities, requirements);
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(versionOverride)) {
|
||
|
context.setCurrentVersionOverrideAndCapabilities(versionOverrideIndexNumeric, requirements.capabilities);
|
||
|
}
|
||
|
}
|
||
|
static _clearVersionOverrideNumberAndCapabilitiesInContext(context) {
|
||
|
context.setCurrentVersionOverrideAndCapabilities(null, null);
|
||
|
}
|
||
|
static _legacyLaunchEventToMosEventType(legacyEventType) {
|
||
|
switch (legacyEventType) {
|
||
|
case "OnNewMessageCompose":
|
||
|
return "newMessageComposeCreated";
|
||
|
case "OnNewAppointmentOrganizer":
|
||
|
return "newAppointmentOrganizerCreated";
|
||
|
case "OnMessageAttachmentsChanged":
|
||
|
return "messageAttachmentsChanged";
|
||
|
case "OnAppointmentAttachmentsChanged":
|
||
|
return "appointmentAttachmentsChanged";
|
||
|
case "OnMessageRecipientsChanged":
|
||
|
return "messageRecipientsChanged";
|
||
|
case "OnAppointmentAttendeesChanged":
|
||
|
return "appointmentAttendeesChanged";
|
||
|
case "OnAppointmentTimeChanged":
|
||
|
return "appointmentTimeChanged";
|
||
|
case "OnAppointmentRecurrenceChanged":
|
||
|
return "appointmentRecurrenceChanged";
|
||
|
case "OnInfoBarDismissClicked":
|
||
|
return "infoBarDismissClicked";
|
||
|
case "OnMessageSend":
|
||
|
return "messageSending";
|
||
|
case "OnAppointmentSend":
|
||
|
return "appointmentSending";
|
||
|
case "OnOpenDocument":
|
||
|
return "documentOpen";
|
||
|
case "OnMessageCompose":
|
||
|
return "messageComposeOpened";
|
||
|
case "OnAppointmentOrganizer":
|
||
|
return "appointmentOrganizerOpened";
|
||
|
default:
|
||
|
utilities_1.Utilities.logError("Unrecognized autorun even type: " + legacyEventType);
|
||
|
}
|
||
|
return legacyEventType;
|
||
|
}
|
||
|
static _generateExecuteActionKey(runtimeKey, actionId) {
|
||
|
return runtimeKey + actionId;
|
||
|
}
|
||
|
static _generateRuntimeLookupKey(url, lifetime, capabilities) {
|
||
|
let resultKey = url + lifetime.toString();
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(capabilities)) {
|
||
|
Converter._sortCapabilitiesAlphabatically(capabilities);
|
||
|
for (let capability of capabilities) {
|
||
|
resultKey = resultKey + (capability.name + capability.minVersion);
|
||
|
}
|
||
|
}
|
||
|
return resultKey;
|
||
|
}
|
||
|
static _sortCapabilitiesAlphabatically(capabilities) {
|
||
|
if (!utilities_1.Utilities.isNullOrUndefined(capabilities)) {
|
||
|
capabilities.sort(function (c1, c2) {
|
||
|
if (c1.name < c2.name) {
|
||
|
return -1;
|
||
|
}
|
||
|
if (c1.name > c2.name) {
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
static _getImplicitCapabilityBasedOnVersionOverrideForHost(hostType, versionOverridesIndex) {
|
||
|
let capability = null;
|
||
|
if (hostType === constants_1.Constants.InputMailHost) {
|
||
|
if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_0.toString()) {
|
||
|
capability = new MOS.Capabilities();
|
||
|
capability.name = constants_1.Constants.InputMailBoxCapability;
|
||
|
capability.minVersion = "1.3";
|
||
|
}
|
||
|
else if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_1.toString()) {
|
||
|
capability = new MOS.Capabilities();
|
||
|
capability.name = constants_1.Constants.InputMailBoxCapability;
|
||
|
capability.minVersion = "1.5";
|
||
|
}
|
||
|
}
|
||
|
else if (Converter._isWXP(hostType)) {
|
||
|
if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_0.toString()) {
|
||
|
capability = new MOS.Capabilities();
|
||
|
capability.name = constants_1.Constants.InputAddinCommandCapability;
|
||
|
capability.minVersion = "1.1";
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
utilities_1.Utilities.logError("Skipping adding VersionOverride capability for the host as unsupported host type: %s", hostType);
|
||
|
}
|
||
|
return capability;
|
||
|
}
|
||
|
static _isWXP(hostType) {
|
||
|
return (hostType === constants_1.Constants.InputDocument ||
|
||
|
hostType === constants_1.Constants.InputPresentation ||
|
||
|
hostType === constants_1.Constants.InputWorkbook);
|
||
|
}
|
||
|
static _getMailHostVersionOVerrides() {
|
||
|
let versionOverrides = [];
|
||
|
const values = Object.values(osfmos_1.OSF.VersionOverridesNumber);
|
||
|
values.slice().reverse().forEach(value => {
|
||
|
if (!isNaN(Number(value)) && Number(value) !== osfmos_1.OSF.VersionOverridesNumber.Max) {
|
||
|
versionOverrides.push(value.toString());
|
||
|
}
|
||
|
});
|
||
|
return versionOverrides;
|
||
|
}
|
||
|
}
|
||
|
exports.Converter = Converter;
|
||
|
//# sourceMappingURL=converter.js.map
|