Merge pull request #4 from Microsoft/dev-mca-accept

MCA Support
This commit is contained in:
Tameem Ansari 2018-10-16 11:01:24 -07:00 коммит произвёл GitHub
Родитель 9f3fef9671 7e31383c95
Коммит 58c046176d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
59 изменённых файлов: 7541 добавлений и 6716 удалений

75
.gitignore поставляемый
Просмотреть файл

@ -4,6 +4,7 @@
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
@ -24,11 +25,14 @@ bld/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
@ -42,20 +46,28 @@ TestResult.xml
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
@ -65,6 +77,7 @@ artifacts/
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
@ -93,6 +106,9 @@ ipch/
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
@ -113,6 +129,10 @@ _TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
@ -148,7 +168,7 @@ publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
@ -161,11 +181,11 @@ PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
@ -183,6 +203,7 @@ AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
@ -201,6 +222,10 @@ ClientBin/
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
@ -215,6 +240,8 @@ _UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
@ -225,6 +252,7 @@ UpgradeLog*.htm
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
@ -236,9 +264,6 @@ FakesAssemblies/
.ntvs_analysis.dat
node_modules/
# Typescript v1 declaration files
typings/
# Visual Studio 6 build log
*.plg
@ -267,8 +292,8 @@ paket-files/
.idea/
*.sln.iml
# CodeRush
.cr/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
@ -278,6 +303,9 @@ __pycache__/
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
@ -287,9 +315,20 @@ __pycache__/
*.odx.cs
*.xsd.cs
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/

Просмотреть файл

@ -86,6 +86,9 @@
<Add>vmSize</Add>
<Add>subscriptionId</Add>
<Add>resourceGroupName</Add>
<Add>placementGroupId</Add>
<Add>tags</Add>
<Add>vmScaleSetName</Add>
</ExcludedHeartbeatProperties>
</Add>
@ -119,19 +122,23 @@
<Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web"/>
</TelemetryModules>
<ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights"/>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<ExcludedTypes>Event</ExcludedTypes>
<TelemetrySinks>
<Add Name="default">
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<ExcludedTypes>Event</ExcludedTypes>
</Add>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<IncludedTypes>Event</IncludedTypes>
</Add>
</TelemetryProcessors>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</Add>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<IncludedTypes>Event</IncludedTypes>
</Add>
</TelemetryProcessors>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</TelemetrySinks>
<!--
Learn more about Application Insights configuration with ApplicationInsights.config here:
http://go.microsoft.com/fwlink/?LinkID=513840

Просмотреть файл

@ -58,7 +58,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
/// <summary>
/// The Azure cloud storage account.
/// </summary>
private CloudStorageAccount storageAccount;
private readonly CloudStorageAccount storageAccount;
/// <summary>
/// The BLOB container which contains the portal's configuration assets.

Просмотреть файл

@ -20,12 +20,12 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
/// <param name="userClaimsPrincipal">A user claims principal created by AAD.</param>
public CustomerPortalPrincipal(ClaimsPrincipal userClaimsPrincipal) : base(userClaimsPrincipal)
{
this.TenantId = userClaimsPrincipal.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid")?.Value;
this.Name = userClaimsPrincipal.FindFirst(ClaimTypes.Name)?.Value;
this.Email = userClaimsPrincipal.FindFirst(ClaimTypes.Email)?.Value;
TenantId = userClaimsPrincipal.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid")?.Value;
Name = userClaimsPrincipal.FindFirst(ClaimTypes.Name)?.Value;
Email = userClaimsPrincipal.FindFirst(ClaimTypes.Email)?.Value;
// the customer ID will be empty in the case where a new prospective customer signs in with their existing Org ID or when a partner user signs in
this.PartnerCenterCustomerId = userClaimsPrincipal.FindFirst("PartnerCenterCustomerID")?.Value;
PartnerCenterCustomerId = userClaimsPrincipal.FindFirst("PartnerCenterCustomerID")?.Value;
}
/// <summary>
@ -51,7 +51,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
get
{
// TODO: later on, we may want to implement RBAC but as of now, all users signed in from the portal's tenant are considered admins
return this.TenantId == ApplicationConfiguration.ActiveDirectoryTenantId;
return TenantId == ApplicationConfiguration.ActiveDirectoryTenantId;
}
}
@ -62,7 +62,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
{
get
{
return !string.IsNullOrEmpty(this.PartnerCenterCustomerId);
return !string.IsNullOrEmpty(PartnerCenterCustomerId);
}
}

Просмотреть файл

@ -138,13 +138,6 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
ApplicationDomain.Instance.TelemetryService.Provider.TrackException(ex);
return null;
}
finally
{
directoryGroups = null;
directoryRoles = null;
eventMeasurements = null;
eventProperties = null;
}
}
}
}

Просмотреть файл

@ -39,7 +39,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
{
get
{
if (string.IsNullOrEmpty(this.InstrumentationKey))
if (string.IsNullOrEmpty(InstrumentationKey))
{
telemetryProvider = new EmptyTelemetryProvider();
}
@ -58,12 +58,12 @@ namespace Microsoft.Store.PartnerCenter.Storefront.BusinessLogic
/// <returns>A task for asynchronous purposes.</returns>
public async Task InitializeAsync()
{
this.InstrumentationKey = (await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false)).InstrumentationKey;
InstrumentationKey = (await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false)).InstrumentationKey;
if (!string.IsNullOrEmpty(this.InstrumentationKey))
if (!string.IsNullOrEmpty(InstrumentationKey))
{
ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey =
this.InstrumentationKey;
InstrumentationKey;
}
}
}

Просмотреть файл

@ -22,7 +22,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Configuration.Bundling
/// <summary>
/// The bundles collection.
/// </summary>
private BundleCollection bundles;
private readonly BundleCollection bundles;
/// <summary>
/// Prevents a default instance of the <see cref="Bundler"/> class from being created.
@ -58,8 +58,8 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Configuration.Bundling
/// <param name="cssFiles">The CSS files to include in the startup bundle.</param>
public void BundleStartupAssets(string[] javaScriptFiles, string[] cssFiles)
{
this.bundles.Add(new ScriptBundle("~/StartupClasses/").Include(javaScriptFiles));
this.bundles.Add(new StyleBundle("~/StartupStyles/").Include(cssFiles));
bundles.Add(new ScriptBundle("~/StartupClasses/").Include(javaScriptFiles));
bundles.Add(new StyleBundle("~/StartupStyles/").Include(cssFiles));
}
/// <summary>
@ -69,8 +69,8 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Configuration.Bundling
/// <param name="cssFiles">The CSS files to include in the non startup bundle.</param>
public void BundleNonStartupAssets(string[] javaScriptFiles, string[] cssFiles)
{
this.bundles.Add(new ScriptBundle("~/WebPortalClasses/").Include(javaScriptFiles));
this.bundles.Add(new StyleBundle("~/WebPortalStyles/").Include(cssFiles));
bundles.Add(new ScriptBundle("~/WebPortalClasses/").Include(javaScriptFiles));
bundles.Add(new StyleBundle("~/WebPortalStyles/").Include(cssFiles));
}
}
}

Просмотреть файл

@ -8,7 +8,7 @@
"~/Scripts/WebPortal/Dependencies/appinsights.js",
"~/Scripts/WebPortal/Dependencies/jquery-1.11.2.js",
"~/Scripts/WebPortal/Dependencies/jquery-ui.js",
"~/Scripts/WebPortal/Dependencies/knockout-3.2.0.debug.js",
"~/Scripts/WebPortal/Dependencies/knockout-3.4.2.debug.js",
"~/Scripts/WebPortal/Dependencies/jquery.validate.js"
],
"Css": [
@ -20,7 +20,7 @@
"~/Scripts/WebPortal/Dependencies/appinsights.js",
"~/Scripts/WebPortal/Dependencies/jquery-1.11.2.min.js",
"~/Scripts/WebPortal/Dependencies/jquery-ui.min.js",
"~/Scripts/WebPortal/Dependencies/knockout-3.2.0.js",
"~/Scripts/WebPortal/Dependencies/knockout-3.4.2.js",
"~/Scripts/WebPortal/Dependencies/jquery.validate.js"
],
"Css": [

Просмотреть файл

@ -4,8 +4,7 @@
width: 100%;
color: #464443;
background-color: rgb(244,244,244);
padding: 10px 2px 10px 2px;
background-image: url('onedrive-logo.png');
padding: 10px 2px 10px 2px
}
.TileContainer .Title {

Просмотреть файл

@ -24,9 +24,6 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
if (!Request.IsAuthenticated)
{
// send an OpenID Connect sign-in request
string callbackUrl = Url.Action("Index", "Home", routeValues: null, protocol: Request.Url.Scheme);
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);

Просмотреть файл

@ -65,6 +65,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
BrandingConfiguration brandingConfiguration = new BrandingConfiguration()
{
AgreementUserId = HttpContext.Current.Request.Form["AgreementUserId"],
OrganizationName = HttpContext.Current.Request.Form["OrganizationName"],
ContactUs = new ContactUsInformation()
{
@ -75,11 +76,11 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
Email = HttpContext.Current.Request.Form["ContactSalesEmail"],
Phone = HttpContext.Current.Request.Form["ContactSalesPhone"],
},
}
};
string organizationLogo = HttpContext.Current.Request.Form["OrganizationLogo"];
var organizationLogoPostedFile = HttpContext.Current.Request.Files["OrganizationLogoFile"];
HttpPostedFile organizationLogoPostedFile = HttpContext.Current.Request.Files["OrganizationLogoFile"];
if (organizationLogoPostedFile != null && Path.GetFileName(organizationLogoPostedFile.FileName) == organizationLogo)
{
@ -105,7 +106,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
}
string headerImage = HttpContext.Current.Request.Form["HeaderImage"];
var headerImageUploadPostedFile = HttpContext.Current.Request.Files["HeaderImageFile"];
HttpPostedFile headerImageUploadPostedFile = HttpContext.Current.Request.Files["HeaderImageFile"];
if (headerImageUploadPostedFile != null && Path.GetFileName(headerImageUploadPostedFile.FileName) == headerImage)
{
@ -147,12 +148,13 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
brandingConfiguration.InstrumentationKey = HttpContext.Current.Request.Form["InstrumentationKey"];
}
var updatedBrandingConfiguration = await ApplicationDomain.Instance.PortalBranding.UpdateAsync(brandingConfiguration).ConfigureAwait(false);
BrandingConfiguration updatedBrandingConfiguration = await ApplicationDomain.Instance.PortalBranding.UpdateAsync(brandingConfiguration).ConfigureAwait(false);
bool isPaymentConfigurationSetup = await ApplicationDomain.Instance.PaymentConfigurationRepository.IsConfiguredAsync().ConfigureAwait(false);
if (isPaymentConfigurationSetup)
{
// update the web experience profile.
var paymentConfiguration = await ApplicationDomain.Instance.PaymentConfigurationRepository.RetrieveAsync().ConfigureAwait(false);
PaymentConfiguration paymentConfiguration = await ApplicationDomain.Instance.PaymentConfigurationRepository.RetrieveAsync().ConfigureAwait(false);
paymentConfiguration.WebExperienceProfileId = PaymentGatewayConfig.GetPaymentGatewayInstance(ApplicationDomain.Instance, "retrieve payment").CreateWebExperienceProfile(paymentConfiguration, updatedBrandingConfiguration, ApplicationDomain.Instance.PortalLocalization.CountryIso2Code);
await ApplicationDomain.Instance.PaymentConfigurationRepository.UpdateAsync(paymentConfiguration).ConfigureAwait(false);
}
@ -168,7 +170,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[HttpGet]
public async Task<IEnumerable<PartnerOffer>> GetOffers()
{
return (await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false)).Where(offer => offer.IsInactive == false);
return (await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false)).Where(offer => !offer.IsInactive);
}
/// <summary>
@ -204,7 +206,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[HttpPost]
public async Task<IEnumerable<PartnerOffer>> DeleteOffers(List<PartnerOffer> partnerOffersToDelete)
{
return (await ApplicationDomain.Instance.OffersRepository.MarkAsDeletedAsync(partnerOffersToDelete).ConfigureAwait(false)).Where(offer => offer.IsInactive == false);
return (await ApplicationDomain.Instance.OffersRepository.MarkAsDeletedAsync(partnerOffersToDelete).ConfigureAwait(false)).Where(offer => !offer.IsInactive);
}
/// <summary>

Просмотреть файл

@ -33,11 +33,11 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// </summary>
/// <returns>The Subscriptions details from PC Customer Profile.</returns>
[Route("Subscriptions")]
[Filters.WebApi.PortalAuthorizeAttribute(UserRole = UserRole.Customer)]
[Filters.WebApi.PortalAuthorize(UserRole = UserRole.Customer)]
[HttpGet]
public async Task<ManagedSubscriptionsViewModel> GetCustomerSubscriptions()
{
return await this.GetManagedSubscriptions().ConfigureAwait(false);
return await GetManagedSubscriptions().ConfigureAwait(false);
}
/// <summary>
@ -47,7 +47,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// <returns>A registered customer object.</returns>
[Route("")]
[HttpPost]
[Filters.WebApi.PortalAuthorizeAttribute(UserRole = UserRole.None)]
[Filters.WebApi.PortalAuthorize(UserRole = UserRole.None)]
public async Task<string> Register([FromBody] CustomerViewModel customerViewModel)
{
if (!ModelState.IsValid)
@ -63,6 +63,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
string domainName = string.Format(CultureInfo.InvariantCulture, "{0}.onmicrosoft.com", customerViewModel.DomainPrefix);
// check domain available.
bool isDomainTaken = await ApplicationDomain.Instance.PartnerCenterClient.Domains.ByDomain(domainName).ExistsAsync().ConfigureAwait(false);
if (isDomainTaken)
{
@ -110,7 +111,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
DateTime startTime = DateTime.Now;
string clientCustomerId = this.Principal.PartnerCenterCustomerId;
string clientCustomerId = Principal.PartnerCenterCustomerId;
// responseCulture determines decimals, currency and such
CultureInfo responseCulture = new CultureInfo(ApplicationDomain.Instance.PortalLocalization.Locale);
@ -185,7 +186,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
SubscriptionId = customerSubscriptionFromPC.Id,
LicensesTotal = customerSubscriptionFromPC.Quantity.ToString("G", responseCulture),
Status = this.GetStatusType(customerSubscriptionFromPC.Status),
Status = GetStatusType(customerSubscriptionFromPC.Status),
CreationDate = customerSubscriptionFromPC.CreationDate.ToString("d", responseCulture),
FriendlyName = subscription.FriendlyName,
IsRenewable = subscription.IsRenewable,
@ -203,7 +204,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
Id = customerSubscriptionFromPC.Id,
OfferName = customerSubscriptionFromPC.OfferName,
Quantity = customerSubscriptionFromPC.Quantity.ToString("G", responseCulture),
Status = this.GetStatusType(customerSubscriptionFromPC.Status),
Status = GetStatusType(customerSubscriptionFromPC.Status),
CreationDate = customerSubscriptionFromPC.CreationDate.ToString("d", responseCulture),
};
@ -218,7 +219,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
};
// Capture the request for customer managed subscriptions and partner managed subscriptions for analysis.
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", this.Principal.PartnerCenterCustomerId } };
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", Principal.PartnerCenterCustomerId } };
// Track the event measurements for analysis.
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds }, { "CustomerManagedSubscriptions", customerManagedSubscriptions.Count }, { "PartnerManagedSubscriptions", partnerManagedSubscriptions.Count } };
@ -233,7 +234,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// </summary>
/// <param name="statusType">The subscription status type.</param>
/// <returns>Localized Operation Type string.</returns>
private string GetStatusType(SubscriptionStatus statusType)
private static string GetStatusType(SubscriptionStatus statusType)
{
switch (statusType)
{

Просмотреть файл

@ -37,15 +37,15 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
IDictionary<string, dynamic> clientConfiguration = new Dictionary<string, dynamic>(ApplicationConfiguration.ClientConfiguration);
// configure the tiles to show and hide based on the logged in user role
var principal = this.HttpContext.User as CustomerPortalPrincipal;
CustomerPortalPrincipal principal = HttpContext.User as CustomerPortalPrincipal;
clientVisiblePlugins.Plugins.Where(x => x.Name == "CustomerAccount").First().Hidden = !principal.IsPartnerCenterCustomer;
clientVisiblePlugins.Plugins.Where(x => x.Name == "CustomerSubscriptions").First().Hidden = !principal.IsPartnerCenterCustomer;
clientVisiblePlugins.Plugins.Where(x => x.Name == "AdminConsole").First().Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.Where(x => x.Name == "PartnerOffersSetup").First().Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.Where(x => x.Name == "BrandingSetup").First().Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.Where(x => x.Name == "PaymentSetup").First().Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.Where(x => x.Name == "CustomerManagementSetup").First().Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.First(x => x.Name == "CustomerAccount").Hidden = !principal.IsPartnerCenterCustomer;
clientVisiblePlugins.Plugins.First(x => x.Name == "CustomerSubscriptions").Hidden = !principal.IsPartnerCenterCustomer;
clientVisiblePlugins.Plugins.First(x => x.Name == "AdminConsole").Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.First(x => x.Name == "PartnerOffersSetup").Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.First(x => x.Name == "BrandingSetup").Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.First(x => x.Name == "PaymentSetup").Hidden = !principal.IsPortalAdmin;
clientVisiblePlugins.Plugins.First(x => x.Name == "CustomerManagementSetup").Hidden = !principal.IsPortalAdmin;
if (principal.IsPortalAdmin)
{
@ -74,7 +74,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
clientConfiguration,
new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.Default });
if (Resources.Culture.TwoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase))
if (!Resources.Culture.TwoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase))
{
ViewBag.ValidatorMessagesSrc = string.Format(CultureInfo.InvariantCulture, "https://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/localization/messages_{0}.js", Resources.Culture.TwoLetterISOLanguageName);
}
@ -85,13 +85,13 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
ViewBag.txnId = form["payuMoneyId"];
}
return this.View();
return View();
}
catch (Exception exception)
{
ViewBag.ErrorMessage = Resources.PortalStartupFailure;
ViewBag.ErrorDetails = exception.Message;
return this.View("Error");
return View("Error");
}
}
@ -102,12 +102,12 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// <returns>The error view.</returns>
public async Task<ActionResult> Error(string errorMessage)
{
var portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
Models.BrandingConfiguration portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
ViewBag.ErrorMessage = errorMessage;
ViewBag.OrganizationName = portalBranding.OrganizationName;
return this.View();
return View();
}
}
}

Просмотреть файл

@ -17,6 +17,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
using BusinessLogic.Commerce.PaymentGateways;
using BusinessLogic.Exceptions;
using Filters;
using Microsoft.Store.PartnerCenter.Models.Agreements;
using Models;
using Newtonsoft.Json;
using PartnerCenter.Models;
@ -38,18 +39,18 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[Route("Prepare")]
public async Task<string> PrepareOrderForAuthenticatedCustomer([FromBody]OrderViewModel orderDetails)
{
var startTime = DateTime.Now;
DateTime startTime = DateTime.Now;
if (!ModelState.IsValid)
{
var errorList = (from item in ModelState.Values
from error in item.Errors
select error.ErrorMessage).ToList();
List<string> errorList = (from item in ModelState.Values
from error in item.Errors
select error.ErrorMessage).ToList();
string errorMessage = JsonConvert.SerializeObject(errorList);
throw new PartnerDomainException(ErrorCode.InvalidInput).AddDetail("ErrorMessage", errorMessage);
}
orderDetails.CustomerId = this.Principal.PartnerCenterCustomerId;
orderDetails.CustomerId = Principal.PartnerCenterCustomerId;
orderDetails.OrderId = Guid.NewGuid().ToString();
string operationDescription = string.Empty;
@ -75,16 +76,16 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
string redirectUrl = string.Format(CultureInfo.InvariantCulture, "{0}/#ProcessOrder?ret=true", Request.RequestUri.GetLeftPart(UriPartial.Authority));
// Create the right payment gateway to use for customer oriented payment transactions.
IPaymentGateway paymentGateway = await this.CreatePaymentGateway(operationDescription, orderDetails.CustomerId).ConfigureAwait(false);
IPaymentGateway paymentGateway = await CreatePaymentGateway(operationDescription, orderDetails.CustomerId).ConfigureAwait(false);
// execute and get payment gateway action URI.
string generatedUri = await paymentGateway.GeneratePaymentUriAsync(redirectUrl, orderDetails).ConfigureAwait(false);
// Capture the request for the customer summary for analysis.
var eventProperties = new Dictionary<string, string> { { "CustomerId", orderDetails.CustomerId }, { "OperationType", orderDetails.OperationType.ToString() } };
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", orderDetails.CustomerId }, { "OperationType", orderDetails.OperationType.ToString() } };
// Track the event measurements for analysis.
var eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
ApplicationDomain.Instance.TelemetryService.Provider.TrackEvent("api/order/prepare", eventProperties, eventMetrics);
@ -103,17 +104,17 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[Route("Process")]
public async Task<TransactionResult> ProcessOrderForAuthenticatedCustomer(string paymentId, string payerId, string orderId)
{
var startTime = DateTime.Now;
DateTime startTime = DateTime.Now;
// extract order information and create payment payload.
string clientCustomerId = this.Principal.PartnerCenterCustomerId;
string clientCustomerId = Principal.PartnerCenterCustomerId;
paymentId.AssertNotEmpty(nameof(paymentId));
payerId.AssertNotEmpty(nameof(payerId));
orderId.AssertNotEmpty(nameof(orderId));
// Create the right payment gateway to use for customer oriented payment transactions.
IPaymentGateway paymentGateway = await this.CreatePaymentGateway("ProcessingOrder", clientCustomerId).ConfigureAwait(false);
IPaymentGateway paymentGateway = await CreatePaymentGateway("ProcessingOrder", clientCustomerId).ConfigureAwait(false);
// use payment gateway to extract order information.
OrderViewModel orderToProcess = await paymentGateway.GetOrderDetailsFromPaymentAsync(payerId, paymentId, orderId, clientCustomerId).ConfigureAwait(false);
@ -135,10 +136,10 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
}
// Capture the request for the customer summary for analysis.
var eventProperties = new Dictionary<string, string> { { "CustomerId", orderToProcess.CustomerId }, { "OperationType", orderToProcess.OperationType.ToString() }, { "PayerId", payerId }, { "PaymentId", paymentId } };
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", orderToProcess.CustomerId }, { "OperationType", orderToProcess.OperationType.ToString() }, { "PayerId", payerId }, { "PaymentId", paymentId } };
// Track the event measurements for analysis.
var eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
ApplicationDomain.Instance.TelemetryService.Provider.TrackEvent("api/order/process", eventProperties, eventMetrics);
@ -155,13 +156,13 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[Route("NewCustomerPrepareOrder")]
public async Task<string> PrepareOrderForUnAuthenticatedCustomer([FromBody]OrderViewModel orderDetails)
{
var startTime = DateTime.Now;
DateTime startTime = DateTime.Now;
if (!ModelState.IsValid)
{
var errorList = (from item in ModelState.Values
from error in item.Errors
select error.ErrorMessage).ToList();
List<string> errorList = (from item in ModelState.Values
from error in item.Errors
select error.ErrorMessage).ToList();
string errorMessage = JsonConvert.SerializeObject(errorList);
throw new PartnerDomainException(ErrorCode.InvalidInput).AddDetail("ErrorMessage", errorMessage);
}
@ -178,7 +179,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
string generatedUri = await paymentGateway.GeneratePaymentUriAsync(redirectUrl, orderDetails).ConfigureAwait(false);
// Track the event measurements for analysis.
var eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
ApplicationDomain.Instance.TelemetryService.Provider.TrackEvent("api/order/NewCustomerPrepareOrder", null, eventMetrics);
@ -197,19 +198,17 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[Route("NewCustomerProcessOrder")]
public async Task<SubscriptionsSummary> ProcessOrderForUnAuthenticatedCustomer(string customerId, string paymentId, string payerId)
{
var startTime = DateTime.Now;
DateTime startTime = DateTime.Now;
customerId.AssertNotEmpty(nameof(customerId));
paymentId.AssertNotEmpty(nameof(paymentId));
payerId.AssertNotEmpty(nameof(payerId));
// Retrieve customer registration details persisted
CustomerRegistrationRepository customerRegistrationRepository = new CustomerRegistrationRepository(ApplicationDomain.Instance);
BrandingConfiguration branding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
CustomerViewModel customerRegistrationInfoPersisted = await ApplicationDomain.Instance.CustomerRegistrationRepository.RetrieveAsync(customerId).ConfigureAwait(false);
var newCustomer = new Customer()
Customer newCustomer = new Customer()
{
CompanyProfile = new CustomerCompanyProfile()
{
@ -239,7 +238,30 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
// Register customer
newCustomer = await ApplicationDomain.Instance.PartnerCenterClient.Customers.CreateAsync(newCustomer).ConfigureAwait(false);
var newCustomerId = newCustomer.CompanyProfile.TenantId;
ResourceCollection<AgreementMetaData> agreements = await ApplicationDomain.Instance.PartnerCenterClient.AgreementDetails.GetAsync().ConfigureAwait(false);
// Obtain reference to the Microsoft Cloud Agreement.
AgreementMetaData microsoftCloudAgreement = agreements.Items.FirstOrDefault(agr => agr.AgreementType == AgreementType.MicrosoftCloudAgreement);
// Attest that the customer has accepted the Microsoft Cloud Agreement (MCA).
await ApplicationDomain.Instance.PartnerCenterClient.Customers[newCustomer.Id].Agreements.CreateAsync(
new Agreement
{
DateAgreed = DateTime.UtcNow,
PrimaryContact = new PartnerCenter.Models.Agreements.Contact
{
Email = customerRegistrationInfoPersisted.Email,
FirstName = customerRegistrationInfoPersisted.FirstName,
LastName = customerRegistrationInfoPersisted.LastName,
PhoneNumber = customerRegistrationInfoPersisted.Phone
},
TemplateId = microsoftCloudAgreement.TemplateId,
Type = AgreementType.MicrosoftCloudAgreement,
UserId = branding.AgreementUserId
});
string newCustomerId = newCustomer.CompanyProfile.TenantId;
CustomerViewModel customerViewModel = new CustomerViewModel()
{
@ -269,16 +291,16 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
CommerceOperations commerceOperation = new CommerceOperations(ApplicationDomain.Instance, newCustomerId, paymentGateway);
await commerceOperation.PurchaseAsync(orderToProcess).ConfigureAwait(false);
SubscriptionsSummary summaryResult = await this.GetSubscriptionSummaryAsync(newCustomerId).ConfigureAwait(false);
SubscriptionsSummary summaryResult = await GetSubscriptionSummaryAsync(newCustomerId).ConfigureAwait(false);
// Remove the persisted customer registration info.
var deleteResult = ApplicationDomain.Instance.CustomerRegistrationRepository.DeleteAsync(customerId);
await ApplicationDomain.Instance.CustomerRegistrationRepository.DeleteAsync(customerId).ConfigureAwait(false);
// Capture the request for the customer summary for analysis.
var eventProperties = new Dictionary<string, string> { { "CustomerId", orderToProcess.CustomerId } };
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", orderToProcess.CustomerId } };
// Track the event measurements for analysis.
var eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } };
ApplicationDomain.Instance.TelemetryService.Provider.TrackEvent("api/order/NewCustomerProcessOrder", eventProperties, eventMetrics);
@ -296,7 +318,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[Route("summary")]
public async Task<SubscriptionsSummary> SubscriptionSummary()
{
return await this.GetSubscriptionSummaryAsync(this.Principal.PartnerCenterCustomerId).ConfigureAwait(false);
return await GetSubscriptionSummaryAsync(Principal.PartnerCenterCustomerId).ConfigureAwait(false);
}
/// <summary>
@ -306,11 +328,11 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// <returns>Subscription Summary.</returns>
private async Task<SubscriptionsSummary> GetSubscriptionSummaryAsync(string customerId)
{
var startTime = DateTime.Now;
var customerSubscriptions = await ApplicationDomain.Instance.CustomerSubscriptionsRepository.RetrieveAsync(customerId).ConfigureAwait(false);
var customerSubscriptionsHistory = await ApplicationDomain.Instance.CustomerPurchasesRepository.RetrieveAsync(customerId).ConfigureAwait(false);
var allPartnerOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false);
var currentMicrosoftOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveMicrosoftOffersAsync().ConfigureAwait(false);
DateTime startTime = DateTime.Now;
IEnumerable<CustomerSubscriptionEntity> customerSubscriptions = await ApplicationDomain.Instance.CustomerSubscriptionsRepository.RetrieveAsync(customerId).ConfigureAwait(false);
IEnumerable<CustomerPurchaseEntity> customerSubscriptionsHistory = await ApplicationDomain.Instance.CustomerPurchasesRepository.RetrieveAsync(customerId).ConfigureAwait(false);
IEnumerable<PartnerOffer> allPartnerOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false);
IEnumerable<MicrosoftOffer> currentMicrosoftOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveMicrosoftOffersAsync().ConfigureAwait(false);
// start building the summary.
decimal summaryTotal = 0;
@ -320,19 +342,19 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
List<SubscriptionViewModel> customerSubscriptionsView = new List<SubscriptionViewModel>();
// iterate through and build the list of customer's subscriptions.
foreach (var subscription in customerSubscriptions)
foreach (CustomerSubscriptionEntity subscription in customerSubscriptions)
{
decimal subscriptionTotal = 0;
int licenseTotal = 0;
List<SubscriptionHistory> historyItems = new List<SubscriptionHistory>();
// collect the list of history items for this subcription.
var subscriptionHistoryList = customerSubscriptionsHistory
IOrderedEnumerable<CustomerPurchaseEntity> subscriptionHistoryList = customerSubscriptionsHistory
.Where(historyItem => historyItem.SubscriptionId == subscription.SubscriptionId)
.OrderBy(historyItem => historyItem.TransactionDate);
// iterate through and build the SubsriptionHistory for this subscription.
foreach (var historyItem in subscriptionHistoryList)
foreach (CustomerPurchaseEntity historyItem in subscriptionHistoryList)
{
decimal orderTotal = Math.Round(historyItem.SeatPrice * historyItem.SeatsBought, responseCulture.NumberFormat.CurrencyDecimalDigits);
historyItems.Add(new SubscriptionHistory()
@ -351,7 +373,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
subscriptionTotal += orderTotal;
}
var partnerOfferItem = allPartnerOffers.FirstOrDefault(offer => offer.Id == subscription.PartnerOfferId);
PartnerOffer partnerOfferItem = allPartnerOffers.FirstOrDefault(offer => offer.Id == subscription.PartnerOfferId);
string subscriptionTitle = partnerOfferItem.Title;
string portalOfferId = partnerOfferItem.Id;
decimal portalOfferPrice = partnerOfferItem.Price;
@ -364,7 +386,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
// TODO :: Handle Microsoft offer being pulled back due to EOL.
// Temporarily mark this partnerOffer item as inactive and dont allow store front customer to manage this subscription.
var alignedMicrosoftOffer = currentMicrosoftOffers.FirstOrDefault(offer => offer.Offer.Id == partnerOfferItem.MicrosoftOfferId);
MicrosoftOffer alignedMicrosoftOffer = currentMicrosoftOffers.FirstOrDefault(offer => offer.Offer.Id == partnerOfferItem.MicrosoftOfferId);
if (alignedMicrosoftOffer == null)
{
partnerOfferItem.IsInactive = true;
@ -403,10 +425,10 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
}
// Capture the request for the customer summary for analysis.
var eventProperties = new Dictionary<string, string> { { "CustomerId", customerId } };
Dictionary<string, string> eventProperties = new Dictionary<string, string> { { "CustomerId", customerId } };
// Track the event measurements for analysis.
var eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds }, { "NumberOfSubscriptions", customerSubscriptionsView.Count } };
Dictionary<string, double> eventMetrics = new Dictionary<string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds }, { "NumberOfSubscriptions", customerSubscriptionsView.Count } };
ApplicationDomain.Instance.TelemetryService.Provider.TrackEvent("GetSubscriptionSummaryAsync", eventProperties, eventMetrics);
@ -423,7 +445,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// </summary>
/// <param name="operationType">The Commerce operation type.</param>
/// <returns>Localized Operation Type string.</returns>
private string GetOperationType(CommerceOperationType operationType)
private static string GetOperationType(CommerceOperationType operationType)
{
switch (operationType)
{
@ -444,7 +466,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
/// <param name="operationDescription">The payment operation description.</param>
/// <param name="customerId">The customer who is transacting.</param>
/// <returns>The payment gateway instance.</returns>
private async Task<IPaymentGateway> CreatePaymentGateway(string operationDescription, string customerId)
private static async Task<IPaymentGateway> CreatePaymentGateway(string operationDescription, string customerId)
{
operationDescription.AssertNotEmpty(nameof(operationDescription));
customerId.AssertNotEmpty(nameof(customerId));

Просмотреть файл

@ -6,6 +6,7 @@
namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
{
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
@ -26,25 +27,25 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[HttpGet]
public async Task<OfferCatalogViewModel> GetOffersCatalog()
{
var isBrandingConfigured = await ApplicationDomain.Instance.PortalBranding.IsConfiguredAsync().ConfigureAwait(false);
var isOffersConfigured = await ApplicationDomain.Instance.OffersRepository.IsConfiguredAsync().ConfigureAwait(false);
var isPaymentConfigured = await ApplicationDomain.Instance.PaymentConfigurationRepository.IsConfiguredAsync().ConfigureAwait(false);
bool isBrandingConfigured = await ApplicationDomain.Instance.PortalBranding.IsConfiguredAsync().ConfigureAwait(false);
bool isOffersConfigured = await ApplicationDomain.Instance.OffersRepository.IsConfiguredAsync().ConfigureAwait(false);
bool isPaymentConfigured = await ApplicationDomain.Instance.PaymentConfigurationRepository.IsConfiguredAsync().ConfigureAwait(false);
var microsoftOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveMicrosoftOffersAsync().ConfigureAwait(false);
var partnerOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false);
IEnumerable<MicrosoftOffer> microsoftOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveMicrosoftOffersAsync().ConfigureAwait(false);
IEnumerable<PartnerOffer> partnerOffers = await ApplicationDomain.Instance.OffersRepository.RetrieveAsync().ConfigureAwait(false);
var offerCatalogViewModel = new OfferCatalogViewModel
OfferCatalogViewModel offerCatalogViewModel = new OfferCatalogViewModel
{
IsPortalConfigured = isBrandingConfigured && isOffersConfigured && isPaymentConfigured
};
if (offerCatalogViewModel.IsPortalConfigured)
{
foreach (var offer in partnerOffers)
foreach (PartnerOffer offer in partnerOffers)
{
// TODO :: Handle Microsoft offer being pulled back due to EOL.
var microsoftOfferItem = microsoftOffers.Where(msOffer => msOffer.Offer.Id == offer.MicrosoftOfferId).FirstOrDefault();
MicrosoftOffer microsoftOfferItem = microsoftOffers.FirstOrDefault(msOffer => msOffer.Offer.Id == offer.MicrosoftOfferId);
// temporarily remove the partner offer from catalog display if the corresponding Microsoft offer does not exist.
if (microsoftOfferItem != null)
@ -58,7 +59,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
}
}
offerCatalogViewModel.Offers = partnerOffers.Where(offer => offer.IsInactive == false);
offerCatalogViewModel.Offers = partnerOffers.Where(offer => !offer.IsInactive);
}
return offerCatalogViewModel;

Просмотреть файл

@ -13,6 +13,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
using Configuration;
using Configuration.Manager;
using Filters;
using Models;
/// <summary>
/// Serves HTML templates to the browser.
@ -27,7 +28,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult HomePage()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -38,7 +39,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public async Task<ActionResult> Home()
{
var portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
BrandingConfiguration portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
if (portalBranding.HeaderImage != null)
{
@ -50,12 +51,12 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
ViewBag.PrivacyAgreement = portalBranding.PrivacyAgreement.ToString();
}
var principal = this.HttpContext.User as CustomerPortalPrincipal;
CustomerPortalPrincipal principal = HttpContext.User as CustomerPortalPrincipal;
ViewBag.OrganizationName = portalBranding.OrganizationName;
ViewBag.IsPortalAdmin = principal.IsPortalAdmin;
return this.PartialView();
return PartialView();
}
/// <summary>
@ -67,7 +68,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult CustomerRegistration()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -79,7 +80,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult RegistrationConfirmation()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -90,7 +91,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult ProcessOrder()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -102,7 +103,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult CustomerAccount()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -114,7 +115,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult Subscriptions()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -126,7 +127,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult AddSubscriptions()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -139,7 +140,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
public ActionResult UpdateSubscriptions()
{
ViewBag.CurrencySymbol = ApplicationDomain.Instance.PortalLocalization.CurrencySymbol;
return this.PartialView();
return PartialView();
}
/// <summary>
@ -151,7 +152,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult UpdateContactInformation()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -163,7 +164,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult UpdateCompanyInformation()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -175,7 +176,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult AdminConsole()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -186,7 +187,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult AddOrUpdateOffer()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -198,7 +199,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
public ActionResult OfferList()
{
ViewBag.CurrencySymbol = ApplicationDomain.Instance.PortalLocalization.CurrencySymbol;
return this.PartialView();
return PartialView();
}
/// <summary>
@ -209,7 +210,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult BrandingSetup()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -220,7 +221,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult PaymentSetup()
{
return this.PartialView(PaymentGatewayConfig.GetPaymentConfigView());
return PartialView(PaymentGatewayConfig.GetPaymentConfigView());
}
/// <summary>
@ -231,7 +232,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult CustomerManagementSetup()
{
return this.PartialView();
return PartialView();
}
/// <summary>
@ -245,7 +246,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
WebPortalConfigurationManager builder = ApplicationConfiguration.WebPortalConfigurationManager;
ViewBag.Templates = (await builder.AggregateNonStartupAssets().ConfigureAwait(false)).Templates;
var portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
BrandingConfiguration portalBranding = await ApplicationDomain.Instance.PortalBranding.RetrieveAsync().ConfigureAwait(false);
ViewBag.OrganizationName = portalBranding.OrganizationName;
@ -259,7 +260,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Controllers
ViewBag.CurrencySymbol = ApplicationDomain.Instance.PortalLocalization.CurrencySymbol;
return this.PartialView();
return PartialView();
}
}
}

Просмотреть файл

@ -14,7 +14,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.Mvc
/// Attribute used to track exceptions using Application Insights if it is configured.
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class AiHandleErrorAttribute : HandleErrorAttribute
public sealed class AiHandleErrorAttribute : HandleErrorAttribute
{
/// <summary>
/// Called when an exception occurs.
@ -23,12 +23,9 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.Mvc
/// <remarks>If customerError is set to Off then the exception will be reported through telemetry.</remarks>
public override void OnException(ExceptionContext filterContext)
{
if (filterContext?.HttpContext != null && filterContext.Exception != null)
if (filterContext?.HttpContext != null && filterContext.Exception != null && filterContext.HttpContext.IsCustomErrorEnabled)
{
if (filterContext.HttpContext.IsCustomErrorEnabled)
{
ApplicationDomain.Instance.TelemetryService.Provider.TrackException(filterContext.Exception);
}
ApplicationDomain.Instance.TelemetryService.Provider.TrackException(filterContext.Exception);
}
base.OnException(filterContext);

Просмотреть файл

@ -27,17 +27,15 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.WebApi
/// <summary>
/// Intercepts unhandled exceptions and crafts the error response appropriately.
/// </summary>
/// <param name="context">A context object.</param>
public override void OnException(HttpActionExecutedContext context)
/// <param name="actionExecutedContext">The context for the action.</param>
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
dynamic errorResponsePayload = new ExpandoObject();
HttpStatusCode errorResponseCode = HttpStatusCode.InternalServerError;
PartnerDomainException partnerDomainException = context.Exception as PartnerDomainException;
if (partnerDomainException != null)
if (actionExecutedContext.Exception is PartnerDomainException partnerDomainException)
{
Trace.TraceError("ErrorHandler: Intercepted PartnerDomainException: {0}.", context.Exception.ToString());
Trace.TraceError("ErrorHandler: Intercepted PartnerDomainException: {0}.", actionExecutedContext.Exception.ToString());
switch (partnerDomainException.ErrorCode)
{
@ -60,11 +58,6 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.WebApi
case ErrorCode.DownstreamServiceError:
errorResponseCode = HttpStatusCode.BadGateway;
break;
case ErrorCode.PersistenceFailure:
case ErrorCode.SubscriptionUpdateFailure:
case ErrorCode.ServerError:
case ErrorCode.PaymentGatewayIdentityFailureDuringPayment: // treat this as a non retryable server error.
default:
errorResponseCode = HttpStatusCode.InternalServerError;
break;
@ -76,16 +69,13 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.WebApi
else
{
errorResponsePayload.Details = new Dictionary<string, string>();
PartnerException partnerCenterException = context.Exception as PartnerException;
if (partnerCenterException != null &&
if (actionExecutedContext.Exception is PartnerException partnerCenterException &&
(partnerCenterException.ErrorCategory == PartnerErrorCategory.BadInput || partnerCenterException.ErrorCategory == PartnerErrorCategory.AlreadyExists))
{
Trace.TraceError("ErrorHandler: Intercepted PartnerException: {0}.", context.Exception.ToString());
Trace.TraceError("ErrorHandler: Intercepted PartnerException: {0}.", actionExecutedContext.Exception.ToString());
errorResponseCode = HttpStatusCode.BadRequest;
string errorCode = string.Empty;
// can be null.
if (partnerCenterException.ServiceErrorPayload != null)
{
@ -114,12 +104,10 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.WebApi
}
else
{
HttpException httpException = context.Exception as HttpException;
if (httpException != null && httpException.WebEventCode == 3004)
if (actionExecutedContext.Exception is HttpException httpException && httpException.WebEventCode == 3004)
{
// the maximum request size has been exceeded
Trace.TraceError("ErrorHandler: Maximum request size exceeded: {0}.", context.Exception.ToString());
Trace.TraceError("ErrorHandler: Maximum request size exceeded: {0}.", actionExecutedContext.Exception.ToString());
errorResponseCode = HttpStatusCode.BadRequest;
errorResponsePayload.ErrorCode = ErrorCode.MaximumRequestSizeExceeded;
@ -127,14 +115,14 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Filters.WebApi
else
{
// any other exception will be treated as a server failure or bug
Trace.TraceError("ErrorHandler: Intercepted Exception: {0}. Returning 500 as response.", context.Exception.ToString());
Trace.TraceError("ErrorHandler: Intercepted Exception: {0}. Returning 500 as response.", actionExecutedContext.Exception.ToString());
errorResponsePayload.ErrorCode = ErrorCode.ServerError;
}
}
}
context.Response = new HttpResponseMessage(errorResponseCode) { Content = new StringContent(JsonConvert.SerializeObject(errorResponsePayload)) };
actionExecutedContext.Response = new HttpResponseMessage(errorResponseCode) { Content = new StringContent(JsonConvert.SerializeObject(errorResponsePayload)) };
}
}
}

Просмотреть файл

@ -12,7 +12,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Infrastructure
/// A transaction that needs an input to execute.
/// </summary>
/// <typeparam name="TInput">The type of input.</typeparam>
public interface IBusinessTransactionWithInput<TInput> : IBusinessTransaction
public interface IBusinessTransactionWithInput<out TInput> : IBusinessTransaction
{
/// <summary>
/// Gets a callback function which will be invoked to retrieve the input.

Просмотреть файл

@ -10,7 +10,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Infrastructure
/// A transaction that has an output.
/// </summary>
/// <typeparam name="TOutput">The type of data returned when the transaction is executed.</typeparam>
public interface IBusinessTransactionWithOutput<TOutput> : IBusinessTransaction
public interface IBusinessTransactionWithOutput<out TOutput> : IBusinessTransaction
{
/// <summary>
/// Gets the transaction execution result.

Просмотреть файл

@ -14,6 +14,31 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Models
/// </summary>
public class BrandingConfiguration
{
/// <summary>
/// Gets or sets the user identifier to be associated with the acceptance of the MCA.
/// </summary>
public string AgreementUserId { get; set; }
/// <summary>
/// Gets or sets the contact sales information.
/// </summary>
public ContactUsInformation ContactSales { get; set; }
/// <summary>
/// Gets or sets the contact us information.
/// </summary>
public ContactUsInformation ContactUs { get; set; }
/// <summary>
/// Gets or sets the header image.
/// </summary>
public Uri HeaderImage { get; set; }
/// <summary>
/// Gets or sets the binary content of the header image.
/// </summary>
public Stream HeaderImageContent { get; set; }
/// <summary>
/// Gets or sets the Application Insights instrumentation key.
/// </summary>
@ -34,26 +59,6 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Models
/// </summary>
public Stream OrganizationLogoContent { get; set; }
/// <summary>
/// Gets or sets the contact us information.
/// </summary>
public ContactUsInformation ContactUs { get; set; }
/// <summary>
/// Gets or sets the contact sales information.
/// </summary>
public ContactUsInformation ContactSales { get; set; }
/// <summary>
/// Gets or sets the header image.
/// </summary>
public Uri HeaderImage { get; set; }
/// <summary>
/// Gets or sets the binary content of the header image.
/// </summary>
public Stream HeaderImageContent { get; set; }
/// <summary>
/// Gets or sets a privacy link for using the portal.
/// </summary>

Просмотреть файл

@ -23,18 +23,18 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Models
public TransactionResult(IEnumerable<TransactionResultLineItem> lineItems, DateTime timeStamp)
{
// we don't validate amount charged since a transaction may result in a negative amount
if (lineItems == null || lineItems.Count() <= 0)
if (lineItems == null || !lineItems.Any())
{
throw new ArgumentException("lineItems must at least have one line item", nameof(lineItems));
}
foreach (var lineItem in lineItems)
foreach (TransactionResultLineItem lineItem in lineItems)
{
lineItem.AssertNotNull("lineItems has an empty entry");
}
this.LineItems = lineItems;
this.TimeStamp = timeStamp;
LineItems = lineItems;
TimeStamp = timeStamp;
}
/// <summary>

51
src/Storefront/Resources.Designer.cs сгенерированный
Просмотреть файл

@ -8,8 +8,8 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace Microsoft.Store.PartnerCenter.Storefront
{
namespace Microsoft.Store.PartnerCenter.Storefront {
using System;
/// <summary>
@ -60,6 +60,15 @@ namespace Microsoft.Store.PartnerCenter.Storefront
}
}
/// <summary>
/// Looks up a localized string similar to I accept the.
/// </summary>
public static string AcceptPhrase {
get {
return ResourceManager.GetString("AcceptPhrase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to I accept the terms and conditions.
/// </summary>
@ -195,6 +204,24 @@ namespace Microsoft.Store.PartnerCenter.Storefront
}
}
/// <summary>
/// Looks up a localized string similar to Agreement User ID:.
/// </summary>
public static string AgreementUserIdFieldHeader {
get {
return ResourceManager.GetString("AgreementUserIdFieldHeader", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Identifier of the user from the partner to be associated with the acceptance of the Microsoft Cloud Agreement..
/// </summary>
public static string AgreementUserIdSubText {
get {
return ResourceManager.GetString("AgreementUserIdSubText", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Annual price.
/// </summary>
@ -565,7 +592,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront
}
/// <summary>
/// Looks up a localized string similar to Copyright 2017.
/// Looks up a localized string similar to Copyright 2018.
/// </summary>
public static string CopyRight {
get {
@ -1716,6 +1743,15 @@ namespace Microsoft.Store.PartnerCenter.Storefront
}
}
/// <summary>
/// Looks up a localized string similar to Invalid user identifier..
/// </summary>
public static string InvalidAgreementUserId {
get {
return ResourceManager.GetString("InvalidAgreementUserId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Invalid contact sales email address.
/// </summary>
@ -3282,6 +3318,15 @@ namespace Microsoft.Store.PartnerCenter.Storefront
}
}
/// <summary>
/// Looks up a localized string similar to terms of service.
/// </summary>
public static string TermsOfService {
get {
return ResourceManager.GetString("TermsOfService", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to to .
/// </summary>

Просмотреть файл

@ -118,7 +118,8 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Back" xml:space="preserve">
<value>Zurück</value>
<value>Zurück
</value>
</data>
<data name="BuyNow" xml:space="preserve">
<value>Jetzt kaufen</value>
@ -130,7 +131,10 @@
<value>Alle löschen</value>
</data>
<data name="ContactUs" xml:space="preserve">
<value>Kontaktieren Sie uns</value>
<value>So erreichen Sie uns</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright © 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>...</value>
@ -225,6 +229,9 @@
<data name="Confirmation" xml:space="preserve">
<value>Bestätigung</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Danke. Der Kunde erstellt wurde und Ihre Bestellung wurde erfolgreich bearbeitet.</value>
</data>
<data name="ContactInformation" xml:space="preserve">
<value>Kundeninformationen</value>
</data>
@ -234,6 +241,9 @@
<data name="MicrosoftId" xml:space="preserve">
<value>Microsoft-ID</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Kundendaten</value>
</data>
<data name="Subscription" xml:space="preserve">
<value>Abonnement</value>
</data>
@ -246,6 +256,9 @@
<data name="AddSubscriptions" xml:space="preserve">
<value>Abonnements hinzufügen</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Weiter zur Zahlung</value>
</data>
<data name="AcceptTerms" xml:space="preserve">
<value>Ich akzeptiere die allgemeinen Geschäftsbedingungen</value>
</data>
@ -262,10 +275,10 @@
<value>Bauen Ihr dashboard</value>
</data>
<data name="OffersConfigurationCaption" xml:space="preserve">
<value>Wählen Sie die Produkte aus, die Sie zum Kauf anbieten möchten</value>
<value>Wählen Sie die zum Kauf anbietet</value>
</data>
<data name="PaymentConfigurationCaption" xml:space="preserve">
<value>Fügen Sie eine Zahlungsmethode hinzu</value>
<value>Fügen Sie eine Zahlungsmethode</value>
</data>
<data name="WelcomeCaptionPrefix" xml:space="preserve">
<value>Herzlich Willkommen</value>
@ -297,6 +310,9 @@
<data name="SelectMicrosoftOfferCaption" xml:space="preserve">
<value>Wählen Sie ein Microsoft-Angebot:</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Suche nach Angebot</value>
</data>
<data name="YourAnnualPriceCaption" xml:space="preserve">
<value>Preis pro Jahr:</value>
</data>
@ -318,6 +334,9 @@
<data name="AddSummaryPointTooltip" xml:space="preserve">
<value>Nach diesem Angebot Zusammenfassung hinzufügen</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Klicken Sie, um Ihr Unternehmensbranding konfigurieren.</value>
</data>
<data name="OfferFeaturePlaceHolder" xml:space="preserve">
<value>Beschreiben Sie eine Funktion, die dieses Angebot gibt</value>
</data>
@ -375,8 +394,11 @@
<data name="Description" xml:space="preserve">
<value>Beschreibung</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Keine Angebote gefunden</value>
</data>
<data name="EmptyOfferListMessage" xml:space="preserve">
<value>Sie müssen keine Angebote konfiguriert. Klicken Sie auf hinzufügen, damit beginnen, Ihre Angebote oben bieten.</value>
<value>Sie müssen keine Angebote konfiguriert. Klicken Sie auf Hinzufügen, damit beginnen, Ihre Angebote oben bieten.</value>
</data>
<data name="MicrosoftOfferListColumnCaption" xml:space="preserve">
<value>Microsoft-Angebot</value>
@ -441,6 +463,9 @@
<data name="DefaultOrganizationName" xml:space="preserve">
<value>Den Namen Ihrer Organisation</value>
</data>
<data name="Undo" xml:space="preserve">
<value>"Rückgängig"</value>
</data>
<data name="BrandingRetrievalErrorMessage" xml:space="preserve">
<value>Branding-Partner konnte nicht abgerufen werden.</value>
</data>
@ -514,31 +539,34 @@
<value>Abrufen von Zahlungsinformationen</value>
</data>
<data name="LiveAccountTypeCaption" xml:space="preserve">
<value>live-Konto</value>
<value>Live-Konto</value>
</data>
<data name="PaymentConfigurationHeader" xml:space="preserve">
<value>Geben Sie hier Ihre PayPal Kontoeinstellungen an</value>
<value>Bieten Sie Ihr PayPal Pro Account-Einstellungen</value>
</data>
<data name="PaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>und erstellen Sie erst ein Kundenkonto und besuchen Sie anschließend das PayPal-Entwicklungsportal, um die unten aufgeführten Angaben zu erhalten.</value>
<value>ein neue pro-Konto erstellen, wenn Sie nicht besitzen.</value>
</data>
<data name="PaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Um Zahlungen von Ihren Kunden erhalten, sollten Sie ein PayPal-Konto pro verwenden, besuchen Sie bitte:</value>
</data>
<data name="PayPalAccountTypeCaption" xml:space="preserve">
<value>PayPal Konto-Art:</value>
<value>PayPal-Account-Typ:</value>
</data>
<data name="PayPalAccountTypeSubText" xml:space="preserve">
<value>Sie können zum Testen Ihrer Transaktionen ein Sandbox-Konto verwenden. Anschlie¬ßend können Sie auf ein Live-Konto umstellen.</value>
<value>Sie können ein Test-Konto um Ihre Transaktionen zu testen auswählen. Sobald funktioniert, wechseln Sie zu einem live-Konto-Typ zu Transaktionen</value>
</data>
<data name="PayPalClientIdCaption" xml:space="preserve">
<value>PayPal Client ID:</value>
<value>PayPal-Kundennummer:</value>
</data>
<data name="PayPalClientIdSubText" xml:space="preserve">
<value>Geben Sie hier Ihre PayPal Client ID an. Sie besteht aus 80 Zeichen.</value>
<value>Geben Sie Ihre PayPal-Kundennummer</value>
</data>
<data name="PayPalClientSecretCaption" xml:space="preserve">
<value>PayPal Secret:</value>
<value>PayPal Clientschlüssel:</value>
</data>
<data name="PayPalClientSecretSubText" xml:space="preserve">
<value>Geben Sie hier das Paypal Secret an, das Sie sich anzeigen lassen können.</value>
<value>Geben Sie Ihre PayPal-Clientschlüssel</value>
</data>
<data name="SandboxAccountTypeCaption" xml:space="preserve">
<value>Sandbox-Konto</value>
@ -573,6 +601,9 @@
<data name="CustomerProfileContactInfoSectionCaption" xml:space="preserve">
<value>Kontakt-Informationen</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Ihre Domain-Präfix wird angezeigt, nachdem die @ Ihre Domain e-Mail-Adresse. Es muss eindeutig sein und darf Satzzeichen enthalten. Beispiel: Jobs.</value>
</data>
<data name="CustomerProfileDomainPrefixCaption" xml:space="preserve">
<value>Domain-Präfix</value>
</data>
@ -588,6 +619,9 @@
<data name="CustomerProfileLastNameCaption" xml:space="preserve">
<value>Nachname</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Dies werden die Benutzer-Id, die Sie mit Ihrem Office 365-Konto verwenden möchten.</value>
</data>
<data name="CustomerProfileOffice365UserNameCaption" xml:space="preserve">
<value>Benutzername</value>
</data>
@ -624,6 +658,9 @@
<data name="CommerceOperationTypeAddSeats" xml:space="preserve">
<value>Zusätzliche Sitzplätze</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Gekauft</value>
</data>
<data name="CommerceOperationTypeRenewSubscription" xml:space="preserve">
<value>Erneuerung</value>
</data>
@ -633,6 +670,9 @@
<data name="CustomerRegistrationMessage" xml:space="preserve">
<value>Registrierung Kunden...</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Bestellung vorbereitet und umleiten auf Zahlungs-Gateway...</value>
</data>
<data name="OrderRegistrationFailureMessage" xml:space="preserve">
<value>Bestellung-Registrierungsfehler</value>
</data>
@ -753,6 +793,9 @@
<data name="PrivacyAgreementFieldSubText" xml:space="preserve">
<value>Sie können einen Link angeben, der Datenschutzbestimmungen für Ihre Kunden hier zeigt die in der Fußzeile der Startseite angezeigt werden</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Ansicht dieser Webseite-Datenschutzbestimmungen</value>
</data>
<data name="CouldNotRetrieveCustomerAccount" xml:space="preserve">
<value>Ihr Konto konnte nicht abgerufen werden. Bitte versuchen Sie es später erneut.</value>
</data>
@ -801,6 +844,12 @@
<data name="InvalidContactUsPhone" xml:space="preserve">
<value>Bitte geben Sie eine gültige kontaktieren Sie den Support-Telefon</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Zahlungsinformationen gesammelt, Kunden- und Verarbeitungsreihenfolge zu schaffen...</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Zahlungsinformationen gesammelt, jetzt Auftragsabwicklung...</value>
</data>
<data name="AddSeatsOperationCaption" xml:space="preserve">
<value>Abonnement Sitze hinzufügen.</value>
</data>
@ -813,12 +862,18 @@
<data name="OrderFailureMessage" xml:space="preserve">
<value>Fehler beim Verarbeitungsreihenfolge. Versuchen Sie später erneut.</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Fehler beim Verarbeitungsreihenfolge. Bitte klicken Sie auf Fertig, und versuchen Sie es erneut.</value>
</data>
<data name="PaymentReceiptFailureNotification" xml:space="preserve">
<value>Fehler beim Empfangen von Zahlungsinformationen. Bitte klicken Sie auf fertig, um noch einmal zu versuchen.</value>
<value>Fehler beim Empfangen von Zahlungsinformationen. Bitte klicken Sie auf Fertig, um noch einmal zu versuchen.</value>
</data>
<data name="ProcessingOrderNotification" xml:space="preserve">
<value>Zahlungsinformationen erhalten. Verarbeitungsreihenfolge...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Bestätigung</value>
</data>
<data name="NewCustomerOrderSuccessMessage" xml:space="preserve">
<value>Ihre Registrierung Bestellung wurde erfolgreich bearbeitet.</value>
</data>
@ -838,7 +893,7 @@
<value>Anzahl</value>
</data>
<data name="AssertNumberPositiveInvalidError" xml:space="preserve">
<value>{0} muss größer als Null sein.</value>
<value>{0} muss größer als NULL sein.</value>
</data>
<data name="AssertStringNotEmptyInvalidPrefix" xml:space="preserve">
<value>Zeichenfolge</value>
@ -880,7 +935,7 @@
<value>Zahlung-Modus wird nicht unterstützt</value>
</data>
<data name="OfferPriceShouldBeMoreThanZero" xml:space="preserve">
<value>Angebotspreis sollte größer als Null sein.</value>
<value>Angebotspreis sollte größer als NULL sein.</value>
</data>
<data name="MicrosoftOfferIdMustBeSet" xml:space="preserve">
<value>MicrosoftOfferId muss eingestellt werden</value>
@ -925,16 +980,22 @@
<value>Haus</value>
</data>
<data name="AdminConsoleDisplayName" xml:space="preserve">
<value>Webshop-Designer</value>
<value>Web Shop-Designer</value>
</data>
<data name="BrandingDisplayName" xml:space="preserve">
<value>Branding-Setup</value>
</data>
<data name="OffersDisplayName" xml:space="preserve">
<value>Angebotserstellung</value>
<value>Angebote-Setup</value>
</data>
<data name="PaymentDisplayName" xml:space="preserve">
<value>Einrichtung der Zahlungsmethode</value>
<value>Zahlung-Setup</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Bestellhistorie</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Abonnements verwalten</value>
</data>
<data name="GoToHomePageCaption" xml:space="preserve">
<value>Gehe zur Startseite</value>
@ -1107,6 +1168,12 @@
<data name="LicenseStatusCaption" xml:space="preserve">
<value>Status</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Kunde verwaltet Abonnements</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partner verwaltet Abonnements</value>
</data>
<data name="OrdersCaption" xml:space="preserve">
<value>Bestellungen</value>
</data>
@ -1114,32 +1181,20 @@
<value>Instrumentationsschlüssel:</value>
</data>
<data name="InstrumentationKeyFieldSubText" xml:space="preserve">
<value>Sie können eine Application Insights Instrumentationsschlüssel angeben, um die Telemetrie-Daten aus dem Portal zu erfassen.</value>
<value>Sie können eine Application Insights instrumentationsschlüssel angeben, um die Telemetrie-Daten aus dem Portal zu erfassen.</value>
</data>
<data name="UsageBasedSubscriptionsCaption" xml:space="preserve">
<value>Nutzung-Abonnements</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Klicken Sie, um Ihr Unternehmensbranding konfigurieren.</value>
</data>
<data name="Undo" xml:space="preserve">
<value>Rückgängig</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Ihre Domain-Präfix wird angezeigt, nachdem die @ Ihre Domain e-Mail-Adresse. Es muss eindeutig sein und darf Satzzeichen enthalten. Beispiel: Jobs.</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Dies werden die Benutzer-Id, die Sie mit Ihrem Office 365-Konto verwenden möchten.</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Ansicht dieser Webseite-Datenschutzbestimmungen</value>
</data>
<data name="CustomerManagementDisplayName" xml:space="preserve">
<value>Freigeschaltene Kunden</value>
<value>Freigeschaltete Kunden</value>
</data>
<data name="CustomerManagementHeader" xml:space="preserve">
<value>Verwalten Sie Kunden für vorab genehmigte Transaktionen.</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>"Alles auswählen", markieren Sie alle aktuelle und zukünftige Kunden als freigeschalteter Transact in der Ladenzeile.</value>
</data>
<data name="CustomerManagementAllCustomersToggleCaption" xml:space="preserve">
<value>Wählen Sie alle</value>
</data>
@ -1170,100 +1225,61 @@
<data name="ProcessingPreApprovedTxNotification" xml:space="preserve">
<value>Diese Transaktion ist bereits genehmigten. Verarbeitungsreihenfolge...</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Gekauft</value>
</data>
<data name="PaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Um Zahlungen von Ihren Kunden annehmen zu können, müssen Sie ein PayPal-Konto benutzen. Wenn Sie über keines verfügen, besuchen Sie bitte </value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Kundenangaben</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Danke. Der Kunde erstellt wurde und Ihre Bestellung wurde erfolgreich bearbeitet.</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Weiter zur Zahlung</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Bestellung vorbereitet und umleiten auf Zahlungs-Gateway...</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Zahlungsinformationen gesammelt, Kunden- und Verarbeitungsreihenfolge zu schaffen...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Bestätigung</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Zahlungsinformationen gesammelt, jetzt Auftragsabwicklung...</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Urheberrecht</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Keine Angebote gefunden</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Suche nach Angebot</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>"Alles auswählen", markieren Sie alle aktuelle und zukünftige Kunden als freigeschalteter Transact in der Ladenzeile.</value>
</data>
<data name="SelectSearchbyNameDomainPlaceholder" xml:space="preserve">
<value>Suche nach Firmenname oder Domäne</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Kunde verwaltet Abonnements</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partner verwaltet Abonnements</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Bestellhistorie</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Abonnements verwalten</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Fehler beim Verarbeitungsreihenfolge. Bitte klicken Sie auf fertig, und versuchen Sie es erneut.</value>
</data>
<data name="CountryNameIN" xml:space="preserve">
<value>Indien</value>
</data>
<data name="PayUAccountTypeCaption" xml:space="preserve">
<value>Konto Typ</value>
<value>PayU Kontotyp:</value>
</data>
<data name="PayUAccountTypeSubText" xml:space="preserve">
<value>Sie können zum Testen Ihrer Transaktionen ein Sandbox-Konto verwenden. Anschlie¬ßend können Sie auf ein Live-Konto umstellen.</value>
<value>Sie können ein Test-Konto um Ihre Transaktionen zu testen auswählen. Sobald funktioniert, wechseln Sie zu einem live-Konto-Typ zu Transaktionen</value>
</data>
<data name="PayUMerchantKeyCaption" xml:space="preserve">
<value>Händlerschlüssel</value>
<value>PayU Kaufmann Schlüssel:</value>
</data>
<data name="PayUMerchantSaltSubText" xml:space="preserve">
<value>Geben Sie Ihre merchant ID ein</value>
<value>Geben Sie Ihre PayU Kaufmann Salz</value>
</data>
<data name="PayUSaltCaption" xml:space="preserve">
<value>Merchant Salt</value>
<value>PayU Händler Salz:</value>
</data>
<data name="PayUMerchantKeySubText" xml:space="preserve">
<value>Geben Sie Ihre merchant ID ein</value>
<value>Geben Sie Ihren Schlüssel PayU Kaufmann</value>
</data>
<data name="PayUAuthorizationCaption" xml:space="preserve">
<value>Genehmigung</value>
<value>PayU Autorisierung</value>
</data>
<data name="PayUAuthSubText" xml:space="preserve">
<value>Geben Sie Ihr</value>
<value>Geben Sie Ihre PayU Autorisierung</value>
</data>
<data name="PayUPaymentConfigurationHeader" xml:space="preserve">
<value>Kontoeinstellungen bearbeiten</value>
<value>Bieten Sie Ihre PayUMoney Merchant Account-Einstellungen</value>
</data>
<data name="PayUPaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>Ich möchte ein neues Konto erstellen</value>
<value>einen neuen Händler-Konto erstellen, wenn Sie nicht besitzen.</value>
</data>
<data name="PayUPaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Um Zahlungen von Ihren Kunden erhalten, sollten Sie ein PayUMoney Händler-Konto verwenden, besuchen Sie bitte:!</value>
<value>Um Zahlungen von Ihren Kunden erhalten, sollten Sie einen PayUMoney Merchant-Account verwenden, besuchen Sie bitte:</value>
</data>
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>Vereinbarung-Benutzerkennung:</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>Kennung des Benutzers des Partners, die Annahme des Abkommens Microsoft Cloud zugeordnet werden soll.</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>Ungültige Benutzer-ID.</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>Ich akzeptiere die</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>Nutzungsbedingungen</value>
</data>
</root>

Просмотреть файл

@ -132,6 +132,9 @@
<data name="ContactUs" xml:space="preserve">
<value>En contacto con nosotros</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>...</value>
</data>
@ -175,7 +178,7 @@
<value> nuevas notificaciones</value>
</data>
<data name="OK" xml:space="preserve">
<value>Vale</value>
<value>De acuerdo</value>
</data>
<data name="PasswordLabel" xml:space="preserve">
<value>Contraseña</value>
@ -225,6 +228,9 @@
<data name="Confirmation" xml:space="preserve">
<value>Confirmación</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Gracias. El cliente fue creado y su solicitud fue procesada con éxito.</value>
</data>
<data name="ContactInformation" xml:space="preserve">
<value>Información del cliente</value>
</data>
@ -234,6 +240,9 @@
<data name="MicrosoftId" xml:space="preserve">
<value>ID de Microsoft</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Detalles de cliente</value>
</data>
<data name="Subscription" xml:space="preserve">
<value>Suscripción</value>
</data>
@ -246,6 +255,9 @@
<data name="AddSubscriptions" xml:space="preserve">
<value>Añadir suscripciones</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Proceder al pago</value>
</data>
<data name="AcceptTerms" xml:space="preserve">
<value>Acepto los términos y condiciones</value>
</data>
@ -297,6 +309,9 @@
<data name="SelectMicrosoftOfferCaption" xml:space="preserve">
<value>Seleccione una oferta de Microsoft:</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Búsqueda por la oferta de</value>
</data>
<data name="YourAnnualPriceCaption" xml:space="preserve">
<value>Precio anual:</value>
</data>
@ -318,6 +333,9 @@
<data name="AddSummaryPointTooltip" xml:space="preserve">
<value>Añadir Extracto de oferta después de esto</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Haga clic para configurar la marca de su empresa.</value>
</data>
<data name="OfferFeaturePlaceHolder" xml:space="preserve">
<value>Describir una característica que da a esta oferta</value>
</data>
@ -375,6 +393,9 @@
<data name="Description" xml:space="preserve">
<value>Descripción</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>No hay ofertas encontradas</value>
</data>
<data name="EmptyOfferListMessage" xml:space="preserve">
<value>No tienes ofertas configuradas. Haga clic en Añadir oferta anterior para comenzar a añadir sus ofertas.</value>
</data>
@ -517,7 +538,7 @@
<value>Recuperar información de pago</value>
</data>
<data name="LiveAccountTypeCaption" xml:space="preserve">
<value>Cuenta</value>
<value>Cuenta real</value>
</data>
<data name="PaymentConfigurationHeader" xml:space="preserve">
<value>Proporcionar su PayPal Pro configuración de la cuenta</value>
@ -547,7 +568,7 @@
<value>Entrar en su secreto de cliente de PayPal</value>
</data>
<data name="SandboxAccountTypeCaption" xml:space="preserve">
<value>Cuenta de sandbox</value>
<value>Cuenta Sandbox</value>
</data>
<data name="UndoUnsavedChanges" xml:space="preserve">
<value>Deshacer los cambios no guardados pago</value>
@ -579,6 +600,9 @@
<data name="CustomerProfileContactInfoSectionCaption" xml:space="preserve">
<value>Información de contacto</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>El prefijo de su dominio aparecerá después de la @ en su dirección de correo electrónico de dominio. Tiene que ser único y no puede contener cualquier signos de puntuación. Ejemplo: yourcompany.</value>
</data>
<data name="CustomerProfileDomainPrefixCaption" xml:space="preserve">
<value>Prefijo de número de dominio</value>
</data>
@ -594,6 +618,9 @@
<data name="CustomerProfileLastNameCaption" xml:space="preserve">
<value>Apellido</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Se trata de la identificación de usuario que utilizará con su cuenta de Office 365.</value>
</data>
<data name="CustomerProfileOffice365UserNameCaption" xml:space="preserve">
<value>Nombre de usuario</value>
</data>
@ -630,6 +657,9 @@
<data name="CommerceOperationTypeAddSeats" xml:space="preserve">
<value>Añadido asientos</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Comprar</value>
</data>
<data name="CommerceOperationTypeRenewSubscription" xml:space="preserve">
<value>Renovación</value>
</data>
@ -639,6 +669,9 @@
<data name="CustomerRegistrationMessage" xml:space="preserve">
<value>Registro de cliente...</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Preparación de pedido y redirigiendo a la pasarela de pago...</value>
</data>
<data name="OrderRegistrationFailureMessage" xml:space="preserve">
<value>Orden registro Error</value>
</data>
@ -759,6 +792,9 @@
<data name="PrivacyAgreementFieldSubText" xml:space="preserve">
<value>Puede especificar un enlace que muestra los términos de privacidad a sus clientes aquí que se mostrarán en el pie de página de inicio</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Vista esta términos de privacidad del sitio web</value>
</data>
<data name="CouldNotRetrieveCustomerAccount" xml:space="preserve">
<value>No se pudo recuperar su cuenta. Por favor Inténtalo más tarde.</value>
</data>
@ -807,6 +843,12 @@
<data name="InvalidContactUsPhone" xml:space="preserve">
<value>Por favor ingrese un teléfono válido apoyo contacto</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Información recogida, creación de cliente y orden de procesamiento...</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Pago procesamiento de la información recopilada, ahora orden...</value>
</data>
<data name="AddSeatsOperationCaption" xml:space="preserve">
<value>Añadiendo asientos a suscripción.</value>
</data>
@ -819,12 +861,18 @@
<data name="OrderFailureMessage" xml:space="preserve">
<value>Error al orden de procesamiento. Por favor vuelva a intentarlo más tarde.</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Falta en el orden de procesamiento. Por favor, haga clic en hecho y vuelva a intentarlo.</value>
</data>
<data name="PaymentReceiptFailureNotification" xml:space="preserve">
<value>Falla en la recepción de información de pago. Por favor, haga clic en terminado para intentarlo de nuevo.</value>
</data>
<data name="ProcessingOrderNotification" xml:space="preserve">
<value>Recibido correctamente la información de pago. Orden de procesamiento...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Confirmación</value>
</data>
<data name="NewCustomerOrderSuccessMessage" xml:space="preserve">
<value>Su pedido de inscripción fue procesada con éxito.</value>
</data>
@ -942,6 +990,12 @@
<data name="PaymentDisplayName" xml:space="preserve">
<value>Configuración de pagos</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Historia de la orden</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Administrar suscripciones</value>
</data>
<data name="GoToHomePageCaption" xml:space="preserve">
<value>Ir a la página de inicio</value>
</data>
@ -1113,6 +1167,12 @@
<data name="LicenseStatusCaption" xml:space="preserve">
<value>Estado</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Suscripciones de clientes gestionados</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Suscripciones de socios administrados</value>
</data>
<data name="OrdersCaption" xml:space="preserve">
<value>Órdenes de</value>
</data>
@ -1125,24 +1185,15 @@
<data name="UsageBasedSubscriptionsCaption" xml:space="preserve">
<value>Suscripciones de uso basado en</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Haga clic para configurar la marca de su empresa.</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>El prefijo de su dominio aparecerá después de la @ en su dirección de correo electrónico de dominio. Tiene que ser único y no puede contener cualquier signos de puntuación. Ejemplo: yourcompany.</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Se trata de la identificación de usuario que utilizará con su cuenta de Office 365.</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Vista esta términos de privacidad del sitio web</value>
</data>
<data name="CustomerManagementDisplayName" xml:space="preserve">
<value>Clientes pre aprobados</value>
</data>
<data name="CustomerManagementHeader" xml:space="preserve">
<value>Gestión de clientes para las transacciones previamente aprobados.</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>"Seleccionar todo" va a marcar todos los actuales y futuros clientes como aprobados para tramitar en el frente de la tienda.</value>
</data>
<data name="CustomerManagementAllCustomersToggleCaption" xml:space="preserve">
<value>Seleccionar todo</value>
</data>
@ -1173,97 +1224,61 @@
<data name="ProcessingPreApprovedTxNotification" xml:space="preserve">
<value>Esta transacción es aprobada previamente. Orden de procesamiento...</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Comprar</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Detalles del Cliente</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Gracias. El cliente fue creado y su solicitud fue procesada con éxito.</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Proceder al pago</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Preparación de pedido y redirigiendo a la pasarela de pago...</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Información recogida, creación de cliente y orden de procesamiento...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Confirmación</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Pago procesamiento de la información recopilada, ahora orden...</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright © 2017</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>No hay ofertas encontradas</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Búsqueda por la oferta de</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>"Seleccionar todo" va a marcar todos los actuales y futuros clientes como aprobados para tramitar en el frente de la tienda.</value>
</data>
<data name="SelectSearchbyNameDomainPlaceholder" xml:space="preserve">
<value>Buscar por dominio o nombre de la empresa</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Suscripciones de clientes gestionados</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Suscripciones de socios administrados</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Historia de la orden</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Administrar suscripciones</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Falta en el orden de procesamiento. Por favor, haga clic en hecho y vuelva a intentarlo.</value>
</data>
<data name="CountryNameIN" xml:space="preserve">
<value>India</value>
</data>
<data name="PayUAccountTypeCaption" xml:space="preserve">
<value>Tpo de Cuenta</value>
<value>PayU el tipo de cuenta:</value>
</data>
<data name="PayUAccountTypeSubText" xml:space="preserve">
<value>Puede seleccionar un tipo de cuenta de prueba para probar sus transacciones. Una vez en marcha, se puede cambiar a un tipo de cuenta para empezar a tramitar</value>
</data>
<data name="PayUMerchantKeyCaption" xml:space="preserve">
<value>Merchant Key</value>
<value>Comerciante de PayU clave:</value>
</data>
<data name="PayUMerchantSaltSubText" xml:space="preserve">
<value>Ingrese su identificación de comerciante</value>
<value>Introduzca su sal PayU del comerciante</value>
</data>
<data name="PayUSaltCaption" xml:space="preserve">
<value>Merchant Salt</value>
<value>PayU sal mercantil:</value>
</data>
<data name="PayUMerchantKeySubText" xml:space="preserve">
<value>Ingrese su identificación de comerciante</value>
<value>Introduzca su código de comerciante PayU</value>
</data>
<data name="PayUAuthorizationCaption" xml:space="preserve">
<value>Autorización</value>
<value>Autorización de PayU</value>
</data>
<data name="PayUAuthSubText" xml:space="preserve">
<value>¡Entra en su autorización de PayU!</value>
<value>Introduzca su autorización por PayU</value>
</data>
<data name="PayUPaymentConfigurationHeader" xml:space="preserve">
<value>Configuración de la cuenta</value>
<value>Proporcionar al vendedor de PayUMoney configuración de la cuenta</value>
</data>
<data name="PayUPaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>para crear una nueva cuenta mercantil si no tiene una.!</value>
<value>para crear una nueva cuenta si no tienes uno.</value>
</data>
<data name="PayUPaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Para recibir pagos de sus clientes, debe usar una cuenta de comerciante de PayUMoney, visite :!</value>
<value>Para recibir los pagos de sus clientes, debe utilizar una cuenta de comerciante de PayUMoney, por favor visite:</value>
</data>
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>Acuerdo usuario ID:</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>Identificador del usuario de la pareja para ser asociado a la aceptación del acuerdo de nube de Microsoft.</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>Identificador de usuario no válido.</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>Acepto la</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>términos de servicio</value>
</data>
</root>

Просмотреть файл

@ -132,6 +132,9 @@
<data name="ContactUs" xml:space="preserve">
<value>Contactez-nous</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>...</value>
</data>
@ -225,6 +228,9 @@
<data name="Confirmation" xml:space="preserve">
<value>Confirmation</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Merci. Le client a été créé et que votre commande a été traitée avec succès.</value>
</data>
<data name="ContactInformation" xml:space="preserve">
<value>Renseignements sur les clients</value>
</data>
@ -234,6 +240,9 @@
<data name="MicrosoftId" xml:space="preserve">
<value>Microsoft ID</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Détails du client</value>
</data>
<data name="Subscription" xml:space="preserve">
<value>Abonnement</value>
</data>
@ -246,6 +255,9 @@
<data name="AddSubscriptions" xml:space="preserve">
<value>Ajouter des abonnements</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Procéder au paiement</value>
</data>
<data name="AcceptTerms" xml:space="preserve">
<value>Jaccepte les termes et conditions</value>
</data>
@ -297,6 +309,9 @@
<data name="SelectMicrosoftOfferCaption" xml:space="preserve">
<value>Sélectionnez une offre de Microsoft :</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Rechercher par offre</value>
</data>
<data name="YourAnnualPriceCaption" xml:space="preserve">
<value>Prix annuel :</value>
</data>
@ -318,6 +333,9 @@
<data name="AddSummaryPointTooltip" xml:space="preserve">
<value>Ajouter Résumé de loffre après cela</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Cliquez ici pour configurer votre marque de la société.</value>
</data>
<data name="OfferFeaturePlaceHolder" xml:space="preserve">
<value>Décrire une fonction, que cette offre donne</value>
</data>
@ -375,6 +393,9 @@
<data name="Description" xml:space="preserve">
<value>Description</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Aucune offre trouvée</value>
</data>
<data name="EmptyOfferListMessage" xml:space="preserve">
<value>Vous navez pas doffres configurés. Cliquez sur Ajouter offre ci-dessus pour commencer à ajouter vos offres.</value>
</data>
@ -517,7 +538,7 @@
<value>Récupération des informations de paiement</value>
</data>
<data name="LiveAccountTypeCaption" xml:space="preserve">
<value>compte live</value>
<value>Compte Live</value>
</data>
<data name="PaymentConfigurationHeader" xml:space="preserve">
<value>Fournir votre PayPal Pro paramètres du compte</value>
@ -547,7 +568,7 @@
<value>Entrez votre secret de client de PayPal</value>
</data>
<data name="SandboxAccountTypeCaption" xml:space="preserve">
<value>Compte de sandbox</value>
<value>Compte de bac à sable</value>
</data>
<data name="UndoUnsavedChanges" xml:space="preserve">
<value>Annuler les modifications non enregistrées de paiement</value>
@ -579,6 +600,9 @@
<data name="CustomerProfileContactInfoSectionCaption" xml:space="preserve">
<value>Informations de contact</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Le préfixe de votre domaine saffiche après le @ dans votre adresse de courrier électronique de domaine. Il doit être unique et ne peut contenir aucune ponctuation. Exemple : yourcompany.</value>
</data>
<data name="CustomerProfileDomainPrefixCaption" xml:space="preserve">
<value>Préfixe de domaine</value>
</data>
@ -594,6 +618,9 @@
<data name="CustomerProfileLastNameCaption" xml:space="preserve">
<value>Nom de famille</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Il sagit de lidentifiant que vous utiliserez avec votre compte Office 365.</value>
</data>
<data name="CustomerProfileOffice365UserNameCaption" xml:space="preserve">
<value>Nom dutilisateur</value>
</data>
@ -630,6 +657,9 @@
<data name="CommerceOperationTypeAddSeats" xml:space="preserve">
<value>Ajout de sièges</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Acheté</value>
</data>
<data name="CommerceOperationTypeRenewSubscription" xml:space="preserve">
<value>Renouvellement</value>
</data>
@ -639,6 +669,9 @@
<data name="CustomerRegistrationMessage" xml:space="preserve">
<value>Inscription client...</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Préparation de commande et la redirection vers la passerelle de paiement...</value>
</data>
<data name="OrderRegistrationFailureMessage" xml:space="preserve">
<value>Erreur denregistrement de commande</value>
</data>
@ -759,6 +792,9 @@
<data name="PrivacyAgreementFieldSubText" xml:space="preserve">
<value>Vous pouvez spécifier un lien qui montre les conditions de la vie privée à vos clients ici qui seront affiché dans le pied de page daccueil</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Découvre ce conditions de confidentialité du site Internet</value>
</data>
<data name="CouldNotRetrieveCustomerAccount" xml:space="preserve">
<value>Pas pu récupérer votre compte. Veuillez réessayer ultérieurement.</value>
</data>
@ -807,6 +843,12 @@
<data name="InvalidContactUsPhone" xml:space="preserve">
<value>Veuillez entrer un téléphone valide contacter le support technique</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Informations de paiement recueillies, créant customer et order de traitement...</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Paiement traitement de linformation recueillie, désormais arrêté...</value>
</data>
<data name="AddSeatsOperationCaption" xml:space="preserve">
<value>Ajouter des sièges à abonnement.</value>
</data>
@ -819,12 +861,18 @@
<data name="OrderFailureMessage" xml:space="preserve">
<value>Erreur lors de lordre de traitement. Veuillez réessayer plus tard.</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Échec dans lordre de traitement. Sil vous plaît cliquez sur terminé, puis réessayez.</value>
</data>
<data name="PaymentReceiptFailureNotification" xml:space="preserve">
<value>Défaillance dans la réception des informations de paiement. Sil vous plaît, cliquez sur OK pour réessayer.</value>
</data>
<data name="ProcessingOrderNotification" xml:space="preserve">
<value>Bien reçu des informations de paiement. Ordre de traitement...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Confirmation</value>
</data>
<data name="NewCustomerOrderSuccessMessage" xml:space="preserve">
<value>Votre ordre dinscription a été traitée avec succès.</value>
</data>
@ -934,7 +982,7 @@
<value>Magasin Web Builder</value>
</data>
<data name="BrandingDisplayName" xml:space="preserve">
<value>Le programme dinstallation dimage de marque </value>
<value>Le programme dinstallation dimage de marque</value>
</data>
<data name="OffersDisplayName" xml:space="preserve">
<value>Offre le programme dinstallation</value>
@ -942,6 +990,12 @@
<data name="PaymentDisplayName" xml:space="preserve">
<value>Installation de paiement</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Historique des commandes</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Gérer les abonnements</value>
</data>
<data name="GoToHomePageCaption" xml:space="preserve">
<value>Aller à la page daccueil</value>
</data>
@ -1113,6 +1167,12 @@
<data name="LicenseStatusCaption" xml:space="preserve">
<value>Statut</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Abonnements client géré</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partenaire gestion abonnements</value>
</data>
<data name="OrdersCaption" xml:space="preserve">
<value>Commandes</value>
</data>
@ -1125,24 +1185,15 @@
<data name="UsageBasedSubscriptionsCaption" xml:space="preserve">
<value>Abonnements dutilisation en fonction</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Cliquez ici pour configurer votre marque de la société.</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Le préfixe de votre domaine saffiche après le @ dans votre adresse de courrier électronique de domaine. Il doit être unique et ne peut contenir aucune ponctuation. Exemple : yourcompany.</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Il sagit de lidentifiant que vous utiliserez avec votre compte Office 365.</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>Découvre ce conditions de confidentialité du site Internet</value>
</data>
<data name="CustomerManagementDisplayName" xml:space="preserve">
<value>Clients préapprouvés</value>
</data>
<data name="CustomerManagementHeader" xml:space="preserve">
<value>Gérer des clients pour les transactions pré-approuvé.</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>« Tout sélectionner » marquera tous les clients actuels et futurs et approuvés préalablement pour effectuer des transactions dans la devanture de magasin.</value>
</data>
<data name="CustomerManagementAllCustomersToggleCaption" xml:space="preserve">
<value>Sélectionner tout</value>
</data>
@ -1173,97 +1224,61 @@
<data name="ProcessingPreApprovedTxNotification" xml:space="preserve">
<value>Cette transaction est pré-approuvé. Ordre de traitement...</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Acheté</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Détails Client</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Merci. Le client a été créé et que votre commande a été traitée avec succès.</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Procéder au paiement</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Préparation de commande et la redirection vers la passerelle de paiement...</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Informations de paiement recueillies, créant customer et order de traitement...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Confirmation</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Paiement traitement de linformation recueillie, désormais arrêté...</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright ©2017.</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Aucune offre trouvée</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Rechercher par offre</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>« Tout sélectionner » marquera tous les clients actuels et futurs et approuvés préalablement pour effectuer des transactions dans la devanture de magasin.</value>
</data>
<data name="SelectSearchbyNameDomainPlaceholder" xml:space="preserve">
<value>Effectuer une recherche par nom de lentreprise ou de domaine</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Abonnements client géré</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partenaire gestion abonnements</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Historique des commandes</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Gérer les abonnements</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Échec dans lordre de traitement. Sil vous plaît cliquez sur terminé, puis réessayez.</value>
</data>
<data name="CountryNameIN" xml:space="preserve">
<value>Inde</value>
</data>
<data name="PayUAccountTypeCaption" xml:space="preserve">
<value>Type de compte</value>
<value>Type de compte de Marie Eugenie :</value>
</data>
<data name="PayUAccountTypeSubText" xml:space="preserve">
<value>Vous pouvez sélectionner un type de compte de test pour tester vos transactions. Une fois que le travail, vous pouvez basculer vers un type de compte live pour commencer à exercer des</value>
</data>
<data name="PayUMerchantKeyCaption" xml:space="preserve">
<value>Clé Marchand</value>
<value>Marchand Marie Eugenie clé :</value>
</data>
<data name="PayUMerchantSaltSubText" xml:space="preserve">
<value>Veuillez entrer votre ID de marchand</value>
<value>Entrez votre sel de marchand Marie eugenie</value>
</data>
<data name="PayUSaltCaption" xml:space="preserve">
<value>Marchand</value>
<value>Marie Eugenie sel marchand :</value>
</data>
<data name="PayUMerchantKeySubText" xml:space="preserve">
<value>Entrez votre clé de marchand Marie eugenie !</value>
<value>Entrez votre clé de marchand Marie eugenie</value>
</data>
<data name="PayUAuthorizationCaption" xml:space="preserve">
<value>autorisation</value>
<value>Autorisation de Marie eugenie</value>
</data>
<data name="PayUAuthSubText" xml:space="preserve">
<value>Entrez votre</value>
<value>Entrez votre autorisation de Marie eugenie</value>
</data>
<data name="PayUPaymentConfigurationHeader" xml:space="preserve">
<value>Les paramètres de votre compte</value>
<value>Fournir votre marchand PayUMoney paramètres de compte</value>
</data>
<data name="PayUPaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>pour créer un nouveau compte marchand si vous nen avez pas. !</value>
<value>pour créer un nouveau compte marchand si vous nen avez pas.</value>
</data>
<data name="PayUPaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Pour recevoir des paiements de vos clients, vous devez utiliser un compte marchand PayUMoney, s'il vous plaît visitez:</value>
<value>Pour recevoir les paiements de vos clients, vous devriez utiliser un compte marchand de PayUMoney, veuillez visiter :</value>
</data>
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>Accord utilisateur ID :</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>Identificateur de lutilisateur du partenaire de sassocier à lacceptation de laccord de Cloud de Microsoft.</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>Identificateur dutilisateur non valide.</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>Jaccepte les</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>modalités de service</value>
</data>
</root>

Просмотреть файл

@ -132,6 +132,9 @@
<data name="ContactUs" xml:space="preserve">
<value>お問い合わせ</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>著作権 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>.</value>
</data>
@ -142,13 +145,13 @@
<value>ポータルのコンテンツを取得できませんでした。</value>
</data>
<data name="First" xml:space="preserve">
<value>最初</value>
<value>まずは</value>
</data>
<data name="InvalidPortalConfiguration" xml:space="preserve">
<value>ポータルの構成が無効であると思われる</value>
</data>
<data name="Last" xml:space="preserve">
<value>最後</value>
<value>前の</value>
</data>
<data name="Loading" xml:space="preserve">
<value>読み込み</value>
@ -163,7 +166,7 @@
<value>戻ってください。</value>
</data>
<data name="Next" xml:space="preserve">
<value>次</value>
<value>次</value>
</data>
<data name="No" xml:space="preserve">
<value>違います</value>
@ -205,7 +208,7 @@
<value>表示タイル</value>
</data>
<data name="Yes" xml:space="preserve">
<value>[はい]</value>
<value>うん</value>
</data>
<data name="EmptyOffersErrorMessage" xml:space="preserve">
<value>少なくとも 1 つの提供を購入するを選択してください。</value>
@ -225,15 +228,21 @@
<data name="Confirmation" xml:space="preserve">
<value>確認</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>ありがとう。お客様が作成され、ご注文が正常に処理されました。</value>
</data>
<data name="ContactInformation" xml:space="preserve">
<value>顧客情報</value>
</data>
<data name="Done" xml:space="preserve">
<value>行われます</value>
<value>完成です</value>
</data>
<data name="MicrosoftId" xml:space="preserve">
<value>マイクロソフトの ID</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>顧客の詳細</value>
</data>
<data name="Subscription" xml:space="preserve">
<value>サブスクリプション</value>
</data>
@ -246,6 +255,9 @@
<data name="AddSubscriptions" xml:space="preserve">
<value>サブスクリプションを追加します。</value>
</data>
<data name="Submit" xml:space="preserve">
<value>お支払いに進みます</value>
</data>
<data name="AcceptTerms" xml:space="preserve">
<value>利用規約に同意します。</value>
</data>
@ -297,6 +309,9 @@
<data name="SelectMicrosoftOfferCaption" xml:space="preserve">
<value>マイクロソフトのオファーを選択します。</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>提供による検索します。</value>
</data>
<data name="YourAnnualPriceCaption" xml:space="preserve">
<value>年間の価格:</value>
</data>
@ -318,6 +333,9 @@
<data name="AddSummaryPointTooltip" xml:space="preserve">
<value>この後キャンペーン概要を追加します。</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>あなたの会社のブランドを構成するをクリックします。</value>
</data>
<data name="OfferFeaturePlaceHolder" xml:space="preserve">
<value>このオファーを与える機能について説明します。</value>
</data>
@ -375,6 +393,9 @@
<data name="Description" xml:space="preserve">
<value>説明</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>ない提供していますが見つかりました</value>
</data>
<data name="EmptyOfferListMessage" xml:space="preserve">
<value>構成されている任意のオファーがありません。あなたのオファーを追加する上記提供を追加をクリックします。</value>
</data>
@ -547,7 +568,7 @@
<value>あなたの PayPal のクライアント シークレットを入力します。</value>
</data>
<data name="SandboxAccountTypeCaption" xml:space="preserve">
<value>サンド ボックス アカウント</value>
<value>サンド ボックス アカウント</value>
</data>
<data name="UndoUnsavedChanges" xml:space="preserve">
<value>保存されていないお支払いの変更を元に戻す</value>
@ -579,6 +600,9 @@
<data name="CustomerProfileContactInfoSectionCaption" xml:space="preserve">
<value>連絡先情報</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>ドメイン プレフィックスが表示されます後、@ あなたのドメインのメール アドレスで。一意である必要があり、任意の句読点を含めることはできません。例: 貴社。</value>
</data>
<data name="CustomerProfileDomainPrefixCaption" xml:space="preserve">
<value>ドメイン プレフィックス</value>
</data>
@ -594,6 +618,9 @@
<data name="CustomerProfileLastNameCaption" xml:space="preserve">
<value>最後の名前</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>これは、Office 365 アカウントに使用するユーザー id になります。</value>
</data>
<data name="CustomerProfileOffice365UserNameCaption" xml:space="preserve">
<value>ユーザー名</value>
</data>
@ -630,6 +657,9 @@
<data name="CommerceOperationTypeAddSeats" xml:space="preserve">
<value>追加席</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>ご購入</value>
</data>
<data name="CommerceOperationTypeRenewSubscription" xml:space="preserve">
<value>更新</value>
</data>
@ -639,6 +669,9 @@
<data name="CustomerRegistrationMessage" xml:space="preserve">
<value>顧客を登録しています.</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>注文の準備とお支払いゲートウェイにリダイレクトする.</value>
</data>
<data name="OrderRegistrationFailureMessage" xml:space="preserve">
<value>注文登録エラー</value>
</data>
@ -759,6 +792,9 @@
<data name="PrivacyAgreementFieldSubText" xml:space="preserve">
<value>ここでホーム ページのフッターに表示されますあなたの顧客にプライバシー条件を示すリンクを指定できます。</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>このウェブサイトのプライバシー規約を表示します。</value>
</data>
<data name="CouldNotRetrieveCustomerAccount" xml:space="preserve">
<value>あなたのアカウントを取得できませんでした。後でもう一度試してください。</value>
</data>
@ -807,6 +843,12 @@
<data name="InvalidContactUsPhone" xml:space="preserve">
<value>有効な連絡先サポートの電話番号を入力してください。</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>お支払いの情報の収集、顧客との処理順序を作成.</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>お支払い情報を収集、処理順序今.</value>
</data>
<data name="AddSeatsOperationCaption" xml:space="preserve">
<value>席をサブスクリプションに追加します。</value>
</data>
@ -819,12 +861,18 @@
<data name="OrderFailureMessage" xml:space="preserve">
<value>処理順序エラーが発生しました。後で再試行してください。</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>処理順序に失敗しました。[完了] をクリックして、もう一度やり直してください。</value>
</data>
<data name="PaymentReceiptFailureNotification" xml:space="preserve">
<value>支払い情報の受信に失敗しました。再試行する完了] をクリックしてください。</value>
</data>
<data name="ProcessingOrderNotification" xml:space="preserve">
<value>お支払い情報を正常に受信します。処理順序.</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>確認</value>
</data>
<data name="NewCustomerOrderSuccessMessage" xml:space="preserve">
<value>登録注文が正常に処理されました。</value>
</data>
@ -942,6 +990,12 @@
<data name="PaymentDisplayName" xml:space="preserve">
<value>お支払い設定</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>注文履歴</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>サブスクリプションを管理します。</value>
</data>
<data name="GoToHomePageCaption" xml:space="preserve">
<value>ホーム ページに移動します。</value>
</data>
@ -1113,6 +1167,12 @@
<data name="LicenseStatusCaption" xml:space="preserve">
<value>ステータス</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>お客様が管理するサブスクリプション</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>パートナーは、サブスクリプションを管理</value>
</data>
<data name="OrdersCaption" xml:space="preserve">
<value>注文</value>
</data>
@ -1125,24 +1185,15 @@
<data name="UsageBasedSubscriptionsCaption" xml:space="preserve">
<value>使用状況ベースのサブスクリプション</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>あなたの会社のブランドを構成するをクリックします。</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>ドメイン プレフィックスが表示されます後、@ あなたのドメインのメール アドレスで。一意である必要があり、任意の句読点を含めることはできません。例: 貴社。</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>これは、Office 365 アカウントに使用するユーザー id になります。</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>このウェブサイトのプライバシー規約を表示します。</value>
</data>
<data name="CustomerManagementDisplayName" xml:space="preserve">
<value>事前承認済みのお客様</value>
</data>
<data name="CustomerManagementHeader" xml:space="preserve">
<value>事前に承認されたトランザクションのための顧客を管理します。</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>「すべて選択」店の前の事前承認としてすべて現在および将来お客様を迎えます。</value>
</data>
<data name="CustomerManagementAllCustomersToggleCaption" xml:space="preserve">
<value>すべてを選択します。</value>
</data>
@ -1173,97 +1224,61 @@
<data name="ProcessingPreApprovedTxNotification" xml:space="preserve">
<value>このトランザクションは、事前承認済みです。処理順序.</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>ご購入</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>お客様情報</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>ありがとう。お客様が作成され、ご注文が正常に処理されました。</value>
</data>
<data name="Submit" xml:space="preserve">
<value>お支払いに進みます</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>注文の準備とお支払いゲートウェイにリダイレクトする.</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>お支払いの情報の収集、顧客との処理順序を作成.</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>確認</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>お支払い情報を収集、処理順序今.</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>ない提供していますが見つかりました</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>提供による検索します。</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>「すべて選択」店の前の事前承認としてすべて現在および将来お客様を迎えます。</value>
</data>
<data name="SelectSearchbyNameDomainPlaceholder" xml:space="preserve">
<value>会社名またはドメインで検索します。</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>お客様が管理するサブスクリプション</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>パートナーは、サブスクリプションを管理</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>注文履歴</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>サブスクリプションを管理します。</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>処理順序に失敗しました。[完了] をクリックして、もう一度やり直してください。</value>
</data>
<data name="CountryNameIN" xml:space="preserve">
<value>インド</value>
</data>
<data name="PayUAccountTypeCaption" xml:space="preserve">
<value>アカウントのタイプ</value>
<value>PayU アカウントの種類:</value>
</data>
<data name="PayUAccountTypeSubText" xml:space="preserve">
<value>あなたのトランザクションをテストするためのテスト アカウントの種類を選択できます。作業は、取引を開始するライブ アカウントの種類を切り替えることができます。</value>
</data>
<data name="PayUMerchantKeyCaption" xml:space="preserve">
<value>マーチャントキー</value>
<value>PayU マーチャント キー:</value>
</data>
<data name="PayUMerchantSaltSubText" xml:space="preserve">
<value>iDEAL加盟店IDを入力してください</value>
<value>PayU 商人塩を入力します。</value>
</data>
<data name="PayUSaltCaption" xml:space="preserve">
<value>PayU 商人塩:!</value>
<value>PayU 商人塩:</value>
</data>
<data name="PayUMerchantKeySubText" xml:space="preserve">
<value>iDEALマーチャントキーを入力してください。</value>
<value>PayU マーチャント キーを入力します。</value>
</data>
<data name="PayUAuthorizationCaption" xml:space="preserve">
<value>承認</value>
<value>PayU 承認</value>
</data>
<data name="PayUAuthSubText" xml:space="preserve">
<value>名前を入力</value>
<value>PayU 承認を入力します。</value>
</data>
<data name="PayUPaymentConfigurationHeader" xml:space="preserve">
<value>PayUMoney 商人のアカウントの設定を提供する!</value>
<value>PayUMoney 商人のアカウントの設定を提供します。</value>
</data>
<data name="PayUPaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>新規口座開設のための3ステップ</value>
<value>あなたは 1 つを持っていない場合は、新しい商人のアカウントを作成します。</value>
</data>
<data name="PayUPaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>顧客からの支払を受け取るためには、PayUMoney の商人の記述を使用するべきである、訪問しなさい:</value>
<value>あなたの顧客から支払いを受け取る、PayUMoney の商人のアカウントを使用してをご覧くださいする必要があります。</value>
</data>
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>契約ユーザー ID:</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>マイクロソフト クラウド契約の受諾と関連するパートナーのユーザーの識別子。</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>無効なユーザー id。</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>同意、</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>サービス利用規約</value>
</data>
</root>

Просмотреть файл

@ -132,6 +132,9 @@
<data name="ContactUs" xml:space="preserve">
<value>Neem contact op met ons</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>...</value>
</data>
@ -225,6 +228,9 @@
<data name="Confirmation" xml:space="preserve">
<value>Bevestiging</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Dank u. Eerst de klant gemaakt en uw bestelling is verwerkt.</value>
</data>
<data name="ContactInformation" xml:space="preserve">
<value>Klantgegevens</value>
</data>
@ -234,6 +240,9 @@
<data name="MicrosoftId" xml:space="preserve">
<value>Microsoft ID</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Klantgegevens</value>
</data>
<data name="Subscription" xml:space="preserve">
<value>Abonnement</value>
</data>
@ -246,6 +255,9 @@
<data name="AddSubscriptions" xml:space="preserve">
<value>Toevoegen van abonnementen</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Ga naar betaling</value>
</data>
<data name="AcceptTerms" xml:space="preserve">
<value>Ik accepteer de voorwaarden en bepalingen</value>
</data>
@ -297,6 +309,9 @@
<data name="SelectMicrosoftOfferCaption" xml:space="preserve">
<value>Selecteer een Microsoft bieden:</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Zoek met de aanbieding</value>
</data>
<data name="YourAnnualPriceCaption" xml:space="preserve">
<value>Jaarlijkse prijs:</value>
</data>
@ -318,6 +333,9 @@
<data name="AddSummaryPointTooltip" xml:space="preserve">
<value>Samenvatting van de offerte na dit toevoegen</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Klik hierop als u uw bedrijf branding.</value>
</data>
<data name="OfferFeaturePlaceHolder" xml:space="preserve">
<value>Beschrijven van een functie die deze aanbieding geeft</value>
</data>
@ -375,6 +393,9 @@
<data name="Description" xml:space="preserve">
<value>Beschrijving</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Geen aanbiedingen gevonden</value>
</data>
<data name="EmptyOfferListMessage" xml:space="preserve">
<value>U hoeft niet alle aanbiedingen geconfigureerd. Klik op bovenstaande toevoegen bieden om te beginnen met het toevoegen van uw aanbiedingen.</value>
</data>
@ -517,7 +538,7 @@
<value>Ophalen van betalingsgegevens</value>
</data>
<data name="LiveAccountTypeCaption" xml:space="preserve">
<value>Live account</value>
<value>Live-account</value>
</data>
<data name="PaymentConfigurationHeader" xml:space="preserve">
<value>Bieden uw PayPal Pro Accountinstellingen</value>
@ -547,7 +568,7 @@
<value>Voer uw PayPal klant geheim</value>
</data>
<data name="SandboxAccountTypeCaption" xml:space="preserve">
<value>Sandbox-rekening</value>
<value>Sandbox-account</value>
</data>
<data name="UndoUnsavedChanges" xml:space="preserve">
<value>Betaling van de niet-opgeslagen wijzigingen ongedaan maken</value>
@ -579,6 +600,9 @@
<data name="CustomerProfileContactInfoSectionCaption" xml:space="preserve">
<value>Contact informatie</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Uw Domeinvoorvoegsel verschijnt na de @ in uw domein e-mailadres. Moet uniek zijn en mag leestekens bevatten. Voorbeeld: uwbedrijf.</value>
</data>
<data name="CustomerProfileDomainPrefixCaption" xml:space="preserve">
<value>Domeinvoorvoegsel</value>
</data>
@ -594,6 +618,9 @@
<data name="CustomerProfileLastNameCaption" xml:space="preserve">
<value>Achternaam</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Dit is de gebruikers-id die u met uw Office 365-account gebruiken zal.</value>
</data>
<data name="CustomerProfileOffice365UserNameCaption" xml:space="preserve">
<value>Gebruikersnaam</value>
</data>
@ -630,6 +657,9 @@
<data name="CommerceOperationTypeAddSeats" xml:space="preserve">
<value>Extra zitplaatsen</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Gekocht</value>
</data>
<data name="CommerceOperationTypeRenewSubscription" xml:space="preserve">
<value>Vernieuwing</value>
</data>
@ -639,6 +669,9 @@
<data name="CustomerRegistrationMessage" xml:space="preserve">
<value>Klant registratie...</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Voorbereiding van de volgorde en omleiden naar betalingsgateway...</value>
</data>
<data name="OrderRegistrationFailureMessage" xml:space="preserve">
<value>Order registratie fout</value>
</data>
@ -759,6 +792,9 @@
<data name="PrivacyAgreementFieldSubText" xml:space="preserve">
<value>U kunt een koppeling waarin privacybepalingen aan uw klanten hier die in de voettekst van de home pagina verschijnen zal</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>De bepalingen van de privacy van deze website weergeven</value>
</data>
<data name="CouldNotRetrieveCustomerAccount" xml:space="preserve">
<value>Uw rekening kon niet worden opgehaald. Probeer het later nog eens.</value>
</data>
@ -807,6 +843,12 @@
<data name="InvalidContactUsPhone" xml:space="preserve">
<value>Voer een geldige contact ondersteuning-telefoon</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Betalingsgegevens verzameld, klant en verwerkingsvolgorde maken...</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Betalingsinformatie verzameld, nu de verwerkingsvolgorde...</value>
</data>
<data name="AddSeatsOperationCaption" xml:space="preserve">
<value>Zetels aan abonnement toe te voegen.</value>
</data>
@ -819,12 +861,18 @@
<data name="OrderFailureMessage" xml:space="preserve">
<value>Fout tijdens de verwerkingsvolgorde. Gelieve later opnieuw proberen.</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Storing in de verwerkingsvolgorde. Klik gedaan en probeer het opnieuw.</value>
</data>
<data name="PaymentReceiptFailureNotification" xml:space="preserve">
<value>Storing in ontvangst van de betalingsinformatie. Klik gedaan opnieuw te proberen.</value>
</data>
<data name="ProcessingOrderNotification" xml:space="preserve">
<value>Correct ontvangen betalingsinformatie. Verwerkingsvolgorde...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Bevestiging</value>
</data>
<data name="NewCustomerOrderSuccessMessage" xml:space="preserve">
<value>Uw registratie bestelling correct verwerkt.</value>
</data>
@ -942,6 +990,12 @@
<data name="PaymentDisplayName" xml:space="preserve">
<value>Betaling Setup</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Bestelgeschiedenis</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Abonnementen beheren</value>
</data>
<data name="GoToHomePageCaption" xml:space="preserve">
<value>Ga naar startpagina</value>
</data>
@ -1113,6 +1167,12 @@
<data name="LicenseStatusCaption" xml:space="preserve">
<value>Status</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Klant beheerd abonnementen</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partner beheerd abonnementen</value>
</data>
<data name="OrdersCaption" xml:space="preserve">
<value>Bestellingen</value>
</data>
@ -1125,26 +1185,17 @@
<data name="UsageBasedSubscriptionsCaption" xml:space="preserve">
<value>Gebruik op basis abonnementen</value>
</data>
<data name="BrandingSectionTooltip" xml:space="preserve">
<value>Klik hierop als u uw bedrijf branding.</value>
</data>
<data name="CustomerProfileDomainInfoCaption" xml:space="preserve">
<value>Uw Domeinvoorvoegsel verschijnt na de @ in uw domein e-mailadres. Moet uniek zijn en mag leestekens bevatten. Voorbeeld: uwbedrijf.</value>
</data>
<data name="CustomerProfileOffice365EmailCaption" xml:space="preserve">
<value>Dit is de gebruikers-id die u met uw Office 365-account gebruiken zal.</value>
</data>
<data name="PrivacyAgreementToolTip" xml:space="preserve">
<value>De bepalingen van de privacy van deze website weergeven</value>
</data>
<data name="CustomerManagementDisplayName" xml:space="preserve">
<value>Vooraf geselecteerde bieders klanten</value>
</data>
<data name="CustomerManagementHeader" xml:space="preserve">
<value>Het beheren van klanten voor vooraf geselecteerde transacties.</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>'Alles selecteren' markeert alle huidige en toekomstige klanten als vooraf goedgekeurde transact aan de voorkant van de winkel.</value>
</data>
<data name="CustomerManagementAllCustomersToggleCaption" xml:space="preserve">
<value>Selecteer alle</value>
<value>Alles selecteren</value>
</data>
<data name="CustomerManagementPreApprovedColumnCaption" xml:space="preserve">
<value>Vooraf</value>
@ -1173,97 +1224,61 @@
<data name="ProcessingPreApprovedTxNotification" xml:space="preserve">
<value>Deze transactie is vooraf geselecteerde bieders. Verwerkingsvolgorde...</value>
</data>
<data name="CommerceOperationTypeAddSubscription" xml:space="preserve">
<value>Gekocht</value>
</data>
<data name="SetupInformation" xml:space="preserve">
<value>Klantgegevens</value>
</data>
<data name="ConfirmationMessage" xml:space="preserve">
<value>Dank u. Eerst de klant gemaakt en uw bestelling is verwerkt.</value>
</data>
<data name="Submit" xml:space="preserve">
<value>Ga naar betaling</value>
</data>
<data name="CustomerRegistrationSuccessMessage" xml:space="preserve">
<value>Voorbereiding van de volgorde en omleiden naar betalingsgateway...</value>
</data>
<data name="ProcessingOrderMessage" xml:space="preserve">
<value>Betalingsgegevens verzameld, klant en verwerkingsvolgorde maken...</value>
</data>
<data name="ProcessOrderPageCaption" xml:space="preserve">
<value>Bevestiging</value>
</data>
<data name="ExistingCustomerProcessingOrderMessage" xml:space="preserve">
<value>Betalingsinformatie verzameld, nu de verwerkingsvolgorde...</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright 2017</value>
</data>
<data name="EmptyMicrosoftOfferListMessage" xml:space="preserve">
<value>Geen aanbiedingen gevonden</value>
</data>
<data name="SelectSearchByOffersPlaceholder" xml:space="preserve">
<value>Zoek met de aanbieding</value>
</data>
<data name="CustomerManagementSubText" xml:space="preserve">
<value>'Alles selecteren' markeert alle huidige en toekomstige klanten als vooraf goedgekeurde transact aan de voorkant van de winkel.</value>
</data>
<data name="SelectSearchbyNameDomainPlaceholder" xml:space="preserve">
<value>Zoeken op bedrijfsnaam of domein</value>
</data>
<data name="LicenseBasedSubscriptionsCaption" xml:space="preserve">
<value>Klant beheerd abonnementen</value>
</data>
<data name="PartnerManagedSubscriptionsCaption" xml:space="preserve">
<value>Partner beheerd abonnementen</value>
</data>
<data name="MySubscriptionsDisplayName" xml:space="preserve">
<value>Bestelgeschiedenis</value>
</data>
<data name="MyAccountDisplayName" xml:space="preserve">
<value>Abonnementen beheren</value>
</data>
<data name="OrderProcessingFailureNotification" xml:space="preserve">
<value>Storing in de verwerkingsvolgorde. Klik gedaan en probeer het opnieuw.</value>
</data>
<data name="CountryNameIN" xml:space="preserve">
<value>India</value>
</data>
<data name="PayUAccountTypeCaption" xml:space="preserve">
<value>Account type</value>
<value>PayU rekeningsoort:</value>
</data>
<data name="PayUAccountTypeSubText" xml:space="preserve">
<value>U kunt het accounttype van een test om te testen uw transacties. Zodra u werkt, kunt u overschakelen naar een live-accounttype te starten transacties te verrichten</value>
</data>
<data name="PayUMerchantKeyCaption" xml:space="preserve">
<value>Merchant sleutel</value>
<value>PayU Merchant Key:</value>
</data>
<data name="PayUMerchantSaltSubText" xml:space="preserve">
<value>Vul uw iDEAL Merchant ID in</value>
<value>Voer uw PayU handelaar zout</value>
</data>
<data name="PayUSaltCaption" xml:space="preserve">
<value>Merchant Salt</value>
<value>PayU koopman zout:</value>
</data>
<data name="PayUMerchantKeySubText" xml:space="preserve">
<value>Vul uw iDEAL Merchant key in.</value>
<value>Voer uw sleutel PayU koopman</value>
</data>
<data name="PayUAuthorizationCaption" xml:space="preserve">
<value>AUTHORISATIE</value>
<value>PayU vergunning</value>
</data>
<data name="PayUAuthSubText" xml:space="preserve">
<value>Vermeld uw</value>
<value>Voer uw toestemming PayU</value>
</data>
<data name="PayUPaymentConfigurationHeader" xml:space="preserve">
<value>Account instellingen</value>
<value>Bieden uw PayUMoney Merchant Accountinstellingen</value>
</data>
<data name="PayUPaymentConfigurationSubTextPostfix" xml:space="preserve">
<value>Klik hier om een Activa rekening aan te maken</value>
<value>maken een nieuwe zakelijke rekening hebt u geen één.</value>
</data>
<data name="PayUPaymentConfigurationSubTextPrefix" xml:space="preserve">
<value>Voor het ontvangen van betalingen van uw klanten, moet u gebruik maken van een PayUMoney merchant account, u terecht op:</value>
<value>Voor het ontvangen van betalingen van uw klanten, moet u een PayUMoney koopman-account gebruikt, bezoek:</value>
</data>
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>De ID van de gebruiker van de overeenkomst:</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>Id van de gebruiker van de partner te worden geassocieerd met de aanvaarding van de overeenkomst tussen Microsoft Cloud.</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>Ongeldige gebruikers-id.</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>Ik ga akkoord met de</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>algemene gebruiksvoorwaarden</value>
</data>
</root>

Просмотреть файл

@ -133,7 +133,7 @@
<value>Contact us</value>
</data>
<data name="CopyRight" xml:space="preserve">
<value>Copyright 2017</value>
<value>Copyright 2018</value>
</data>
<data name="Ellipsis" xml:space="preserve">
<value>...</value>
@ -1266,4 +1266,19 @@
<data name="PayUWebsiteCaption" xml:space="preserve">
<value>payumoney.com</value>
</data>
<data name="AgreementUserIdFieldHeader" xml:space="preserve">
<value>Agreement User ID:</value>
</data>
<data name="AgreementUserIdSubText" xml:space="preserve">
<value>Identifier of the user from the partner to be associated with the acceptance of the Microsoft Cloud Agreement.</value>
</data>
<data name="InvalidAgreementUserId" xml:space="preserve">
<value>Invalid user identifier.</value>
</data>
<data name="AcceptPhrase" xml:space="preserve">
<value>I accept the</value>
</data>
<data name="TermsOfService" xml:space="preserve">
<value>terms of service</value>
</data>
</root>

Просмотреть файл

@ -12,21 +12,22 @@
this.viewModel = {
IsSet: ko.observable(false),
OrganizationName: ko.observable(""),
OrganizationLogo: ko.observable(""),
ContactUs: {
AgreementUserId: ko.observable(""),
ContactSales: {
Email: ko.observable(""),
Phone: ko.observable("")
},
ContactSales: {
ContactUs: {
Email: ko.observable(""),
Phone: ko.observable("")
},
HeaderImage: ko.observable(""),
InstrumentationKey: ko.observable(""),
OrganizationLogo: ko.observable(""),
OrganizationName: ko.observable(""),
PrivacyAgreement: ko.observable("")
}
}
};
};
// inherit TemplatePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.BrandingSetupPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -63,7 +64,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onRender = function () {
}).always(function () {
self.webPortal.ContentPanel.hideProgress();
});
}
};
acquireBrandingConfiguration();
} else {
@ -71,7 +72,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onRender = function () {
self._setupActions();
self.viewModel.IsSet(true);
}
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype.onUploadOrganizationLogoClicked = function () {
/// <summary>
@ -80,7 +81,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onUploadOrganizationLogoCli
// open up the file open dialog
$("#UploadOrganizationLogo").click();
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype.onOrganizationLogoUpdated = function (self, event) {
/// <summary>
@ -93,7 +94,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onOrganizationLogoUpdated =
if (event.target.files.length >= 0) {
self.viewModel.OrganizationLogo(event.target.files[0].name);
}
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype.onUploadHeaderClicked = function () {
/// <summary>
@ -102,7 +103,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onUploadHeaderClicked = fun
// open up the open file dialog
$("#UploadHeaderImage").click();
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype.onHeaderImageUpdated = function (self, event) {
/// <summary>
@ -114,7 +115,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onHeaderImageUpdated = func
if (event.target.files.length >= 0) {
self.viewModel.HeaderImage(event.target.files[0].name);
}
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function () {
/// <summary>
@ -137,6 +138,8 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function (
}
}
formData.append("AgreementUserId", this.viewModel.AgreementUserId());
formData.append("OrganizationName", this.viewModel.OrganizationName());
formData.append("OrganizationLogo", this.viewModel.OrganizationLogo());
@ -158,7 +161,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function (
data: formData,
dataType: 'json',
contentType: false,
processData: false,
processData: false
});
},
"Save Branding");
@ -189,8 +192,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function (
self.existingBrandingConfiguration = updatedBrandingInformation;
self._updateViewModel();
if (!self.restartPortalAction)
{
if (!self.restartPortalAction) {
// enable the user to restart the portal to see their changes
self.restartPortalAction = new Microsoft.WebPortal.Services.Action("reload-portal", self.webPortal.Resources.Strings.Plugins.PortalBranding.ReloadPortalButtonCaption, function (menuItem) {
window.location.reload(true);
@ -213,7 +215,9 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function (
brandingSaveNotification.message(self.webPortal.Resources.Strings.Plugins.PortalBranding.ImagesTooLarge);
break;
case Microsoft.WebPortal.ErrorCode.InvalidInput:
if (errorPayload.Details.Field === "HeaderImage") {
if (errorPayload.Details.Field === "AgreementUserId") {
brandingSaveNotification.message(self.webPortal.Resources.Strings.Plugins.PortalBranding.InvalidAgreementUserId);
} else if (errorPayload.Details.Field === "HeaderImage") {
brandingSaveNotification.message(self.webPortal.Resources.Strings.Plugins.PortalBranding.InvalidHeaderImageUri);
} else if (errorPayload.Details.Field === "OrganizationLogo") {
brandingSaveNotification.message(self.webPortal.Resources.Strings.Plugins.PortalBranding.InvalidOrganizationLogoUri);
@ -242,22 +246,26 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype.onSaveBranding = function (
self.viewModel.OrganizationName.notifySubscribers();
} else {
self.webPortal.Helpers.displayRetryCancelErrorNotification(brandingSaveNotification,
self.webPortal.Resources.Strings.Plugins.PortalBranding.BrandingUpdateErrorMessage,
self.webPortal.Resources.Strings.Plugins.PortalBranding.BrandingUpdateProgressMessage, saveBranding, function () {
self.viewModel.OrganizationName.notifySubscribers();
});
self.webPortal.Resources.Strings.Plugins.PortalBranding.BrandingUpdateErrorMessage,
self.webPortal.Resources.Strings.Plugins.PortalBranding.BrandingUpdateProgressMessage, saveBranding, function () {
self.viewModel.OrganizationName.notifySubscribers();
});
}
});
}
};
saveBranding();
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype._updateViewModel = function () {
/// <summary>
/// Updates the view model with the existing branding configuration.
/// </summary>
if (!this.existingBrandingConfiguration.AgreementUserId) {
this.existingBrandingConfiguration.AgreementUserId = "";
}
if (!this.existingBrandingConfiguration.OrganizationName) {
this.existingBrandingConfiguration.OrganizationName = "";
}
@ -267,7 +275,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype._updateViewModel = function
}
if (!this.existingBrandingConfiguration.ContactUs) {
this.existingBrandingConfiguration.ContactUs = {}
this.existingBrandingConfiguration.ContactUs = {};
}
if (!this.existingBrandingConfiguration.ContactUs.Email) {
@ -279,7 +287,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype._updateViewModel = function
}
if (!this.existingBrandingConfiguration.ContactSales) {
this.existingBrandingConfiguration.ContactSales = {}
this.existingBrandingConfiguration.ContactSales = {};
}
if (!this.existingBrandingConfiguration.ContactSales.Email) {
@ -302,6 +310,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype._updateViewModel = function
this.existingBrandingConfiguration.InstrumentationKey = "";
}
this.viewModel.AgreementUserId(this.existingBrandingConfiguration.AgreementUserId);
this.viewModel.OrganizationName(this.existingBrandingConfiguration.OrganizationName);
this.viewModel.OrganizationLogo(this.existingBrandingConfiguration.OrganizationLogo);
this.viewModel.ContactUs.Email(this.existingBrandingConfiguration.ContactUs.Email);
@ -311,7 +320,7 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype._updateViewModel = function
this.viewModel.HeaderImage(this.existingBrandingConfiguration.HeaderImage);
this.viewModel.InstrumentationKey(this.existingBrandingConfiguration.InstrumentationKey);
this.viewModel.PrivacyAgreement(this.existingBrandingConfiguration.PrivacyAgreement);
}
};
Microsoft.WebPortal.BrandingSetupPresenter.prototype._setupActions = function () {
@ -339,21 +348,23 @@ Microsoft.WebPortal.BrandingSetupPresenter.prototype._setupActions = function ()
this.saveActionStatusUpdater = ko.computed(function () {
// enable and disable the action buttons depending on whether there was a value change or not
var isFormUpdated = this.viewModel.OrganizationName() !== this.existingBrandingConfiguration.OrganizationName |
var isFormUpdated =
this.viewModel.AgreementUserId() !== this.existingBrandingConfiguration.AgreementUserId |
this.viewModel.OrganizationName() !== this.existingBrandingConfiguration.OrganizationName |
this.viewModel.OrganizationLogo() !== this.existingBrandingConfiguration.OrganizationLogo |
this.viewModel.HeaderImage() !== this.existingBrandingConfiguration.HeaderImage |
this.viewModel.InstrumentationKey() !== this.existingBrandingConfiguration.InstrumentationKey |
this.viewModel.PrivacyAgreement() !== this.existingBrandingConfiguration.PrivacyAgreement;
isFormUpdated = isFormUpdated | this.viewModel.ContactUs.Email() !== this.existingBrandingConfiguration.ContactUs.Email |
this.viewModel.ContactUs.Phone() !== this.existingBrandingConfiguration.ContactUs.Phone;
this.viewModel.ContactUs.Phone() !== this.existingBrandingConfiguration.ContactUs.Phone;
isFormUpdated = isFormUpdated | this.viewModel.ContactSales.Email() !== this.existingBrandingConfiguration.ContactSales.Email |
this.viewModel.ContactSales.Phone() !== this.existingBrandingConfiguration.ContactSales.Phone;
this.viewModel.ContactSales.Phone() !== this.existingBrandingConfiguration.ContactSales.Phone;
this.saveBrandingAction.enabled(isFormUpdated);
this.resetBrandingAction.enabled(isFormUpdated);
}, this);
}
};
//@ sourceURL=BrandingSetupPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.OfferListPresenter = function (webPortal, feature) {
Microsoft.WebPortal.OfferListPresenter = function (webPortal, feature) {
/// <summary>
/// Manages the offer configuration UX.
/// </summary>
@ -10,8 +8,8 @@ Microsoft.WebPortal.OfferListPresenter = function (webPortal, feature) {
this.base.constructor.call(this, webPortal, feature, "OfferList", "/Template/OfferList/");
this.viewModel = {
}
}
};
};
// inherit TemplatePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.OfferListPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -29,7 +27,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onRender = function () {
// the user cleared all the notifications, null our reference and recompute the enabled status of the delete button
self.offersDeletionPrompt = null;
self.deleteOffersAction.enabled(self.viewModel.offerList.selectedRows().length > 0);
}
};
// listen to the clear all notifications event
self.webPortal.EventSystem.subscribe(Microsoft.WebPortal.Event.NotificationsCleared, self.onNotificationsCleared, self);
@ -43,17 +41,17 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onRender = function () {
if (!self.offersDeletionPrompt) {
self.deleteOffersAction.enabled(false);
self.offersDeletionPrompt = new Microsoft.WebPortal.Services.Notification(Microsoft.WebPortal.Services.Notification.NotificationType.Warning,
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.DeleteOffersPromptMessage, [
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.YES, self.webPortal.Resources.Strings.Yes, function () {
self.offersDeletionPrompt.dismiss();
self._deleteSelectedOffers();
}),
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.NO, self.webPortal.Resources.Strings.No, function () {
self.offersDeletionPrompt.dismiss();
self.offersDeletionPrompt = null;
self.deleteOffersAction.enabled(self.viewModel.offerList.selectedRows().length > 0);
})
]);
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.DeleteOffersPromptMessage, [
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.YES, self.webPortal.Resources.Strings.Yes, function () {
self.offersDeletionPrompt.dismiss();
self._deleteSelectedOffers();
}),
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.NO, self.webPortal.Resources.Strings.No, function () {
self.offersDeletionPrompt.dismiss();
self.offersDeletionPrompt = null;
self.deleteOffersAction.enabled(self.viewModel.offerList.selectedRows().length > 0);
})
]);
self.webPortal.Services.Notifications.add(self.offersDeletionPrompt);
}
@ -77,14 +75,14 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onRender = function () {
this.viewModel.offerList.setSelectionMode(Microsoft.WebPortal.Views.List.SelectionMode.Multiple);
this.viewModel.offerList.setComplete(true);
}
};
Microsoft.WebPortal.OfferListPresenter.prototype.onShow = function () {
/// <summary>
/// Called when the UX is shown.
/// </summary>
this._retrievePartnerOffers(null);
}
};
Microsoft.WebPortal.OfferListPresenter.prototype.onDeactivate = function () {
/// <summary>
@ -93,7 +91,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onDeactivate = function () {
// stop listening to the event
this.webPortal.EventSystem.unsubscribe(Microsoft.WebPortal.Event.NotificationsCleared, this.onNotificationsCleared, this);
}
};
Microsoft.WebPortal.OfferListPresenter.prototype.onSelectionChanged = function (selectedRows) {
/// <summary>
@ -107,7 +105,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onSelectionChanged = function (
this.offersDeletionPrompt.dismiss();
this.offersDeletionPrompt = null;
}
}
};
Microsoft.WebPortal.OfferListPresenter.prototype.onCellClicked = function (column, row) {
/// <summary>
@ -126,11 +124,11 @@ Microsoft.WebPortal.OfferListPresenter.prototype.onCellClicked = function (colum
Summary: row.PartnerOffer.Summary,
Logo: row.PartnerOffer.LogoUri,
Thumbnail: row.PartnerOffer.ThumbnailUri
}
};
// go to the update offer feature and pass it the clicked offer
this.webPortal.Journey.advance(Microsoft.WebPortal.Feature.AddOrUpdateOffers, offerToUpdate);
}
};
Microsoft.WebPortal.OfferListPresenter.prototype._deleteSelectedOffers = function () {
/// <summary>
@ -151,7 +149,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._deleteSelectedOffers = functio
}
var deletePartnerOffersServerCall = this.webPortal.ServerCallManager.create(this.feature,
this.webPortal.Helpers.ajaxCall("api/AdminConsole/Offers/Delete", Microsoft.WebPortal.HttpMethod.Post, offersToDelete, Microsoft.WebPortal.ContentType.Json), "DeletePartnerOffers");
this.webPortal.Helpers.ajaxCall("api/AdminConsole/Offers/Delete", Microsoft.WebPortal.HttpMethod.Post, offersToDelete, Microsoft.WebPortal.ContentType.Json), "DeletePartnerOffers");
var self = this;
var offersDeletionNotification = new Microsoft.WebPortal.Services.Notification(Microsoft.WebPortal.Services.Notification.NotificationType.Progress,
@ -172,7 +170,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._deleteSelectedOffers = functio
FormattedPrice: Globalize.format(partnerOffers[i].Price, "c"),
MicrosoftOffer: function () {
for (var j in self.microsoftOffers) {
if (partnerOffers[i].MicrosoftOfferId == self.microsoftOffers[j].Offer.Id) {
if (partnerOffers[i].MicrosoftOfferId === self.microsoftOffers[j].Offer.Id) {
return self.microsoftOffers[j];
}
}
@ -182,7 +180,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._deleteSelectedOffers = functio
// TODO :: Handle Microsoft offer being pulled back due to EOL.
// Temporary fix - Do not display this partner offer for further configuration. Need a better way to handle this.
if (offerToPush.MicrosoftOffer != null) {
if (offerToPush.MicrosoftOffer !== null) {
offerToPush.IsOfferAutoRenewableCaption = offerToPush.MicrosoftOffer.Offer.IsAutoRenewable ?
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OfferAutomaticallyRenewable :
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OfferManuallyRenewable;
@ -220,7 +218,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._deleteSelectedOffers = functio
};
deletePartnerOffers();
}
};
Microsoft.WebPortal.OfferListPresenter.prototype._retrievePartnerOffers = function () {
/// <summary>
@ -237,7 +235,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._retrievePartnerOffers = functi
self.webPortal.Session.fetchMicrosoftOffers(microsoftOffersProgress);
var getPartnerOffersServerCall = self.webPortal.ServerCallManager.create(self.feature,
self.webPortal.Helpers.ajaxCall("api/AdminConsole/Offers", Microsoft.WebPortal.HttpMethod.Get), "GetPartnerOffers");
self.webPortal.Helpers.ajaxCall("api/AdminConsole/Offers", Microsoft.WebPortal.HttpMethod.Get), "GetPartnerOffers");
var partnerOffersProgress = getPartnerOffersServerCall.execute();
@ -259,7 +257,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._retrievePartnerOffers = functi
FormattedPrice: Globalize.format(partnerOffers[i].Price, "c"),
MicrosoftOffer: function () {
for (var j in microsoftOffers) {
if (partnerOffers[i].MicrosoftOfferId == microsoftOffers[j].Offer.Id) {
if (partnerOffers[i].MicrosoftOfferId === microsoftOffers[j].Offer.Id) {
return microsoftOffers[j];
}
}
@ -269,7 +267,7 @@ Microsoft.WebPortal.OfferListPresenter.prototype._retrievePartnerOffers = functi
// TODO :: Handle Microsoft offer being pulled back due to EOL.
// Temporary fix - Do not display this partner offer for further configuration. Need a better way to handle this.
if (offerToPush.MicrosoftOffer != null) {
if (offerToPush.MicrosoftOffer !== null) {
offerToPush.IsOfferAutoRenewableCaption = offerToPush.MicrosoftOffer.Offer.IsAutoRenewable ?
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OfferAutomaticallyRenewable :
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OfferManuallyRenewable;
@ -295,9 +293,9 @@ Microsoft.WebPortal.OfferListPresenter.prototype._retrievePartnerOffers = functi
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OffersFetchFailure,
self.webPortal.Resources.Strings.Plugins.AdminOfferConfiguration.OffersFetchProgress, getPartnerOffers);
});
}
};
getPartnerOffers();
}
};
//@ sourceURL=OfferListPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymentConfiguration) {
Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymentConfiguration) {
/// <summary>
///
/// </summary>
@ -15,7 +13,7 @@ Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymen
ClientId: ko.observable(""),
ClientSecret: ko.observable(""),
AccountType: ko.observable(null),
WebExperienceProfileId: ko.observable(""),
WebExperienceProfileId: ko.observable(""),
SupportedAccountTypes: ko.observableArray([
{
Id: "sandbox",
@ -26,12 +24,12 @@ Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymen
Title: this.webPortal.Resources.Strings.Plugins.PaymentConfiguration.LiveAccountTypeCaption
}
])
}
};
this.viewModel.AccountType(this.viewModel.SupportedAccountTypes()[0]);
this.existingPaymentConfiguration = paymentConfiguration;
}
};
// inherit TemplatePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.PaymentSetupPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -68,7 +66,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onRender = function () {
}).always(function () {
self.webPortal.ContentPanel.hideProgress();
});
}
};
acquirePaymentConfiguration();
} else {
@ -76,7 +74,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onRender = function () {
self._setupActions();
self.viewModel.IsSet(true);
}
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration = function () {
/// <summary>
@ -120,7 +118,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration =
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
if (errorPayload.ErrorCode == Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringConfiguration) {
if (errorPayload.ErrorCode === Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringConfiguration) {
// treat this error as non retryable.
paymentSaveNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
paymentSaveNotification.buttons([
@ -141,10 +139,10 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration =
}
});
}
};
savePayment();
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype._updateViewModel = function () {
/// <summary>
@ -160,7 +158,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._updateViewModel = function
}
if (!this.existingPaymentConfiguration.WebExperienceProfileId) {
this.existingPaymentConfiguration.WebExperienceProfileId = "";
this.existingPaymentConfiguration.WebExperienceProfileId = "";
}
if (!this.existingPaymentConfiguration.AccountType) {
@ -176,7 +174,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._updateViewModel = function
this.viewModel.AccountType(this.viewModel.SupportedAccountTypes()[i]);
}
}
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function () {
@ -207,10 +205,10 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function ()
// ensure adding the action finishes animating the action and showing it as disabled before we compute its new disabled status
this.saveActionStatusUpdater = ko.computed(function () {
// enable and disable the action buttons depending on whether there was a value change or not
var isFormUpdated = this.viewModel.ClientId() != this.existingPaymentConfiguration.ClientId |
this.viewModel.ClientSecret() != this.existingPaymentConfiguration.ClientSecret |
this.viewModel.WebExperienceProfileId() != this.existingPaymentConfiguration.WebExperienceProfileId |
(this.viewModel.AccountType() && this.viewModel.AccountType().Id != this.existingPaymentConfiguration.AccountType);
var isFormUpdated = this.viewModel.ClientId() !== this.existingPaymentConfiguration.ClientId |
this.viewModel.ClientSecret() !== this.existingPaymentConfiguration.ClientSecret |
this.viewModel.WebExperienceProfileId() !== this.existingPaymentConfiguration.WebExperienceProfileId |
(this.viewModel.AccountType() && this.viewModel.AccountType().Id !== this.existingPaymentConfiguration.AccountType);
this.savePaymentAction.enabled(isFormUpdated);
this.resetPaymentAction.enabled(isFormUpdated);
@ -219,6 +217,6 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function ()
// tell the serializer that we are done
operationResolver.resolve();
});
}
};
//@ sourceURL=PaymentSetupPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymentConfiguration) {
Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymentConfiguration) {
/// <summary>
///
/// </summary>
@ -25,12 +23,12 @@ Microsoft.WebPortal.PaymentSetupPresenter = function (webPortal, feature, paymen
Title: this.webPortal.Resources.Strings.Plugins.PaymentConfiguration.LiveAccountTypeCaption
}
])
}
};
this.viewModel.AccountType(this.viewModel.SupportedAccountTypes()[0]);
this.existingPaymentConfiguration = paymentConfiguration;
}
};
// inherit TemplatePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.PaymentSetupPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -67,7 +65,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onRender = function () {
}).always(function () {
self.webPortal.ContentPanel.hideProgress();
});
}
};
acquirePaymentConfiguration();
} else {
@ -75,7 +73,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onRender = function () {
self._setupActions();
self.viewModel.IsSet(true);
}
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration = function () {
/// <summary>
@ -118,7 +116,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration =
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
if (errorPayload.ErrorCode == Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringConfiguration) {
if (errorPayload.ErrorCode === Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringConfiguration) {
// treat this error as non retryable.
paymentSaveNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
paymentSaveNotification.buttons([
@ -139,10 +137,10 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype.onSavePaymentConfiguration =
}
});
}
};
savePayment();
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype._updateViewModel = function () {
/// <summary>
@ -169,7 +167,7 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._updateViewModel = function
this.viewModel.AccountType(this.viewModel.SupportedAccountTypes()[i]);
}
}
}
};
Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function () {
@ -200,9 +198,9 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function ()
// ensure adding the action finishes animating the action and showing it as disabled before we compute its new disabled status
this.saveActionStatusUpdater = ko.computed(function () {
// enable and disable the action buttons depending on whether there was a value change or not
var isFormUpdated = this.viewModel.ClientId() != this.existingPaymentConfiguration.ClientId |
this.viewModel.ClientSecret() != this.existingPaymentConfiguration.ClientSecret |
(this.viewModel.AccountType() && this.viewModel.AccountType().Id != this.existingPaymentConfiguration.AccountType);
var isFormUpdated = this.viewModel.ClientId() !== this.existingPaymentConfiguration.ClientId |
this.viewModel.ClientSecret() !== this.existingPaymentConfiguration.ClientSecret |
(this.viewModel.AccountType() && this.viewModel.AccountType().Id !== this.existingPaymentConfiguration.AccountType);
this.savePaymentAction.enabled(isFormUpdated);
this.resetPaymentAction.enabled(isFormUpdated);
@ -211,6 +209,6 @@ Microsoft.WebPortal.PaymentSetupPresenter.prototype._setupActions = function ()
// tell the serializer that we are done
operationResolver.resolve();
});
}
};
//@ sourceURL=PaymentSetupPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, processOrderViewModel) {
Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, processOrderViewModel) {
/// <summary>
/// Shows the registration confirmation page.
/// </summary>
@ -23,7 +21,7 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
}
var queryStringParams;
if (processOrderViewModel !=null && processOrderViewModel.paymentId.toLowerCase() === "preapproved") {
if (processOrderViewModel !== null && processOrderViewModel.paymentId.toLowerCase() === "preapproved") {
queryStringParams = processOrderViewModel;
}
else {
@ -45,13 +43,13 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
CustomerRegistrationInfo: ko.observable(""),
Address: ko.observable(""),
ContactInformation: ko.observable("")
}
};
self.apiUrl = "";
var existingCustomerOrderUrl = "api/Order/Process" + "?paymentId=" + self.viewModel.paymentId + "&payerId=" + self.viewModel.PayerID + "&orderId=" + self.viewModel.orderId;
var newCustomerOrderUrl = "api/Order/NewCustomerProcessOrder" + "?customerId=" + self.viewModel.customerId + "&paymentId=" + self.viewModel.paymentId + "&payerId=" + self.viewModel.PayerID;
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
self.apiUrl = newCustomerOrderUrl;
self.viewModel.nextJourney = Microsoft.WebPortal.Feature.Home;
} else {
@ -61,8 +59,8 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
this.onDoneClicked = function () {
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
}
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.ProcessOrderPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -75,11 +73,11 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
var self = this;
ko.applyBindings(this, $("#ProcessOrderContainer")[0]);
var processOrder = function() {
var processOrder = function () {
// If paypal sent failure then display message and go back to subscriptions page.
if (self.viewModel.txStatus.toLowerCase() == "failure") {
if (self.viewModel.txStatus.toLowerCase() === "failure") {
self.viewModel.showDoneButton(true);
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.NewCustomerProcessOrderFailureReceivingPaymentMessage);
} else {
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentReceiptFailureNotification);
@ -94,7 +92,7 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
self.viewModel.PageTitle(pageTitleText);
var thisNotification;
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
thisNotification = new Microsoft.WebPortal.Services.Notification(Microsoft.WebPortal.Services.Notification.NotificationType.Progress, self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.ProcessingOrderMessage);
}
else {
@ -105,87 +103,87 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
new Microsoft.WebPortal.Utilities.RetryableServerCall(self.webPortal.Helpers.ajaxCall(self.apiUrl, Microsoft.WebPortal.HttpMethod.Get, {
}, Microsoft.WebPortal.ContentType.Json, 120000), self.apiUrl, []).execute()
.done(function (result) {
// hand it off to the subscriptions page.
thisNotification.dismiss();
.done(function (result) {
// hand it off to the subscriptions page.
thisNotification.dismiss();
if (self.viewModel.customerId !== null) {
self.viewModel.showDoneButton(true);
self.viewModel.showSubscriptions(true);
self.viewModel.Subscriptions(result.Subscriptions);
self.viewModel.TotalPrice(result.SummaryTotal);
self.viewModel.CustomerRegistrationInfo(result.CustomerViewModel);
var addressLine = result.CustomerViewModel.AddressLine1;
if (result.CustomerViewModel.AddressLine2) {
addressLine += " " + result.CustomerViewModel.AddressLine2;
}
var AddressInfo = [
addressLine,
result.CustomerViewModel.City + ", " + result.CustomerViewModel.State + " " + result.CustomerViewModel.ZipCode,
result.CustomerViewModel.Country
];
var ContactInfo = [
result.CustomerViewModel.FirstName + " " + result.CustomerViewModel.LastName,
result.CustomerViewModel.Email,
result.CustomerViewModel.Phone
];
self.viewModel.Address(AddressInfo);
self.viewModel.ContactInformation(ContactInfo);
} else {
// all processed so push to subscriptions page.
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
if (self.viewModel.customerId != null) {
self.viewModel.showDoneButton(true);
self.viewModel.showSubscriptions(true);
self.viewModel.Subscriptions(result.Subscriptions);
self.viewModel.TotalPrice(result.SummaryTotal);
self.viewModel.CustomerRegistrationInfo(result.CustomerViewModel);
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderProcessingFailureNotification);
var addressLine = result.CustomerViewModel.AddressLine1;
if (result.CustomerViewModel.AddressLine2) {
addressLine += " " + result.CustomerViewModel.AddressLine2;
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.AlreadyExists:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.CannotAddExistingSubscriptionError);
break;
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentGatewayErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
thisNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
}
var AddressInfo = [
addressLine,
result.CustomerViewModel.City + ", " + result.CustomerViewModel.State + " " + result.CustomerViewModel.ZipCode,
result.CustomerViewModel.Country
];
var ContactInfo = [
result.CustomerViewModel.FirstName + " " + result.CustomerViewModel.LastName,
result.CustomerViewModel.Email,
result.CustomerViewModel.Phone
];
self.viewModel.Address(AddressInfo);
self.viewModel.ContactInformation(ContactInfo);
} else {
// all processed so push to subscriptions page.
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
self.viewModel.showDoneButton(true);
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderProcessingFailureNotification);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.AlreadyExists:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.CannotAddExistingSubscriptionError);
break;
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentGatewayErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
thisNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
})
.always(function () {
self.isPosting = false;
});
}
};
processOrder();
}
};
//@ sourceURL=ProcessOrderPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, processOrderViewModel) {
Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, processOrderViewModel) {
/// <summary>
/// Shows the registration confirmation page.
/// </summary>
@ -23,7 +21,7 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
}
var queryStringParams;
if (processOrderViewModel !=null && processOrderViewModel.paymentId.toLowerCase() === "preapproved") {
if (processOrderViewModel !== null && processOrderViewModel.paymentId.toLowerCase() === "preapproved") {
queryStringParams = processOrderViewModel;
}
else {
@ -45,17 +43,17 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
CustomerRegistrationInfo: ko.observable(""),
Address: ko.observable(""),
ContactInformation: ko.observable("")
}
};
self.apiUrl = "";
if (!!self.viewModel.paymentId && self.viewModel.paymentId.toLowerCase() === "preapproved") {
paymentId = self.viewModel.paymentId;
txnId = self.viewModel.PayerID;
paymentId = self.viewModel.paymentId;
txnId = self.viewModel.PayerID;
}
var existingCustomerOrderUrl = "api/Order/Process" + "?paymentId=" + paymentId + "&payerId=" + txnId + "&orderId=" + self.viewModel.orderId;
var newCustomerOrderUrl = "api/Order/NewCustomerProcessOrder" + "?customerId=" + self.viewModel.customerId + "&paymentId=" + paymentId + "&payerId=" + txnId;
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
self.apiUrl = newCustomerOrderUrl;
self.viewModel.nextJourney = Microsoft.WebPortal.Feature.Home;
} else {
@ -65,8 +63,8 @@ Microsoft.WebPortal.ProcessOrderPresenter = function (webPortal, feature, proces
this.onDoneClicked = function () {
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
}
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.ProcessOrderPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -79,11 +77,11 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
var self = this;
ko.applyBindings(this, $("#ProcessOrderContainer")[0]);
var processOrder = function() {
var processOrder = function () {
// If paypal sent failure then display message and go back to subscriptions page.
if (self.viewModel.txStatus.toLowerCase() == "failure") {
if (self.viewModel.txStatus.toLowerCase() === "failure") {
self.viewModel.showDoneButton(true);
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.NewCustomerProcessOrderFailureReceivingPaymentMessage);
} else {
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentReceiptFailureNotification);
@ -91,14 +89,14 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
}
else { // success from payment gateway.
var pageTitleText;
if (self.viewModel.paymentId != undefined && self.viewModel.paymentId.toLowerCase() === "preapproved") {
if (self.viewModel.paymentId !== undefined && self.viewModel.paymentId.toLowerCase() === "preapproved") {
pageTitleText = self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.ProcessingPreApprovedTxNotification;
}
self.viewModel.PageTitle(pageTitleText);
var thisNotification;
if (self.viewModel.customerId != null) {
if (self.viewModel.customerId !== null) {
thisNotification = new Microsoft.WebPortal.Services.Notification(Microsoft.WebPortal.Services.Notification.NotificationType.Progress, self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.ProcessingOrderMessage);
}
else {
@ -109,87 +107,87 @@ Microsoft.WebPortal.ProcessOrderPresenter.prototype.onRender = function () {
new Microsoft.WebPortal.Utilities.RetryableServerCall(self.webPortal.Helpers.ajaxCall(self.apiUrl, Microsoft.WebPortal.HttpMethod.Get, {
}, Microsoft.WebPortal.ContentType.Json, 120000), self.apiUrl, []).execute()
.done(function (result) {
// hand it off to the subscriptions page.
thisNotification.dismiss();
.done(function (result) {
// hand it off to the subscriptions page.
thisNotification.dismiss();
if (self.viewModel.customerId !== null) {
self.viewModel.showDoneButton(true);
self.viewModel.showSubscriptions(true);
self.viewModel.Subscriptions(result.Subscriptions);
self.viewModel.TotalPrice(result.SummaryTotal);
self.viewModel.CustomerRegistrationInfo(result.CustomerViewModel);
var addressLine = result.CustomerViewModel.AddressLine1;
if (result.CustomerViewModel.AddressLine2) {
addressLine += " " + result.CustomerViewModel.AddressLine2;
}
var AddressInfo = [
addressLine,
result.CustomerViewModel.City + ", " + result.CustomerViewModel.State + " " + result.CustomerViewModel.ZipCode,
result.CustomerViewModel.Country
];
var ContactInfo = [
result.CustomerViewModel.FirstName + " " + result.CustomerViewModel.LastName,
result.CustomerViewModel.Email,
result.CustomerViewModel.Phone
];
self.viewModel.Address(AddressInfo);
self.viewModel.ContactInformation(ContactInfo);
} else {
// all processed so push to subscriptions page.
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
if (self.viewModel.customerId != null) {
self.viewModel.showDoneButton(true);
self.viewModel.showSubscriptions(true);
self.viewModel.Subscriptions(result.Subscriptions);
self.viewModel.TotalPrice(result.SummaryTotal);
self.viewModel.CustomerRegistrationInfo(result.CustomerViewModel);
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderProcessingFailureNotification);
var addressLine = result.CustomerViewModel.AddressLine1;
if (result.CustomerViewModel.AddressLine2) {
addressLine += " " + result.CustomerViewModel.AddressLine2;
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.AlreadyExists:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.CannotAddExistingSubscriptionError);
break;
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentGatewayErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
thisNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
}
var AddressInfo = [
addressLine,
result.CustomerViewModel.City + ", " + result.CustomerViewModel.State + " " + result.CustomerViewModel.ZipCode,
result.CustomerViewModel.Country
];
var ContactInfo = [
result.CustomerViewModel.FirstName + " " + result.CustomerViewModel.LastName,
result.CustomerViewModel.Email,
result.CustomerViewModel.Phone
];
self.viewModel.Address(AddressInfo);
self.viewModel.ContactInformation(ContactInfo);
} else {
// all processed so push to subscriptions page.
self.webPortal.Journey.start(self.viewModel.nextJourney);
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
self.viewModel.showDoneButton(true);
self.viewModel.PageTitle(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderProcessingFailureNotification);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.AlreadyExists:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.CannotAddExistingSubscriptionError);
break;
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.PaymentGatewayErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
thisNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.ProcessOrderPage.OrderFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
})
.always(function () {
self.isPosting = false;
});
}
};
processOrder();
}
};
//@ sourceURL=ProcessOrderPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.RegistrationConfirmationPresenter = function (webPortal, feature, registrationConfirmationViewModel) {
Microsoft.WebPortal.RegistrationConfirmationPresenter = function (webPortal, feature, registrationConfirmationViewModel) {
/// <summary>
/// Shows the registration confirmation page.
/// </summary>
@ -42,7 +40,7 @@ Microsoft.WebPortal.RegistrationConfirmationPresenter = function (webPortal, fea
// Prepare the order
self.raiseOrder();
}
};
this.raiseOrder = function (customerNotification, registeredCustomer) {
/// <summary>
@ -55,52 +53,52 @@ Microsoft.WebPortal.RegistrationConfirmationPresenter = function (webPortal, fea
self.webPortal.Services.Notifications.add(orderNotification);
new Microsoft.WebPortal.Utilities.RetryableServerCall(this.webPortal.Helpers.ajaxCall("api/Order/NewCustomerPrepareOrder", Microsoft.WebPortal.HttpMethod.Post, self.viewModel.orderToPlace, Microsoft.WebPortal.ContentType.Json, 120000), "RegisterCustomerOrder", []).execute()
// Success of Create CustomerOrder API Call.
.done(function (result) {
orderNotification.dismiss();
// we need to now redirect to paypal based on the response from the API.
window.location = result;
})
// Failure in Create CustomerOrder API call.
.fail(function (result, status, error) {
// on failure check if customerid is returned (or check using errCode). if returned then do something to set the ClientCustomerId
orderNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
orderNotification.buttons([
// no need for retry button. user should be able to hit submit.
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
orderNotification.dismiss();
})
]);
// Success of Create CustomerOrder API Call.
.done(function (result) {
orderNotification.dismiss();
// we need to now redirect to paypal based on the response from the API.
window.location = result;
})
// Failure in Create CustomerOrder API call.
.fail(function (result, status, error) {
// on failure check if customerid is returned (or check using errCode). if returned then do something to set the ClientCustomerId
orderNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
orderNotification.buttons([
// no need for retry button. user should be able to hit submit.
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
orderNotification.dismiss();
})
]);
var errorPayload = JSON.parse(result.responseText);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
orderNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.OrderRegistrationFailureMessage);
break;
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.PaymentGatewayPaymentError:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayIdentityFailureDuringPayment:
case Microsoft.WebPortal.ErrorCode.PaymentGatewayFailure:
orderNotification.message(errorPayload.Details.ErrorMessage);
break;
default:
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.OrderRegistrationFailureMessage);
break;
}
} else {
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.OrderRegistrationFailureMessage);
}
} else {
orderNotification.message(self.webPortal.Resources.Strings.Plugins.CustomerRegistrationPage.OrderRegistrationFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
}
}
})
.always(function () {
self.isPosting = false;
});
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.RegistrationConfirmationPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -111,7 +109,6 @@ Microsoft.WebPortal.RegistrationConfirmationPresenter.prototype.onRender = funct
/// </summary>
ko.applyBindings(this, $("#RegistrationConfirmationContainer")[0]);
}
};
//@ sourceURL=RegistrationConfirmationPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.SubscriptionsPresenter = function (webPortal, feature) {
Microsoft.WebPortal.SubscriptionsPresenter = function (webPortal, feature) {
/// <summary>
/// Manages the offers experience.
/// </summary>
@ -14,15 +12,15 @@ Microsoft.WebPortal.SubscriptionsPresenter = function (webPortal, feature) {
if (currentSubscriptionRowElement) {
$(currentSubscriptionRowElement).nextUntil('tr.SubscriptionRow').slideToggle(1);
event.currentTarget.className = (event.currentTarget.className === "collapse_down") ? "collapse_up" : "collapse_down";
event.currentTarget.className = event.currentTarget.className === "collapse_down" ? "collapse_up" : "collapse_down";
}
}
};
this.viewModel = {
ShowProgress: ko.observable(true),
IsSet: ko.observable(false)
}
}
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.SubscriptionsPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -66,9 +64,9 @@ Microsoft.WebPortal.SubscriptionsPresenter.prototype.onRender = function () {
// stop showing progress
self.viewModel.ShowProgress(false);
});
}
};
getSubscriptionsSummary();
}
};
//@ sourceURL=SubscriptionsPresenter.js

Просмотреть файл

@ -1,14 +1,11 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.UpdateCompanyInformationPresenter = function (webPortal, feature, context) {
Microsoft.WebPortal.UpdateCompanyInformationPresenter = function (webPortal, feature, context) {
/// <summary>
/// Manages the offers experience.
/// </summary>
/// <param name="webPortal">The web portal instance.</param>
/// <param name="feature">The feature for which this presenter is created.</param>
this.base.constructor.call(this, webPortal, feature, "Update company information", "/Template/");
}
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.UpdateCompanyInformationPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -17,21 +14,18 @@ Microsoft.WebPortal.UpdateCompanyInformationPresenter.prototype.onActivate = fun
/// <summary>
/// Called when the presenter is activated.
/// </summary>
}
};
Microsoft.WebPortal.UpdateCompanyInformationPresenter.prototype.onRender = function () {
/// <summary>
/// Called when the presenter is about to be rendered.
/// </summary>
//ko.applyBindings(this, $("#")[0]);
}
};
Microsoft.WebPortal.UpdateCompanyInformationPresenter.prototype.onShow = function () {
/// <summary>
/// Called when content is shown.
/// </summary>
}
};
//@ sourceURL=UpdateCompanyInformationPresenter.js

Просмотреть файл

@ -1,14 +1,11 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.UpdateContactInformationPresenter = function (webPortal, feature, context) {
Microsoft.WebPortal.UpdateContactInformationPresenter = function (webPortal, feature, context) {
/// <summary>
/// Manages the offers experience.
/// </summary>
/// <param name="webPortal">The web portal instance.</param>
/// <param name="feature">The feature for which this presenter is created.</param>
this.base.constructor.call(this, webPortal, feature, "Update contact information", "/Template//");
}
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.UpdateContactInformationPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -17,21 +14,18 @@ Microsoft.WebPortal.UpdateContactInformationPresenter.prototype.onActivate = fun
/// <summary>
/// Called when the presenter is activated.
/// </summary>
}
};
Microsoft.WebPortal.UpdateContactInformationPresenter.prototype.onRender = function () {
/// <summary>
/// Called when the presenter is about to be rendered.
/// </summary>
//ko.applyBindings(this, $("#")[0]);
}
};
Microsoft.WebPortal.UpdateContactInformationPresenter.prototype.onShow = function () {
/// <summary>
/// Called when content is shown.
/// </summary>
}
};
//@ sourceURL=UpdateContactInformationPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature, subscriptionItem) {
Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature, subscriptionItem) {
/// <summary>
/// Manages the offers experience.
/// </summary>
@ -45,7 +43,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
// form event handlers follow.
this.onCancelClicked = function () {
webPortal.Journey.retract();
}
};
this.onFormPostClicked = function () {
// create order payload & post to order api.
@ -59,67 +57,67 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
Subscriptions: this.getSubscriptions(),
OperationType: self.viewModel.OperationType
}, Microsoft.WebPortal.ContentType.Json, 120000), "api/Order/Prepare", []).execute()
.done(function (result) {
// if result is a Uri for PreApproved transaction then build context and advance the journey in the portal to ProcessOrder feature.
var pairs = result.slice(1).split('&');
var resultPairs = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
resultPairs[pair[0]] = decodeURIComponent(pair[1] || '');
});
.done(function (result) {
// if result is a Uri for PreApproved transaction then build context and advance the journey in the portal to ProcessOrder feature.
var pairs = result.slice(1).split('&');
var resultPairs = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
resultPairs[pair[0]] = decodeURIComponent(pair[1] || '');
});
var queryStringParams = JSON.parse(JSON.stringify(resultPairs));
var orderContext = {
paymentId: queryStringParams["paymentId"],
PayerID: queryStringParams["PayerID"],
customerId: queryStringParams["customerId"],
orderId: queryStringParams["oid"],
oid: queryStringParams["oid"],
payment: queryStringParams["payment"],
txStatus: queryStringParams["payment"]
};
var queryStringParams = JSON.parse(JSON.stringify(resultPairs));
var orderContext = {
paymentId: queryStringParams["paymentId"],
PayerID: queryStringParams["PayerID"],
customerId: queryStringParams["customerId"],
orderId: queryStringParams["oid"],
oid: queryStringParams["oid"],
payment: queryStringParams["payment"],
txStatus: queryStringParams["payment"]
};
// hand it off to the subscriptions page.
thisNotification.dismiss();
// hand it off to the subscriptions page.
thisNotification.dismiss();
if (queryStringParams["paymentId"] != null && queryStringParams["paymentId"].toLowerCase() === "preapproved") {
// hand it off to the order processing presenter
self.webPortal.Journey.advance(Microsoft.WebPortal.Feature.ProcessOrder, orderContext);
} else {
// we need to now redirect to paypal based on the response from the API.
window.location = result;
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessag);
break;
if (queryStringParams["paymentId"] !== null && queryStringParams["paymentId"].toLowerCase() === "preapproved") {
// hand it off to the order processing presenter
self.webPortal.Journey.advance(Microsoft.WebPortal.Feature.ProcessOrder, orderContext);
} else {
// we need to now redirect to paypal based on the response from the API.
window.location = result;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessag);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
};
this.getSubscriptions = function () {
var orders = [];
@ -130,8 +128,8 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
});
return orders;
}
}
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.UpdateSubscriptionsPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -140,7 +138,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onActivate = function
/// <summary>
/// Called when the presenter is activated.
/// </summary>
}
};
Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function () {
/// <summary>
@ -171,7 +169,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function (
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.SubscriptionProRatedPrice, "c");
}
if (self.viewModel.isRenewSubscription) {
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.portalOffer.Price,"c");
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.portalOffer.Price, "c");
}
// Globalize the pricePerSeat using currency format.
@ -204,14 +202,15 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function (
}).always(function () {
self.viewModel.ShowProgress(false);
});
}
};
getPortalOfferDetails();
}
};
Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onShow = function () {
/// <summary>
/// Called when content is shown.
/// </summary>
}
};
//@ sourceURL=UpdateSubscriptionsPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature, subscriptionItem) {
Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature, subscriptionItem) {
/// <summary>
/// Manages the offers experience.
/// </summary>
@ -45,7 +43,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
// form event handlers follow.
this.onCancelClicked = function () {
webPortal.Journey.retract();
}
};
this.onFormPostClicked = function () {
// create order payload & post to order api.
@ -59,71 +57,71 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
Subscriptions: this.getSubscriptions(),
OperationType: self.viewModel.OperationType
}, Microsoft.WebPortal.ContentType.Json, 120000), "api/Order/Prepare", []).execute()
.done(function (result) {
if (result.indexOf('PreApproved') > -1) {
// if result is a Uri for PreApproved transaction then build context and advance the journey in the portal to ProcessOrder feature.
var pairs = result.slice(1).split('&');
var resultPairs = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
resultPairs[pair[0]] = decodeURIComponent(pair[1] || '');
});
.done(function (result) {
if (result.indexOf('PreApproved') > -1) {
// if result is a Uri for PreApproved transaction then build context and advance the journey in the portal to ProcessOrder feature.
var pairs = result.slice(1).split('&');
var resultPairs = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
resultPairs[pair[0]] = decodeURIComponent(pair[1] || '');
});
var queryStringParams = JSON.parse(JSON.stringify(resultPairs));
var orderContext = {
paymentId: queryStringParams["paymentId"],
PayerID: queryStringParams["PayerID"],
customerId: queryStringParams["customerId"],
orderId: queryStringParams["oid"],
oid: queryStringParams["oid"],
payment: queryStringParams["payment"],
txStatus: queryStringParams["payment"]
};
var queryStringParams = JSON.parse(JSON.stringify(resultPairs));
var orderContext = {
paymentId: queryStringParams["paymentId"],
PayerID: queryStringParams["PayerID"],
customerId: queryStringParams["customerId"],
orderId: queryStringParams["oid"],
oid: queryStringParams["oid"],
payment: queryStringParams["payment"],
txStatus: queryStringParams["payment"]
};
// hand it off to the subscriptions page.
thisNotification.dismiss();
if (queryStringParams["paymentId"] != null && queryStringParams["paymentId"].toLowerCase() === "preapproved") {
// hand it off to the order processing presenter
self.webPortal.Journey.advance(Microsoft.WebPortal.Feature.ProcessOrder, orderContext);
} else {
// we need to now redirect to paypal based on the response from the API.
window.location = result;
}
} else {
$('body').html(result);
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
// hand it off to the subscriptions page.
thisNotification.dismiss();
})
]);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessag);
break;
if (queryStringParams["paymentId"] !== null && queryStringParams["paymentId"].toLowerCase() === "preapproved") {
// hand it off to the order processing presenter
self.webPortal.Journey.advance(Microsoft.WebPortal.Feature.ProcessOrder, orderContext);
} else {
// we need to now redirect to paypal based on the response from the API.
window.location = result;
}
} else {
$('body').html(result);
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
}
})
.fail(function (result, status, error) {
thisNotification.type(Microsoft.WebPortal.Services.Notification.NotificationType.Error);
thisNotification.buttons([
Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, self.webPortal.Resources.Strings.OK, function () {
thisNotification.dismiss();
})
]);
var errorPayload = JSON.parse(result.responseText);
if (errorPayload) {
switch (errorPayload.ErrorCode) {
case Microsoft.WebPortal.ErrorCode.InvalidInput:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.InvalidInputErrorPrefix + errorPayload.Details.ErrorMessage);
break;
case Microsoft.WebPortal.ErrorCode.DownstreamServiceError:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.DownstreamErrorPrefix + errorPayload.Details.ErrorMessage);
break;
default:
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessag);
break;
}
} else {
thisNotification.message(self.webPortal.Resources.Strings.Plugins.UpdateSubscriptionPage.OrderUpdateFailureMessage);
}
})
.always(function () {
self.isPosting = false;
});
};
this.getSubscriptions = function () {
var orders = [];
@ -134,8 +132,8 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter = function (webPortal, feature,
});
return orders;
}
}
};
};
// inherit BasePresenter
$WebPortal.Helpers.inherit(Microsoft.WebPortal.UpdateSubscriptionsPresenter, Microsoft.WebPortal.Core.TemplatePresenter);
@ -144,7 +142,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onActivate = function
/// <summary>
/// Called when the presenter is activated.
/// </summary>
}
};
Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function () {
/// <summary>
@ -175,7 +173,7 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function (
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.SubscriptionProRatedPrice, "c");
}
if (self.viewModel.isRenewSubscription) {
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.portalOffer.Price,"c");
self.viewModel.pricePerSeat = Globalize.format(self.viewModel.portalOffer.Price, "c");
}
// Globalize the pricePerSeat using currency format.
@ -208,14 +206,15 @@ Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onRender = function (
}).always(function () {
self.viewModel.ShowProgress(false);
});
}
};
getPortalOfferDetails();
}
};
Microsoft.WebPortal.UpdateSubscriptionsPresenter.prototype.onShow = function () {
/// <summary>
/// Called when content is shown.
/// </summary>
}
};
//@ sourceURL=UpdateSubscriptionsPresenter.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.Core.View = function (webPortal, elementSelector, isShown, childViews, animation) {
Microsoft.WebPortal.Core.View = function (webPortal, elementSelector, isShown, childViews, animation) {
/// <summary>
/// The base view class. All views should inherit from this class. A view is an abstraction that shows or hides UX to users. It maintains the data and the view
/// state and takes care of disposing the resources when it is no longer needed. One or more views are typically utilized by a presenter. Views also support hierarchies,
@ -32,7 +30,7 @@ Microsoft.WebPortal.Core.View = function (webPortal, elementSelector, isShown, c
// the view will be togglable
Microsoft.WebPortal.Utilities.Toggler.injectToggling(this, this._show, this._hide, isShown);
}
};
Microsoft.WebPortal.Core.View.prototype.render = function () {
/// <summary>
@ -45,12 +43,12 @@ Microsoft.WebPortal.Core.View.prototype.render = function () {
}
// render the child views
for(var i in this.childViews()) {
for (var i in this.childViews()) {
this.childViews()[i].render();
}
this.state = Microsoft.WebPortal.Core.View.State.Rendered;
}
};
Microsoft.WebPortal.Core.View.prototype._show = function (showProgress) {
/// <summary>
@ -92,7 +90,7 @@ Microsoft.WebPortal.Core.View.prototype._show = function (showProgress) {
}
});
});
}
};
Microsoft.WebPortal.Core.View.prototype._hide = function (hideProgress) {
/// <summary>
@ -134,7 +132,7 @@ Microsoft.WebPortal.Core.View.prototype._hide = function (hideProgress) {
}
});
});
}
};
Microsoft.WebPortal.Core.View.prototype.destroy = function () {
/// <summary>
@ -154,7 +152,7 @@ Microsoft.WebPortal.Core.View.prototype.destroy = function () {
this.isShown(false);
this.state = Microsoft.WebPortal.Core.View.State.Destroyed;
}
};
Microsoft.WebPortal.Core.View.prototype.isRendered = function () {
/// <summary>
@ -163,7 +161,7 @@ Microsoft.WebPortal.Core.View.prototype.isRendered = function () {
/// <returns type="boolean">True is rendered, false otherwise.</returns>
return this.state === Microsoft.WebPortal.Core.View.State.Rendered;
}
};
Microsoft.WebPortal.Core.View.prototype.isDestroyed = function () {
/// <summary>
@ -172,7 +170,7 @@ Microsoft.WebPortal.Core.View.prototype.isDestroyed = function () {
/// <returns type="boolean">True is destroyed, false otherwise.</returns>
return this.state === Microsoft.WebPortal.Core.View.State.Destroyed;
}
};
/*
Enumerates the possible view states.
@ -186,6 +184,6 @@ Microsoft.WebPortal.Core.View.State = {
// view has been destroyed
Destroyed: 2
}
};
//@ sourceURL=View.js

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1,111 +0,0 @@
/*!
* Knockout JavaScript library v3.2.0
* (c) Steven Sanderson - http://knockoutjs.com/
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(function() {(function(p){var s=this||(0,eval)("this"),v=s.document,L=s.navigator,w=s.jQuery,D=s.JSON;(function(p){"function"===typeof require&&"object"===typeof exports&&"object"===typeof module?p(module.exports||exports,require):"function"===typeof define&&define.amd?define(["exports","require"],p):p(s.ko={})})(function(M,N){function H(a,d){return null===a||typeof a in R?a===d:!1}function S(a,d){var c;return function(){c||(c=setTimeout(function(){c=p;a()},d))}}function T(a,d){var c;return function(){clearTimeout(c);
c=setTimeout(a,d)}}function I(b,d,c,e){a.d[b]={init:function(b,h,k,f,m){var l,q;a.s(function(){var f=a.a.c(h()),k=!c!==!f,z=!q;if(z||d||k!==l)z&&a.Y.la()&&(q=a.a.ia(a.f.childNodes(b),!0)),k?(z||a.f.T(b,a.a.ia(q)),a.Ca(e?e(m,f):m,b)):a.f.ja(b),l=k},null,{o:b});return{controlsDescendantBindings:!0}}};a.h.ha[b]=!1;a.f.Q[b]=!0}var a="undefined"!==typeof M?M:{};a.b=function(b,d){for(var c=b.split("."),e=a,g=0;g<c.length-1;g++)e=e[c[g]];e[c[c.length-1]]=d};a.A=function(a,d,c){a[d]=c};a.version="3.2.0";
a.b("version",a.version);a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function d(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function c(a,b){a.__proto__=b;return a}var e={__proto__:[]}instanceof Array,g={},h={};g[L&&/Firefox\/2/i.test(L.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];g.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(g,function(a,b){if(b.length)for(var c=
0,d=b.length;c<d;c++)h[b[c]]=a});var k={propertychange:!0},f=v&&function(){for(var a=3,b=v.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:p}();return{vb:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],u:function(a,b){for(var c=0,d=a.length;c<d;c++)b(a[c],c)},m:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var c=0,d=a.length;c<d;c++)if(a[c]===
b)return c;return-1},qb:function(a,b,c){for(var d=0,f=a.length;d<f;d++)if(b.call(c,a[d],d))return a[d];return null},ua:function(m,b){var c=a.a.m(m,b);0<c?m.splice(c,1):0===c&&m.shift()},rb:function(m){m=m||[];for(var b=[],c=0,d=m.length;c<d;c++)0>a.a.m(b,m[c])&&b.push(m[c]);return b},Da:function(a,b){a=a||[];for(var c=[],d=0,f=a.length;d<f;d++)c.push(b(a[d],d));return c},ta:function(a,b){a=a||[];for(var c=[],d=0,f=a.length;d<f;d++)b(a[d],d)&&c.push(a[d]);return c},ga:function(a,b){if(b instanceof
Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},ea:function(b,c,d){var f=a.a.m(a.a.Xa(b),c);0>f?d&&b.push(c):d||b.splice(f,1)},xa:e,extend:d,za:c,Aa:e?c:d,G:b,na:function(a,b){if(!a)return a;var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d],d,a));return c},Ka:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},oc:function(b){b=a.a.S(b);for(var c=v.createElement("div"),d=0,f=b.length;d<f;d++)c.appendChild(a.R(b[d]));return c},ia:function(b,c){for(var d=
0,f=b.length,e=[];d<f;d++){var k=b[d].cloneNode(!0);e.push(c?a.R(k):k)}return e},T:function(b,c){a.a.Ka(b);if(c)for(var d=0,f=c.length;d<f;d++)b.appendChild(c[d])},Lb:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var f=d[0],e=f.parentNode,k=0,g=c.length;k<g;k++)e.insertBefore(c[k],f);k=0;for(g=d.length;k<g;k++)a.removeNode(d[k])}},ka:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.shift();if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=
0;c!==d;)if(a.push(c),c=c.nextSibling,!c)return;a.push(d)}}return a},Nb:function(a,b){7>f?a.setAttribute("selected",b):a.selected=b},cb:function(a){return null===a||a===p?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},vc:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},cc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&
16);for(;a&&a!=b;)a=a.parentNode;return!!a},Ja:function(b){return a.a.cc(b,b.ownerDocument.documentElement)},ob:function(b){return!!a.a.qb(b,a.a.Ja)},t:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},n:function(b,c,d){var e=f&&k[c];if(!e&&w)w(b).bind(c,d);else if(e||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var g=function(a){d.call(b,a)},h="on"+c;b.attachEvent(h,g);a.a.w.da(b,function(){b.detachEvent(h,g)})}else throw Error("Browser doesn't support addEventListener or attachEvent");
else b.addEventListener(c,d,!1)},oa:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.t(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(w&&!d)w(b).trigger(c);else if("function"==typeof v.createEvent)if("function"==typeof b.dispatchEvent)d=v.createEvent(h[c]||"HTMLEvents"),d.initEvent(c,!0,!0,s,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");
else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");},c:function(b){return a.C(b)?b():b},Xa:function(b){return a.C(b)?b.v():b},Ba:function(b,c,d){if(c){var f=/\S+/g,e=b.className.match(f)||[];a.a.u(c.match(f),function(b){a.a.ea(e,b,d)});b.className=e.join(" ")}},bb:function(b,c){var d=a.a.c(c);if(null===d||d===p)d="";var f=a.f.firstChild(b);!f||3!=f.nodeType||a.f.nextSibling(f)?a.f.T(b,[b.ownerDocument.createTextNode(d)]):
f.data=d;a.a.fc(b)},Mb:function(a,b){a.name=b;if(7>=f)try{a.mergeAttributes(v.createElement("<input name='"+a.name+"'/>"),!1)}catch(c){}},fc:function(a){9<=f&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},dc:function(a){if(f){var b=a.style.width;a.style.width=0;a.style.width=b}},sc:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var d=[],f=b;f<=c;f++)d.push(f);return d},S:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},yc:6===f,zc:7===f,L:f,xb:function(b,c){for(var d=
a.a.S(b.getElementsByTagName("input")).concat(a.a.S(b.getElementsByTagName("textarea"))),f="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},e=[],k=d.length-1;0<=k;k--)f(d[k])&&e.push(d[k]);return e},pc:function(b){return"string"==typeof b&&(b=a.a.cb(b))?D&&D.parse?D.parse(b):(new Function("return "+b))():null},eb:function(b,c,d){if(!D||!D.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
return D.stringify(a.a.c(b),c,d)},qc:function(c,d,f){f=f||{};var e=f.params||{},k=f.includeFields||this.vb,g=c;if("object"==typeof c&&"form"===a.a.t(c))for(var g=c.action,h=k.length-1;0<=h;h--)for(var r=a.a.xb(c,k[h]),E=r.length-1;0<=E;E--)e[r[E].name]=r[E].value;d=a.a.c(d);var y=v.createElement("form");y.style.display="none";y.action=g;y.method="post";for(var p in d)c=v.createElement("input"),c.type="hidden",c.name=p,c.value=a.a.eb(a.a.c(d[p])),y.appendChild(c);b(e,function(a,b){var c=v.createElement("input");
c.type="hidden";c.name=a;c.value=b;y.appendChild(c)});v.body.appendChild(y);f.submitter?f.submitter(y):y.submit();setTimeout(function(){y.parentNode.removeChild(y)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.u);a.b("utils.arrayFirst",a.a.qb);a.b("utils.arrayFilter",a.a.ta);a.b("utils.arrayGetDistinctValues",a.a.rb);a.b("utils.arrayIndexOf",a.a.m);a.b("utils.arrayMap",a.a.Da);a.b("utils.arrayPushAll",a.a.ga);a.b("utils.arrayRemoveItem",a.a.ua);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",
a.a.vb);a.b("utils.getFormFields",a.a.xb);a.b("utils.peekObservable",a.a.Xa);a.b("utils.postJson",a.a.qc);a.b("utils.parseJson",a.a.pc);a.b("utils.registerEventHandler",a.a.n);a.b("utils.stringifyJson",a.a.eb);a.b("utils.range",a.a.sc);a.b("utils.toggleDomNodeCssClass",a.a.Ba);a.b("utils.triggerEvent",a.a.oa);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.G);a.b("utils.addOrRemoveItem",a.a.ea);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=function(a){var d=
this,c=Array.prototype.slice.call(arguments);a=c.shift();return function(){return d.apply(a,c.concat(Array.prototype.slice.call(arguments)))}});a.a.e=new function(){function a(b,h){var k=b[c];if(!k||"null"===k||!e[k]){if(!h)return p;k=b[c]="ko"+d++;e[k]={}}return e[k]}var d=0,c="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===p?p:e[d]},set:function(c,d,e){if(e!==p||a(c,!1)!==p)a(c,!0)[d]=e},clear:function(a){var b=a[c];return b?(delete e[b],a[c]=null,!0):!1},F:function(){return d++ +
c}}};a.b("utils.domData",a.a.e);a.b("utils.domData.clear",a.a.e.clear);a.a.w=new function(){function b(b,d){var f=a.a.e.get(b,c);f===p&&d&&(f=[],a.a.e.set(b,c,f));return f}function d(c){var e=b(c,!1);if(e)for(var e=e.slice(0),f=0;f<e.length;f++)e[f](c);a.a.e.clear(c);a.a.w.cleanExternalData(c);if(g[c.nodeType])for(e=c.firstChild;c=e;)e=c.nextSibling,8===c.nodeType&&d(c)}var c=a.a.e.F(),e={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{da:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");
b(a,!0).push(c)},Kb:function(d,e){var f=b(d,!1);f&&(a.a.ua(f,e),0==f.length&&a.a.e.set(d,c,p))},R:function(b){if(e[b.nodeType]&&(d(b),g[b.nodeType])){var c=[];a.a.ga(c,b.getElementsByTagName("*"));for(var f=0,m=c.length;f<m;f++)d(c[f])}return b},removeNode:function(b){a.R(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){w&&"function"==typeof w.cleanData&&w.cleanData([a])}}};a.R=a.a.w.R;a.removeNode=a.a.w.removeNode;a.b("cleanNode",a.R);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",
a.a.w);a.b("utils.domNodeDisposal.addDisposeCallback",a.a.w.da);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.w.Kb);(function(){a.a.ba=function(b){var d;if(w)if(w.parseHTML)d=w.parseHTML(b)||[];else{if((d=w.clean([b]))&&d[0]){for(b=d[0];b.parentNode&&11!==b.parentNode.nodeType;)b=b.parentNode;b.parentNode&&b.parentNode.removeChild(b)}}else{var c=a.a.cb(b).toLowerCase();d=v.createElement("div");c=c.match(/^<(thead|tbody|tfoot)/)&&[1,"<table>","</table>"]||!c.indexOf("<tr")&&[2,"<table><tbody>",
"</tbody></table>"]||(!c.indexOf("<td")||!c.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||[0,"",""];b="ignored<div>"+c[1]+b+c[2]+"</div>";for("function"==typeof s.innerShiv?d.appendChild(s.innerShiv(b)):d.innerHTML=b;c[0]--;)d=d.lastChild;d=a.a.S(d.lastChild.childNodes)}return d};a.a.$a=function(b,d){a.a.Ka(b);d=a.a.c(d);if(null!==d&&d!==p)if("string"!=typeof d&&(d=d.toString()),w)w(b).html(d);else for(var c=a.a.ba(d),e=0;e<c.length;e++)b.appendChild(c[e])}})();a.b("utils.parseHtmlFragment",
a.a.ba);a.b("utils.setHtml",a.a.$a);a.D=function(){function b(c,d){if(c)if(8==c.nodeType){var g=a.D.Gb(c.nodeValue);null!=g&&d.push({bc:c,mc:g})}else if(1==c.nodeType)for(var g=0,h=c.childNodes,k=h.length;g<k;g++)b(h[g],d)}var d={};return{Ua:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);d[b]=a;return"\x3c!--[ko_memo:"+
b+"]--\x3e"},Rb:function(a,b){var g=d[a];if(g===p)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return g.apply(null,b||[]),!0}finally{delete d[a]}},Sb:function(c,d){var g=[];b(c,g);for(var h=0,k=g.length;h<k;h++){var f=g[h].bc,m=[f];d&&a.a.ga(m,d);a.D.Rb(g[h].mc,m);f.nodeValue="";f.parentNode&&f.parentNode.removeChild(f)}},Gb:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.D);a.b("memoization.memoize",a.D.Ua);
a.b("memoization.unmemoize",a.D.Rb);a.b("memoization.parseMemoText",a.D.Gb);a.b("memoization.unmemoizeDomNodeAndDescendants",a.D.Sb);a.La={throttle:function(b,d){b.throttleEvaluation=d;var c=null;return a.j({read:b,write:function(a){clearTimeout(c);c=setTimeout(function(){b(a)},d)}})},rateLimit:function(a,d){var c,e,g;"number"==typeof d?c=d:(c=d.timeout,e=d.method);g="notifyWhenChangesStop"==e?T:S;a.Ta(function(a){return g(a,c)})},notify:function(a,d){a.equalityComparer="always"==d?null:H}};var R=
{undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.La);a.Pb=function(b,d,c){this.target=b;this.wa=d;this.ac=c;this.Cb=!1;a.A(this,"dispose",this.K)};a.Pb.prototype.K=function(){this.Cb=!0;this.ac()};a.P=function(){a.a.Aa(this,a.P.fn);this.M={}};var G="change",A={U:function(b,d,c){var e=this;c=c||G;var g=new a.Pb(e,d?b.bind(d):b,function(){a.a.ua(e.M[c],g);e.nb&&e.nb()});e.va&&e.va(c);e.M[c]||(e.M[c]=[]);e.M[c].push(g);return g},notifySubscribers:function(b,d){d=d||G;if(this.Ab(d))try{a.k.Ea();
for(var c=this.M[d].slice(0),e=0,g;g=c[e];++e)g.Cb||g.wa(b)}finally{a.k.end()}},Ta:function(b){var d=this,c=a.C(d),e,g,h;d.qa||(d.qa=d.notifySubscribers,d.notifySubscribers=function(a,b){b&&b!==G?"beforeChange"===b?d.kb(a):d.qa(a,b):d.lb(a)});var k=b(function(){c&&h===d&&(h=d());e=!1;d.Pa(g,h)&&d.qa(g=h)});d.lb=function(a){e=!0;h=a;k()};d.kb=function(a){e||(g=a,d.qa(a,"beforeChange"))}},Ab:function(a){return this.M[a]&&this.M[a].length},yb:function(){var b=0;a.a.G(this.M,function(a,c){b+=c.length});
return b},Pa:function(a,d){return!this.equalityComparer||!this.equalityComparer(a,d)},extend:function(b){var d=this;b&&a.a.G(b,function(b,e){var g=a.La[b];"function"==typeof g&&(d=g(d,e)||d)});return d}};a.A(A,"subscribe",A.U);a.A(A,"extend",A.extend);a.A(A,"getSubscriptionsCount",A.yb);a.a.xa&&a.a.za(A,Function.prototype);a.P.fn=A;a.Db=function(a){return null!=a&&"function"==typeof a.U&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.P);a.b("isSubscribable",a.Db);a.Y=a.k=function(){function b(a){c.push(e);
e=a}function d(){e=c.pop()}var c=[],e,g=0;return{Ea:b,end:d,Jb:function(b){if(e){if(!a.Db(b))throw Error("Only subscribable things can act as dependencies");e.wa(b,b.Vb||(b.Vb=++g))}},B:function(a,c,f){try{return b(),a.apply(c,f||[])}finally{d()}},la:function(){if(e)return e.s.la()},ma:function(){if(e)return e.ma}}}();a.b("computedContext",a.Y);a.b("computedContext.getDependenciesCount",a.Y.la);a.b("computedContext.isInitial",a.Y.ma);a.b("computedContext.isSleeping",a.Y.Ac);a.p=function(b){function d(){if(0<
arguments.length)return d.Pa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Jb(d);return c}var c=b;a.P.call(d);a.a.Aa(d,a.p.fn);d.v=function(){return c};d.W=function(){d.notifySubscribers(c)};d.X=function(){d.notifySubscribers(c,"beforeChange")};a.A(d,"peek",d.v);a.A(d,"valueHasMutated",d.W);a.A(d,"valueWillMutate",d.X);return d};a.p.fn={equalityComparer:H};var F=a.p.rc="__ko_proto__";a.p.fn[F]=a.p;a.a.xa&&a.a.za(a.p.fn,a.P.fn);a.Ma=function(b,d){return null===b||b===p||b[F]===p?!1:b[F]===
d?!0:a.Ma(b[F],d)};a.C=function(b){return a.Ma(b,a.p)};a.Ra=function(b){return"function"==typeof b&&b[F]===a.p||"function"==typeof b&&b[F]===a.j&&b.hc?!0:!1};a.b("observable",a.p);a.b("isObservable",a.C);a.b("isWriteableObservable",a.Ra);a.b("isWritableObservable",a.Ra);a.aa=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.p(b);a.a.Aa(b,a.aa.fn);return b.extend({trackArrayChanges:!0})};
a.aa.fn={remove:function(b){for(var d=this.v(),c=[],e="function"!=typeof b||a.C(b)?function(a){return a===b}:b,g=0;g<d.length;g++){var h=d[g];e(h)&&(0===c.length&&this.X(),c.push(h),d.splice(g,1),g--)}c.length&&this.W();return c},removeAll:function(b){if(b===p){var d=this.v(),c=d.slice(0);this.X();d.splice(0,d.length);this.W();return c}return b?this.remove(function(c){return 0<=a.a.m(b,c)}):[]},destroy:function(b){var d=this.v(),c="function"!=typeof b||a.C(b)?function(a){return a===b}:b;this.X();
for(var e=d.length-1;0<=e;e--)c(d[e])&&(d[e]._destroy=!0);this.W()},destroyAll:function(b){return b===p?this.destroy(function(){return!0}):b?this.destroy(function(d){return 0<=a.a.m(b,d)}):[]},indexOf:function(b){var d=this();return a.a.m(d,b)},replace:function(a,d){var c=this.indexOf(a);0<=c&&(this.X(),this.v()[c]=d,this.W())}};a.a.u("pop push reverse shift sort splice unshift".split(" "),function(b){a.aa.fn[b]=function(){var a=this.v();this.X();this.sb(a,b,arguments);a=a[b].apply(a,arguments);this.W();
return a}});a.a.u(["slice"],function(b){a.aa.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.a.xa&&a.a.za(a.aa.fn,a.p.fn);a.b("observableArray",a.aa);var J="arrayChange";a.La.trackArrayChanges=function(b){function d(){if(!c){c=!0;var d=b.notifySubscribers;b.notifySubscribers=function(a,b){b&&b!==G||++g;return d.apply(this,arguments)};var f=[].concat(b.v()||[]);e=null;b.U(function(c){c=[].concat(c||[]);if(b.Ab(J)){var d;if(!e||1<g)e=a.a.Fa(f,c,{sparse:!0});d=e;d.length&&b.notifySubscribers(d,
J)}f=c;e=null;g=0})}}if(!b.sb){var c=!1,e=null,g=0,h=b.U;b.U=b.subscribe=function(a,b,c){c===J&&d();return h.apply(this,arguments)};b.sb=function(b,d,m){function l(a,b,c){return q[q.length]={status:a,value:b,index:c}}if(c&&!g){var q=[],h=b.length,t=m.length,z=0;switch(d){case "push":z=h;case "unshift":for(d=0;d<t;d++)l("added",m[d],z+d);break;case "pop":z=h-1;case "shift":h&&l("deleted",b[z],z);break;case "splice":d=Math.min(Math.max(0,0>m[0]?h+m[0]:m[0]),h);for(var h=1===t?h:Math.min(d+(m[1]||0),
h),t=d+t-2,z=Math.max(h,t),u=[],r=[],E=2;d<z;++d,++E)d<h&&r.push(l("deleted",b[d],d)),d<t&&u.push(l("added",m[E],d));a.a.wb(r,u);break;default:return}e=q}}}};a.s=a.j=function(b,d,c){function e(){a.a.G(v,function(a,b){b.K()});v={}}function g(){e();C=0;u=!0;n=!1}function h(){var a=f.throttleEvaluation;a&&0<=a?(clearTimeout(P),P=setTimeout(k,a)):f.ib?f.ib():k()}function k(b){if(t){if(E)throw Error("A 'pure' computed must not be called recursively");}else if(!u){if(w&&w()){if(!z){s();return}}else z=!1;
t=!0;if(y)try{var c={};a.k.Ea({wa:function(a,b){c[b]||(c[b]=1,++C)},s:f,ma:p});C=0;q=r.call(d)}finally{a.k.end(),t=!1}else try{var e=v,m=C;a.k.Ea({wa:function(a,b){u||(m&&e[b]?(v[b]=e[b],++C,delete e[b],--m):v[b]||(v[b]=a.U(h),++C))},s:f,ma:E?p:!C});v={};C=0;try{var l=d?r.call(d):r()}finally{a.k.end(),m&&a.a.G(e,function(a,b){b.K()}),n=!1}f.Pa(q,l)&&(f.notifySubscribers(q,"beforeChange"),q=l,!0!==b&&f.notifySubscribers(q))}finally{t=!1}C||s()}}function f(){if(0<arguments.length){if("function"===typeof O)O.apply(d,
arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}a.k.Jb(f);n&&k(!0);return q}function m(){n&&!C&&k(!0);return q}function l(){return n||0<C}var q,n=!0,t=!1,z=!1,u=!1,r=b,E=!1,y=!1;r&&"object"==typeof r?(c=r,r=c.read):(c=c||{},r||(r=c.read));if("function"!=typeof r)throw Error("Pass a function that returns the value of the ko.computed");var O=c.write,x=c.disposeWhenNodeIsRemoved||
c.o||null,B=c.disposeWhen||c.Ia,w=B,s=g,v={},C=0,P=null;d||(d=c.owner);a.P.call(f);a.a.Aa(f,a.j.fn);f.v=m;f.la=function(){return C};f.hc="function"===typeof c.write;f.K=function(){s()};f.Z=l;var A=f.Ta;f.Ta=function(a){A.call(f,a);f.ib=function(){f.kb(q);n=!0;f.lb(f)}};c.pure?(y=E=!0,f.va=function(){y&&(y=!1,k(!0))},f.nb=function(){f.yb()||(e(),y=n=!0)}):c.deferEvaluation&&(f.va=function(){m();delete f.va});a.A(f,"peek",f.v);a.A(f,"dispose",f.K);a.A(f,"isActive",f.Z);a.A(f,"getDependenciesCount",
f.la);x&&(z=!0,x.nodeType&&(w=function(){return!a.a.Ja(x)||B&&B()}));y||c.deferEvaluation||k();x&&l()&&x.nodeType&&(s=function(){a.a.w.Kb(x,s);g()},a.a.w.da(x,s));return f};a.jc=function(b){return a.Ma(b,a.j)};A=a.p.rc;a.j[A]=a.p;a.j.fn={equalityComparer:H};a.j.fn[A]=a.j;a.a.xa&&a.a.za(a.j.fn,a.P.fn);a.b("dependentObservable",a.j);a.b("computed",a.j);a.b("isComputed",a.jc);a.Ib=function(b,d){if("function"===typeof b)return a.s(b,d,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.s(b,d)};a.b("pureComputed",
a.Ib);(function(){function b(a,g,h){h=h||new c;a=g(a);if("object"!=typeof a||null===a||a===p||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var k=a instanceof Array?[]:{};h.save(a,k);d(a,function(c){var d=g(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":k[c]=d;break;case "object":case "undefined":var l=h.get(d);k[c]=l!==p?l:b(d,g,h)}});return k}function d(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==
typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function c(){this.keys=[];this.hb=[]}a.Qb=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.C(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.Qb(b);return a.a.eb(b,c,d)};c.prototype={save:function(b,c){var d=a.a.m(this.keys,b);0<=d?this.hb[d]=c:(this.keys.push(b),this.hb.push(c))},get:function(b){b=a.a.m(this.keys,b);return 0<=b?this.hb[b]:p}}})();
a.b("toJS",a.Qb);a.b("toJSON",a.toJSON);(function(){a.i={q:function(b){switch(a.a.t(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.e.get(b,a.d.options.Va):7>=a.a.L?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.i.q(b.options[b.selectedIndex]):p;default:return b.value}},ca:function(b,d,c){switch(a.a.t(b)){case "option":switch(typeof d){case "string":a.a.e.set(b,a.d.options.Va,p);"__ko__hasDomDataOptionValue__"in
b&&delete b.__ko__hasDomDataOptionValue__;b.value=d;break;default:a.a.e.set(b,a.d.options.Va,d),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof d?d:""}break;case "select":if(""===d||null===d)d=p;for(var e=-1,g=0,h=b.options.length,k;g<h;++g)if(k=a.i.q(b.options[g]),k==d||""==k&&d===p){e=g;break}if(c||0<=e||d===p&&1<b.size)b.selectedIndex=e;break;default:if(null===d||d===p)d="";b.value=d}}}})();a.b("selectExtensions",a.i);a.b("selectExtensions.readValue",a.i.q);a.b("selectExtensions.writeValue",
a.i.ca);a.h=function(){function b(b){b=a.a.cb(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),k,n,t=0;if(d){d.push(",");for(var z=0,u;u=d[z];++z){var r=u.charCodeAt(0);if(44===r){if(0>=t){k&&c.push(n?{key:k,value:n.join("")}:{unknown:k});k=n=t=0;continue}}else if(58===r){if(!n)continue}else if(47===r&&z&&1<u.length)(r=d[z-1].match(g))&&!h[r[0]]&&(b=b.substr(b.indexOf(u)+1),d=b.match(e),d.push(","),z=-1,u="/");else if(40===r||123===r||91===r)++t;else if(41===r||125===r||93===r)--t;
else if(!k&&!n){k=34===r||39===r?u.slice(1,-1):u;continue}n?n.push(u):n=[u]}}return c}var d=["true","false","null","undefined"],c=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]","g"),g=/[\])"'A-Za-z0-9_$]+$/,h={"in":1,"return":1,"typeof":1},k={};return{ha:[],V:k,Wa:b,ya:function(f,m){function e(b,m){var f;if(!z){var u=a.getBindingHandler(b);if(u&&u.preprocess&&
!(m=u.preprocess(m,b,e)))return;if(u=k[b])f=m,0<=a.a.m(d,f)?f=!1:(u=f.match(c),f=null===u?!1:u[1]?"Object("+u[1]+")"+u[2]:f),u=f;u&&h.push("'"+b+"':function(_z){"+f+"=_z}")}t&&(m="function(){return "+m+" }");g.push("'"+b+"':"+m)}m=m||{};var g=[],h=[],t=m.valueAccessors,z=m.bindingParams,u="string"===typeof f?b(f):f;a.a.u(u,function(a){e(a.key||a.unknown,a.value)});h.length&&e("_ko_property_writers","{"+h.join(",")+" }");return g.join(",")},lc:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==
b)return!0;return!1},pa:function(b,c,d,e,k){if(b&&a.C(b))!a.Ra(b)||k&&b.v()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",a.h.ha);a.b("expressionRewriting.parseObjectLiteral",a.h.Wa);a.b("expressionRewriting.preProcessBindings",a.h.ya);a.b("expressionRewriting._twoWayBindings",a.h.V);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.ya);(function(){function b(a){return 8==
a.nodeType&&h.test(g?a.text:a.nodeValue)}function d(a){return 8==a.nodeType&&k.test(g?a.text:a.nodeValue)}function c(a,c){for(var f=a,e=1,k=[];f=f.nextSibling;){if(d(f)&&(e--,0===e))return k;k.push(f);b(f)&&e++}if(!c)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,b){var d=c(a,b);return d?0<d.length?d[d.length-1].nextSibling:a.nextSibling:null}var g=v&&"\x3c!--test--\x3e"===v.createComment("test").text,h=g?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,
k=g?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,f={ul:!0,ol:!0};a.f={Q:{},childNodes:function(a){return b(a)?c(a):a.childNodes},ja:function(c){if(b(c)){c=a.f.childNodes(c);for(var d=0,f=c.length;d<f;d++)a.removeNode(c[d])}else a.a.Ka(c)},T:function(c,d){if(b(c)){a.f.ja(c);for(var f=c.nextSibling,e=0,k=d.length;e<k;e++)f.parentNode.insertBefore(d[e],f)}else a.a.T(c,d)},Hb:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},Bb:function(c,
d,f){f?b(c)?c.parentNode.insertBefore(d,f.nextSibling):f.nextSibling?c.insertBefore(d,f.nextSibling):c.appendChild(d):a.f.Hb(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||d(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&d(a.nextSibling)?null:a.nextSibling},gc:b,xc:function(a){return(a=(g?a.text:a.nodeValue).match(h))?a[1]:null},Fb:function(c){if(f[a.a.t(c)]){var k=c.firstChild;if(k){do if(1===k.nodeType){var g;g=k.firstChild;
var h=null;if(g){do if(h)h.push(g);else if(b(g)){var t=e(g,!0);t?g=t:h=[g]}else d(g)&&(h=[g]);while(g=g.nextSibling)}if(g=h)for(h=k.nextSibling,t=0;t<g.length;t++)h?c.insertBefore(g[t],h):c.appendChild(g[t])}while(k=k.nextSibling)}}}}})();a.b("virtualElements",a.f);a.b("virtualElements.allowedBindings",a.f.Q);a.b("virtualElements.emptyNode",a.f.ja);a.b("virtualElements.insertAfter",a.f.Bb);a.b("virtualElements.prepend",a.f.Hb);a.b("virtualElements.setDomNodeChildren",a.f.T);(function(){a.J=function(){this.Yb=
{}};a.a.extend(a.J.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.f.gc(b);default:return!1}},getBindings:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,d,b):null;return a.g.mb(c,b,d,!1)},getBindingAccessors:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,d,b,{valueAccessors:!0}):null;return a.g.mb(c,b,d,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");
case 8:return a.f.xc(b);default:return null}},parseBindingsString:function(b,d,c,e){try{var g=this.Yb,h=b+(e&&e.valueAccessors||""),k;if(!(k=g[h])){var f,m="with($context){with($data||{}){return{"+a.h.ya(b,e)+"}}}";f=new Function("$context","$element",m);k=g[h]=f}return k(d,c)}catch(l){throw l.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+l.message,l;}}});a.J.instance=new a.J})();a.b("bindingProvider",a.J);(function(){function b(a){return function(){return a}}function d(a){return a()}
function c(b){return a.a.na(a.k.B(b),function(a,c){return function(){return b()[c]}})}function e(a,b){return c(this.getBindings.bind(this,a,b))}function g(b,c,d){var f,e=a.f.firstChild(c),k=a.J.instance,g=k.preprocessNode;if(g){for(;f=e;)e=a.f.nextSibling(f),g.call(k,f);e=a.f.firstChild(c)}for(;f=e;)e=a.f.nextSibling(f),h(b,f,d)}function h(b,c,d){var e=!0,k=1===c.nodeType;k&&a.f.Fb(c);if(k&&d||a.J.instance.nodeHasBindings(c))e=f(c,null,b,d).shouldBindDescendants;e&&!l[a.a.t(c)]&&g(b,c,!k)}function k(b){var c=
[],d={},f=[];a.a.G(b,function y(e){if(!d[e]){var k=a.getBindingHandler(e);k&&(k.after&&(f.push(e),a.a.u(k.after,function(c){if(b[c]){if(-1!==a.a.m(f,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+f.join(", "));y(c)}}),f.length--),c.push({key:e,zb:k}));d[e]=!0}});return c}function f(b,c,f,g){var m=a.a.e.get(b,q);if(!c){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.e.set(b,q,!0)}!m&&g&&a.Ob(b,f);var l;if(c&&"function"!==
typeof c)l=c;else{var h=a.J.instance,n=h.getBindingAccessors||e,s=a.j(function(){(l=c?c(f,b):n.call(h,b,f))&&f.I&&f.I();return l},null,{o:b});l&&s.Z()||(s=null)}var v;if(l){var w=s?function(a){return function(){return d(s()[a])}}:function(a){return l[a]},A=function(){return a.a.na(s?s():l,d)};A.get=function(a){return l[a]&&d(w(a))};A.has=function(a){return a in l};g=k(l);a.a.u(g,function(c){var d=c.zb.init,e=c.zb.update,k=c.key;if(8===b.nodeType&&!a.f.Q[k])throw Error("The binding '"+k+"' cannot be used with virtual elements");
try{"function"==typeof d&&a.k.B(function(){var a=d(b,w(k),A,f.$data,f);if(a&&a.controlsDescendantBindings){if(v!==p)throw Error("Multiple bindings ("+v+" and "+k+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");v=k}}),"function"==typeof e&&a.j(function(){e(b,w(k),A,f.$data,f)},null,{o:b})}catch(g){throw g.message='Unable to process binding "'+k+": "+l[k]+'"\nMessage: '+g.message,g;}})}return{shouldBindDescendants:v===p}}
function m(b){return b&&b instanceof a.N?b:new a.N(b)}a.d={};var l={script:!0};a.getBindingHandler=function(b){return a.d[b]};a.N=function(b,c,d,f){var e=this,k="function"==typeof b&&!a.C(b),g,m=a.j(function(){var g=k?b():b,l=a.a.c(g);c?(c.I&&c.I(),a.a.extend(e,c),m&&(e.I=m)):(e.$parents=[],e.$root=l,e.ko=a);e.$rawData=g;e.$data=l;d&&(e[d]=l);f&&f(e,c,l);return e.$data},null,{Ia:function(){return g&&!a.a.ob(g)},o:!0});m.Z()&&(e.I=m,m.equalityComparer=null,g=[],m.Tb=function(b){g.push(b);a.a.w.da(b,
function(b){a.a.ua(g,b);g.length||(m.K(),e.I=m=p)})})};a.N.prototype.createChildContext=function(b,c,d){return new a.N(b,this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.N.prototype.extend=function(b){return new a.N(this.I||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.e.F(),n=a.a.e.F();a.Ob=function(b,c){if(2==arguments.length)a.a.e.set(b,n,c),
c.I&&c.I.Tb(b);else return a.a.e.get(b,n)};a.ra=function(b,c,d){1===b.nodeType&&a.f.Fb(b);return f(b,c,m(d),!0)};a.Wb=function(d,f,e){e=m(e);return a.ra(d,"function"===typeof f?c(f.bind(null,e,d)):a.a.na(f,b),e)};a.Ca=function(a,b){1!==b.nodeType&&8!==b.nodeType||g(m(a),b,!0)};a.pb=function(a,b){!w&&s.jQuery&&(w=s.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||s.document.body;h(m(a),
b,!0)};a.Ha=function(b){switch(b.nodeType){case 1:case 8:var c=a.Ob(b);if(c)return c;if(b.parentNode)return a.Ha(b.parentNode)}return p};a.$b=function(b){return(b=a.Ha(b))?b.$data:p};a.b("bindingHandlers",a.d);a.b("applyBindings",a.pb);a.b("applyBindingsToDescendants",a.Ca);a.b("applyBindingAccessorsToNode",a.ra);a.b("applyBindingsToNode",a.Wb);a.b("contextFor",a.Ha);a.b("dataFor",a.$b)})();(function(b){function d(d,f){var e=g.hasOwnProperty(d)?g[d]:b,l;e||(e=g[d]=new a.P,c(d,function(a){h[d]=a;delete g[d];
l?e.notifySubscribers(a):setTimeout(function(){e.notifySubscribers(a)},0)}),l=!0);e.U(f)}function c(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a)}):b(null)})}function e(c,d,g,l){l||(l=a.g.loaders.slice(0));var h=l.shift();if(h){var n=h[c];if(n){var t=!1;if(n.apply(h,d.concat(function(a){t?g(null):null!==a?g(a):e(c,d,g,l)}))!==b&&(t=!0,!h.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");
}else e(c,d,g,l)}else g(null)}var g={},h={};a.g={get:function(a,c){var e=h.hasOwnProperty(a)?h[a]:b;e?setTimeout(function(){c(e)},0):d(a,c)},tb:function(a){delete h[a]},jb:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.tb)})();(function(){function b(b,c,d,e){function k(){0===--u&&e(h)}var h={},u=2,r=d.template;d=d.viewModel;r?g(c,r,function(c){a.g.jb("loadTemplate",[b,c],function(a){h.template=a;k()})}):k();d?g(c,d,function(c){a.g.jb("loadViewModel",
[b,c],function(a){h[f]=a;k()})}):k()}function d(a,b,c){if("function"===typeof b)c(function(a){return new b(a)});else if("function"===typeof b[f])c(b[f]);else if("instance"in b){var e=b.instance;c(function(){return e})}else"viewModel"in b?d(a,b.viewModel,c):a("Unknown viewModel value: "+b)}function c(b){switch(a.a.t(b)){case "script":return a.a.ba(b.text);case "textarea":return a.a.ba(b.value);case "template":if(e(b.content))return a.a.ia(b.content.childNodes)}return a.a.ia(b.childNodes)}function e(a){return s.DocumentFragment?
a instanceof DocumentFragment:a&&11===a.nodeType}function g(a,b,c){"string"===typeof b.require?N||s.require?(N||s.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function h(a){return function(b){throw Error("Component '"+a+"': "+b);}}var k={};a.g.tc=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.Qa(b))throw Error("Component "+b+" is already registered");k[b]=c};a.g.Qa=function(a){return a in k};a.g.wc=function(b){delete k[b];a.g.tb(b)};a.g.ub={getConfig:function(a,
b){b(k.hasOwnProperty(a)?k[a]:null)},loadComponent:function(a,c,d){var e=h(a);g(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,d,f){b=h(b);if("string"===typeof d)f(a.a.ba(d));else if(d instanceof Array)f(d);else if(e(d))f(a.a.S(d.childNodes));else if(d.element)if(d=d.element,s.HTMLElement?d instanceof HTMLElement:d&&d.tagName&&1===d.nodeType)f(c(d));else if("string"===typeof d){var k=v.getElementById(d);k?f(c(k)):b("Cannot find element with ID "+d)}else b("Unknown element type: "+d);else b("Unknown template value: "+
d)},loadViewModel:function(a,b,c){d(h(a),b,c)}};var f="createViewModel";a.b("components.register",a.g.tc);a.b("components.isRegistered",a.g.Qa);a.b("components.unregister",a.g.wc);a.b("components.defaultLoader",a.g.ub);a.g.loaders.push(a.g.ub);a.g.Ub=k})();(function(){function b(b,e){var g=b.getAttribute("params");if(g){var g=d.parseBindingsString(g,e,b,{valueAccessors:!0,bindingParams:!0}),g=a.a.na(g,function(d){return a.s(d,null,{o:b})}),h=a.a.na(g,function(d){return d.Z()?a.s(function(){return a.a.c(d())},
null,{o:b}):d.v()});h.hasOwnProperty("$raw")||(h.$raw=g);return h}return{$raw:{}}}a.g.getComponentNameForNode=function(b){b=a.a.t(b);return a.g.Qa(b)&&b};a.g.mb=function(c,d,g,h){if(1===d.nodeType){var k=a.g.getComponentNameForNode(d);if(k){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var f={name:k,params:b(d,g)};c.component=h?function(){return f}:f}}return c};var d=new a.J;9>a.a.L&&(a.g.register=function(a){return function(b){v.createElement(b);
return a.apply(this,arguments)}}(a.g.register),v.createDocumentFragment=function(b){return function(){var d=b(),g=a.g.Ub,h;for(h in g)g.hasOwnProperty(h)&&d.createElement(h);return d}}(v.createDocumentFragment))})();(function(){var b=0;a.d.component={init:function(d,c,e,g,h){function k(){var a=f&&f.dispose;"function"===typeof a&&a.call(f);m=null}var f,m;a.a.w.da(d,k);a.s(function(){var e=a.a.c(c()),g,n;"string"===typeof e?g=e:(g=a.a.c(e.name),n=a.a.c(e.params));if(!g)throw Error("No component name specified");
var t=m=++b;a.g.get(g,function(b){if(m===t){k();if(!b)throw Error("Unknown component '"+g+"'");var c=b.template;if(!c)throw Error("Component '"+g+"' has no template");c=a.a.ia(c);a.f.T(d,c);var c=n,e=b.createViewModel;b=e?e.call(b,c,{element:d}):c;c=h.createChildContext(b);f=b;a.Ca(c,d)}})},null,{o:d});return{controlsDescendantBindings:!0}}};a.f.Q.component=!0})();var Q={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,d){var c=a.a.c(d())||{};a.a.G(c,function(c,d){d=a.a.c(d);var h=
!1===d||null===d||d===p;h&&b.removeAttribute(c);8>=a.a.L&&c in Q?(c=Q[c],h?b.removeAttribute(c):b[c]=d):h||b.setAttribute(c,d.toString());"name"===c&&a.a.Mb(b,h?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,d,c){function e(){var e=b.checked,k=q?h():e;if(!a.Y.ma()&&(!f||e)){var g=a.k.B(d);m?l!==k?(e&&(a.a.ea(g,k,!0),a.a.ea(g,l,!1)),l=k):a.a.ea(g,k,e):a.h.pa(g,c,"checked",k,!0)}}function g(){var c=a.a.c(d());b.checked=m?0<=a.a.m(c,h()):k?c:h()===c}var h=a.Ib(function(){return c.has("checkedValue")?
a.a.c(c.get("checkedValue")):c.has("value")?a.a.c(c.get("value")):b.value}),k="checkbox"==b.type,f="radio"==b.type;if(k||f){var m=k&&a.a.c(d())instanceof Array,l=m?h():p,q=f||m;f&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.s(e,null,{o:b});a.a.n(b,"click",e);a.s(g,null,{o:b})}}};a.h.V.checked=!0;a.d.checkedValue={update:function(b,d){b.value=a.a.c(d())}}})();a.d.css={update:function(b,d){var c=a.a.c(d());"object"==typeof c?a.a.G(c,function(c,d){d=a.a.c(d);a.a.Ba(b,c,d)}):(c=String(c||""),
a.a.Ba(b,b.__ko__cssValue,!1),b.__ko__cssValue=c,a.a.Ba(b,c,!0))}};a.d.enable={update:function(b,d){var c=a.a.c(d());c&&b.disabled?b.removeAttribute("disabled"):c||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,d){a.d.enable.update(b,function(){return!a.a.c(d())})}};a.d.event={init:function(b,d,c,e,g){var h=d()||{};a.a.G(h,function(k){"string"==typeof k&&a.a.n(b,k,function(b){var h,l=d()[k];if(l){try{var q=a.a.S(arguments);e=g.$data;q.unshift(e);h=l.apply(e,q)}finally{!0!==h&&(b.preventDefault?
b.preventDefault():b.returnValue=!1)}!1===c.get(k+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.d.foreach={Eb:function(b){return function(){var d=b(),c=a.a.Xa(d);if(!c||"number"==typeof c.length)return{foreach:d,templateEngine:a.O.Oa};a.a.c(d);return{foreach:c.data,as:c.as,includeDestroyed:c.includeDestroyed,afterAdd:c.afterAdd,beforeRemove:c.beforeRemove,afterRender:c.afterRender,beforeMove:c.beforeMove,afterMove:c.afterMove,templateEngine:a.O.Oa}}},init:function(b,
d){return a.d.template.init(b,a.d.foreach.Eb(d))},update:function(b,d,c,e,g){return a.d.template.update(b,a.d.foreach.Eb(d),c,e,g)}};a.h.ha.foreach=!1;a.f.Q.foreach=!0;a.d.hasfocus={init:function(b,d,c){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(h){g=f.body}e=g===b}f=d();a.h.pa(f,c,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var g=e.bind(null,!0),h=e.bind(null,!1);a.a.n(b,"focus",g);a.a.n(b,"focusin",
g);a.a.n(b,"blur",h);a.a.n(b,"focusout",h)},update:function(b,d){var c=!!a.a.c(d());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===c||(c?b.focus():b.blur(),a.k.B(a.a.oa,null,[b,c?"focusin":"focusout"]))}};a.h.V.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.V.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,d){a.a.$a(b,d())}};I("if");I("ifnot",!1,!0);I("with",!0,!1,function(a,d){return a.createChildContext(d)});var K={};a.d.options={init:function(b){if("select"!==
a.a.t(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,d,c){function e(){return a.a.ta(b.options,function(a){return a.selected})}function g(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function h(c,d){if(q.length){var e=0<=a.a.m(q,a.i.q(d[0]));a.a.Nb(d[0],e);n&&!e&&a.k.B(a.a.oa,null,[b,"change"])}}var k=0!=b.length&&b.multiple?b.scrollTop:null,f=a.a.c(d()),m=c.get("optionsIncludeDestroyed");
d={};var l,q;q=b.multiple?a.a.Da(e(),a.i.q):0<=b.selectedIndex?[a.i.q(b.options[b.selectedIndex])]:[];f&&("undefined"==typeof f.length&&(f=[f]),l=a.a.ta(f,function(b){return m||b===p||null===b||!a.a.c(b._destroy)}),c.has("optionsCaption")&&(f=a.a.c(c.get("optionsCaption")),null!==f&&f!==p&&l.unshift(K)));var n=!1;d.beforeRemove=function(a){b.removeChild(a)};f=h;c.has("optionsAfterRender")&&(f=function(b,d){h(0,d);a.k.B(c.get("optionsAfterRender"),null,[d[0],b!==K?b:p])});a.a.Za(b,l,function(d,e,f){f.length&&
(q=f[0].selected?[a.i.q(f[0])]:[],n=!0);e=b.ownerDocument.createElement("option");d===K?(a.a.bb(e,c.get("optionsCaption")),a.i.ca(e,p)):(f=g(d,c.get("optionsValue"),d),a.i.ca(e,a.a.c(f)),d=g(d,c.get("optionsText"),f),a.a.bb(e,d));return[e]},d,f);a.k.B(function(){c.get("valueAllowUnset")&&c.has("value")?a.i.ca(b,a.a.c(c.get("value")),!0):(b.multiple?q.length&&e().length<q.length:q.length&&0<=b.selectedIndex?a.i.q(b.options[b.selectedIndex])!==q[0]:q.length||0<=b.selectedIndex)&&a.a.oa(b,"change")});
a.a.dc(b);k&&20<Math.abs(k-b.scrollTop)&&(b.scrollTop=k)}};a.d.options.Va=a.a.e.F();a.d.selectedOptions={after:["options","foreach"],init:function(b,d,c){a.a.n(b,"change",function(){var e=d(),g=[];a.a.u(b.getElementsByTagName("option"),function(b){b.selected&&g.push(a.i.q(b))});a.h.pa(e,c,"selectedOptions",g)})},update:function(b,d){if("select"!=a.a.t(b))throw Error("values binding applies only to SELECT elements");var c=a.a.c(d());c&&"number"==typeof c.length&&a.a.u(b.getElementsByTagName("option"),
function(b){var d=0<=a.a.m(c,a.i.q(b));a.a.Nb(b,d)})}};a.h.V.selectedOptions=!0;a.d.style={update:function(b,d){var c=a.a.c(d()||{});a.a.G(c,function(c,d){d=a.a.c(d);if(null===d||d===p||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,d,c,e,g){if("function"!=typeof d())throw Error("The value for a submit binding must be a function");a.a.n(b,"submit",function(a){var c,e=d();try{c=e.call(g.$data,b)}finally{!0!==c&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},
update:function(b,d){a.a.bb(b,d())}};a.f.Q.text=!0;(function(){if(s&&s.navigator)var b=function(a){if(a)return parseFloat(a[1])},d=s.opera&&s.opera.version&&parseInt(s.opera.version()),c=s.navigator.userAgent,e=b(c.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),g=b(c.match(/Firefox\/([^ ]*)/));if(10>a.a.L)var h=a.a.e.F(),k=a.a.e.F(),f=function(b){var c=this.activeElement;(c=c&&a.a.e.get(c,k))&&c(b)},m=function(b,c){var d=b.ownerDocument;a.a.e.get(d,h)||(a.a.e.set(d,h,!0),a.a.n(d,"selectionchange",
f));a.a.e.set(b,k,c)};a.d.textInput={init:function(b,c,f){function k(c,d){a.a.n(b,c,d)}function h(){var d=a.a.c(c());if(null===d||d===p)d="";v!==p&&d===v?setTimeout(h,4):b.value!==d&&(s=d,b.value=d)}function u(){y||(v=b.value,y=setTimeout(r,4))}function r(){clearTimeout(y);v=y=p;var d=b.value;s!==d&&(s=d,a.h.pa(c(),f,"textInput",d))}var s=b.value,y,v;10>a.a.L?(k("propertychange",function(a){"value"===a.propertyName&&r()}),8==a.a.L&&(k("keyup",r),k("keydown",r)),8<=a.a.L&&(m(b,r),k("dragend",u))):
(k("input",r),5>e&&"textarea"===a.a.t(b)?(k("keydown",u),k("paste",u),k("cut",u)):11>d?k("keydown",u):4>g&&(k("DOMAutoComplete",r),k("dragdrop",r),k("drop",r)));k("change",r);a.s(h,null,{o:b})}};a.h.V.textInput=!0;a.d.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.d.uniqueName={init:function(b,d){if(d()){var c="ko_unique_"+ ++a.d.uniqueName.Zb;a.a.Mb(b,c)}}};a.d.uniqueName.Zb=0;a.d.value={after:["options","foreach"],init:function(b,d,c){if("input"!=b.tagName.toLowerCase()||"checkbox"!=
b.type&&"radio"!=b.type){var e=["change"],g=c.get("valueUpdate"),h=!1,k=null;g&&("string"==typeof g&&(g=[g]),a.a.ga(e,g),e=a.a.rb(e));var f=function(){k=null;h=!1;var e=d(),f=a.i.q(b);a.h.pa(e,c,"value",f)};!a.a.L||"input"!=b.tagName.toLowerCase()||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.m(e,"propertychange")||(a.a.n(b,"propertychange",function(){h=!0}),a.a.n(b,"focus",function(){h=!1}),a.a.n(b,"blur",function(){h&&f()}));a.a.u(e,function(c){var d=f;a.a.vc(c,
"after")&&(d=function(){k=a.i.q(b);setTimeout(f,0)},c=c.substring(5));a.a.n(b,c,d)});var m=function(){var e=a.a.c(d()),f=a.i.q(b);if(null!==k&&e===k)setTimeout(m,0);else if(e!==f)if("select"===a.a.t(b)){var g=c.get("valueAllowUnset"),f=function(){a.i.ca(b,e,g)};f();g||e===a.i.q(b)?setTimeout(f,0):a.k.B(a.a.oa,null,[b,"change"])}else a.i.ca(b,e)};a.s(m,null,{o:b})}else a.ra(b,{checkedValue:d})},update:function(){}};a.h.V.value=!0;a.d.visible={update:function(b,d){var c=a.a.c(d()),e="none"!=b.style.display;
c&&!e?b.style.display="":!c&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(d,c,e,g,h){return a.d.event.init.call(this,d,function(){var a={};a[b]=c();return a},e,g,h)}}})("click");a.H=function(){};a.H.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.H.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.H.prototype.makeTemplateSource=function(b,d){if("string"==typeof b){d=d||v;var c=
d.getElementById(b);if(!c)throw Error("Cannot find template with ID "+b);return new a.r.l(c)}if(1==b.nodeType||8==b.nodeType)return new a.r.fa(b);throw Error("Unknown template type: "+b);};a.H.prototype.renderTemplate=function(a,d,c,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,d,c)};a.H.prototype.isTemplateRewritten=function(a,d){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,d).data("isRewritten")};a.H.prototype.rewriteTemplate=function(a,d,c){a=this.makeTemplateSource(a,
c);d=d(a.text());a.text(d);a.data("isRewritten",!0)};a.b("templateEngine",a.H);a.fb=function(){function b(b,c,d,k){b=a.h.Wa(b);for(var f=a.h.ha,m=0;m<b.length;m++){var l=b[m].key;if(f.hasOwnProperty(l)){var q=f[l];if("function"===typeof q){if(l=q(b[m].value))throw Error(l);}else if(!q)throw Error("This template engine does not support the '"+l+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.ya(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+
"')";return k.createJavaScriptEvaluatorBlock(d)+c}var d=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,c=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{ec:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.fb.nc(b,c)},d)},nc:function(a,g){return a.replace(d,function(a,c,d,e,l){return b(l,c,d,g)}).replace(c,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",g)})},Xb:function(b,c){return a.D.Ua(function(d,
k){var f=d.nextSibling;f&&f.nodeName.toLowerCase()===c&&a.ra(f,b,k)})}}}();a.b("__tr_ambtns",a.fb.Xb);(function(){a.r={};a.r.l=function(a){this.l=a};a.r.l.prototype.text=function(){var b=a.a.t(this.l),b="script"===b?"text":"textarea"===b?"value":"innerHTML";if(0==arguments.length)return this.l[b];var d=arguments[0];"innerHTML"===b?a.a.$a(this.l,d):this.l[b]=d};var b=a.a.e.F()+"_";a.r.l.prototype.data=function(c){if(1===arguments.length)return a.a.e.get(this.l,b+c);a.a.e.set(this.l,b+c,arguments[1])};
var d=a.a.e.F();a.r.fa=function(a){this.l=a};a.r.fa.prototype=new a.r.l;a.r.fa.prototype.text=function(){if(0==arguments.length){var b=a.a.e.get(this.l,d)||{};b.gb===p&&b.Ga&&(b.gb=b.Ga.innerHTML);return b.gb}a.a.e.set(this.l,d,{gb:arguments[0]})};a.r.l.prototype.nodes=function(){if(0==arguments.length)return(a.a.e.get(this.l,d)||{}).Ga;a.a.e.set(this.l,d,{Ga:arguments[0]})};a.b("templateSources",a.r);a.b("templateSources.domElement",a.r.l);a.b("templateSources.anonymousTemplate",a.r.fa)})();(function(){function b(b,
c,d){var e;for(c=a.f.nextSibling(c);b&&(e=b)!==c;)b=a.f.nextSibling(e),d(e,b)}function d(c,d){if(c.length){var e=c[0],g=c[c.length-1],h=e.parentNode,n=a.J.instance,t=n.preprocessNode;if(t){b(e,g,function(a,b){var c=a.previousSibling,d=t.call(n,a);d&&(a===e&&(e=d[0]||b),a===g&&(g=d[d.length-1]||c))});c.length=0;if(!e)return;e===g?c.push(e):(c.push(e,g),a.a.ka(c,h))}b(e,g,function(b){1!==b.nodeType&&8!==b.nodeType||a.pb(d,b)});b(e,g,function(b){1!==b.nodeType&&8!==b.nodeType||a.D.Sb(b,[d])});a.a.ka(c,
h)}}function c(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,h,l,q){q=q||{};var n=b&&c(b),n=n&&n.ownerDocument,t=q.templateEngine||g;a.fb.ec(h,t,n);h=t.renderTemplate(h,l,q,n);if("number"!=typeof h.length||0<h.length&&"number"!=typeof h[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(e){case "replaceChildren":a.f.T(b,h);n=!0;break;case "replaceNode":a.a.Lb(b,h);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+
e);}n&&(d(h,l),q.afterRender&&a.k.B(q.afterRender,null,[h,l.$data]));return h}var g;a.ab=function(b){if(b!=p&&!(b instanceof a.H))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.Ya=function(b,d,h,l,q){h=h||{};if((h.templateEngine||g)==p)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(l){var n=c(l);return a.j(function(){var g=d&&d instanceof a.N?d:new a.N(a.a.c(d)),p=a.C(b)?b():"function"===typeof b?b(g.$data,g):b,g=e(l,q,p,g,h);
"replaceNode"==q&&(l=g,n=c(l))},null,{Ia:function(){return!n||!a.a.Ja(n)},o:n&&"replaceNode"==q?n.parentNode:n})}return a.D.Ua(function(c){a.Ya(b,d,h,c,"replaceNode")})};a.uc=function(b,c,g,h,q){function n(a,b){d(b,s);g.afterRender&&g.afterRender(b,a)}function t(c,d){s=q.createChildContext(c,g.as,function(a){a.$index=d});var f=a.C(b)?b():"function"===typeof b?b(c,s):b;return e(null,"ignoreTargetNode",f,s,g)}var s;return a.j(function(){var b=a.a.c(c)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.ta(b,
function(b){return g.includeDestroyed||b===p||null===b||!a.a.c(b._destroy)});a.k.B(a.a.Za,null,[h,b,t,g,n])},null,{o:h})};var h=a.a.e.F();a.d.template={init:function(b,c){var d=a.a.c(c());"string"==typeof d||d.name?a.f.ja(b):(d=a.f.childNodes(b),d=a.a.oc(d),(new a.r.fa(b)).nodes(d));return{controlsDescendantBindings:!0}},update:function(b,c,d,e,g){var n=c(),t;c=a.a.c(n);d=!0;e=null;"string"==typeof c?c={}:(n=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in c&&(d=!a.a.c(c.ifnot)),t=a.a.c(c.data));
"foreach"in c?e=a.uc(n||b,d&&c.foreach||[],c,b,g):d?(g="data"in c?g.createChildContext(t,c.as):g,e=a.Ya(n||b,g,c,b)):a.f.ja(b);g=e;(t=a.a.e.get(b,h))&&"function"==typeof t.K&&t.K();a.a.e.set(b,h,g&&g.Z()?g:p)}};a.h.ha.template=function(b){b=a.h.Wa(b);return 1==b.length&&b[0].unknown||a.h.lc(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.f.Q.template=!0})();a.b("setTemplateEngine",a.ab);a.b("renderTemplate",a.Ya);a.a.wb=function(a,d,c){if(a.length&&
d.length){var e,g,h,k,f;for(e=g=0;(!c||e<c)&&(k=a[g]);++g){for(h=0;f=d[h];++h)if(k.value===f.value){k.moved=f.index;f.moved=k.index;d.splice(h,1);e=h=0;break}e+=h}}};a.a.Fa=function(){function b(b,c,e,g,h){var k=Math.min,f=Math.max,m=[],l,q=b.length,n,p=c.length,s=p-q||1,u=q+p+1,r,v,w;for(l=0;l<=q;l++)for(v=r,m.push(r=[]),w=k(p,l+s),n=f(0,l-1);n<=w;n++)r[n]=n?l?b[l-1]===c[n-1]?v[n-1]:k(v[n]||u,r[n-1]||u)+1:n+1:l+1;k=[];f=[];s=[];l=q;for(n=p;l||n;)p=m[l][n]-1,n&&p===m[l][n-1]?f.push(k[k.length]={status:e,
value:c[--n],index:n}):l&&p===m[l-1][n]?s.push(k[k.length]={status:g,value:b[--l],index:l}):(--n,--l,h.sparse||k.push({status:"retained",value:c[n]}));a.a.wb(f,s,10*q);return k.reverse()}return function(a,c,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];c=c||[];return a.length<=c.length?b(a,c,"added","deleted",e):b(c,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.Fa);(function(){function b(b,d,g,h,k){var f=[],m=a.j(function(){var l=d(g,k,a.a.ka(f,b))||[];0<f.length&&(a.a.Lb(f,
l),h&&a.k.B(h,null,[g,l,k]));f.length=0;a.a.ga(f,l)},null,{o:b,Ia:function(){return!a.a.ob(f)}});return{$:f,j:m.Z()?m:p}}var d=a.a.e.F();a.a.Za=function(c,e,g,h,k){function f(b,d){x=q[d];r!==d&&(A[b]=x);x.Na(r++);a.a.ka(x.$,c);s.push(x);w.push(x)}function m(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.u(c[d].$,function(a){b(a,d,c[d].sa)})}e=e||[];h=h||{};var l=a.a.e.get(c,d)===p,q=a.a.e.get(c,d)||[],n=a.a.Da(q,function(a){return a.sa}),t=a.a.Fa(n,e,h.dontLimitMoves),s=[],u=0,r=0,v=[],w=[];e=
[];for(var A=[],n=[],x,B=0,D,F;D=t[B];B++)switch(F=D.moved,D.status){case "deleted":F===p&&(x=q[u],x.j&&x.j.K(),v.push.apply(v,a.a.ka(x.$,c)),h.beforeRemove&&(e[B]=x,w.push(x)));u++;break;case "retained":f(B,u++);break;case "added":F!==p?f(B,F):(x={sa:D.value,Na:a.p(r++)},s.push(x),w.push(x),l||(n[B]=x))}m(h.beforeMove,A);a.a.u(v,h.beforeRemove?a.R:a.removeNode);for(var B=0,l=a.f.firstChild(c),G;x=w[B];B++){x.$||a.a.extend(x,b(c,g,x.sa,k,x.Na));for(u=0;t=x.$[u];l=t.nextSibling,G=t,u++)t!==l&&a.f.Bb(c,
t,G);!x.ic&&k&&(k(x.sa,x.$,x.Na),x.ic=!0)}m(h.beforeRemove,e);m(h.afterMove,A);m(h.afterAdd,n);a.a.e.set(c,d,s)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.Za);a.O=function(){this.allowTemplateRewriting=!1};a.O.prototype=new a.H;a.O.prototype.renderTemplateSource=function(b){var d=(9>a.a.L?0:b.nodes)?b.nodes():null;if(d)return a.a.S(d.cloneNode(!0).childNodes);b=b.text();return a.a.ba(b)};a.O.Oa=new a.O;a.ab(a.O.Oa);a.b("nativeTemplateEngine",a.O);(function(){a.Sa=function(){var a=this.kc=
function(){if(!w||!w.tmpl)return 0;try{if(0<=w.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,e,g){g=g||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=w.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=w.extend({koBindingContext:e},g.templateOptions);e=w.tmpl(h,
b,e);e.appendTo(v.createElement("div"));w.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){v.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(w.tmpl.tag.ko_code={open:"__.push($1 || '');"},w.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.Sa.prototype=new a.H;var b=new a.Sa;0<b.kc&&a.ab(b);a.b("jqueryTmplTemplateEngine",a.Sa)})()})})();})();

Разница между файлами не показана из-за своего большого размера Загрузить разницу

124
src/Storefront/Scripts/WebPortal/Dependencies/knockout-3.4.2.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,124 @@
/*!
* Knockout JavaScript library v3.4.2
* (c) The Knockout.js team - http://knockoutjs.com/
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(function() {(function(n){var x=this||(0,eval)("this"),t=x.document,M=x.navigator,u=x.jQuery,H=x.JSON;(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(x.ko={})})(function(N,O){function J(a,c){return null===a||typeof a in R?a===c:!1}function S(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function T(b,c){var d;return function(){clearTimeout(d);d=a.a.setTimeout(b,c)}}function U(a,
c){c&&c!==E?"beforeChange"===c?this.Ob(a):this.Ja(a,c):this.Pb(a)}function V(a,c){null!==c&&c.k&&c.k()}function W(a,c){var d=this.Mc,e=d[s];e.T||(this.ob&&this.Oa[c]?(d.Sb(c,a,this.Oa[c]),this.Oa[c]=null,--this.ob):e.s[c]||d.Sb(c,a,e.t?{$:a}:d.yc(a)),a.Ha&&a.Hc())}function K(b,c,d,e){a.d[b]={init:function(b,g,h,l,m){var k,r;a.m(function(){var q=g(),p=a.a.c(q),p=!d!==!p,A=!r;if(A||c||p!==k)A&&a.xa.Ca()&&(r=a.a.wa(a.f.childNodes(b),!0)),p?(A||a.f.fa(b,a.a.wa(r)),a.hb(e?e(m,q):m,b)):a.f.za(b),k=p},null,
{i:b});return{controlsDescendantBindings:!0}}};a.h.va[b]=!1;a.f.aa[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.H=function(a,c,d){a[c]=d};a.version="3.4.2";a.b("version",a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1};a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=
b;return a}function e(b,c,d,e){var m=b[c].match(r)||[];a.a.r(d.match(r),function(b){a.a.ra(m,b,e)});b[c]=m.join(" ")}var f={__proto__:[]}instanceof Array,g="function"===typeof Symbol,h={},l={};h[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];h.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(h,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)l[b[c]]=a});var m={propertychange:!0},k=
t&&function(){for(var a=3,b=t.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),r=/\S+/g;return{gc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],r:function(a,b){for(var c=0,d=a.length;c<d;c++)b(a[c],c)},o:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Vb:function(a,b,c){for(var d=
0,e=a.length;d<e;d++)if(b.call(c,a[d],d))return a[d];return null},Na:function(b,c){var d=a.a.o(b,c);0<d?b.splice(d,1):0===d&&b.shift()},Wb:function(b){b=b||[];for(var c=[],d=0,e=b.length;d<e;d++)0>a.a.o(c,b[d])&&c.push(b[d]);return c},ib:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)c.push(b(a[d],d));return c},Ma:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c},ta:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<
d;c++)a.push(b[c]);return a},ra:function(b,c,d){var e=a.a.o(a.a.Bb(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},la:f,extend:c,$a:d,ab:f?d:c,D:b,Ea:function(a,b){if(!a)return a;var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d],d,a));return c},rb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},nc:function(b){b=a.a.W(b);for(var c=(b[0]&&b[0].ownerDocument||t).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.ba(b[d]));return c},wa:function(b,c){for(var d=0,e=b.length,m=[];d<e;d++){var k=
b[d].cloneNode(!0);m.push(c?a.ba(k):k)}return m},fa:function(b,c){a.a.rb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},uc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],m=e.parentNode,k=0,f=c.length;k<f;k++)m.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ba:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=
a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},wc:function(a,b){7>k?a.setAttribute("selected",b):a.selected=b},cb:function(a){return null===a||a===n?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},sd:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},Rc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==
(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},qb:function(b){return a.a.Rc(b,b.ownerDocument.documentElement)},Tb:function(b){return!!a.a.Vb(b,a.a.qb)},A:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},Zb:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Zb(b),c)},dc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},q:function(b,
c,d){var e=a.a.Zb(d);d=k&&m[c];if(a.options.useOnlyNativeEvents||d||!u)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var f=function(a){e.call(b,a)},l="on"+c;b.attachEvent(l,f);a.a.G.qa(b,function(){b.detachEvent(l,f)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else u(b).bind(c,e)},Fa:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===
a.a.A(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!u||d)if("function"==typeof t.createEvent)if("function"==typeof b.dispatchEvent)d=t.createEvent(l[c]||"HTMLEvents"),d.initEvent(c,!0,!0,x,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");
else u(b).trigger(c)},c:function(b){return a.I(b)?b():b},Bb:function(b){return a.I(b)?b.p():b},fb:function(b,c,d){var k;c&&("object"===typeof b.classList?(k=b.classList[d?"add":"remove"],a.a.r(c.match(r),function(a){k.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},bb:function(b,c){var d=a.a.c(c);if(null===d||d===n)d="";var e=a.f.firstChild(b);!e||3!=e.nodeType||a.f.nextSibling(e)?a.f.fa(b,[b.ownerDocument.createTextNode(d)]):e.data=
d;a.a.Wc(b)},vc:function(a,b){a.name=b;if(7>=k)try{a.mergeAttributes(t.createElement("<input name='"+a.name+"'/>"),!1)}catch(c){}},Wc:function(a){9<=k&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},Sc:function(a){if(k){var b=a.style.width;a.style.width=0;a.style.width=b}},nd:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},W:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},bc:function(a){return g?Symbol(a):a},xd:6===k,
yd:7===k,C:k,ic:function(b,c){for(var d=a.a.W(b.getElementsByTagName("input")).concat(a.a.W(b.getElementsByTagName("textarea"))),e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},k=[],m=d.length-1;0<=m;m--)e(d[m])&&k.push(d[m]);return k},kd:function(b){return"string"==typeof b&&(b=a.a.cb(b))?H&&H.parse?H.parse(b):(new Function("return "+b))():null},Gb:function(b,c,d){if(!H||!H.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
return H.stringify(a.a.c(b),c,d)},ld:function(c,d,e){e=e||{};var k=e.params||{},m=e.includeFields||this.gc,f=c;if("object"==typeof c&&"form"===a.a.A(c))for(var f=c.action,l=m.length-1;0<=l;l--)for(var g=a.a.ic(c,m[l]),h=g.length-1;0<=h;h--)k[g[h].name]=g[h].value;d=a.a.c(d);var r=t.createElement("form");r.style.display="none";r.action=f;r.method="post";for(var n in d)c=t.createElement("input"),c.type="hidden",c.name=n,c.value=a.a.Gb(a.a.c(d[n])),r.appendChild(c);b(k,function(a,b){var c=t.createElement("input");
c.type="hidden";c.name=a;c.value=b;r.appendChild(c)});t.body.appendChild(r);e.submitter?e.submitter(r):r.submit();setTimeout(function(){r.parentNode.removeChild(r)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.r);a.b("utils.arrayFirst",a.a.Vb);a.b("utils.arrayFilter",a.a.Ma);a.b("utils.arrayGetDistinctValues",a.a.Wb);a.b("utils.arrayIndexOf",a.a.o);a.b("utils.arrayMap",a.a.ib);a.b("utils.arrayPushAll",a.a.ta);a.b("utils.arrayRemoveItem",a.a.Na);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",
a.a.gc);a.b("utils.getFormFields",a.a.ic);a.b("utils.peekObservable",a.a.Bb);a.b("utils.postJson",a.a.ld);a.b("utils.parseJson",a.a.kd);a.b("utils.registerEventHandler",a.a.q);a.b("utils.stringifyJson",a.a.Gb);a.b("utils.range",a.a.nd);a.b("utils.toggleDomNodeCssClass",a.a.fb);a.b("utils.triggerEvent",a.a.Fa);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.D);a.b("utils.addOrRemoveItem",a.a.ra);a.b("utils.setTextContent",a.a.bb);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=
function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.e=new function(){function a(b,g){var h=b[d];if(!h||"null"===h||!e[h]){if(!g)return n;h=b[d]="ko"+c++;e[h]={}}return e[h]}var c=0,d="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===n?n:e[d]},set:function(c,d,e){if(e!==n||a(c,!1)!==n)a(c,!0)[d]=
e},clear:function(a){var b=a[d];return b?(delete e[b],a[d]=null,!0):!1},J:function(){return c++ +d}}};a.b("utils.domData",a.a.e);a.b("utils.domData.clear",a.a.e.clear);a.a.G=new function(){function b(b,c){var e=a.a.e.get(b,d);e===n&&c&&(e=[],a.a.e.set(b,d,e));return e}function c(d){var e=b(d,!1);if(e)for(var e=e.slice(0),l=0;l<e.length;l++)e[l](d);a.a.e.clear(d);a.a.G.cleanExternalData(d);if(f[d.nodeType])for(e=d.firstChild;d=e;)e=d.nextSibling,8===d.nodeType&&c(d)}var d=a.a.e.J(),e={1:!0,8:!0,9:!0},
f={1:!0,9:!0};return{qa:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},tc:function(c,e){var f=b(c,!1);f&&(a.a.Na(f,e),0==f.length&&a.a.e.set(c,d,n))},ba:function(b){if(e[b.nodeType]&&(c(b),f[b.nodeType])){var d=[];a.a.ta(d,b.getElementsByTagName("*"));for(var l=0,m=d.length;l<m;l++)c(d[l])}return b},removeNode:function(b){a.ba(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){u&&"function"==typeof u.cleanData&&u.cleanData([a])}}};
a.ba=a.a.G.ba;a.removeNode=a.a.G.removeNode;a.b("cleanNode",a.ba);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.G);a.b("utils.domNodeDisposal.addDisposeCallback",a.a.G.qa);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.G.tc);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},
g=8>=a.a.C;a.a.na=function(c,d){var e;if(u)if(u.parseHTML)e=u.parseHTML(c,d)||[];else{if((e=u.clean([c],d))&&e[0]){for(var k=e[0];k.parentNode&&11!==k.parentNode.nodeType;)k=k.parentNode;k.parentNode&&k.parentNode.removeChild(k)}}else{(e=d)||(e=t);var k=e.parentWindow||e.defaultView||x,r=a.a.cb(c).toLowerCase(),q=e.createElement("div"),p;p=(r=r.match(/^<([a-z]+)[ >]/))&&f[r[1]]||b;r=p[0];p="ignored<div>"+p[1]+c+p[2]+"</div>";"function"==typeof k.innerShiv?q.appendChild(k.innerShiv(p)):(g&&e.appendChild(q),
q.innerHTML=p,g&&q.parentNode.removeChild(q));for(;r--;)q=q.lastChild;e=a.a.W(q.lastChild.childNodes)}return e};a.a.Eb=function(b,c){a.a.rb(b);c=a.a.c(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),u)u(b).html(c);else for(var d=a.a.na(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.na);a.b("utils.setHtml",a.a.Eb);a.N=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.N.pc(c.nodeValue);null!=f&&e.push({Qc:c,hd:f})}else if(1==c.nodeType)for(var f=
0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],e)}var c={};return{yb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},Bc:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),
!0}finally{delete c[a]}},Cc:function(c,e){var f=[];b(c,f);for(var g=0,h=f.length;g<h;g++){var l=f[g].Qc,m=[l];e&&a.a.ta(m,e);a.N.Bc(f[g].hd,m);l.nodeValue="";l.parentNode&&l.parentNode.removeChild(l)}},pc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.N);a.b("memoization.memoize",a.N.yb);a.b("memoization.unmemoize",a.N.Bc);a.b("memoization.parseMemoText",a.N.pc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.N.Cc);a.Z=function(){function b(){if(e)for(var b=
e,c=0,m;g<e;)if(m=d[g++]){if(g>b){if(5E3<=++c){g=e;a.a.dc(Error("'Too much recursion' after processing "+c+" task groups."));break}b=e}try{m()}catch(k){a.a.dc(k)}}}function c(){b();g=e=d.length=0}var d=[],e=0,f=1,g=0;return{scheduler:x.MutationObserver?function(a){var b=t.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):t&&"onreadystatechange"in t.createElement("script")?function(a){var b=t.createElement("script");b.onreadystatechange=
function(){b.onreadystatechange=null;t.documentElement.removeChild(b);b=null;a()};t.documentElement.appendChild(b)}:function(a){setTimeout(a,0)},Za:function(b){e||a.Z.scheduler(c);d[e++]=b;return f++},cancel:function(a){a-=f-e;a>=g&&a<e&&(d[a]=null)},resetForTesting:function(){var a=e-g;g=e=d.length=0;return a},rd:b}}();a.b("tasks",a.Z);a.b("tasks.schedule",a.Z.Za);a.b("tasks.runEarly",a.Z.rd);a.Aa={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.B({read:b,write:function(e){clearTimeout(d);
d=a.a.setTimeout(function(){b(e)},c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.gb=!1;f="notifyWhenChangesStop"==e?T:S;a.Wa(function(a){return f(a,d)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.gb||(b.gb=!0,b.Wa(function(c){var e,f=!1;return function(){if(!f){a.Z.cancel(e);e=a.Z.Za(c);try{f=!0,b.notifySubscribers(n,"dirty")}finally{f=
!1}}}}))},notify:function(a,c){a.equalityComparer="always"==c?null:J}};var R={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Aa);a.zc=function(b,c,d){this.$=b;this.jb=c;this.Pc=d;this.T=!1;a.H(this,"dispose",this.k)};a.zc.prototype.k=function(){this.T=!0;this.Pc()};a.K=function(){a.a.ab(this,D);D.ub(this)};var E="change",D={ub:function(a){a.F={change:[]};a.Qb=1},Y:function(b,c,d){var e=this;d=d||E;var f=new a.zc(e,c?b.bind(c):b,function(){a.a.Na(e.F[d],f);e.Ka&&e.Ka(d)});e.ua&&e.ua(d);
e.F[d]||(e.F[d]=[]);e.F[d].push(f);return f},notifySubscribers:function(b,c){c=c||E;c===E&&this.Kb();if(this.Ra(c)){var d=c===E&&this.Fc||this.F[c].slice(0);try{a.l.Xb();for(var e=0,f;f=d[e];++e)f.T||f.jb(b)}finally{a.l.end()}}},Pa:function(){return this.Qb},Zc:function(a){return this.Pa()!==a},Kb:function(){++this.Qb},Wa:function(b){var c=this,d=a.I(c),e,f,g,h;c.Ja||(c.Ja=c.notifySubscribers,c.notifySubscribers=U);var l=b(function(){c.Ha=!1;d&&h===c&&(h=c.Mb?c.Mb():c());var a=f||c.Ua(g,h);f=e=!1;
a&&c.Ja(g=h)});c.Pb=function(a){c.Fc=c.F[E].slice(0);c.Ha=e=!0;h=a;l()};c.Ob=function(a){e||(g=a,c.Ja(a,"beforeChange"))};c.Hc=function(){c.Ua(g,c.p(!0))&&(f=!0)}},Ra:function(a){return this.F[a]&&this.F[a].length},Xc:function(b){if(b)return this.F[b]&&this.F[b].length||0;var c=0;a.a.D(this.F,function(a,b){"dirty"!==a&&(c+=b.length)});return c},Ua:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},extend:function(b){var c=this;b&&a.a.D(b,function(b,e){var f=a.Aa[b];"function"==
typeof f&&(c=f(c,e)||c)});return c}};a.H(D,"subscribe",D.Y);a.H(D,"extend",D.extend);a.H(D,"getSubscriptionsCount",D.Xc);a.a.la&&a.a.$a(D,Function.prototype);a.K.fn=D;a.lc=function(a){return null!=a&&"function"==typeof a.Y&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.K);a.b("isSubscribable",a.lc);a.xa=a.l=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{Xb:b,end:c,sc:function(b){if(e){if(!a.lc(b))throw Error("Only subscribable things can act as dependencies");
e.jb.call(e.Lc,b,b.Gc||(b.Gc=++f))}},w:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},Ca:function(){if(e)return e.m.Ca()},Va:function(){if(e)return e.Va}}}();a.b("computedContext",a.xa);a.b("computedContext.getDependenciesCount",a.xa.Ca);a.b("computedContext.isInitial",a.xa.Va);a.b("ignoreDependencies",a.wd=a.l.w);var F=a.a.bc("_latestValue");a.O=function(b){function c(){if(0<arguments.length)return c.Ua(c[F],arguments[0])&&(c.ia(),c[F]=arguments[0],c.ha()),this;a.l.sc(c);return c[F]}
c[F]=b;a.a.la||a.a.extend(c,a.K.fn);a.K.fn.ub(c);a.a.ab(c,B);a.options.deferUpdates&&a.Aa.deferred(c,!0);return c};var B={equalityComparer:J,p:function(){return this[F]},ha:function(){this.notifySubscribers(this[F])},ia:function(){this.notifySubscribers(this[F],"beforeChange")}};a.a.la&&a.a.$a(B,a.K.fn);var I=a.O.md="__ko_proto__";B[I]=a.O;a.Qa=function(b,c){return null===b||b===n||b[I]===n?!1:b[I]===c?!0:a.Qa(b[I],c)};a.I=function(b){return a.Qa(b,a.O)};a.Da=function(b){return"function"==typeof b&&
b[I]===a.O||"function"==typeof b&&b[I]===a.B&&b.$c?!0:!1};a.b("observable",a.O);a.b("isObservable",a.I);a.b("isWriteableObservable",a.Da);a.b("isWritableObservable",a.Da);a.b("observable.fn",B);a.H(B,"peek",B.p);a.H(B,"valueHasMutated",B.ha);a.H(B,"valueWillMutate",B.ia);a.ma=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.O(b);a.a.ab(b,a.ma.fn);return b.extend({trackArrayChanges:!0})};
a.ma.fn={remove:function(b){for(var c=this.p(),d=[],e="function"!=typeof b||a.I(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];e(g)&&(0===d.length&&this.ia(),d.push(g),c.splice(f,1),f--)}d.length&&this.ha();return d},removeAll:function(b){if(b===n){var c=this.p(),d=c.slice(0);this.ia();c.splice(0,c.length);this.ha();return d}return b?this.remove(function(c){return 0<=a.a.o(b,c)}):[]},destroy:function(b){var c=this.p(),d="function"!=typeof b||a.I(b)?function(a){return a===b}:b;this.ia();
for(var e=c.length-1;0<=e;e--)d(c[e])&&(c[e]._destroy=!0);this.ha()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.o(b,c)}):[]},indexOf:function(b){var c=this();return a.a.o(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ia(),this.p()[d]=c,this.ha())}};a.a.la&&a.a.$a(a.ma.fn,a.O.fn);a.a.r("pop push reverse shift sort splice unshift".split(" "),function(b){a.ma.fn[b]=function(){var a=this.p();this.ia();this.Yb(a,b,arguments);
var d=a[b].apply(a,arguments);this.ha();return d===a?this:d}});a.a.r(["slice"],function(b){a.ma.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.b("observableArray",a.ma);a.Aa.trackArrayChanges=function(b,c){function d(){if(!e){e=!0;l=b.notifySubscribers;b.notifySubscribers=function(a,b){b&&b!==E||++h;return l.apply(this,arguments)};var c=[].concat(b.p()||[]);f=null;g=b.Y(function(d){d=[].concat(d||[]);if(b.Ra("arrayChange")){var e;if(!f||1<h)f=a.a.lb(c,d,b.kb);e=f}c=d;f=null;h=0;
e&&e.length&&b.notifySubscribers(e,"arrayChange")})}}b.kb={};c&&"object"==typeof c&&a.a.extend(b.kb,c);b.kb.sparse=!0;if(!b.Yb){var e=!1,f=null,g,h=0,l,m=b.ua,k=b.Ka;b.ua=function(a){m&&m.call(b,a);"arrayChange"===a&&d()};b.Ka=function(a){k&&k.call(b,a);"arrayChange"!==a||b.Ra("arrayChange")||(l&&(b.notifySubscribers=l,l=n),g.k(),e=!1)};b.Yb=function(b,c,d){function k(a,b,c){return m[m.length]={status:a,value:b,index:c}}if(e&&!h){var m=[],l=b.length,g=d.length,G=0;switch(c){case "push":G=l;case "unshift":for(c=
0;c<g;c++)k("added",d[c],G+c);break;case "pop":G=l-1;case "shift":l&&k("deleted",b[G],G);break;case "splice":c=Math.min(Math.max(0,0>d[0]?l+d[0]:d[0]),l);for(var l=1===g?l:Math.min(c+(d[1]||0),l),g=c+g-2,G=Math.max(l,g),n=[],s=[],w=2;c<G;++c,++w)c<l&&s.push(k("deleted",b[c],c)),c<g&&n.push(k("added",d[w],c));a.a.hc(s,n);break;default:return}f=m}}}};var s=a.a.bc("_state");a.m=a.B=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(g.sb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
return this}a.l.sc(e);(g.V||g.t&&e.Sa())&&e.U();return g.M}"object"===typeof b?d=b:(d=d||{},b&&(d.read=b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,g={M:n,da:!0,V:!0,Ta:!1,Hb:!1,T:!1,Ya:!1,t:!1,od:d.read,sb:c||d.owner,i:d.disposeWhenNodeIsRemoved||d.i||null,ya:d.disposeWhen||d.ya,pb:null,s:{},L:0,fc:null};e[s]=g;e.$c="function"===typeof f;a.a.la||a.a.extend(e,a.K.fn);a.K.fn.ub(e);a.a.ab(e,z);d.pure?(g.Ya=!0,g.t=!0,a.a.extend(e,
Y)):d.deferEvaluation&&a.a.extend(e,Z);a.options.deferUpdates&&a.Aa.deferred(e,!0);g.i&&(g.Hb=!0,g.i.nodeType||(g.i=null));g.t||d.deferEvaluation||e.U();g.i&&e.ca()&&a.a.G.qa(g.i,g.pb=function(){e.k()});return e};var z={equalityComparer:J,Ca:function(){return this[s].L},Sb:function(a,c,d){if(this[s].Ya&&c===this)throw Error("A 'pure' computed must not be called recursively");this[s].s[a]=d;d.Ia=this[s].L++;d.pa=c.Pa()},Sa:function(){var a,c,d=this[s].s;for(a in d)if(d.hasOwnProperty(a)&&(c=d[a],this.oa&&
c.$.Ha||c.$.Zc(c.pa)))return!0},gd:function(){this.oa&&!this[s].Ta&&this.oa(!1)},ca:function(){var a=this[s];return a.V||0<a.L},qd:function(){this.Ha?this[s].V&&(this[s].da=!0):this.ec()},yc:function(a){if(a.gb&&!this[s].i){var c=a.Y(this.gd,this,"dirty"),d=a.Y(this.qd,this);return{$:a,k:function(){c.k();d.k()}}}return a.Y(this.ec,this)},ec:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[s].fc),this[s].fc=a.a.setTimeout(function(){b.U(!0)},c)):b.oa?b.oa(!0):b.U(!0)},U:function(b){var c=
this[s],d=c.ya,e=!1;if(!c.Ta&&!c.T){if(c.i&&!a.a.qb(c.i)||d&&d()){if(!c.Hb){this.k();return}}else c.Hb=!1;c.Ta=!0;try{e=this.Vc(b)}finally{c.Ta=!1}c.L||this.k();return e}},Vc:function(b){var c=this[s],d=!1,e=c.Ya?n:!c.L,f={Mc:this,Oa:c.s,ob:c.L};a.l.Xb({Lc:f,jb:W,m:this,Va:e});c.s={};c.L=0;f=this.Uc(c,f);this.Ua(c.M,f)&&(c.t||this.notifySubscribers(c.M,"beforeChange"),c.M=f,c.t?this.Kb():b&&this.notifySubscribers(c.M),d=!0);e&&this.notifySubscribers(c.M,"awake");return d},Uc:function(b,c){try{var d=
b.od;return b.sb?d.call(b.sb):d()}finally{a.l.end(),c.ob&&!b.t&&a.a.D(c.Oa,V),b.da=b.V=!1}},p:function(a){var c=this[s];(c.V&&(a||!c.L)||c.t&&this.Sa())&&this.U();return c.M},Wa:function(b){a.K.fn.Wa.call(this,b);this.Mb=function(){this[s].da?this.U():this[s].V=!1;return this[s].M};this.oa=function(a){this.Ob(this[s].M);this[s].V=!0;a&&(this[s].da=!0);this.Pb(this)}},k:function(){var b=this[s];!b.t&&b.s&&a.a.D(b.s,function(a,b){b.k&&b.k()});b.i&&b.pb&&a.a.G.tc(b.i,b.pb);b.s=null;b.L=0;b.T=!0;b.da=
!1;b.V=!1;b.t=!1;b.i=null}},Y={ua:function(b){var c=this,d=c[s];if(!d.T&&d.t&&"change"==b){d.t=!1;if(d.da||c.Sa())d.s=null,d.L=0,c.U()&&c.Kb();else{var e=[];a.a.D(d.s,function(a,b){e[b.Ia]=a});a.a.r(e,function(a,b){var e=d.s[a],l=c.yc(e.$);l.Ia=b;l.pa=e.pa;d.s[a]=l})}d.T||c.notifySubscribers(d.M,"awake")}},Ka:function(b){var c=this[s];c.T||"change"!=b||this.Ra("change")||(a.a.D(c.s,function(a,b){b.k&&(c.s[a]={$:b.$,Ia:b.Ia,pa:b.pa},b.k())}),c.t=!0,this.notifySubscribers(n,"asleep"))},Pa:function(){var b=
this[s];b.t&&(b.da||this.Sa())&&this.U();return a.K.fn.Pa.call(this)}},Z={ua:function(a){"change"!=a&&"beforeChange"!=a||this.p()}};a.a.la&&a.a.$a(z,a.K.fn);var P=a.O.md;a.m[P]=a.O;z[P]=a.m;a.bd=function(b){return a.Qa(b,a.m)};a.cd=function(b){return a.Qa(b,a.m)&&b[s]&&b[s].Ya};a.b("computed",a.m);a.b("dependentObservable",a.m);a.b("isComputed",a.bd);a.b("isPureComputed",a.cd);a.b("computed.fn",z);a.H(z,"peek",z.p);a.H(z,"dispose",z.k);a.H(z,"isActive",z.ca);a.H(z,"getDependenciesCount",z.Ca);a.rc=
function(b,c){if("function"===typeof b)return a.m(b,c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.m(b,c)};a.b("pureComputed",a.rc);(function(){function b(a,f,g){g=g||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":h[c]=d;break;case "object":case "undefined":var k=
g.get(d);h[c]=k!==n?k:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.Lb=[]}a.Ac=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.I(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.Ac(b);return a.a.Gb(b,c,d)};d.prototype={save:function(b,c){var d=a.a.o(this.keys,
b);0<=d?this.Lb[d]=c:(this.keys.push(b),this.Lb.push(c))},get:function(b){b=a.a.o(this.keys,b);return 0<=b?this.Lb[b]:n}}})();a.b("toJS",a.Ac);a.b("toJSON",a.toJSON);(function(){a.j={u:function(b){switch(a.a.A(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.e.get(b,a.d.options.zb):7>=a.a.C?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex]):n;default:return b.value}},ja:function(b,
c,d){switch(a.a.A(b)){case "option":switch(typeof c){case "string":a.a.e.set(b,a.d.options.zb,n);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=c;break;default:a.a.e.set(b,a.d.options.zb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c?c:""}break;case "select":if(""===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.j.u(b.options[f]),h==c||""==h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e;break;default:if(null===
c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.j);a.b("selectExtensions.readValue",a.j.u);a.b("selectExtensions.writeValue",a.j.ja);a.h=function(){function b(b){b=a.a.cb(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),r,h=[],p=0;if(d){d.push(",");for(var A=0,y;y=d[A];++A){var v=y.charCodeAt(0);if(44===v){if(0>=p){c.push(r&&h.length?{key:r,value:h.join("")}:{unknown:r||h.join("")});r=p=0;h=[];continue}}else if(58===v){if(!p&&!r&&1===h.length){r=h.pop();continue}}else 47===
v&&A&&1<y.length?(v=d[A-1].match(f))&&!g[v[0]]&&(b=b.substr(b.indexOf(y)+1),d=b.match(e),d.push(","),A=-1,y="/"):40===v||123===v||91===v?++p:41===v||125===v||93===v?--p:r||h.length||34!==v&&39!==v||(y=y.slice(1,-1));h.push(y)}}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,
g={"in":1,"return":1,"typeof":1},h={};return{va:[],ga:h,Ab:b,Xa:function(e,m){function k(b,e){var m;if(!A){var l=a.getBindingHandler(b);if(l&&l.preprocess&&!(e=l.preprocess(e,b,k)))return;if(l=h[b])m=e,0<=a.a.o(c,m)?m=!1:(l=m.match(d),m=null===l?!1:l[1]?"Object("+l[1]+")"+l[2]:m),l=m;l&&g.push("'"+b+"':function(_z){"+m+"=_z}")}p&&(e="function(){return "+e+" }");f.push("'"+b+"':"+e)}m=m||{};var f=[],g=[],p=m.valueAccessors,A=m.bindingParams,y="string"===typeof e?b(e):e;a.a.r(y,function(a){k(a.key||
a.unknown,a.value)});g.length&&k("_ko_property_writers","{"+g.join(",")+" }");return f.join(",")},fd:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},Ga:function(b,c,d,e,f){if(b&&a.I(b))!a.Da(b)||f&&b.p()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",a.h.va);a.b("expressionRewriting.parseObjectLiteral",a.h.Ab);a.b("expressionRewriting.preProcessBindings",a.h.Xa);a.b("expressionRewriting._twoWayBindings",
a.h.ga);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.Xa);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(a,d){for(var e=a,f=1,l=[];e=e.nextSibling;){if(c(e)&&(f--,0===f))return l;l.push(e);b(e)&&f++}if(!d)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,b){var c=d(a,b);return c?0<c.length?c[c.length-
1].nextSibling:a.nextSibling:null}var f=t&&"\x3c!--test--\x3e"===t.createComment("test").text,g=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0};a.f={aa:{},childNodes:function(a){return b(a)?d(a):a.childNodes},za:function(c){if(b(c)){c=a.f.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.rb(c)},fa:function(c,d){if(b(c)){a.f.za(c);for(var e=c.nextSibling,f=0,l=d.length;f<l;f++)e.parentNode.insertBefore(d[f],
e)}else a.a.fa(c,d)},qc:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},kc:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.f.qc(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||c(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&c(a.nextSibling)?null:a.nextSibling},Yc:b,vd:function(a){return(a=
(f?a.text:a.nodeValue).match(g))?a[1]:null},oc:function(d){if(l[a.a.A(d)]){var k=d.firstChild;if(k){do if(1===k.nodeType){var f;f=k.firstChild;var g=null;if(f){do if(g)g.push(f);else if(b(f)){var h=e(f,!0);h?f=h:g=[f]}else c(f)&&(g=[f]);while(f=f.nextSibling)}if(f=g)for(g=k.nextSibling,h=0;h<f.length;h++)g?d.insertBefore(f[h],g):d.appendChild(f[h])}while(k=k.nextSibling)}}}}})();a.b("virtualElements",a.f);a.b("virtualElements.allowedBindings",a.f.aa);a.b("virtualElements.emptyNode",a.f.za);a.b("virtualElements.insertAfter",
a.f.kc);a.b("virtualElements.prepend",a.f.qc);a.b("virtualElements.setDomNodeChildren",a.f.fa);(function(){a.S=function(){this.Kc={}};a.a.extend(a.S.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.f.Yc(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.g.Rb(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,
c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.g.Rb(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.f.vd(b);default:return null}},parseBindingsString:function(b,c,d,e){try{var f=this.Kc,g=b+(e&&e.valueAccessors||""),h;if(!(h=f[g])){var l,m="with($context){with($data||{}){return{"+a.h.Xa(b,e)+"}}}";l=new Function("$context","$element",m);h=f[g]=l}return h(c,d)}catch(k){throw k.message="Unable to parse bindings.\nBindings value: "+
b+"\nMessage: "+k.message,k;}}});a.S.instance=new a.S})();a.b("bindingProvider",a.S);(function(){function b(a){return function(){return a}}function c(a){return a()}function d(b){return a.a.Ea(a.l.w(b),function(a,c){return function(){return b()[c]}})}function e(c,e,k){return"function"===typeof c?d(c.bind(null,e,k)):a.a.Ea(c,b)}function f(a,b){return d(this.getBindings.bind(this,a,b))}function g(b,c,d){var e,k=a.f.firstChild(c),f=a.S.instance,m=f.preprocessNode;if(m){for(;e=k;)k=a.f.nextSibling(e),
m.call(f,e);k=a.f.firstChild(c)}for(;e=k;)k=a.f.nextSibling(e),h(b,e,d)}function h(b,c,d){var e=!0,k=1===c.nodeType;k&&a.f.oc(c);if(k&&d||a.S.instance.nodeHasBindings(c))e=m(c,null,b,d).shouldBindDescendants;e&&!r[a.a.A(c)]&&g(b,c,!k)}function l(b){var c=[],d={},e=[];a.a.D(b,function X(k){if(!d[k]){var f=a.getBindingHandler(k);f&&(f.after&&(e.push(k),a.a.r(f.after,function(c){if(b[c]){if(-1!==a.a.o(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));
X(c)}}),e.length--),c.push({key:k,jc:f}));d[k]=!0}});return c}function m(b,d,e,k){var m=a.a.e.get(b,q);if(!d){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.e.set(b,q,!0)}!m&&k&&a.xc(b,e);var g;if(d&&"function"!==typeof d)g=d;else{var h=a.S.instance,r=h.getBindingAccessors||f,p=a.B(function(){(g=d?d(e,b):r.call(h,b,e))&&e.Q&&e.Q();return g},null,{i:b});g&&p.ca()||(p=null)}var s;if(g){var t=p?function(a){return function(){return c(p()[a])}}:function(a){return g[a]},
u=function(){return a.a.Ea(p?p():g,c)};u.get=function(a){return g[a]&&c(t(a))};u.has=function(a){return a in g};k=l(g);a.a.r(k,function(c){var d=c.jc.init,k=c.jc.update,f=c.key;if(8===b.nodeType&&!a.f.aa[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.l.w(function(){var a=d(b,t(f),u,e.$data,e);if(a&&a.controlsDescendantBindings){if(s!==n)throw Error("Multiple bindings ("+s+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
s=f}}),"function"==typeof k&&a.B(function(){k(b,t(f),u,e.$data,e)},null,{i:b})}catch(m){throw m.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+m.message,m;}})}return{shouldBindDescendants:s===n}}function k(b){return b&&b instanceof a.R?b:new a.R(b)}a.d={};var r={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.d[b]};a.R=function(b,c,d,e,k){function f(){var k=g?b():b,m=a.a.c(k);c?(c.Q&&c.Q(),a.a.extend(l,c),l.Q=r):(l.$parents=[],l.$root=m,l.ko=a);l.$rawData=
k;l.$data=m;d&&(l[d]=m);e&&e(l,c,m);return l.$data}function m(){return h&&!a.a.Tb(h)}var l=this,g="function"==typeof b&&!a.I(b),h,r;k&&k.exportDependencies?f():(r=a.B(f,null,{ya:m,i:!0}),r.ca()&&(l.Q=r,r.equalityComparer=null,h=[],r.Dc=function(b){h.push(b);a.a.G.qa(b,function(b){a.a.Na(h,b);h.length||(r.k(),l.Q=r=n)})}))};a.R.prototype.createChildContext=function(b,c,d,e){return new a.R(b,this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);
d&&d(a)},e)};a.R.prototype.extend=function(b){return new a.R(this.Q||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};a.R.prototype.ac=function(a,b){return this.createChildContext(a,b,null,{exportDependencies:!0})};var q=a.a.e.J(),p=a.a.e.J();a.xc=function(b,c){if(2==arguments.length)a.a.e.set(b,p,c),c.Q&&c.Q.Dc(b);else return a.a.e.get(b,p)};a.La=function(b,c,d){1===b.nodeType&&a.f.oc(b);return m(b,c,k(d),!0)};a.Ic=function(b,c,d){d=k(d);return a.La(b,
e(c,d,b),d)};a.hb=function(a,b){1!==b.nodeType&&8!==b.nodeType||g(k(a),b,!0)};a.Ub=function(a,b){!u&&x.jQuery&&(u=x.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||x.document.body;h(k(a),b,!0)};a.nb=function(b){switch(b.nodeType){case 1:case 8:var c=a.xc(b);if(c)return c;if(b.parentNode)return a.nb(b.parentNode)}return n};a.Oc=function(b){return(b=a.nb(b))?b.$data:n};a.b("bindingHandlers",
a.d);a.b("applyBindings",a.Ub);a.b("applyBindingsToDescendants",a.hb);a.b("applyBindingAccessorsToNode",a.La);a.b("applyBindingsToNode",a.Ic);a.b("contextFor",a.nb);a.b("dataFor",a.Oc)})();(function(b){function c(c,e){var m=f.hasOwnProperty(c)?f[c]:b,k;m?m.Y(e):(m=f[c]=new a.K,m.Y(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,dd:e};delete f[c];k||e?m.notifySubscribers(b):a.Z.Za(function(){m.notifySubscribers(b)})}),k=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",
[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,f,k){k||(k=a.g.loaders.slice(0));var g=k.shift();if(g){var q=g[c];if(q){var p=!1;if(q.apply(g,d.concat(function(a){p?f(null):null!==a?f(a):e(c,d,f,k)}))!==b&&(p=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,k)}else f(null)}var f={},g={};a.g={get:function(d,e){var f=g.hasOwnProperty(d)?g[d]:b;f?f.dd?a.l.w(function(){e(f.definition)}):
a.Z.Za(function(){e(f.definition)}):c(d,e)},$b:function(a){delete g[a]},Nb:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.$b)})();(function(){function b(b,c,d,e){function g(){0===--y&&e(h)}var h={},y=2,v=d.template;d=d.viewModel;v?f(c,v,function(c){a.g.Nb("loadTemplate",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.g.Nb("loadViewModel",[b,c],function(a){h[l]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});
else if("function"===typeof b[l])d(b[l]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.A(b)){case "script":return a.a.na(b.text);case "textarea":return a.a.na(b.value);case "template":if(e(b.content))return a.a.wa(b.content.childNodes)}return a.a.wa(b.childNodes)}function e(a){return x.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?
O||x.require?(O||x.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.g.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.wb(b))throw Error("Component "+b+" is already registered");h[b]=c};a.g.wb=function(a){return h.hasOwnProperty(a)};a.g.ud=function(b){delete h[b];a.g.$b(b)};a.g.cc={getConfig:function(a,b){b(h.hasOwnProperty(a)?h[a]:null)},loadComponent:function(a,
c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.na(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.W(c.childNodes));else if(c.element)if(c=c.element,x.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var l=t.getElementById(c);l?f(d(l)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),
b,d)}};var l="createViewModel";a.b("components.register",a.g.register);a.b("components.isRegistered",a.g.wb);a.b("components.unregister",a.g.ud);a.b("components.defaultLoader",a.g.cc);a.g.loaders.push(a.g.cc);a.g.Ec=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ea(f,function(c){return a.m(c,null,{i:b})}),g=a.a.Ea(f,function(c){var e=c.p();return c.ca()?a.m({read:function(){return a.a.c(c())},write:a.Da(e)&&
function(a){c()(a)},i:b}):e});g.hasOwnProperty("$raw")||(g.$raw=f);return g}return{$raw:{}}}a.g.getComponentNameForNode=function(b){var c=a.a.A(b);if(a.g.wb(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.C&&b.tagName===c))return c};a.g.Rb=function(c,e,f,g){if(1===e.nodeType){var h=a.g.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var l={name:h,params:b(e,f)};c.component=g?function(){return l}:
l}}return c};var c=new a.S;9>a.a.C&&(a.g.register=function(a){return function(b){t.createElement(b);return a.apply(this,arguments)}}(a.g.register),t.createDocumentFragment=function(b){return function(){var c=b(),f=a.g.Ec,g;for(g in f)f.hasOwnProperty(g)&&c.createElement(g);return c}}(t.createDocumentFragment))})();(function(b){function c(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.wa(c);a.f.fa(d,b)}function d(a,b,c,d){var e=a.createViewModel;return e?e.call(a,
d,{element:b,templateNodes:c}):d}var e=0;a.d.component={init:function(f,g,h,l,m){function k(){var a=r&&r.dispose;"function"===typeof a&&a.call(r);q=r=null}var r,q,p=a.a.W(a.f.childNodes(f));a.a.G.qa(f,k);a.m(function(){var l=a.a.c(g()),h,v;"string"===typeof l?h=l:(h=a.a.c(l.name),v=a.a.c(l.params));if(!h)throw Error("No component name specified");var n=q=++e;a.g.get(h,function(e){if(q===n){k();if(!e)throw Error("Unknown component '"+h+"'");c(h,e,f);var l=d(e,f,p,v);e=m.createChildContext(l,b,function(a){a.$component=
l;a.$componentTemplateNodes=p});r=l;a.hb(e,f)}})},null,{i:f});return{controlsDescendantBindings:!0}}};a.f.aa.component=!0})();var Q={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,c){var d=a.a.c(c())||{};a.a.D(d,function(c,d){d=a.a.c(d);var g=!1===d||null===d||d===n;g&&b.removeAttribute(c);8>=a.a.C&&c in Q?(c=Q[c],g?b.removeAttribute(c):b[c]=d):g||b.setAttribute(c,d.toString());"name"===c&&a.a.vc(b,g?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,
c,d){function e(){var e=b.checked,f=p?g():e;if(!a.xa.Va()&&(!l||e)){var h=a.l.w(c);if(k){var m=r?h.p():h;q!==f?(e&&(a.a.ra(m,f,!0),a.a.ra(m,q,!1)),q=f):a.a.ra(m,f,e);r&&a.Da(h)&&h(m)}else a.h.Ga(h,d,"checked",f,!0)}}function f(){var d=a.a.c(c());b.checked=k?0<=a.a.o(d,g()):h?d:g()===d}var g=a.rc(function(){return d.has("checkedValue")?a.a.c(d.get("checkedValue")):d.has("value")?a.a.c(d.get("value")):b.value}),h="checkbox"==b.type,l="radio"==b.type;if(h||l){var m=c(),k=h&&a.a.c(m)instanceof Array,
r=!(k&&m.push&&m.splice),q=k?g():n,p=l||k;l&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.m(e,null,{i:b});a.a.q(b,"click",e);a.m(f,null,{i:b});m=n}}};a.h.ga.checked=!0;a.d.checkedValue={update:function(b,c){b.value=a.a.c(c())}}})();a.d.css={update:function(b,c){var d=a.a.c(c());null!==d&&"object"==typeof d?a.a.D(d,function(c,d){d=a.a.c(d);a.a.fb(b,c,d)}):(d=a.a.cb(String(d||"")),a.a.fb(b,b.__ko__cssValue,!1),b.__ko__cssValue=d,a.a.fb(b,d,!0))}};a.d.enable={update:function(b,c){var d=a.a.c(c());
d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,c){a.d.enable.update(b,function(){return!a.a.c(c())})}};a.d.event={init:function(b,c,d,e,f){var g=c()||{};a.a.D(g,function(g){"string"==typeof g&&a.a.q(b,g,function(b){var m,k=c()[g];if(k){try{var r=a.a.W(arguments);e=f.$data;r.unshift(e);m=k.apply(e,r)}finally{!0!==m&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};
a.d.foreach={mc:function(b){return function(){var c=b(),d=a.a.Bb(c);if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.X.vb};a.a.c(c);return{foreach:d.data,as:d.as,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.X.vb}}},init:function(b,c){return a.d.template.init(b,a.d.foreach.mc(c))},update:function(b,c,d,e,f){return a.d.template.update(b,a.d.foreach.mc(c),
d,e,f)}};a.h.va.foreach=!1;a.f.aa.foreach=!0;a.d.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(k){g=f.body}e=g===b}f=c();a.h.Ga(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.q(b,"focus",f);a.a.q(b,"focusin",f);a.a.q(b,"blur",g);a.a.q(b,"focusout",g)},update:function(b,c){var d=!!a.a.c(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===
d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.l.w(a.a.Fa,null,[b,d?"focusin":"focusout"]))}};a.h.ga.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.ga.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Eb(b,c())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,c){return a.ac(c)});var L={};a.d.options={init:function(b){if("select"!==a.a.A(b))throw Error("options binding applies only to SELECT elements");for(;0<
b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.Ma(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function g(c,e){if(A&&k)a.j.ja(b,a.a.c(d.get("value")),!0);else if(p.length){var f=0<=a.a.o(p,a.j.u(e[0]));a.a.wc(e[0],f);A&&!f&&a.l.w(a.a.Fa,null,[b,"change"])}}var h=b.multiple,l=0!=b.length&&h?b.scrollTop:null,m=a.a.c(c()),k=d.get("valueAllowUnset")&&d.has("value"),r=
d.get("optionsIncludeDestroyed");c={};var q,p=[];k||(h?p=a.a.ib(e(),a.j.u):0<=b.selectedIndex&&p.push(a.j.u(b.options[b.selectedIndex])));m&&("undefined"==typeof m.length&&(m=[m]),q=a.a.Ma(m,function(b){return r||b===n||null===b||!a.a.c(b._destroy)}),d.has("optionsCaption")&&(m=a.a.c(d.get("optionsCaption")),null!==m&&m!==n&&q.unshift(L)));var A=!1;c.beforeRemove=function(a){b.removeChild(a)};m=g;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(m=function(b,c){g(0,c);
a.l.w(d.get("optionsAfterRender"),null,[c[0],b!==L?b:n])});a.a.Db(b,q,function(c,e,g){g.length&&(p=!k&&g[0].selected?[a.j.u(g[0])]:[],A=!0);e=b.ownerDocument.createElement("option");c===L?(a.a.bb(e,d.get("optionsCaption")),a.j.ja(e,n)):(g=f(c,d.get("optionsValue"),c),a.j.ja(e,a.a.c(g)),c=f(c,d.get("optionsText"),g),a.a.bb(e,c));return[e]},c,m);a.l.w(function(){k?a.j.ja(b,a.a.c(d.get("value")),!0):(h?p.length&&e().length<p.length:p.length&&0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex])!==p[0]:
p.length||0<=b.selectedIndex)&&a.a.Fa(b,"change")});a.a.Sc(b);l&&20<Math.abs(l-b.scrollTop)&&(b.scrollTop=l)}};a.d.options.zb=a.a.e.J();a.d.selectedOptions={after:["options","foreach"],init:function(b,c,d){a.a.q(b,"change",function(){var e=c(),f=[];a.a.r(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.j.u(b))});a.h.Ga(e,d,"selectedOptions",f)})},update:function(b,c){if("select"!=a.a.A(b))throw Error("values binding applies only to SELECT elements");var d=a.a.c(c()),e=b.scrollTop;
d&&"number"==typeof d.length&&a.a.r(b.getElementsByTagName("option"),function(b){var c=0<=a.a.o(d,a.j.u(b));b.selected!=c&&a.a.wc(b,c)});b.scrollTop=e}};a.h.ga.selectedOptions=!0;a.d.style={update:function(b,c){var d=a.a.c(c()||{});a.a.D(d,function(c,d){d=a.a.c(d);if(null===d||d===n||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");a.a.q(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,
b)}finally{!0!==d&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.bb(b,c())}};a.f.aa.text=!0;(function(){if(x&&x.navigator)var b=function(a){if(a)return parseFloat(a[1])},c=x.opera&&x.opera.version&&parseInt(x.opera.version()),d=x.navigator.userAgent,e=b(d.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(d.match(/Firefox\/([^ ]*)/));if(10>a.a.C)var g=a.a.e.J(),h=a.a.e.J(),l=function(b){var c=
this.activeElement;(c=c&&a.a.e.get(c,h))&&c(b)},m=function(b,c){var d=b.ownerDocument;a.a.e.get(d,g)||(a.a.e.set(d,g,!0),a.a.q(d,"selectionchange",l));a.a.e.set(b,h,c)};a.d.textInput={init:function(b,d,g){function l(c,d){a.a.q(b,c,d)}function h(){var c=a.a.c(d());if(null===c||c===n)c="";u!==n&&c===u?a.a.setTimeout(h,4):b.value!==c&&(s=c,b.value=c)}function y(){t||(u=b.value,t=a.a.setTimeout(v,4))}function v(){clearTimeout(t);u=t=n;var c=b.value;s!==c&&(s=c,a.h.Ga(d(),g,"textInput",c))}var s=b.value,
t,u,x=9==a.a.C?y:v;10>a.a.C?(l("propertychange",function(a){"value"===a.propertyName&&x(a)}),8==a.a.C&&(l("keyup",v),l("keydown",v)),8<=a.a.C&&(m(b,x),l("dragend",y))):(l("input",v),5>e&&"textarea"===a.a.A(b)?(l("keydown",y),l("paste",y),l("cut",y)):11>c?l("keydown",y):4>f&&(l("DOMAutoComplete",v),l("dragdrop",v),l("drop",v)));l("change",v);a.m(h,null,{i:b})}};a.h.ga.textInput=!0;a.d.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.d.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+
++a.d.uniqueName.Nc;a.a.vc(b,d)}}};a.d.uniqueName.Nc=0;a.d.value={after:["options","foreach"],init:function(b,c,d){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=d.get("valueUpdate"),g=!1,h=null;f&&("string"==typeof f&&(f=[f]),a.a.ta(e,f),e=a.a.Wb(e));var l=function(){h=null;g=!1;var e=c(),f=a.j.u(b);a.h.Ga(e,d,"value",f)};!a.a.C||"input"!=b.tagName.toLowerCase()||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.o(e,"propertychange")||
(a.a.q(b,"propertychange",function(){g=!0}),a.a.q(b,"focus",function(){g=!1}),a.a.q(b,"blur",function(){g&&l()}));a.a.r(e,function(c){var d=l;a.a.sd(c,"after")&&(d=function(){h=a.j.u(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.q(b,c,d)});var m=function(){var e=a.a.c(c()),f=a.j.u(b);if(null!==h&&e===h)a.a.setTimeout(m,0);else if(e!==f)if("select"===a.a.A(b)){var g=d.get("valueAllowUnset"),f=function(){a.j.ja(b,e,g)};f();g||e===a.j.u(b)?a.a.setTimeout(f,0):a.l.w(a.a.Fa,null,[b,"change"])}else a.j.ja(b,
e)};a.m(m,null,{i:b})}else a.La(b,{checkedValue:c})},update:function(){}};a.h.ga.value=!0;a.d.visible={update:function(b,c){var d=a.a.c(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(c,d,e,f,g){return a.d.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click");a.P=function(){};a.P.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.P.prototype.createJavaScriptEvaluatorBlock=
function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.P.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||t;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.v.n(d)}if(1==b.nodeType||8==b.nodeType)return new a.v.sa(b);throw Error("Unknown template type: "+b);};a.P.prototype.renderTemplate=function(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.P.prototype.isTemplateRewritten=function(a,
c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.P.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.P);a.Ib=function(){function b(b,c,d,h){b=a.h.Ab(b);for(var l=a.h.va,m=0;m<b.length;m++){var k=b[m].key;if(l.hasOwnProperty(k)){var r=l[k];if("function"===typeof r){if(k=r(b[m].value))throw Error(k);}else if(!r)throw Error("This template engine does not support the '"+
k+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.Xa(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{Tc:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.Ib.jd(b,
c)},d)},jd:function(a,f){return a.replace(c,function(a,c,d,e,k){return b(k,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},Jc:function(b,c){return a.N.yb(function(d,h){var l=d.nextSibling;l&&l.nodeName.toLowerCase()===c&&a.La(l,b,h)})}}}();a.b("__tr_ambtns",a.Ib.Jc);(function(){a.v={};a.v.n=function(b){if(this.n=b){var c=a.a.A(b);this.eb="script"===c?1:"textarea"===c?2:"template"==c&&b.content&&11===b.content.nodeType?3:4}};a.v.n.prototype.text=function(){var b=1===
this.eb?"text":2===this.eb?"value":"innerHTML";if(0==arguments.length)return this.n[b];var c=arguments[0];"innerHTML"===b?a.a.Eb(this.n,c):this.n[b]=c};var b=a.a.e.J()+"_";a.v.n.prototype.data=function(c){if(1===arguments.length)return a.a.e.get(this.n,b+c);a.a.e.set(this.n,b+c,arguments[1])};var c=a.a.e.J();a.v.n.prototype.nodes=function(){var b=this.n;if(0==arguments.length)return(a.a.e.get(b,c)||{}).mb||(3===this.eb?b.content:4===this.eb?b:n);a.a.e.set(b,c,{mb:arguments[0]})};a.v.sa=function(a){this.n=
a};a.v.sa.prototype=new a.v.n;a.v.sa.prototype.text=function(){if(0==arguments.length){var b=a.a.e.get(this.n,c)||{};b.Jb===n&&b.mb&&(b.Jb=b.mb.innerHTML);return b.Jb}a.a.e.set(this.n,c,{Jb:arguments[0]})};a.b("templateSources",a.v);a.b("templateSources.domElement",a.v.n);a.b("templateSources.anonymousTemplate",a.v.sa)})();(function(){function b(b,c,d){var e;for(c=a.f.nextSibling(c);b&&(e=b)!==c;)b=a.f.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=
a.S.instance,n=h.preprocessNode;if(n){b(e,f,function(a,b){var c=a.previousSibling,d=n.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.Ba(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.Ub(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.N.Cc(b,[d])});a.a.Ba(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,q){q=q||{};var p=(b&&d(b)||f||{}).ownerDocument,n=q.templateEngine||g;
a.Ib.Tc(f,n,p);f=n.renderTemplate(f,h,q,p);if("number"!=typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(e){case "replaceChildren":a.f.fa(b,f);p=!0;break;case "replaceNode":a.a.uc(b,f);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}p&&(c(f,h),q.afterRender&&a.l.w(q.afterRender,null,[f,h.$data]));return f}function f(b,c,d){return a.I(b)?b():"function"===typeof b?b(c,d):b}
var g;a.Fb=function(b){if(b!=n&&!(b instanceof a.P))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.Cb=function(b,c,k,h,q){k=k||{};if((k.templateEngine||g)==n)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(h){var p=d(h);return a.B(function(){var g=c&&c instanceof a.R?c:new a.R(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(h,q,n,g,k);"replaceNode"==q&&(h=g,p=d(h))},null,{ya:function(){return!p||!a.a.qb(p)},i:p&&
"replaceNode"==q?p.parentNode:p})}return a.N.yb(function(d){a.Cb(b,c,k,d,"replaceNode")})};a.pd=function(b,d,g,h,q){function p(a,b){c(b,t);g.afterRender&&g.afterRender(b,a);t=null}function s(a,c){t=q.createChildContext(a,g.as,function(a){a.$index=c});var d=f(b,a,t);return e(null,"ignoreTargetNode",d,t,g)}var t;return a.B(function(){var b=a.a.c(d)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.Ma(b,function(b){return g.includeDestroyed||b===n||null===b||!a.a.c(b._destroy)});a.l.w(a.a.Db,null,[h,b,
s,g,p])},null,{i:h})};var h=a.a.e.J();a.d.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.f.za(b);else{if("nodes"in d){if(d=d.nodes||[],a.I(d))throw Error('The "nodes" option must be a plain, non-observable array.');}else d=a.f.childNodes(b);d=a.a.nc(d);(new a.v.sa(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.c(g);d=!0;e=null;"string"==typeof c?c={}:(g=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in c&&(d=!a.a.c(c.ifnot)));
"foreach"in c?e=a.pd(g||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.ac(c.data,c.as):f,e=a.Cb(g||b,f,c,b)):a.f.za(b);f=e;(c=a.a.e.get(b,h))&&"function"==typeof c.k&&c.k();a.a.e.set(b,h,f&&f.ca()?f:n)}};a.h.va.template=function(b){b=a.h.Ab(b);return 1==b.length&&b[0].unknown||a.h.fd(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.f.aa.template=!0})();a.b("setTemplateEngine",a.Fb);a.b("renderTemplate",a.Cb);a.a.hc=function(a,c,d){if(a.length&&
c.length){var e,f,g,h,l;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;l=c[g];++g)if(h.value===l.value){h.moved=l.index;l.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.lb=function(){function b(b,d,e,f,g){var h=Math.min,l=Math.max,m=[],k,n=b.length,q,p=d.length,s=p-n||1,t=n+p+1,v,u,x;for(k=0;k<=n;k++)for(u=v,m.push(v=[]),x=h(p,k+s),q=l(0,k-1);q<=x;q++)v[q]=q?k?b[k-1]===d[q-1]?u[q-1]:h(u[q]||t,v[q-1]||t)+1:q+1:k+1;h=[];l=[];s=[];k=n;for(q=p;k||q;)p=m[k][q]-1,q&&p===m[k][q-1]?l.push(h[h.length]={status:e,
value:d[--q],index:q}):k&&p===m[k-1][q]?s.push(h[h.length]={status:f,value:b[--k],index:k}):(--q,--k,g.sparse||h.push({status:"retained",value:d[q]}));a.a.hc(s,l,!g.dontLimitMoves&&10*n);return h.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.lb);(function(){function b(b,c,d,h,l){var m=[],k=a.B(function(){var k=c(d,l,a.a.Ba(m,b))||[];0<
m.length&&(a.a.uc(m,k),h&&a.l.w(h,null,[d,k,l]));m.length=0;a.a.ta(m,k)},null,{i:b,ya:function(){return!a.a.Tb(m)}});return{ea:m,B:k.ca()?k:n}}var c=a.a.e.J(),d=a.a.e.J();a.a.Db=function(e,f,g,h,l){function m(b,c){w=q[c];u!==c&&(D[b]=w);w.tb(u++);a.a.Ba(w.ea,e);t.push(w);z.push(w)}function k(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.r(c[d].ea,function(a){b(a,d,c[d].ka)})}f=f||[];h=h||{};var r=a.a.e.get(e,c)===n,q=a.a.e.get(e,c)||[],p=a.a.ib(q,function(a){return a.ka}),s=a.a.lb(p,f,h.dontLimitMoves),
t=[],v=0,u=0,x=[],z=[];f=[];for(var D=[],p=[],w,C=0,B,E;B=s[C];C++)switch(E=B.moved,B.status){case "deleted":E===n&&(w=q[v],w.B&&(w.B.k(),w.B=n),a.a.Ba(w.ea,e).length&&(h.beforeRemove&&(t.push(w),z.push(w),w.ka===d?w=null:f[C]=w),w&&x.push.apply(x,w.ea)));v++;break;case "retained":m(C,v++);break;case "added":E!==n?m(C,E):(w={ka:B.value,tb:a.O(u++)},t.push(w),z.push(w),r||(p[C]=w))}a.a.e.set(e,c,t);k(h.beforeMove,D);a.a.r(x,h.beforeRemove?a.ba:a.removeNode);for(var C=0,r=a.f.firstChild(e),F;w=z[C];C++){w.ea||
a.a.extend(w,b(e,g,w.ka,l,w.tb));for(v=0;s=w.ea[v];r=s.nextSibling,F=s,v++)s!==r&&a.f.kc(e,s,F);!w.ad&&l&&(l(w.ka,w.ea,w.tb),w.ad=!0)}k(h.beforeRemove,f);for(C=0;C<f.length;++C)f[C]&&(f[C].ka=d);k(h.afterMove,D);k(h.afterAdd,p)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.Db);a.X=function(){this.allowTemplateRewriting=!1};a.X.prototype=new a.P;a.X.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.C?0:b.nodes)?b.nodes():null)return a.a.W(c.cloneNode(!0).childNodes);b=b.text();
return a.a.na(b,e)};a.X.vb=new a.X;a.Fb(a.X.vb);a.b("nativeTemplateEngine",a.X);(function(){a.xb=function(){var a=this.ed=function(){if(!u||!u.tmpl)return 0;try{if(0<=u.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,e,f,g){g=g||t;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=u.template(null,"{{ko_with $item.koBindingContext}}"+
h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=u.extend({koBindingContext:e},f.templateOptions);e=u.tmpl(h,b,e);e.appendTo(g.createElement("div"));u.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){t.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(u.tmpl.tag.ko_code={open:"__.push($1 || '');"},u.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.xb.prototype=
new a.P;var b=new a.xb;0<b.ed&&a.Fb(b);a.b("jqueryTmplTemplateEngine",a.xb)})()})})();})();

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.Services.ActionsSection = function (webPortal) {
Microsoft.WebPortal.Services.ActionsSection = function (webPortal) {
/// <summary>
/// Renders the actions the user can invoke on the current feature.
/// </summary>
@ -11,7 +9,7 @@ Microsoft.WebPortal.Services.ActionsSection = function (webPortal) {
// create and register the actions service
this.actionBarSevice = new Microsoft.WebPortal.Services.ActionsService(this.webPortal, "Actions", "#" + webPortal.Settings.Ids.ActionsSection);
this.webPortal.registerPortalService(this.actionBarSevice);
}
};
$WebPortal.Helpers.inherit(Microsoft.WebPortal.Services.ActionsSection, Microsoft.WebPortal.Services.HeaderBarSection);
@ -23,7 +21,7 @@ Microsoft.WebPortal.Services.ActionsSection.prototype.initialize = function () {
if (!this.webPortal.Services.Actions) {
this.webPortal.registerPortalService(this.actionBarSevice);
}
}
};
Microsoft.WebPortal.Services.ActionsSection.prototype.destroy = function () {
/// <summary>
@ -31,6 +29,6 @@ Microsoft.WebPortal.Services.ActionsSection.prototype.destroy = function () {
/// </summary>
this.webPortal.deregisterPortalService(this.actionBarSevice);
}
};
//@ sourceURL=ActionsSection.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.Services.HeaderBar = function (webPortal) {
Microsoft.WebPortal.Services.HeaderBar = function (webPortal) {
/// <summary>
/// The portal header bar service.
/// </summary>
@ -14,7 +12,7 @@ Microsoft.WebPortal.Services.HeaderBar = function (webPortal) {
// make the header bar toggle between show and hide!
Microsoft.WebPortal.Utilities.Toggler.injectToggling(this, this.show, this.hide, false);
}
};
// extend the base portal service
$WebPortal.Helpers.inherit(Microsoft.WebPortal.Services.HeaderBar, Microsoft.WebPortal.Core.PortalService);
@ -34,7 +32,7 @@ Microsoft.WebPortal.Services.HeaderBar.prototype._runService = function () {
}
this.show();
}
};
Microsoft.WebPortal.Services.HeaderBar.prototype._stopService = function () {
/// <summary>
@ -53,7 +51,7 @@ Microsoft.WebPortal.Services.HeaderBar.prototype._stopService = function () {
ko.cleanNode($(self.headerBarContainerSelector)[0]);
$(self.headerBarContainerSelector).empty();
});
}
};
Microsoft.WebPortal.Services.HeaderBar.prototype.addSection = function (newSection, position) {
/// <summary>
@ -70,10 +68,10 @@ Microsoft.WebPortal.Services.HeaderBar.prototype.addSection = function (newSecti
this.sections.splice(position, 0, newSection);
}
if(this.isRunning) {
if (this.isRunning) {
newSection.initialize();
}
}
};
Microsoft.WebPortal.Services.HeaderBar.prototype.removeSection = function (id) {
/// <summary>
@ -84,7 +82,7 @@ Microsoft.WebPortal.Services.HeaderBar.prototype.removeSection = function (id) {
this.webPortal.Helpers.throwIfNotSet(id, "id", "Microsoft.WebPortal.Services.HeaderBar.removeSection");
for (var i in this.sections()) {
if (this.sections()[i].id() == id) {
if (this.sections()[i].id() === id) {
if (this.isRunning) {
this.sections()[i].destroy();
}
@ -93,7 +91,7 @@ Microsoft.WebPortal.Services.HeaderBar.prototype.removeSection = function (id) {
return;
}
}
}
};
Microsoft.WebPortal.Services.HeaderBar.prototype.show = function (showProgress) {
/// <summary>
@ -113,7 +111,7 @@ Microsoft.WebPortal.Services.HeaderBar.prototype.show = function (showProgress)
this.animation.show(this.webPortal.Settings.Ids.HeaderBar).always(function () {
showProgress.resolve();
});
}
};
Microsoft.WebPortal.Services.HeaderBar.prototype.hide = function (hideProgress) {
/// <summary>
@ -133,6 +131,6 @@ Microsoft.WebPortal.Services.HeaderBar.prototype.hide = function (hideProgress)
this.animation.hide(this.webPortal.Settings.Ids.HeaderBar).always(function () {
hideProgress.resolve();
});
}
};
//@ sourceURL=HeaderBar.js

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.Services.LinksSection = function (webPortal) {
Microsoft.WebPortal.Services.LinksSection = function (webPortal) {
/// <summary>
/// Renders the links the header bar.
/// </summary>
@ -18,8 +16,7 @@ Microsoft.WebPortal.Services.LinksSection = function (webPortal) {
var self = this;
this.onContactUsClicked = function () {
if (window.contactUs && window.contactSales)
{
if (window.contactUs && window.contactSales) {
// contact us and sales have been configured, show them in a dialog, otherwise do nothing until they are configured
var okButton = Microsoft.WebPortal.Services.Button.create(Microsoft.WebPortal.Services.Button.StandardButtons.OK, 1, function () {
self.webPortal.Services.Dialog.hide();
@ -37,10 +34,10 @@ Microsoft.WebPortal.Services.LinksSection = function (webPortal) {
email: contactSales.email,
phone: contactSales.phone,
phoneLink: "tel:" + contactSales.phone,
},
}
}, [okButton]);
}
}
};
webPortal.EventSystem.subscribe(Microsoft.WebPortal.Event.UserLoggedIn, function (eventId, isLoggedIn, broadcaster) {
this.isLoggedIn(isLoggedIn);
@ -57,7 +54,7 @@ Microsoft.WebPortal.Services.LinksSection = function (webPortal) {
webPortal.Services.HeaderBar.removeSection("UserInfoSection");
}
}, this);
}
};
$WebPortal.Helpers.inherit(Microsoft.WebPortal.Services.LinksSection, Microsoft.WebPortal.Services.HeaderBarSection);

Просмотреть файл

@ -1,6 +1,4 @@
/// <reference path="~/Scripts/_references.js" />
Microsoft.WebPortal.Services.Notification = function (type, message, buttons) {
Microsoft.WebPortal.Services.Notification = function (type, message, buttons) {
/// <summary>
/// Defines a notification. Use this class to create and configure notifications. Pass a notification type from
/// the Microsoft.WebPortal.Services.Notification.NotificationType enumeration, a message and an array of Button objects to attach behavior to the notification.
@ -59,8 +57,8 @@ Microsoft.WebPortal.Services.Notification = function (type, message, buttons) {
/// </summary>
$WebPortal.Services.Notifications.remove(this);
}
}
};
};
/*
The notification types supported by the portal.
@ -71,6 +69,6 @@ Microsoft.WebPortal.Services.Notification.NotificationType = {
Error: 3,
Success: 4,
Progress: 5
}
};
//@ sourceURL=Notification.js

Просмотреть файл

@ -22,21 +22,14 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Security
redirectUri.AssertNotNull(nameof(redirectUri));
clientCredential.AssertNotNull(nameof(clientCredential));
try
{
authContext = new AuthenticationContext(authority);
authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
authorizationCode,
redirectUri,
clientCredential,
resource).ConfigureAwait(false);
authContext = new AuthenticationContext(authority);
authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
authorizationCode,
redirectUri,
clientCredential,
resource).ConfigureAwait(false);
return authResult;
}
finally
{
authContext = null;
}
return authResult;
}
}
}

Просмотреть файл

@ -56,23 +56,23 @@
<Reference Include="Microsoft.AI.Agent.Intercept, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Agent.Intercept.2.4.0\lib\net45\Microsoft.AI.Agent.Intercept.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AI.DependencyCollector, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.DependencyCollector.2.7.2\lib\net45\Microsoft.AI.DependencyCollector.dll</HintPath>
<Reference Include="Microsoft.AI.DependencyCollector, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.DependencyCollector.2.8.0\lib\net45\Microsoft.AI.DependencyCollector.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AI.PerfCounterCollector, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.2.7.2\lib\net45\Microsoft.AI.PerfCounterCollector.dll</HintPath>
<Reference Include="Microsoft.AI.PerfCounterCollector, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.2.8.0\lib\net45\Microsoft.AI.PerfCounterCollector.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AI.ServerTelemetryChannel, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.7.2\lib\net45\Microsoft.AI.ServerTelemetryChannel.dll</HintPath>
<Reference Include="Microsoft.AI.ServerTelemetryChannel, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.8.0\lib\net45\Microsoft.AI.ServerTelemetryChannel.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AI.Web, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Web.2.7.2\lib\net45\Microsoft.AI.Web.dll</HintPath>
<Reference Include="Microsoft.AI.Web, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Web.2.8.0\lib\net45\Microsoft.AI.Web.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AI.WindowsServer, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.2.7.2\lib\net45\Microsoft.AI.WindowsServer.dll</HintPath>
<Reference Include="Microsoft.AI.WindowsServer, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.2.8.0\lib\net45\Microsoft.AI.WindowsServer.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ApplicationInsights, Version=2.7.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.2.7.2\lib\net45\Microsoft.ApplicationInsights.dll</HintPath>
<Reference Include="Microsoft.ApplicationInsights, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.ApplicationInsights.2.8.0\lib\net45\Microsoft.ApplicationInsights.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AspNet.TelemetryCorrelation, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.AspNet.TelemetryCorrelation.1.0.4\lib\net45\Microsoft.AspNet.TelemetryCorrelation.dll</HintPath>
@ -93,24 +93,24 @@
<Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform, Version=3.19.8.16603, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.19.8\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.JsonWebTokens.5.2.4\lib\net451\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
<Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.JsonWebTokens.5.3.0\lib\net451\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Logging, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Logging.5.2.4\lib\net451\Microsoft.IdentityModel.Logging.dll</HintPath>
<Reference Include="Microsoft.IdentityModel.Logging, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Logging.5.3.0\lib\net451\Microsoft.IdentityModel.Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Protocol.Extensions, Version=1.0.40306.1554, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocol.Extensions.1.0.4.403061554\lib\net45\Microsoft.IdentityModel.Protocol.Extensions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.IdentityModel.Protocols, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.5.2.4\lib\net451\Microsoft.IdentityModel.Protocols.dll</HintPath>
<Reference Include="Microsoft.IdentityModel.Protocols, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.5.3.0\lib\net451\Microsoft.IdentityModel.Protocols.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.2.4\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll</HintPath>
<Reference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.3.0\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Tokens, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Tokens.5.2.4\lib\net451\Microsoft.IdentityModel.Tokens.dll</HintPath>
<Reference Include="Microsoft.IdentityModel.Tokens, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.IdentityModel.Tokens.5.3.0\lib\net451\Microsoft.IdentityModel.Tokens.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll</HintPath>
@ -151,13 +151,13 @@
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.Diagnostics.DiagnosticSource.4.5.0\lib\net45\System.Diagnostics.DiagnosticSource.dll</HintPath>
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.3.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.Diagnostics.DiagnosticSource.4.5.1\lib\net45\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.IdentityModel" />
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.5.2.4\lib\net451\System.IdentityModel.Tokens.Jwt.dll</HintPath>
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.5.3.0\lib\net451\System.IdentityModel.Tokens.Jwt.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@ -459,7 +459,6 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Configuration\WebPortalConfigurationPayU.json" />
<None Include="Properties\PublishProfiles\partnercenterstorefront - Web Deploy.pubxml" />
<None Include="Scripts\jquery.validate-vsdoc.js" />
<Content Include="Scripts\jquery.validate.js" />
<Content Include="Scripts\jquery.validate.min.js" />
@ -505,8 +504,8 @@
<Content Include="Scripts\WebPortal\Dependencies\jquery-1.11.2.min.js" />
<Content Include="Scripts\WebPortal\Dependencies\jquery-ui.js" />
<Content Include="Scripts\WebPortal\Dependencies\jquery-ui.min.js" />
<Content Include="Scripts\WebPortal\Dependencies\knockout-3.2.0.debug.js" />
<Content Include="Scripts\WebPortal\Dependencies\knockout-3.2.0.js" />
<Content Include="Scripts\WebPortal\Dependencies\knockout-3.4.2.debug.js" />
<Content Include="Scripts\WebPortal\Dependencies\knockout-3.4.2.js" />
<Content Include="Scripts\WebPortal\Infrastructure\Diagnostics.js" />
<Content Include="Scripts\WebPortal\Infrastructure\Helpers.js" />
<Content Include="Scripts\WebPortal\Infrastructure\KnockOutExtensions.js" />

Просмотреть файл

@ -23,6 +23,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Telemetry
/// <param name="metrics">Measurements associated with this event.</param>
public void TrackEvent(string eventName, IDictionary<string, string> properties = null, IDictionary<string, double> metrics = null)
{
// Method intentionally left empty.
}
/// <summary>
@ -33,6 +34,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Telemetry
/// <param name="metrics">Additional values associated with this exception.</param>
public void TrackException(Exception exception, IDictionary<string, string> properties = null, IDictionary<string, double> metrics = null)
{
// Method intentionally left empty.
}
/// <summary>
@ -41,6 +43,7 @@ namespace Microsoft.Store.PartnerCenter.Storefront.Telemetry
/// <param name="message">The message to display</param>
public void TrackTrace(string message)
{
// Method intentionally left empty.
}
}
}

Просмотреть файл

@ -51,7 +51,7 @@
</td>
<td class="rightColumn">
<label>@Resources.CustomerOrganizationNameCaption</label><br />
<input id="CompanyName" name="CompanyName" type="text" class="inputField" data-bind="textinput: viewModel.CompanyName" data-rule-required="true"/>
<input id="CompanyName" name="CompanyName" type="text" class="inputField" data-bind="textinput: viewModel.CompanyName" data-rule-required="true" />
</td>
</tr>
<tr>
@ -67,17 +67,17 @@
<tr>
<td class="leftColumn">
@Resources.CustomerProfileCityCaption
<input id="City" name="City" type="text" class="inputField" data-bind="textinput: viewModel.City" data-rule-required="true"/>
<input id="City" name="City" type="text" class="inputField" data-bind="textinput: viewModel.City" data-rule-required="true" />
</td>
<td class="rightColumn">
@Resources.CustomerProfileStateCaption
<input id="State" name="State" type="text" class="inputField" data-bind="textinput: viewModel.State"/>
<input id="State" name="State" type="text" class="inputField" data-bind="textinput: viewModel.State" />
</td>
</tr>
<tr>
<td class="leftColumn">
@Resources.CustomerProfileZipPostalCaption
<input id="ZipCode" name="ZipCode" type="text" class="inputField" data-bind="textinput: viewModel.ZipCode" data-rule-required="true"/>
<input id="ZipCode" name="ZipCode" type="text" class="inputField" data-bind="textinput: viewModel.ZipCode" data-rule-required="true" />
</td>
</tr>
<tr>
@ -92,7 +92,7 @@
</td>
<td class="rightColumn">
@Resources.CustomerProfileLastNameCaption
<input id="LastName" name="LastName" type="text" class="inputField" data-bind="textinput: viewModel.LastName" data-rule-required="true"/>
<input id="LastName" name="LastName" type="text" class="inputField" data-bind="textinput: viewModel.LastName" data-rule-required="true" />
</td>
</tr>
<tr>
@ -115,7 +115,7 @@
@Resources.CustomerProfileDomainPrefixCaption
<input id="DomainPrefix" name="DomainPrefix" type="text" class="inputField" style="margin-bottom: 5px;" data-bind="textinput: viewModel.DomainPrefix" /><br />
<label class="note">@Resources.CustomerProfileDomainInfoCaption</label>
</td>
</td>
<td class="rightColumn" style="vertical-align: top;">
<label style="display: inline-block;">@Resources.CustomerProfileOffice365UserNameCaption</label><br>
<div style="height: 20px; padding-top: 10px; padding-bottom: 10px; vertical-align: middle;">
@ -125,5 +125,7 @@
</td>
</tr>
</table>
<input type="checkbox" id="AcceptAgreement" name="AcceptAgreement" data-rule-required="true" />
@Resources.AcceptPhrase <a href="https://docs.microsoft.com/partner-center/agreements">@Resources.TermsOfService</a>
<input id="CustomerMicrosoftID" name="CustomerMicrosoftID" type="hidden" data-bind="textinput: viewModel.CustomerMicrosoftID" />
</script>

Просмотреть файл

@ -146,6 +146,7 @@
BrandingUpdateErrorMessage: "@Html.Raw(Resources.BrandingUpdateErrorMessage)",
UndoBrandingChangesTooltip: "@Html.Raw(Resources.UndoBrandingChangesTooltip)",
ImagesTooLarge: "@Html.Raw(Resources.ImagesTooLarge)",
InvalidAgreementUserId: "@Html.Raw(Resources.InvalidAgreementUserId)",
InvalidFileType: "@Html.Raw(Resources.InvalidFileType)",
InvalidOrganizationLogoUri: "@Html.Raw(Resources.InvalidOrganizationLogoUri)",
InvalidHeaderImageUri: "@Html.Raw(Resources.InvalidHeaderImageUri)",

Просмотреть файл

@ -101,6 +101,15 @@
@Resources.PrivacyAgreementFieldSubText
</td>
</tr>
<tr>
<td class="TitleCell">
@Resources.AgreementUserIdFieldHeader
</td>
<td class="Subtext">
<input id="InstrumentationKey" name="AgreementUserId" type="text" class="InputField FullWidthInput" data-bind="textinput: viewModel.AgreementUserId" /><br />
@Resources.AgreementUserIdSubText
</td>
</tr>
<tr>
<td class="TitleCell">
@Resources.InstrumentationKeyFieldHeader
@ -115,7 +124,6 @@
</tr>
</table>
</form>
<script>
$("#PortalBrandingForm").validate({
errorPlacement: function (error, element) {
@ -128,6 +136,9 @@
}
},
rules: {
AgreementUserId: {
required: true
},
OrganizationName: {
required: true
},

Просмотреть файл

@ -26,6 +26,9 @@
}
},
rules: {
AcceptAgreement: {
required: true
},
DomainPrefix: {
required: true,
regx: /^[a-z0-9]+$/i
@ -34,8 +37,7 @@
required: true
}
},
submitHandler: function (form) {
submitHandler: function (form) {
}
});
</script>

Просмотреть файл

@ -132,7 +132,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
<bindingRedirect oldVersion="0.0.0.0-5.3.0.0" newVersion="5.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Protocol.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@ -192,20 +192,24 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
<bindingRedirect oldVersion="0.0.0.0-5.3.0.0" newVersion="5.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Protocols.OpenIdConnect" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
<bindingRedirect oldVersion="0.0.0.0-5.3.0.0" newVersion="5.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Protocols" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
<bindingRedirect oldVersion="0.0.0.0-5.3.0.0" newVersion="5.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.AspNet.TelemetryCorrelation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.4.0" newVersion="1.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.1" newVersion="4.0.3.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>

Просмотреть файл

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.Web" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.7.2" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.Web" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.8.0" targetFramework="net452" />
<package id="Microsoft.AspNet.Mvc" version="5.2.6" targetFramework="net452" />
<package id="Microsoft.AspNet.Razor" version="3.2.6" targetFramework="net452" />
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.4" targetFramework="net452" />
@ -21,12 +21,12 @@
<package id="Microsoft.Graph" version="1.11.0" targetFramework="net452" />
<package id="Microsoft.Graph.Core" version="1.11.0" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.19.8" targetFramework="net452" />
<package id="Microsoft.IdentityModel.JsonWebTokens" version="5.2.4" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Logging" version="5.2.4" targetFramework="net452" />
<package id="Microsoft.IdentityModel.JsonWebTokens" version="5.3.0" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Logging" version="5.3.0" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.4.403061554" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocols" version="5.2.4" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="5.2.4" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Tokens" version="5.2.4" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocols" version="5.3.0" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="5.3.0" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Tokens" version="5.3.0" targetFramework="net452" />
<package id="Microsoft.Owin" version="4.0.0" targetFramework="net452" />
<package id="Microsoft.Owin.Host.SystemWeb" version="4.0.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security" version="4.0.0" targetFramework="net452" />
@ -39,11 +39,11 @@
<package id="PayPal" version="1.9.1" targetFramework="net452" />
<package id="StackExchange.Redis.StrongName" version="1.2.6" targetFramework="net452" />
<package id="System.ComponentModel.EventBasedAsync" version="4.3.0" targetFramework="net452" />
<package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net452" />
<package id="System.Diagnostics.DiagnosticSource" version="4.5.1" targetFramework="net452" />
<package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net452" />
<package id="System.IdentityModel.Tokens.Jwt" version="5.2.4" targetFramework="net452" />
<package id="System.IdentityModel.Tokens.Jwt" version="5.3.0" targetFramework="net452" />
<package id="System.Linq.Queryable" version="4.3.0" targetFramework="net452" />
<package id="System.Net.Http" version="4.3.3" targetFramework="net452" />
<package id="System.Net.Http" version="4.3.4" targetFramework="net452" />
<package id="System.Net.Requests" version="4.3.0" targetFramework="net452" />
<package id="Text.Analyzers" version="2.6.2" targetFramework="net452" developmentDependency="true" />
<package id="WebGrease" version="1.6.0" targetFramework="net452" />