Repository: 2sic/2sxc Branch: master Commit: ae4b5a23077f Files: 2288 Total size: 10.3 MB Directory structure: gitextract_5xck1__n/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── ISSUE_TEMPLATE.md ├── .gitignore ├── .vscode/ │ └── settings.json ├── 2sxc-build-fallback.config.json ├── Dependencies/ │ ├── Imageflow/ │ │ └── Dnn/ │ │ ├── ToSic.Imageflow.Dnn.pdb │ │ └── ToSic.Imageflow.Dnn.xml │ ├── Koi/ │ │ ├── net472/ │ │ │ └── Connect.Koi.pdb │ │ ├── net6.0/ │ │ │ ├── Connect.Koi.deps.json │ │ │ └── Connect.Koi.pdb │ │ ├── net7.0/ │ │ │ ├── Connect.Koi.deps.json │ │ │ └── Connect.Koi.pdb │ │ └── netstandard2.0/ │ │ ├── Connect.Koi.deps.json │ │ └── Connect.Koi.pdb │ └── RazorBlade/ │ └── Release/ │ ├── net472/ │ │ └── ToSic.Razor.pdb │ ├── net6.0/ │ │ ├── ToSic.Razor.deps.json │ │ └── ToSic.Razor.pdb │ ├── net7.0/ │ │ ├── ToSic.Razor.deps.json │ │ └── ToSic.Razor.pdb │ └── netstandard2.0/ │ ├── ToSic.Razor.deps.json │ └── ToSic.Razor.pdb ├── LICENSE ├── Src/ │ ├── .gitignore │ ├── 2sxc Integration.sln │ ├── 2sxc Integration.sln.DotSettings │ ├── 2sxc Multi-Target Oqt510.sln.DotSettings │ ├── 2sxc Multi-Target.sln │ ├── 2sxc Multi-Target.sln.DotSettings │ ├── 2sxc for MVC PoC.sln │ ├── Build/ │ │ └── ToSic.Sxc.BuildTasks/ │ │ ├── BuildConfig.cs │ │ ├── ColorMessage.cs │ │ ├── CopyNewerFileVersion.cs │ │ ├── GetBuildConfig.cs │ │ ├── ModifyXmlDocumentation.cs │ │ └── ToSic.Sxc.BuildTasks.csproj │ ├── Data/ │ │ ├── App_Data/ │ │ │ ├── new-app/ │ │ │ │ └── app.json │ │ │ ├── system/ │ │ │ │ ├── bundles/ │ │ │ │ │ ├── system-cms.json │ │ │ │ │ ├── system-copyright.json │ │ │ │ │ ├── system-datasources.json │ │ │ │ │ ├── system-decorators.json │ │ │ │ │ ├── system-fields-helpers.json │ │ │ │ │ ├── system-fields-pickers.json │ │ │ │ │ ├── system-fields.json │ │ │ │ │ ├── system-queries.json │ │ │ │ │ ├── system-query.json │ │ │ │ │ ├── system-resources.json │ │ │ │ │ ├── system-settings-web-resources-data.json │ │ │ │ │ ├── system-settings.json │ │ │ │ │ ├── system-wysiwyg-configs.json │ │ │ │ │ └── system.json │ │ │ │ └── readme.md │ │ │ └── system-beta/ │ │ │ ├── readme.md │ │ │ ├── xconfigurations/ │ │ │ │ └── features.json │ │ │ └── xcontenttypes/ │ │ │ ├── Default.6d5bebc7-1caf-430c-9628-a7c30b77f393.json │ │ │ └── json.y48d849d6-b83d-4001-96e5-79da0833e84e.json │ │ └── json-schemas/ │ │ ├── JSON model 2sxc Image Resize Advanced.hck.json │ │ └── image-resize-recipe-v1.json │ ├── Data-Dnn/ │ │ └── App_Data/ │ │ └── system/ │ │ └── contenttypes/ │ │ ├── System.DataSources.Config ToSic.SexyContent.DataSources.DnnFormAndList.json │ │ ├── System.DataSources.Config ToSic.SexyContent.DataSources.DnnSqlDataSource.json │ │ ├── System.DataSources.Config ToSic.SexyContent.DataSources.DnnUserProfileDataSource.json │ │ ├── System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnFormAndList.json │ │ ├── System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource.json │ │ └── System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource.json │ ├── Dnn/ │ │ ├── ToSic.Sxc.Dnn/ │ │ │ ├── .gitignore │ │ │ ├── App_LocalResources/ │ │ │ │ ├── View.ascx.de-DE.resx │ │ │ │ ├── View.ascx.fr-FR.resx │ │ │ │ └── View.ascx.resx │ │ │ ├── BuildScripts/ │ │ │ │ ├── AfterBuild.Targets │ │ │ │ ├── LoadBuildConfig.Targets │ │ │ │ ├── MSBuild.Community.Tasks.pdb │ │ │ │ ├── MSBuild.Community.Tasks.targets │ │ │ │ ├── ModulePackage.Targets │ │ │ │ └── readme.md │ │ │ ├── ClientScripts/ │ │ │ │ ├── ModuleEditor.js │ │ │ │ └── readme.md │ │ │ ├── DnnBusinessController.cs │ │ │ ├── DnnPackageBuilder/ │ │ │ │ ├── Cleanup/ │ │ │ │ │ ├── flush.txt │ │ │ │ │ └── flush20.txt │ │ │ │ ├── ReleaseNotes.txt │ │ │ │ ├── SqlDataProvider/ │ │ │ │ │ ├── 00.00.01.SqlDataProvider │ │ │ │ │ ├── 16.07.01.SqlDataProvider │ │ │ │ │ ├── 18.03.00.SqlDataProvider │ │ │ │ │ ├── 19.00.00.SqlDataProvider │ │ │ │ │ ├── 20.00.00.SqlDataProvider │ │ │ │ │ ├── 20.00.05.SqlDataProvider │ │ │ │ │ ├── 21.00.00.SqlDataProvider │ │ │ │ │ ├── Migrate.SqlDataProvider │ │ │ │ │ ├── RequireLatest.SqlDataProvider │ │ │ │ │ ├── RequireMinimal.SqlDataProvider │ │ │ │ │ └── Uninstall.SqlDataProvider │ │ │ │ ├── license.txt │ │ │ │ └── readme.md │ │ │ ├── DnnWebForms/ │ │ │ │ └── Skins/ │ │ │ │ ├── QuickEdit.ascx │ │ │ │ ├── QuickEdit.ascx.cs │ │ │ │ └── QuickEdit.ascx.designer.cs │ │ │ ├── Extensions/ │ │ │ │ ├── Imageflow/ │ │ │ │ │ ├── License.txt │ │ │ │ │ └── ReleaseNotes.txt │ │ │ │ └── ToSic_vCard/ │ │ │ │ └── vCard.ashx │ │ │ ├── GlobalUsings.cs │ │ │ ├── ImportExport/ │ │ │ │ ├── Instructions/ │ │ │ │ │ ├── 2sxc_App_ByUnknown_NameUnknown.dnn │ │ │ │ │ ├── App installation instructions.txt │ │ │ │ │ ├── License.txt │ │ │ │ │ ├── Online help to install this app.url │ │ │ │ │ └── ReleaseNotes.txt │ │ │ │ └── readme.md │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── StartUp/ │ │ │ │ ├── DnnDi.cs │ │ │ │ ├── StartupDnn.cs │ │ │ │ └── StartupDnn9.cs │ │ │ ├── ToSic.Sxc.Dnn.csproj │ │ │ ├── ToSic.Sxc.Dnn.csproj.DotSettings │ │ │ ├── Upgrade/ │ │ │ │ └── readme.md │ │ │ ├── View.ascx │ │ │ ├── View.ascx.Errors.cs │ │ │ ├── View.ascx.Logging.cs │ │ │ ├── View.ascx.Standalone.cs │ │ │ ├── View.ascx.cs │ │ │ ├── View.ascx.designer.cs │ │ │ ├── View.ascx.menu.cs │ │ │ ├── dist/ │ │ │ │ ├── CachedPageBase.cs │ │ │ │ ├── ng-edit/ │ │ │ │ │ ├── Default.aspx │ │ │ │ │ └── Default.aspx.cs │ │ │ │ └── quick-dialog/ │ │ │ │ ├── Default.aspx │ │ │ │ └── Default.aspx.cs │ │ │ ├── koi/ │ │ │ │ ├── License.txt │ │ │ │ └── ReleaseNotes.txt │ │ │ ├── razorblade/ │ │ │ │ ├── License.txt │ │ │ │ └── ReleaseNotes.txt │ │ │ ├── razorblade-old/ │ │ │ │ ├── License.txt │ │ │ │ └── ReleaseNotes.txt │ │ │ ├── web-Deploy.config │ │ │ └── web.config │ │ ├── ToSic.Sxc.Dnn.Core/ │ │ │ ├── Compatibility/ │ │ │ │ ├── Data.DynamicEntity.Toolbar/ │ │ │ │ │ └── OldDynamicEntityFeatures.cs │ │ │ │ ├── Eav/ │ │ │ │ │ └── ToSic.Eav.Data.MetadataFor.cs │ │ │ │ ├── Eav.Configuration/ │ │ │ │ │ ├── FeatureIds.cs │ │ │ │ │ ├── IFeaturesService.cs │ │ │ │ │ ├── ToSic.Eav.Configuration.Features.cs │ │ │ │ │ └── ToSic.Eav.Configuration.FeaturesService.Compatibility.cs │ │ │ │ ├── StartUpCompatibility.cs │ │ │ │ └── Sxc/ │ │ │ │ ├── OldDataToDictionaryWrapper.cs │ │ │ │ └── SxcHelper.cs │ │ │ ├── CompatibilityStopped/ │ │ │ │ ├── ToSic.Eav.Conversion.EntitiesToDictionary.cs │ │ │ │ ├── ToSic.Eav.Factory.cs │ │ │ │ ├── ToSic.SexyContent.ContentBlocks.Render.cs │ │ │ │ ├── ToSic.SexyContent.DataSources.DnnSqlDataSource.cs │ │ │ │ ├── ToSic.SexyContent.Engines.InstancePurposes.cs │ │ │ │ ├── ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource.cs │ │ │ │ ├── ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource.cs │ │ │ │ ├── ToSic.SexyContent.Environment.Dnn7.Factory.cs │ │ │ │ ├── ToSic.Sxc.Blocks.Render.cs │ │ │ │ ├── ToSic.Sxc.Conversion.DataToDictionary.cs │ │ │ │ ├── ToSic.Sxc.Dnn.Factory.cs │ │ │ │ ├── ToSic.Sxc.Services.ILogService.cs │ │ │ │ └── ToSic.Sxc.Services.LogService.cs │ │ │ ├── Custom.Dnn/ │ │ │ │ └── Code12.cs │ │ │ ├── Dnn/ │ │ │ │ ├── Adam/ │ │ │ │ │ ├── DnnAdam.cs │ │ │ │ │ └── DnnAdamFileSystem.cs │ │ │ │ ├── Cms/ │ │ │ │ │ ├── DnnModuleSettings.cs │ │ │ │ │ ├── DnnModuleUpdater.cs │ │ │ │ │ ├── DnnPagePublishing.cs │ │ │ │ │ ├── DnnPagePublishingSettings.cs │ │ │ │ │ └── DnnPagePublishing_ModuleSettings.cs │ │ │ │ ├── Code/ │ │ │ │ │ ├── DnnDynamicCodeRootTT.cs │ │ │ │ │ ├── DnnDynamicCodeService.cs │ │ │ │ │ ├── DnnExecutionContext.cs │ │ │ │ │ └── IHasDnn.cs │ │ │ │ ├── Compile/ │ │ │ │ │ ├── AppCodeCompilerNetFull.cs │ │ │ │ │ ├── AssemblyExtensions.cs │ │ │ │ │ ├── DnnRoslynConstants.cs │ │ │ │ │ ├── HostingEnvironmentWrapper.cs │ │ │ │ │ ├── IHostingEnvironmentWrapper.cs │ │ │ │ │ ├── IReferencedAssembliesProvider.cs │ │ │ │ │ ├── IRoslynBuildManager.cs │ │ │ │ │ ├── ReferencedAssembliesProvider.cs │ │ │ │ │ ├── Sys/ │ │ │ │ │ │ ├── AppJsonExtensions.cs │ │ │ │ │ │ └── CodeCompilerNetFull.cs │ │ │ │ │ └── SysFeatureHelperRoslynCompiler.cs │ │ │ │ ├── Context/ │ │ │ │ │ ├── DnnContext.cs │ │ │ │ │ ├── DnnISiteExtensions.cs │ │ │ │ │ ├── DnnModule.cs │ │ │ │ │ ├── DnnPage.cs │ │ │ │ │ ├── DnnSite.cs │ │ │ │ │ └── DnnUser.cs │ │ │ │ ├── DataSources/ │ │ │ │ │ ├── DataProviders/ │ │ │ │ │ │ ├── DnnPagesDsProvider.cs │ │ │ │ │ │ ├── DnnRolesDsProvider.cs │ │ │ │ │ │ ├── DnnSitesDsProvider.cs │ │ │ │ │ │ ├── DnnStartUpDataSources.cs │ │ │ │ │ │ └── DnnUsersProvider.cs │ │ │ │ │ ├── DnnSql.cs │ │ │ │ │ ├── DnnSqlPlatformInfo.cs │ │ │ │ │ └── DnnUserProfileDataRaw.cs │ │ │ │ ├── DnnBusinessController.cs │ │ │ │ ├── DnnConstants.cs │ │ │ │ ├── DnnEnvironmentLogger.cs │ │ │ │ ├── DnnModuleAndBlockBuilder.cs │ │ │ │ ├── DnnStaticDi.cs │ │ │ │ ├── DnnSxcSettings.cs │ │ │ │ ├── DynamicCode.cs │ │ │ │ ├── Features/ │ │ │ │ │ ├── DnnBuiltInFeatures.cs │ │ │ │ │ ├── DnnBuiltInFeatures_CorePlus.cs │ │ │ │ │ ├── DnnRequirements.cs │ │ │ │ │ ├── SysFeatureDetectorBlazor.cs │ │ │ │ │ ├── SysFeatureDetectorCSharpInDnn.cs │ │ │ │ │ └── SysFeatureDnn.cs │ │ │ │ ├── ImportExport/ │ │ │ │ │ ├── DnnImportExportEnvironment.cs │ │ │ │ │ └── DnnXmlExporter.cs │ │ │ │ ├── Install/ │ │ │ │ │ ├── DnnEnvironmentInstaller.cs │ │ │ │ │ ├── DnnEnvironmentInstaller_IsRunning.cs │ │ │ │ │ ├── DnnEnvironmentInstaller_Manual.cs │ │ │ │ │ ├── DnnEnvironmentInstaller_UpgradeModule.cs │ │ │ │ │ ├── DnnFileLock.cs │ │ │ │ │ ├── DnnInstallLogger.cs │ │ │ │ │ ├── DnnInstallLoggerForVersion.cs │ │ │ │ │ ├── DnnPlatformAppInstaller.cs │ │ │ │ │ ├── DnnReadyCheckTurbo.cs │ │ │ │ │ └── Helpers.cs │ │ │ │ ├── LookUp/ │ │ │ │ │ ├── DnnLookUpEngineResolver.cs │ │ │ │ │ ├── DocsPlaceholder.cs │ │ │ │ │ ├── LookUpInDnnPropertyAccess.cs │ │ │ │ │ └── TokenReplaceDnn.cs │ │ │ │ ├── Pages/ │ │ │ │ │ ├── DnnPages.cs │ │ │ │ │ └── ModuleWithContent.cs │ │ │ │ ├── Run/ │ │ │ │ │ ├── DnnEnvironmentPermission.cs │ │ │ │ │ ├── DnnLogging.cs │ │ │ │ │ ├── DnnPlatformContext.cs │ │ │ │ │ ├── DnnSecurity.cs │ │ │ │ │ ├── DnnValueConverter.cs │ │ │ │ │ ├── DnnZoneMapper.cs │ │ │ │ │ └── IDnnContext.cs │ │ │ │ ├── Search/ │ │ │ │ │ ├── SearchController.cs │ │ │ │ │ ├── SearchIndexException.cs │ │ │ │ │ ├── SearchItem.cs │ │ │ │ │ └── readme.md │ │ │ │ ├── Services/ │ │ │ │ │ ├── DnnLinkService.cs │ │ │ │ │ ├── DnnLogService.cs │ │ │ │ │ ├── DnnMailService.cs │ │ │ │ │ ├── DnnPageChanges.cs │ │ │ │ │ └── DnnRenderService.cs │ │ │ │ ├── Startup/ │ │ │ │ │ ├── DnnBootFeaturesRegistration.cs │ │ │ │ │ └── StartUpDnnCore.cs │ │ │ │ └── Web/ │ │ │ │ ├── DnnBlockResourceExtractor.cs │ │ │ │ ├── DnnClientResources.cs │ │ │ │ ├── DnnHttp.cs │ │ │ │ ├── DnnJsApiHeader.cs │ │ │ │ └── DnnJsApiService.cs │ │ │ ├── Dnn940/ │ │ │ │ ├── RegisterWebApiActivator.cs │ │ │ │ ├── WebApiHttpControllerActivator.cs │ │ │ │ └── readme.md │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── InternalsVisibleTo.cs │ │ │ ├── ToSic.Sxc.Dnn.Core.csproj │ │ │ ├── ToSic.Sxc.Dnn.Core.csproj.DotSettings │ │ │ ├── ToSic.Sxc.Dnn.csproj.DotSettings │ │ │ └── ToSic.Sxc.Services/ │ │ │ └── DnnExtensions.cs │ │ ├── ToSic.Sxc.Dnn.Razor/ │ │ │ ├── Compatibility/ │ │ │ │ ├── DesignTimeCompat/ │ │ │ │ │ ├── MetadataUpdateAttributes.Compat.cs │ │ │ │ │ └── RazorComponentBase.DesignTimeCompat.cs │ │ │ │ ├── Dnn8Bugs.cs │ │ │ │ ├── RazorPermissions/ │ │ │ │ │ └── RazorPermissions.cs │ │ │ │ ├── ToSic.Eav.Run.IContainer.Obsolete.cs │ │ │ │ └── ToSic.SexyContent/ │ │ │ │ ├── SexyContentWebPage.cs │ │ │ │ └── SexyContentWebPageOfT.cs │ │ │ ├── Custom/ │ │ │ │ ├── Dnn/ │ │ │ │ │ └── Razor12.cs │ │ │ │ ├── Hybrid/ │ │ │ │ │ ├── Razor12.cs │ │ │ │ │ ├── Razor12_DynamicModel.cs │ │ │ │ │ ├── Razor12_Obsolete.cs │ │ │ │ │ ├── Razor14.cs │ │ │ │ │ ├── Razor14_AppSetRes.cs │ │ │ │ │ ├── Razor14_AsConversions.cs │ │ │ │ │ ├── Razor14_DynamicModel.cs │ │ │ │ │ ├── RazorTyped.cs │ │ │ │ │ └── RazorTyped_TModel.cs │ │ │ │ └── readme.md │ │ │ ├── Dnn/ │ │ │ │ ├── IDnnRazor11.cs │ │ │ │ ├── IDnnRazorCompatibility.cs │ │ │ │ ├── Integration/ │ │ │ │ │ └── StartUpDnnRazor.cs │ │ │ │ ├── Razor/ │ │ │ │ │ ├── DnnRazorEngine.cs │ │ │ │ │ ├── DnnRazorHelper.cs │ │ │ │ │ ├── HtmlHelper.cs │ │ │ │ │ ├── HtmlHelperErrorHelper.cs │ │ │ │ │ ├── HtmlHelperTimeKeeper.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── AssemblyDiskCacheService.cs │ │ │ │ │ ├── AssemblyUtilities.cs │ │ │ │ │ ├── CSharpCompilerService.cs │ │ │ │ │ ├── CacheKey.cs │ │ │ │ │ ├── CacheKeyPathUtils.cs │ │ │ │ │ ├── DnnRazorCompiler.cs │ │ │ │ │ ├── IAssemblyDiskCacheService.cs │ │ │ │ │ ├── ICanUseRoslynCompiler.cs │ │ │ │ │ ├── RazorBuildTempResult.cs │ │ │ │ │ ├── RazorCompilerService.cs │ │ │ │ │ ├── RoslynBuildManager.cs │ │ │ │ │ ├── RoslynCacheFallbackHandler.cs │ │ │ │ │ ├── RoslynCompilationRunner.cs │ │ │ │ │ └── TemplateCacheService.cs │ │ │ │ ├── RazorCodeManager.cs │ │ │ │ ├── RazorComponent.cs │ │ │ │ ├── RazorComponentCode.cs │ │ │ │ ├── RazorComponent_Code.cs │ │ │ │ └── Web/ │ │ │ │ └── IHtmlHelper.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── ToSic.Sxc.Dnn.Razor.csproj │ │ │ ├── ToSic.Sxc.Dnn.Razor.csproj.DotSettings │ │ │ └── Web/ │ │ │ └── RazorComponentBase.cs │ │ ├── ToSic.Sxc.Dnn.SystemTests/ │ │ │ ├── CacheKeyTestAccessors.cs │ │ │ ├── CacheKeyTests.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── RazorDiskCacheTests.cs │ │ │ ├── ToSic.Eav.Configuration.Features-Compatibility/ │ │ │ │ ├── FeatureTestsBase.cs │ │ │ │ ├── FeaturesStaticTests.cs │ │ │ │ ├── IFeaturesTests.cs │ │ │ │ └── Startup.cs │ │ │ ├── ToSic.Sxc.Dnn.SystemTests.csproj │ │ │ └── VerifyTestsRun.cs │ │ └── ToSic.Sxc.Dnn.WebApi/ │ │ ├── Custom/ │ │ │ ├── Dnn/ │ │ │ │ └── Api12.cs │ │ │ ├── Hybrid/ │ │ │ │ ├── Api12.cs │ │ │ │ ├── Api12_Obsolete.cs │ │ │ │ ├── Api14.cs │ │ │ │ ├── Api14_Obsolete.cs │ │ │ │ └── ApiTyped.cs │ │ │ └── readme.md │ │ ├── Dnn/ │ │ │ ├── ApiController.cs │ │ │ ├── Backend/ │ │ │ │ ├── Adam/ │ │ │ │ │ ├── AdamController.cs │ │ │ │ │ └── DnnAdamSecurityChecks.cs │ │ │ │ ├── Admin/ │ │ │ │ │ ├── ApiExplorerController.cs │ │ │ │ │ ├── AppController.cs │ │ │ │ │ ├── AppExtensionsController.cs │ │ │ │ │ ├── AppFilesController.cs │ │ │ │ │ ├── AppInternalsController.cs │ │ │ │ │ ├── AppPartsController.cs │ │ │ │ │ ├── CodeController.cs │ │ │ │ │ ├── DataController.cs │ │ │ │ │ ├── DialogController.cs │ │ │ │ │ ├── DnnApiInspector.cs │ │ │ │ │ ├── EntityController.cs │ │ │ │ │ ├── FeatureController.cs │ │ │ │ │ ├── FieldController.cs │ │ │ │ │ ├── MetadataController.cs │ │ │ │ │ ├── QueryController.cs │ │ │ │ │ ├── TypeController.cs │ │ │ │ │ ├── ViewController.cs │ │ │ │ │ └── ZoneController.cs │ │ │ │ ├── App/ │ │ │ │ │ ├── AppDataController.cs │ │ │ │ │ ├── AppQueryController.cs │ │ │ │ │ └── CacheController.cs │ │ │ │ ├── Cms/ │ │ │ │ │ ├── BlockController.cs │ │ │ │ │ ├── ContentGroupController.cs │ │ │ │ │ ├── EditController.cs │ │ │ │ │ ├── HistoryController.cs │ │ │ │ │ └── ListController.cs │ │ │ │ ├── Context/ │ │ │ │ │ ├── DnnContextDtoExtensions.cs │ │ │ │ │ └── DnnUiContextBuilder.cs │ │ │ │ ├── Module/ │ │ │ │ │ └── ModuleController.cs │ │ │ │ └── Sys/ │ │ │ │ ├── InsightsController.cs │ │ │ │ ├── InstallController.cs │ │ │ │ ├── LicenseController.cs │ │ │ │ └── LogController.cs │ │ │ ├── Integration/ │ │ │ │ ├── DnnAppFolderUtilities.cs │ │ │ │ ├── DnnHttpErrors.cs │ │ │ │ ├── DnnWebApiLogging.cs │ │ │ │ ├── GetDnnBlock.cs │ │ │ │ └── StartUpDnnWebApi.cs │ │ │ └── WebApi/ │ │ │ └── Sys/ │ │ │ ├── Compatibility/ │ │ │ │ ├── ApiTempShimmed.cs │ │ │ │ ├── INetCoreCompatibility.cs │ │ │ │ ├── WebApiCoreShim.cs │ │ │ │ ├── WebApiCoreShim_File.cs │ │ │ │ └── WebApiCoreShim_Responses.cs │ │ │ ├── ControllerBase/ │ │ │ │ ├── ApiControllerServices.cs │ │ │ │ ├── DnnSxcControllerBase.cs │ │ │ │ ├── DnnSxcControllerRoot.cs │ │ │ │ ├── DnnSxcCustomControllerBase.cs │ │ │ │ ├── DnnWebApiHelper.cs │ │ │ │ └── DynamicApiCompileCodeHelpers.cs │ │ │ ├── HttpJson/ │ │ │ │ ├── ConfigureJsonOnlyResponseAttribute.cs │ │ │ │ ├── DnnJsonFormattersDebug.cs │ │ │ │ ├── DnnJsonFormattersManager.cs │ │ │ │ ├── GlobalDebugParser.cs │ │ │ │ ├── JsonFormatterCasingHelpersForDnn.cs │ │ │ │ ├── JsonFormatters.cs │ │ │ │ ├── PerRequestConfigurationHelper.cs │ │ │ │ ├── System.Text.Json.Formatter.cs │ │ │ │ ├── TypeReflectionExtensions.cs │ │ │ │ └── UseOldNewtonsoftForHttpJsonAttribute.cs │ │ │ ├── Logging/ │ │ │ │ ├── DnnLogExceptions.cs │ │ │ │ └── DnnLogWebApi.cs │ │ │ ├── Providers/ │ │ │ │ └── ModifiedTabAndModuleInfoProvider.cs │ │ │ └── Routing/ │ │ │ ├── AppApiControllerSelector.cs │ │ │ ├── AppApiControllerSelectorService.cs │ │ │ ├── AppApiControllerSelectorService_Cache.cs │ │ │ ├── HttpControllerDescriptorWithPaths.cs │ │ │ ├── RouteMapper.cs │ │ │ └── RouteParts.cs │ │ ├── GlobalUsings.cs │ │ ├── Obsolete/ │ │ │ └── SexyContent/ │ │ │ └── WebApi/ │ │ │ ├── SxcApiController.cs │ │ │ └── SxcApiController_NotImplemented.cs │ │ ├── ToSic.Sxc.Dnn.WebApi.csproj │ │ └── ToSic.Sxc.Dnn.WebApi.csproj.DotSettings │ ├── Integration/ │ │ ├── BasicEav01/ │ │ │ ├── .gitignore │ │ │ ├── BasicEav01.csproj │ │ │ ├── Context/ │ │ │ │ └── IntUser.cs │ │ │ ├── Controllers/ │ │ │ │ └── InsightsController.cs │ │ │ ├── IntegrationConstants.cs │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ ├── _Layout.cshtml │ │ │ │ │ └── _ValidationScriptsPartial.cshtml │ │ │ │ ├── ShowEavData.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── Startup.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ └── SxcEdit01/ │ │ ├── .gitignore │ │ ├── Context/ │ │ │ ├── IntSite.cs │ │ │ └── IntUser.cs │ │ ├── Controllers/ │ │ │ ├── AdamController.cs │ │ │ ├── DialogController.cs │ │ │ ├── EditController.cs │ │ │ ├── HistoryController.cs │ │ │ ├── InsightsController.cs │ │ │ ├── IntControllerBase.cs │ │ │ └── PongController.cs │ │ ├── GlobalUsings.cs │ │ ├── IntegrationConstants.cs │ │ ├── Pages/ │ │ │ ├── Edit.cshtml │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ ├── Index.cshtml │ │ │ ├── Shared/ │ │ │ │ ├── _Layout.cshtml │ │ │ │ └── _ValidationScriptsPartial.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── StartupEavAndSxc.cs │ │ ├── SxcEdit01.csproj │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot/ │ │ └── css/ │ │ └── site.css │ ├── Mvc/ │ │ ├── .gitignore │ │ ├── ToSic.Sxc.Mvc/ │ │ │ ├── Dev/ │ │ │ │ ├── InstanceId.cs │ │ │ │ └── TestIds.cs │ │ │ ├── Factory.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Run/ │ │ │ │ ├── MvcFileSystem.cs │ │ │ │ ├── MvcGlobalFolderRepository.cs │ │ │ │ ├── MvcModule.cs │ │ │ │ ├── MvcPermissionCheck.cs │ │ │ │ ├── MvcSite.cs │ │ │ │ ├── MvcUser.cs │ │ │ │ └── MvcZoneMapper.cs │ │ │ ├── StartUpMvc.cs │ │ │ ├── StartupNotImplemented.cs │ │ │ ├── SxcMvc.cs │ │ │ ├── ToSic.Sxc.Mvc.csproj │ │ │ ├── Web/ │ │ │ │ ├── MvcConstants.cs │ │ │ │ └── MvcPageProperties.cs │ │ │ └── WebApi/ │ │ │ ├── Adam/ │ │ │ │ └── AdamController.cs │ │ │ ├── App/ │ │ │ │ ├── AppDataController.cs │ │ │ │ └── AppQueryController.cs │ │ │ ├── Cms/ │ │ │ │ └── EditController.cs │ │ │ ├── Context/ │ │ │ │ └── MvcContextBuilder.cs │ │ │ ├── SxcStatefullControllerBase.cs │ │ │ ├── SxcStatelessControllerBase.cs │ │ │ ├── System/ │ │ │ │ └── InsightsController.cs │ │ │ └── WebApiConstants.cs │ │ └── Website/ │ │ ├── Exp/ │ │ │ ├── PageBaseLoadingBlogOnly.cs │ │ │ ├── PageBaseLoadingBlogOnly_Block.cs │ │ │ ├── PageBaseLoadingBlogOnly_CreateInstance.cs │ │ │ ├── PageBaseLoadingBlogOnly_IDynamicCode.cs │ │ │ └── SxcTestPageViewParams.cs │ │ ├── Pages/ │ │ │ ├── Components/ │ │ │ │ └── First.cshtml │ │ │ ├── Engine/ │ │ │ │ ├── Blog.cshtml │ │ │ │ ├── Blog.cshtml.cs │ │ │ │ ├── TokenApp.cshtml │ │ │ │ └── TokenApp.cshtml.cs │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ ├── Exp/ │ │ │ │ ├── Eav/ │ │ │ │ │ ├── EavCore.cshtml │ │ │ │ │ ├── EavCore.cshtml.cs │ │ │ │ │ ├── EavDi.cshtml │ │ │ │ │ └── EavDi.cshtml.cs │ │ │ │ ├── PreconfiguredBase/ │ │ │ │ │ ├── Blog.cshtml │ │ │ │ │ └── Blog.cshtml.cs │ │ │ │ ├── RenderPartial/ │ │ │ │ │ ├── Contact.cshtml │ │ │ │ │ ├── Contact.cshtml.cs │ │ │ │ │ ├── Render2.cshtml │ │ │ │ │ └── Render2.cshtml.cs │ │ │ │ ├── SpecialBase/ │ │ │ │ │ ├── CallWwwRunContent.cshtml │ │ │ │ │ ├── CallWwwRunContent.cshtml.cs │ │ │ │ │ ├── CallingPartialWithViewParamsBase.cshtml │ │ │ │ │ └── CallingPartialWithViewParamsBase.cshtml.cs │ │ │ │ └── UsePartials/ │ │ │ │ ├── CallPartialViewWithViewParams.cshtml │ │ │ │ ├── CallPartialViewWithViewParams.cshtml.cs │ │ │ │ └── Partial/ │ │ │ │ ├── Partial1.cshtml │ │ │ │ └── SxcRazorPageWithParamsInView.cshtml │ │ │ ├── Index.cshtml │ │ │ ├── Index.cshtml.cs │ │ │ ├── Shared/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── ComponentWithParams/ │ │ │ │ │ │ └── Default.cshtml │ │ │ │ │ ├── Second/ │ │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ │ └── Default.cshtml.cs │ │ │ │ │ └── Third/ │ │ │ │ │ └── Default.cshtml │ │ │ │ ├── RenderPartial/ │ │ │ │ │ └── _RenderPartialMail.cshtml │ │ │ │ ├── RenderPartial2/ │ │ │ │ │ └── _RenderPartial2.cshtml │ │ │ │ ├── _Layout.cshtml │ │ │ │ └── _ValidationScriptsPartial.cshtml │ │ │ ├── Standalone/ │ │ │ │ ├── Standalone.cshtml │ │ │ │ └── Standalone.cshtml.cs │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── RazorPartialToString/ │ │ │ ├── IRazorPartialToStringRenderer.cs │ │ │ └── RazorPartialToStringRenderer.cs │ │ ├── Startup.cs │ │ ├── StartupEavAndSxc.cs │ │ ├── Website.csproj │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot/ │ │ ├── 2sxc/ │ │ │ ├── Blog App/ │ │ │ │ ├── _1 Main blog view.cshtml │ │ │ │ ├── _List.cshtml │ │ │ │ └── _Post Details.cshtml │ │ │ ├── Content/ │ │ │ │ ├── Helpers.cs │ │ │ │ ├── RunContent.cshtml │ │ │ │ └── _InnerPart.cshtml │ │ │ ├── Tokens/ │ │ │ │ ├── Details.html │ │ │ │ └── List.html │ │ │ └── readme.md │ │ ├── css/ │ │ │ └── site.css │ │ ├── js/ │ │ │ └── site.js │ │ └── lib/ │ │ ├── bootstrap/ │ │ │ ├── LICENSE │ │ │ └── dist/ │ │ │ ├── css/ │ │ │ │ ├── bootstrap-grid.css │ │ │ │ ├── bootstrap-reboot.css │ │ │ │ └── bootstrap.css │ │ │ └── js/ │ │ │ ├── bootstrap.bundle.js │ │ │ └── bootstrap.js │ │ ├── jquery/ │ │ │ ├── LICENSE.txt │ │ │ └── dist/ │ │ │ └── jquery.js │ │ ├── jquery-validation/ │ │ │ ├── LICENSE.md │ │ │ └── dist/ │ │ │ ├── additional-methods.js │ │ │ └── jquery.validate.js │ │ └── jquery-validation-unobtrusive/ │ │ ├── LICENSE.txt │ │ └── jquery.validate.unobtrusive.js │ ├── Oqtane/ │ │ ├── .gitignore │ │ ├── ToSic.Sxc.Oqt.Client/ │ │ │ ├── App/ │ │ │ │ ├── Index.razor │ │ │ │ ├── Index.razor.cs │ │ │ │ ├── ModuleInfo.cs │ │ │ │ ├── ModuleProBase.razor.cs │ │ │ │ ├── Settings.razor │ │ │ │ └── Settings.razor.cs │ │ │ ├── ClientStartup.cs │ │ │ ├── Content/ │ │ │ │ ├── Index.razor │ │ │ │ ├── ModuleInfo.cs │ │ │ │ └── Settings.razor │ │ │ ├── GlobalUsings.cs │ │ │ ├── Helpers/ │ │ │ │ └── NavigationManagerExtensions.cs │ │ │ ├── Services/ │ │ │ │ ├── CacheBustingService.cs │ │ │ │ ├── NoOp/ │ │ │ │ │ ├── OqtPageChangesOnServerNoOpService.cs │ │ │ │ │ └── OqtPrerenderNoOpService.cs │ │ │ │ ├── OqtDebugStateService.cs │ │ │ │ ├── OqtPageChangeService.cs │ │ │ │ ├── OqtSxcRenderService.cs │ │ │ │ ├── OqtTurnOnService.cs │ │ │ │ ├── RenderInfoService.cs │ │ │ │ └── RenderSpecificLockManager.cs │ │ │ ├── SxcInterop.cs │ │ │ ├── ToSic.Sxc.Oqt.Client.csproj │ │ │ ├── ToSic.Sxc.Oqt.Client.csproj.DotSettings │ │ │ └── _Imports.razor │ │ ├── ToSic.Sxc.Oqt.Package/ │ │ │ ├── BuildScripts/ │ │ │ │ └── LoadBuildConfig.Targets │ │ │ ├── Properties/ │ │ │ │ └── PublishProfiles/ │ │ │ │ └── FolderProfile.pubxml │ │ │ ├── README.md │ │ │ ├── ToSic.Sxc.Oqt.Package.csproj │ │ │ ├── ToSic.Sxc.Oqtane.Install.nuspec │ │ │ ├── debug.cmd │ │ │ ├── package.cmd │ │ │ └── release.cmd │ │ ├── ToSic.Sxc.Oqt.Server/ │ │ │ ├── Adam/ │ │ │ │ ├── AdamFolderHelper.cs │ │ │ │ ├── Imageflow/ │ │ │ │ │ ├── BlobProviderFile.cs │ │ │ │ │ ├── ImageflowRewriteMiddleware.cs │ │ │ │ │ ├── OqtaneBlobService.cs │ │ │ │ │ ├── OqtaneBlobServiceExtension.cs │ │ │ │ │ └── PreregisterImageFlowMiddleware.cs │ │ │ │ ├── OqtAdam.cs │ │ │ │ ├── OqtAdamFileSystem.cs │ │ │ │ ├── OqtAdamItemDtoMaker.cs │ │ │ │ ├── OqtAdamPaths.cs │ │ │ │ └── OqtAssetsFileHelper.cs │ │ │ ├── Blocks/ │ │ │ │ ├── IOqtSxcViewBuilder.cs │ │ │ │ ├── OqtCodeApiService.cs │ │ │ │ ├── OqtDynamicCodeRoot_TT.cs │ │ │ │ ├── OqtGetBlock.cs │ │ │ │ ├── OqtModuleAndBlockBuilder.cs │ │ │ │ ├── OqtSxcViewBuilder.cs │ │ │ │ └── Output/ │ │ │ │ ├── OqtJsApiService.cs │ │ │ │ ├── OqtPageOutput.cs │ │ │ │ ├── OqtPageOutput_HeadChanges.cs │ │ │ │ ├── OqtPageOutput_MetaContext.cs │ │ │ │ ├── OqtPageOutput_PageProperties.cs │ │ │ │ └── OqtPageOutput_TemplateResources.cs │ │ │ ├── Cms/ │ │ │ │ ├── OqtPagePublishing.cs │ │ │ │ └── OqtPagePublishingGetSettings.cs │ │ │ ├── Code/ │ │ │ │ └── Sys/ │ │ │ │ ├── AppCodeCompilerNetCore.cs │ │ │ │ ├── CodeCompilerNetCore.cs │ │ │ │ ├── Compiler.cs │ │ │ │ ├── OqtRoslynConstants.cs │ │ │ │ └── SimpleUnloadableAssemblyLoadContext.cs │ │ │ ├── Configuration/ │ │ │ │ └── OqtGlobalConfiguration.cs │ │ │ ├── Context/ │ │ │ │ ├── IOqtTenantContext.cs │ │ │ │ ├── OqtContextOfBlockExtensions.cs │ │ │ │ ├── OqtCulture.cs │ │ │ │ ├── OqtModule.cs │ │ │ │ ├── OqtPage.cs │ │ │ │ ├── OqtPlatformContext.cs │ │ │ │ ├── OqtRuntimeKeyService.cs │ │ │ │ ├── OqtSite.cs │ │ │ │ ├── OqtTenantContext.cs │ │ │ │ ├── OqtTenantContextInfo.cs │ │ │ │ └── OqtUser.cs │ │ │ ├── Controllers/ │ │ │ │ ├── AppApi/ │ │ │ │ │ ├── AppApiActionContext.cs │ │ │ │ │ ├── AppApiActionDescriptorChangeProvider.cs │ │ │ │ │ ├── AppApiActionInvoker.cs │ │ │ │ │ ├── AppApiAuthorization.cs │ │ │ │ │ ├── AppApiCacheItem.cs │ │ │ │ │ ├── AppApiControllerManager.cs │ │ │ │ │ ├── AppApiDynamicRouteValueTransformer.cs │ │ │ │ │ ├── AppApiFileSystemWatcher.cs │ │ │ │ │ ├── AppApiMiddleware.cs │ │ │ │ │ └── AppApiPermissionHandler.cs │ │ │ │ ├── EditUiMiddleware.cs │ │ │ │ ├── OqtControllerBase.cs │ │ │ │ ├── OqtStatefulControllerBase.cs │ │ │ │ ├── OqtSxcRenderController.cs │ │ │ │ ├── OqtUiContextBuilder.cs │ │ │ │ └── PageResponseRewriteMiddleware.cs │ │ │ ├── Custom/ │ │ │ │ ├── Hybrid/ │ │ │ │ │ ├── Api12.cs │ │ │ │ │ ├── Api14.cs │ │ │ │ │ └── ApiTyped.cs │ │ │ │ ├── OqtWebApiShim.cs │ │ │ │ ├── Oqtane.Api12.cs │ │ │ │ └── Oqtane.Code12.cs │ │ │ ├── Data/ │ │ │ │ └── OqtValueConverter.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Installation/ │ │ │ │ ├── GlobalTypesCheck.cs │ │ │ │ ├── HotReloadEnabledCheck.cs │ │ │ │ ├── RefsInstalledCheck.cs │ │ │ │ └── SxcManager.cs │ │ │ ├── Integration/ │ │ │ │ ├── OqtFolderHelper.cs │ │ │ │ ├── OqtLogging.cs │ │ │ │ ├── OqtModuleHelper.cs │ │ │ │ ├── Polymorphism/ │ │ │ │ │ └── OqtKoiCssFrameworkDetector.cs │ │ │ │ ├── SettingsHelper.cs │ │ │ │ └── readme.md │ │ │ ├── LookUps/ │ │ │ │ ├── OqtModuleLookUp.cs │ │ │ │ ├── OqtPageLookUp.cs │ │ │ │ ├── OqtSiteLookUp.cs │ │ │ │ └── OqtUserLookUp.cs │ │ │ ├── Pages/ │ │ │ │ └── Pages.cs │ │ │ ├── Plumbing/ │ │ │ │ ├── AliasResolver.cs │ │ │ │ ├── CompilationReferencesProvider.cs │ │ │ │ ├── HttpBlazor.cs │ │ │ │ └── MyApplicationPartFactory.cs │ │ │ ├── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── PublishProfiles/ │ │ │ │ └── FolderProfile.pubxml │ │ │ ├── Run/ │ │ │ │ ├── Features/ │ │ │ │ │ ├── SysFeatureDetectorBlazor.cs │ │ │ │ │ └── SysFeatureDetectorCSharpInOqt.cs │ │ │ │ ├── OqtEnvironmentInstaller.cs │ │ │ │ ├── OqtEnvironmentPermission.cs │ │ │ │ ├── OqtImportExportEnvironment.cs │ │ │ │ ├── OqtLinkPaths.cs │ │ │ │ ├── OqtModuleUpdater.cs │ │ │ │ ├── OqtSecurity.cs │ │ │ │ ├── OqtServerPaths.cs │ │ │ │ ├── OqtXmlExporter.cs │ │ │ │ └── OqtZoneMapper.cs │ │ │ ├── Scripts/ │ │ │ │ ├── ToSic.Sxc.12.00.00.sql │ │ │ │ ├── ToSic.Sxc.12.05.00.sql │ │ │ │ ├── ToSic.Sxc.13.00.00.sql │ │ │ │ ├── ToSic.Sxc.13.01.00.sql │ │ │ │ ├── ToSic.Sxc.15.00.00.sql │ │ │ │ ├── ToSic.Sxc.16.07.01.sql │ │ │ │ ├── ToSic.Sxc.18.03.00.sql │ │ │ │ ├── ToSic.Sxc.19.00.00.sql │ │ │ │ ├── ToSic.Sxc.20.00.00.sql │ │ │ │ ├── ToSic.Sxc.20.00.05.sql │ │ │ │ ├── ToSic.Sxc.21.00.00.sql │ │ │ │ ├── ToSic.Sxc.Install.sql │ │ │ │ └── ToSic.Sxc.Uninstall.sql │ │ │ ├── Services/ │ │ │ │ ├── OqtDebugStateService.cs │ │ │ │ ├── OqtLinkService.cs │ │ │ │ ├── OqtLogService.cs │ │ │ │ ├── OqtMailService.cs │ │ │ │ ├── OqtPageChangesOnServerService.cs │ │ │ │ ├── OqtPrerenderService.cs │ │ │ │ ├── OqtSxcRenderService.cs │ │ │ │ ├── OqtTurnOnService.cs │ │ │ │ └── RenderInfoService.cs │ │ │ ├── StartUp/ │ │ │ │ ├── OqtRegisterServices.cs │ │ │ │ ├── OqtRegisterServices_App.cs │ │ │ │ ├── OqtRegisterServices_AppApi.cs │ │ │ │ ├── OqtRegisterServices_Context.cs │ │ │ │ ├── OqtRegisterServices_CoreAndPlumbing.cs │ │ │ │ ├── OqtRegisterServices_LookUps.cs │ │ │ │ ├── OqtRegisterServices_ModuleAndRazor.cs │ │ │ │ ├── OqtRegisterServices_OqtaneIntegration.cs │ │ │ │ ├── OqtRegisterServices_WebApi.cs │ │ │ │ ├── OqtStartup.cs │ │ │ │ └── OqtStartupHelper.cs │ │ │ ├── ToSic.Sxc.DataSources/ │ │ │ │ ├── OqtPagesDsProvider.cs │ │ │ │ ├── OqtRolesDsProvider.cs │ │ │ │ ├── OqtSitesDsProvider.cs │ │ │ │ ├── OqtSqlPlatformInfo.cs │ │ │ │ ├── OqtStartUpDataSources.cs │ │ │ │ └── OqtUsersProvider.cs │ │ │ ├── ToSic.Sxc.Oqt.Server.csproj │ │ │ ├── ToSic.Sxc.Oqt.Server.csproj.DotSettings │ │ │ ├── WebApi/ │ │ │ │ ├── Adam/ │ │ │ │ │ ├── AdamController.cs │ │ │ │ │ └── AppAssetsController.cs │ │ │ │ ├── Admin/ │ │ │ │ │ ├── ApiExplorerController.cs │ │ │ │ │ ├── AppController.cs │ │ │ │ │ ├── AppExtensionsController.cs │ │ │ │ │ ├── AppFilesController.cs │ │ │ │ │ ├── AppInternalsController.cs │ │ │ │ │ ├── AppPartsController.cs │ │ │ │ │ ├── CodeController.cs │ │ │ │ │ ├── DataController.cs │ │ │ │ │ ├── DialogController.cs │ │ │ │ │ ├── EntityController.cs │ │ │ │ │ ├── FeatureController.cs │ │ │ │ │ ├── FieldController.cs │ │ │ │ │ ├── MetadataController.cs │ │ │ │ │ ├── OqtApiInspector.cs │ │ │ │ │ ├── QueryController.cs │ │ │ │ │ ├── TypeController.cs │ │ │ │ │ ├── ViewController.cs │ │ │ │ │ └── ZoneController.cs │ │ │ │ ├── App/ │ │ │ │ │ ├── AppAssetsController.cs │ │ │ │ │ ├── AppDataController.cs │ │ │ │ │ ├── AppQueryController.cs │ │ │ │ │ ├── AppSharedController.cs │ │ │ │ │ └── CacheController.cs │ │ │ │ ├── AppAssetsControllerBase.cs │ │ │ │ ├── Cms/ │ │ │ │ │ ├── BlockController.cs │ │ │ │ │ ├── ContentGroupController.cs │ │ │ │ │ ├── EditController.cs │ │ │ │ │ ├── HistoryController.cs │ │ │ │ │ └── ListController.cs │ │ │ │ ├── OqtWebApiConstants.cs │ │ │ │ └── Sys/ │ │ │ │ ├── InsightsController.cs │ │ │ │ ├── InstallController.cs │ │ │ │ ├── LicenseController.cs │ │ │ │ └── LogController.cs │ │ │ └── wwwroot/ │ │ │ ├── Modules/ │ │ │ │ └── ToSic.Sxc.Oqtane/ │ │ │ │ ├── Module.css │ │ │ │ ├── Module.js │ │ │ │ └── NativeModule.js │ │ │ └── readme.md │ │ ├── ToSic.Sxc.Oqt.Server.Tests/ │ │ │ ├── Configuration/ │ │ │ │ └── OqtGlobalConfigurationTests.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Imageflow/ │ │ │ │ └── OqtaneBlobServiceTests.cs │ │ │ ├── Security/ │ │ │ │ └── Encryption/ │ │ │ │ └── AesCryptographyServiceTests.cs │ │ │ ├── StartUp/ │ │ │ │ └── OqtStartupHelperTests.cs │ │ │ └── ToSic.Sxc.Oqt.Server.Tests.csproj │ │ ├── ToSic.Sxc.Oqt.Shared/ │ │ │ ├── CspConstants.cs │ │ │ ├── Dev/ │ │ │ │ └── WipConstants.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Helpers/ │ │ │ │ ├── ErrorHelper.cs │ │ │ │ └── HtmlHelper.cs │ │ │ ├── Interfaces/ │ │ │ │ ├── IOqtDebugStateService.cs │ │ │ │ ├── IOqtHybridLog.cs │ │ │ │ ├── IOqtPageChangesOnServerService.cs │ │ │ │ ├── IOqtPrerenderService.cs │ │ │ │ ├── IOqtSxcRenderService.cs │ │ │ │ ├── IOqtTurnOnService.cs │ │ │ │ └── IRenderInfoService.cs │ │ │ ├── Models/ │ │ │ │ ├── EavSystemInfo.cs │ │ │ │ ├── HttpHeader.cs │ │ │ │ ├── OqtHeadChange.cs │ │ │ │ ├── OqtPagePropertyChanges.cs │ │ │ │ ├── OqtViewResultsDto.cs │ │ │ │ ├── RenderParameters.cs │ │ │ │ └── SxcResource.cs │ │ │ ├── ModuleInfoConstants.cs │ │ │ ├── OqtConstants.cs │ │ │ ├── Sys/ │ │ │ │ └── NoParamOrderOqtane.cs │ │ │ ├── ToSic.Sxc.Oqt.Shared.csproj │ │ │ ├── UrlHelpers.cs │ │ │ └── UrlParts.cs │ │ └── ToSic.Sxc.Oqt.Shared.Tests/ │ │ ├── GlobalUsings.cs │ │ ├── HtmlHelper/ │ │ │ ├── HtmlHelperScriptTests.cs │ │ │ ├── HtmlHelperTests.cs │ │ │ ├── MetaTagExtractorTests.cs │ │ │ └── MetaTagUpdaterTests.cs │ │ └── ToSic.Sxc.Oqt.Shared.Tests.csproj │ ├── Patches/ │ │ └── readme.md │ ├── Razor/ │ │ └── ToSic.Sxc.Razor/ │ │ ├── CompilationReferencesProvider.cs │ │ ├── Custom.Hybrid/ │ │ │ ├── OqtRazorBase.cs │ │ │ ├── Razor12.cs │ │ │ ├── Razor12_T.cs │ │ │ ├── Razor14.cs │ │ │ ├── RazorTyped.cs │ │ │ └── RazorTyped_TModel.cs │ │ ├── Custom.Oqtane/ │ │ │ ├── Razor12.cs │ │ │ └── Razor12_T.cs │ │ ├── DotNetOverrides/ │ │ │ ├── CSharpCompiler.cs │ │ │ ├── ChecksumValidator.cs │ │ │ ├── CompilationFailedException.cs │ │ │ ├── CompilationFailedExceptionFactory.cs │ │ │ ├── RazorReferenceManager.cs │ │ │ ├── RazorReferenceManagerOld.cs │ │ │ ├── RuntimeCompilationFileProvider.cs │ │ │ ├── RuntimeViewCompiler.cs │ │ │ ├── RuntimeViewCompilerProvider.cs │ │ │ └── ViewPath.cs │ │ ├── GlobalUsings.cs │ │ ├── HotBuildReferenceManager.cs │ │ ├── IRazorCompiler.cs │ │ ├── IRazorRenderer.cs │ │ ├── OqtRazorHelper.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── RazorCompiler.cs │ │ ├── RazorEngine.cs │ │ ├── RazorReferenceManagerEnhanced.cs │ │ ├── RazorRenderer.cs │ │ ├── StartupRazor.cs │ │ └── ToSic.Sxc.Razor.csproj │ ├── SharedImports/ │ │ ├── CsProj.Props/ │ │ │ ├── AllImportsForRealCode-NetCore.props │ │ │ ├── AllImportsForRealCode-NetFramework.props │ │ │ ├── AllImportsForRealCode-Nullable.props │ │ │ ├── AllImportsForTestCode-NetFramework.props │ │ │ ├── AllImportsForTestCode.props │ │ │ ├── ConfigurationsAndWarnings.props │ │ │ ├── CreateXDocsOnRelease.props │ │ │ ├── DefaultNamespace ToSic.Sxc.props │ │ │ ├── GenerateAssemblyDisable.props │ │ │ ├── IncludeCode/ │ │ │ │ └── Compiler Features and API Hiding.props │ │ │ ├── Nullable.props │ │ │ ├── Reference/ │ │ │ │ └── RazorBlade.props │ │ │ ├── TargetFrameworkAndCSharp-NetCore.props │ │ │ ├── TargetFrameworkAndCSharp-NetFramework.props │ │ │ ├── TargetFrameworkAndCSharp.props │ │ │ ├── Tests/ │ │ │ │ ├── xUnit Test Framework - Copy.props │ │ │ │ └── xUnit Test Framework.props │ │ │ └── xxx AllImportsForRealCode.props │ │ ├── Properties/ │ │ │ └── SxcSharedAssemblyInfo.cs │ │ ├── Shared Imports (never build this).csproj │ │ └── readme.md │ ├── Sxc/ │ │ ├── ToSic.Sxc.Adam/ │ │ │ ├── Adam/ │ │ │ │ ├── Assets/ │ │ │ │ │ └── Helper Excel to build list of all bad file extensions.xlsx │ │ │ │ ├── Obsolete/ │ │ │ │ │ └── AdamFile.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── AdamAssetId.cs │ │ │ │ │ ├── AdamExportListHelper.cs │ │ │ │ │ ├── File.cs │ │ │ │ │ ├── FileDynamic.cs │ │ │ │ │ ├── Folder.cs │ │ │ │ │ ├── FolderDynamic.cs │ │ │ │ │ └── FolderOfField.cs │ │ │ │ ├── Sys.FileSystem/ │ │ │ │ │ ├── AdamFileSystemBase.cs │ │ │ │ │ ├── AdamFileSystemHelpers.cs │ │ │ │ │ ├── AdamFileSystemString.cs │ │ │ │ │ ├── AdamFileSystemString_Files.cs │ │ │ │ │ ├── AdamFileSystemString_Folders.cs │ │ │ │ │ ├── AdamFileSystemString_ToAdam.cs │ │ │ │ │ └── IAdamFileSystem.cs │ │ │ │ ├── Sys.Manager/ │ │ │ │ │ ├── AdamContext.cs │ │ │ │ │ ├── AdamGenericHelper.cs │ │ │ │ │ └── AdamManager.cs │ │ │ │ ├── Sys.Paths/ │ │ │ │ │ ├── AdamConfiguration.cs │ │ │ │ │ ├── AdamPathsBase.cs │ │ │ │ │ ├── AdamPathsWwwroot.cs │ │ │ │ │ └── IAdamPaths.cs │ │ │ │ ├── Sys.Security/ │ │ │ │ │ ├── AdamSecurity.cs │ │ │ │ │ ├── AdamSecurityChecksBase.cs │ │ │ │ │ ├── AdamSecurityChecksBasic.cs │ │ │ │ │ └── IAdamSecurityCheckService.cs │ │ │ │ ├── Sys.Storage/ │ │ │ │ │ ├── AdamStorage.cs │ │ │ │ │ ├── AdamStorageOfField.cs │ │ │ │ │ └── AdamStorageOfSite.cs │ │ │ │ └── Sys.Work/ │ │ │ │ ├── AdamFolderFileSet.cs │ │ │ │ ├── AdamItemDtoMakerOptions.cs │ │ │ │ ├── AdamWorkBase.cs │ │ │ │ ├── AdamWorkDelete.cs │ │ │ │ ├── AdamWorkFolderCreate.cs │ │ │ │ ├── AdamWorkGet.cs │ │ │ │ ├── AdamWorkOptions.cs │ │ │ │ ├── AdamWorkRename.cs │ │ │ │ ├── AdamWorkUpload.cs │ │ │ │ ├── AdamWorkUpload_FieldFilters.cs │ │ │ │ └── IAdamWork.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcAdamAssemblyVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── AdamService.cs │ │ │ │ └── IAdamService.cs │ │ │ ├── StartupSxcAdam.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ ├── ICurrentContextService.cs │ │ │ │ └── ISxcAppCurrentContextService.cs │ │ │ └── ToSic.Sxc.Adam.csproj │ │ ├── ToSic.Sxc.Apps/ │ │ │ ├── Apps/ │ │ │ │ ├── App/ │ │ │ │ │ ├── App.cs │ │ │ │ │ ├── App_Obsolete17.cs │ │ │ │ │ ├── App_Query.cs │ │ │ │ │ ├── App_SettingsResources.cs │ │ │ │ │ └── readme.md │ │ │ │ ├── IApp.cs │ │ │ │ ├── IAppData.cs │ │ │ │ ├── IAppDataTyped.cs │ │ │ │ ├── IAppTyped.cs │ │ │ │ ├── IAppTyped_TSettings_TResources.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── Api01/ │ │ │ │ │ │ ├── SimpleDataEditService.cs │ │ │ │ │ │ ├── SimpleDataEditService_IsDraft.cs │ │ │ │ │ │ └── SimpleDataEditService_PermissionsAndPublishing.cs │ │ │ │ │ ├── AppBase/ │ │ │ │ │ │ ├── IAppWithInternal.cs │ │ │ │ │ │ ├── SxcAppBase.cs │ │ │ │ │ │ ├── SxcAppBase_Data.cs │ │ │ │ │ │ ├── SxcAppBase_Environment.cs │ │ │ │ │ │ └── SxcAppBase_MetadataAndPermissions.cs │ │ │ │ │ ├── AppData/ │ │ │ │ │ │ ├── AppDataWithCrud.cs │ │ │ │ │ │ └── Configuration/ │ │ │ │ │ │ ├── AppDataConfigProviderUnknown.cs │ │ │ │ │ │ ├── AppDataConfigSpecs.cs │ │ │ │ │ │ ├── AppDataConfiguration.cs │ │ │ │ │ │ ├── IAppDataConfigProvider.cs │ │ │ │ │ │ └── IAppDataConfiguration.cs │ │ │ │ │ ├── AppExtensionsInternal.cs │ │ │ │ │ ├── AppFolderInitializer.cs │ │ │ │ │ ├── AppIconHelpers.cs │ │ │ │ │ ├── AppPathExtensions.cs │ │ │ │ │ ├── Paths/ │ │ │ │ │ │ ├── GlobalPaths.cs │ │ │ │ │ │ └── PathTypes.cs │ │ │ │ │ └── Ui/ │ │ │ │ │ ├── AppUiInfo.cs │ │ │ │ │ ├── ContentTypeUiInfo.cs │ │ │ │ │ └── TemplateUiInfo.cs │ │ │ │ ├── Sys.AppTyped/ │ │ │ │ │ ├── AppDataTyped.cs │ │ │ │ │ ├── AppTyped.cs │ │ │ │ │ └── AppTyped_TSettings_TResources.cs │ │ │ │ ├── Sys.Assets/ │ │ │ │ │ ├── AppAssetFile.cs │ │ │ │ │ ├── AppAssetFolder.cs │ │ │ │ │ ├── AppAssetFolderMain.cs │ │ │ │ │ ├── AppAssetThumbnail.cs │ │ │ │ │ └── AppAssetsHelpers.cs │ │ │ │ └── Sys.Work/ │ │ │ │ ├── WorkApps.cs │ │ │ │ ├── WorkAppsRemove.cs │ │ │ │ ├── WorkViews.cs │ │ │ │ └── WorkViewsMod.cs │ │ │ ├── Blocks/ │ │ │ │ └── Sys.Views/ │ │ │ │ ├── IView.cs │ │ │ │ ├── View.cs │ │ │ │ ├── ViewConfiguration.cs │ │ │ │ ├── ViewConstants.cs │ │ │ │ ├── ViewExtensions.cs │ │ │ │ └── ViewParts.cs │ │ │ ├── Compatibility (disabled)/ │ │ │ │ ├── ToSic.SexyContent.Interfaces.IApp.cs │ │ │ │ └── ToSic.SexyContent.Interfaces.IAppData.cs │ │ │ ├── Data/ │ │ │ │ ├── ITypedQuery.cs │ │ │ │ └── Sys.Typed/ │ │ │ │ ├── DataSourceToTypedHelper.cs │ │ │ │ └── TypedQuery.cs │ │ │ ├── DataSources/ │ │ │ │ └── AppEditions.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── LookUp/ │ │ │ │ └── LookUpInAppProperty.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcAppsAssemblyVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── IDataService.cs │ │ │ │ └── Sys.DataService/ │ │ │ │ ├── DataSourceOptionsMs.cs │ │ │ │ └── GetQueryMs.cs │ │ │ ├── StartupSxcApps.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ └── ExecutionContextExtensions.cs │ │ │ ├── ToSic.Sxc.Apps.csproj │ │ │ └── ToSic.Sxc.Apps.csproj.DotSettings │ │ ├── ToSic.Sxc.Apps.Tests/ │ │ │ ├── Api.Api01/ │ │ │ │ └── SimpleDataControllerTests_IsDraft.cs │ │ │ ├── GlobalUsings.cs │ │ │ └── ToSic.Sxc.Apps.Tests.csproj │ │ ├── ToSic.Sxc.Blocks/ │ │ │ ├── Blocks/ │ │ │ │ ├── BlockBuildingConstants.cs │ │ │ │ ├── ModuleSettingNames.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── BlockConfiguration.cs │ │ │ │ │ ├── BlockFeaturesHelpers.cs │ │ │ │ │ ├── BlockGeneratorHelpers.cs │ │ │ │ │ ├── BlockInstanceConstants.cs │ │ │ │ │ ├── BlockOfEntity.cs │ │ │ │ │ ├── BlockOfModule.cs │ │ │ │ │ ├── BlockSpecs.cs │ │ │ │ │ ├── BlockViewLoader.cs │ │ │ │ │ ├── IBlock.cs │ │ │ │ │ ├── IDependentApp.cs │ │ │ │ │ ├── Problems/ │ │ │ │ │ │ └── ProblemReport.cs │ │ │ │ │ └── SpecsForLogHistory.cs │ │ │ │ ├── Sys.BlockBuilder/ │ │ │ │ │ ├── IModuleAndBlockBuilder.cs │ │ │ │ │ ├── ModuleAndBlockBuilder.cs │ │ │ │ │ └── ModuleAndBlockBuilderUnknown.cs │ │ │ │ ├── Sys.BlockEditor/ │ │ │ │ │ ├── BlockEditorBase.cs │ │ │ │ │ ├── BlockEditorBase_More.cs │ │ │ │ │ ├── BlockEditorBase_Title.cs │ │ │ │ │ ├── BlockEditorForEntity.cs │ │ │ │ │ ├── BlockEditorForModule.cs │ │ │ │ │ └── BlockEditorSelector.cs │ │ │ │ └── Sys.Work/ │ │ │ │ ├── WorkBlockViewsGet.cs │ │ │ │ ├── WorkBlocks.cs │ │ │ │ └── WorkBlocksMod.cs │ │ │ ├── Context.Sys/ │ │ │ │ ├── AppIdResolver.cs │ │ │ │ ├── ContextConstants.cs │ │ │ │ ├── ContextOfBlock.cs │ │ │ │ ├── ContextResolverBase.cs │ │ │ │ ├── IContextOfBlock.cs │ │ │ │ ├── ISxcCurrentContextService.cs │ │ │ │ ├── SxcContextResolver_AppBlock.cs │ │ │ │ └── SxcCurrentContextService.cs │ │ │ ├── DataSources/ │ │ │ │ ├── CmsBlock/ │ │ │ │ │ ├── CmsBlock.cs │ │ │ │ │ ├── CmsBlock_ConfigAndView.cs │ │ │ │ │ ├── CmsBlock_GetStream.cs │ │ │ │ │ ├── CmsBlock_InstanceBlock.cs │ │ │ │ │ ├── ContextData.cs │ │ │ │ │ └── ContextData_Obsolete.cs │ │ │ │ └── Sys/ │ │ │ │ └── BlockDataSourceFactory.cs │ │ │ ├── Engines/ │ │ │ │ └── RenderEngineResult.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Integration.Modules/ │ │ │ │ ├── BasicModuleUpdater.cs │ │ │ │ └── IPlatformModuleUpdater.cs │ │ │ ├── LookUp.Sys/ │ │ │ │ ├── LookUpCmsBlock.cs │ │ │ │ ├── LookUpEngineResolver.cs │ │ │ │ ├── LookUpEngineResolverBase.cs │ │ │ │ ├── SxcAppDataConfigProvider.cs │ │ │ │ └── SxcAppDataConfigSpecs.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcBlocksAssemblyVisibleTo.cs │ │ │ ├── StartupSxcBlocks.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ └── ExecutionContextExtensions.cs │ │ │ ├── Sys.Render/ │ │ │ │ ├── PageContext/ │ │ │ │ │ ├── HeadChange.cs │ │ │ │ │ ├── Helpers.cs │ │ │ │ │ ├── HttpHeader.cs │ │ │ │ │ ├── IChangeQueue.cs │ │ │ │ │ ├── IPageServiceShared.cs │ │ │ │ │ ├── PageChangeModes.cs │ │ │ │ │ ├── PageProperties.cs │ │ │ │ │ └── PagePropertyChange.cs │ │ │ │ └── PageFeatures/ │ │ │ │ ├── IPageFeature.cs │ │ │ │ ├── IPageFeatures.cs │ │ │ │ ├── PageFeature.cs │ │ │ │ ├── PageFeatureFromSettings.cs │ │ │ │ └── SxcPageFeatures.cs │ │ │ ├── ToSic.Sxc.Blocks.csproj │ │ │ ├── ToSic.Sxc.Blocks.csproj.DotSettings │ │ │ └── Web.Sys.ClientAssets/ │ │ │ └── ClientAsset.cs │ │ ├── ToSic.Sxc.Cms/ │ │ │ ├── Blocks.Sys/ │ │ │ │ ├── BlockIdentifier.cs │ │ │ │ └── IBlockIdentifier.cs │ │ │ ├── Cms/ │ │ │ │ ├── Assets/ │ │ │ │ │ ├── IFileModel.cs │ │ │ │ │ ├── IFolderModel.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── Archive/ │ │ │ │ │ │ ├── FileModelOfEntity.cs │ │ │ │ │ │ └── FolderModelOfEntity.cs │ │ │ │ │ ├── FileFolderBase.cs │ │ │ │ │ ├── FileModelOfEntity.cs │ │ │ │ │ ├── FileModelRaw.cs │ │ │ │ │ ├── FolderModelOfEntity.cs │ │ │ │ │ ├── FolderModelRaw.cs │ │ │ │ │ ├── IFileModelSync.cs │ │ │ │ │ └── IFolderModelSync.cs │ │ │ │ ├── Notes/ │ │ │ │ │ ├── INoteModel.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ └── NoteModelOfEntity.cs │ │ │ │ ├── Pages/ │ │ │ │ │ ├── IPageModel.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── PageModelOfEntity.cs │ │ │ │ │ └── PageModelRaw.cs │ │ │ │ ├── Publishing.Sys/ │ │ │ │ │ ├── BasicPagePublishing.cs │ │ │ │ │ ├── IPagePublishing.cs │ │ │ │ │ ├── IPagePublishingGetSettings.cs │ │ │ │ │ ├── NoPagePublishing.cs │ │ │ │ │ ├── PagePublishingGetSettingsBase.cs │ │ │ │ │ ├── PagePublishingGetSettingsForbidden.cs │ │ │ │ │ ├── PagePublishingGetSettingsOptional.cs │ │ │ │ │ ├── PagePublishingGetSettingsUnknown.cs │ │ │ │ │ ├── PagePublishingPriorities.cs │ │ │ │ │ ├── PagePublishingSettings.cs │ │ │ │ │ ├── PublishingMode.cs │ │ │ │ │ └── VersioningActionInfo.cs │ │ │ │ ├── SiteSettingNames.cs │ │ │ │ ├── Sites/ │ │ │ │ │ ├── ISiteModel.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── SiteModel.cs │ │ │ │ │ ├── SiteModelOfEntity.cs │ │ │ │ │ ├── SitesDataSourceProvider.cs │ │ │ │ │ └── SitesDataSourceProviderUnknown.cs │ │ │ │ └── Users/ │ │ │ │ ├── IUserModel.cs │ │ │ │ ├── IUserRoleModel.cs │ │ │ │ └── Sys/ │ │ │ │ ├── Archive/ │ │ │ │ │ ├── UserModelOfEntity.cs │ │ │ │ │ └── UserRoleModelOfEntity.cs │ │ │ │ ├── CmsUserElevationExtensions.cs │ │ │ │ ├── IUsersProvider.cs │ │ │ │ ├── SxcUserConstants.cs │ │ │ │ ├── UserConstants.cs │ │ │ │ ├── UserModel.cs │ │ │ │ ├── UserModelOfEntity.cs │ │ │ │ ├── UserRoleModel.cs │ │ │ │ ├── UserRoleModelOfEntity.cs │ │ │ │ ├── UserRolesProviderUnknown.cs │ │ │ │ ├── UsersGetSpecs.cs │ │ │ │ └── UsersProviderUnknown.cs │ │ │ ├── Context/ │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── ICmsBlock.cs │ │ │ │ │ ├── ICmsContext.cs │ │ │ │ │ ├── ICmsCulture.cs │ │ │ │ │ ├── ICmsModule.cs │ │ │ │ │ ├── ICmsPage.cs │ │ │ │ │ ├── ICmsPlatform.cs │ │ │ │ │ ├── ICmsSite.cs │ │ │ │ │ ├── ICmsUser.cs │ │ │ │ │ └── ICmsView.cs │ │ │ │ ├── Module/ │ │ │ │ │ └── IModule.cs │ │ │ │ ├── Page/ │ │ │ │ │ └── IPage.cs │ │ │ │ ├── Platform/ │ │ │ │ │ ├── IPlatform.cs │ │ │ │ │ └── PlatformType.cs │ │ │ │ └── Sys/ │ │ │ │ ├── Parameters.cs │ │ │ │ └── Parameters_Typed.cs │ │ │ ├── DataSources/ │ │ │ │ ├── AdamFiles.cs │ │ │ │ ├── AppAssets/ │ │ │ │ │ ├── AppAssets.cs │ │ │ │ │ └── AppAssetsGetSpecs.cs │ │ │ │ ├── Pages.cs │ │ │ │ ├── Sites.cs │ │ │ │ ├── Sys.AdamFiles/ │ │ │ │ │ ├── AdamDataSourceProvider.cs │ │ │ │ │ └── AdamItemDataRaw.cs │ │ │ │ ├── Sys.AppAssets/ │ │ │ │ │ └── AppAssetsDataSourceProvider.cs │ │ │ │ ├── Sys.Pages/ │ │ │ │ │ ├── PagesDataSourceProvider.cs │ │ │ │ │ └── PagesDataSourceProviderUnknown.cs │ │ │ │ ├── Sys.Sources/ │ │ │ │ │ └── EntityPicker.cs │ │ │ │ ├── Sys.Users/ │ │ │ │ │ ├── IUserRolesProvider.cs │ │ │ │ │ └── UsersGetSpecsParsed.cs │ │ │ │ ├── UserRoles.cs │ │ │ │ └── Users.cs │ │ │ ├── ExportImport.Sys/ │ │ │ │ └── SxcXmlExporter.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcCmsInternalsVisibleTo.cs │ │ │ ├── StartupSxcCms.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ └── ExecutionContextExtensions.cs │ │ │ ├── ToSic.Sxc.Cms.csproj │ │ │ └── ToSic.Sxc.Cms.csproj.DotSettings │ │ ├── ToSic.Sxc.Code/ │ │ │ ├── AppCode/ │ │ │ │ └── _Help.cs │ │ │ ├── Code/ │ │ │ │ ├── Customizer/ │ │ │ │ │ ├── Customizer.cs │ │ │ │ │ └── ICodeCustomizer.cs │ │ │ │ ├── DevTools/ │ │ │ │ │ ├── DevTools.cs │ │ │ │ │ └── IDevTools.cs │ │ │ │ ├── DynamicCode/ │ │ │ │ │ ├── IDynamicCode12.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── IDynamicCode.cs │ │ │ │ │ ├── IDynamicCode12Docs.cs │ │ │ │ │ └── IDynamicCodeDocs.cs │ │ │ │ ├── Logging/ │ │ │ │ │ ├── CodeLog.cs │ │ │ │ │ ├── ICodeLog.cs │ │ │ │ │ └── IHasCodeLog.cs │ │ │ │ ├── Razor/ │ │ │ │ │ ├── IRazorConfiguration.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ └── RazorConfiguration.cs │ │ │ │ ├── Sys/ │ │ │ │ │ └── ICreateInstance.cs │ │ │ │ ├── Sys.CodeApi/ │ │ │ │ │ ├── CodeAnyApiHelper.cs │ │ │ │ │ ├── CodeDynamicApiHelper.cs │ │ │ │ │ ├── CodeTypedApiHelper.cs │ │ │ │ │ ├── ExecutionContextExtensions.cs │ │ │ │ │ ├── ICodeAnyApiHelper.cs │ │ │ │ │ ├── ICodeDynamicApiHelper.cs │ │ │ │ │ └── ICodeTypedApiHelper.cs │ │ │ │ ├── Sys.CodeApiService/ │ │ │ │ │ ├── CasObsolete.cs │ │ │ │ │ ├── CodeCreateDataSourceSvc.cs │ │ │ │ │ ├── DynamicCodeStandalone.cs │ │ │ │ │ └── ExecutionContextFactory.cs │ │ │ │ ├── Sys.CodeErrorHelp/ │ │ │ │ │ ├── CodeChangeServiceExtensions.cs │ │ │ │ │ ├── CodeErrorHelpService.cs │ │ │ │ │ ├── CodeHelpBuilder.cs │ │ │ │ │ ├── DynamicCode16Warnings.cs │ │ │ │ │ ├── GenChangeOn.cs │ │ │ │ │ ├── GenNotExist.cs │ │ │ │ │ ├── HelpDbRazor.cs │ │ │ │ │ ├── HelpDbRazor_Compile.cs │ │ │ │ │ ├── HelpDbRazor_CompileV20.cs │ │ │ │ │ ├── HelpDbRazor_Dnn.cs │ │ │ │ │ ├── HelpDbRazor_Runtime.cs │ │ │ │ │ ├── HelpDbRazor_Typed.cs │ │ │ │ │ ├── HelpDbRazor_V12.cs │ │ │ │ │ ├── HelpDbRazor_V14.cs │ │ │ │ │ ├── HelpDbRazor_V20.cs │ │ │ │ │ └── RazorExceptions.cs │ │ │ │ ├── Sys.CodeRunHelpers/ │ │ │ │ │ ├── CodeHelperBase.cs │ │ │ │ │ ├── CodeHelperTypedData.cs │ │ │ │ │ ├── CodeHelperV00Base.cs │ │ │ │ │ └── CompileCodeHelperSpecs.cs │ │ │ │ ├── Sys.HotBuild/ │ │ │ │ │ └── HotBuildConstants.cs │ │ │ │ ├── Sys.SourceCode/ │ │ │ │ │ ├── CodeFileInfo.cs │ │ │ │ │ ├── CodeFileInfoExtensions.cs │ │ │ │ │ ├── CodeFileTypes.cs │ │ │ │ │ └── SourceAnalyzer.cs │ │ │ │ ├── TypedCode/ │ │ │ │ │ ├── ITypedApi.cs │ │ │ │ │ └── TypedApiStandalone.cs │ │ │ │ └── TypedRazorModel/ │ │ │ │ ├── ITypedRazorModel.cs │ │ │ │ ├── TypedConverter.cs │ │ │ │ └── TypedRazorModel.cs │ │ │ ├── Compatibility/ │ │ │ │ ├── Internal/ │ │ │ │ │ └── IDynamicCodeBeforeV10.cs │ │ │ │ └── RemoveInV10/ │ │ │ │ └── ToSic.SexyContent.Element.cs │ │ │ ├── Context/ │ │ │ │ ├── ICmsView_TSettings_TResources.cs │ │ │ │ ├── Sys.CmsContext/ │ │ │ │ │ ├── CmsBlock.cs │ │ │ │ │ ├── CmsContext.cs │ │ │ │ │ ├── CmsContextPartBase.cs │ │ │ │ │ ├── CmsContextPartHelpers.cs │ │ │ │ │ ├── CmsCulture.cs │ │ │ │ │ ├── CmsModule.cs │ │ │ │ │ ├── CmsPage.cs │ │ │ │ │ ├── CmsSite.cs │ │ │ │ │ ├── CmsUser.cs │ │ │ │ │ ├── CmsView.cs │ │ │ │ │ ├── CmsViewFolder.cs │ │ │ │ │ └── CmsView_TSettings_TResources.cs │ │ │ │ ├── Sys.Module/ │ │ │ │ │ ├── ModuleUnknown.cs │ │ │ │ │ └── Module_T.cs │ │ │ │ ├── Sys.Page/ │ │ │ │ │ ├── Page.cs │ │ │ │ │ └── PageUnknown.cs │ │ │ │ └── Sys.Platform/ │ │ │ │ ├── Platform.cs │ │ │ │ └── PlatformUnknown.cs │ │ │ ├── Data.Sys.CodeDataFactory/ │ │ │ │ ├── CodeDataFactory.cs │ │ │ │ ├── CodeDataFactory_Adam.cs │ │ │ │ ├── CodeDataFactory_AsCustom.cs │ │ │ │ ├── CodeDataFactory_AsTypedPure.cs │ │ │ │ ├── CodeDataFactory_Dynamic.cs │ │ │ │ ├── CodeDataFactory_Entity.cs │ │ │ │ ├── CodeDataFactory_Field.cs │ │ │ │ ├── CodeDataFactory_Metadata.cs │ │ │ │ ├── CodeDataFactory_Stack.cs │ │ │ │ ├── CodeDataFactory_TypedItem.cs │ │ │ │ └── ConvertItemSettings.cs │ │ │ ├── Engines.Sys.Token/ │ │ │ │ ├── LookUpForTokenTemplate.cs │ │ │ │ ├── LookUpForTokenTemplate_ListIndexes.cs │ │ │ │ ├── TokenEngine.cs │ │ │ │ └── readme.md │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcCodeInternalsVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── IDynamicCodeService.cs │ │ │ │ ├── ITypedApiService.cs │ │ │ │ ├── Sys.CodeApiServiceHelpers/ │ │ │ │ │ └── CodeApiServiceBase.cs │ │ │ │ ├── Sys.DynamicCodeService/ │ │ │ │ │ ├── DynamicCodeService.cs │ │ │ │ │ └── DynamicCodeService_Of.cs │ │ │ │ └── Sys.TypedApiService/ │ │ │ │ └── TypedApiService.cs │ │ │ ├── StartupSxcCode.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ ├── ExecutionContextExtensions.cs │ │ │ │ ├── ExecutionContextOptions.cs │ │ │ │ ├── ICompatibilityLevel.cs │ │ │ │ ├── IExCtxAttachApp.cs │ │ │ │ ├── IExecutionContextFactory.cs │ │ │ │ ├── IExecutionContext_TModel_TKit.cs │ │ │ │ └── Implementation/ │ │ │ │ ├── ExecutionContext.cs │ │ │ │ ├── ExecutionContextUnknown.cs │ │ │ │ ├── ExecutionContext_As.cs │ │ │ │ ├── ExecutionContext_Compiler.cs │ │ │ │ ├── ExecutionContext_Content.cs │ │ │ │ ├── ExecutionContext_DataSources.cs │ │ │ │ ├── ExecutionContext_Internal.cs │ │ │ │ ├── ExecutionContext_Kit.cs │ │ │ │ ├── ExecutionContext_SettingsResources.cs │ │ │ │ ├── ExecutionContext_TModel_TKit.cs │ │ │ │ └── ExecutionContext_TTUnknown.cs │ │ │ ├── ToSic.Sxc.Code.csproj │ │ │ └── ToSic.Sxc.Code.csproj.DotSettings │ │ ├── ToSic.Sxc.Code.Generate/ │ │ │ ├── Code.Generate/ │ │ │ │ ├── Data/ │ │ │ │ │ ├── CSharpCustomModelGenerator.cs │ │ │ │ │ ├── CSharpCustomModelsGenerator.cs │ │ │ │ │ ├── CSharpModelGeneratorBase.cs │ │ │ │ │ ├── CSharpModelsGeneratorBase.cs │ │ │ │ │ ├── CSharpTypedDataModelGenerator.cs │ │ │ │ │ ├── CSharpTypedDataModelsGenerator.cs │ │ │ │ │ ├── GeneratePropertyBase.cs │ │ │ │ │ ├── GeneratePropertyBool.cs │ │ │ │ │ ├── GeneratePropertyCustom.cs │ │ │ │ │ ├── GeneratePropertyDateTime.cs │ │ │ │ │ ├── GeneratePropertyEmpty.cs │ │ │ │ │ ├── GeneratePropertyEntity.cs │ │ │ │ │ ├── GeneratePropertyHyperlink.cs │ │ │ │ │ ├── GeneratePropertyNumber.cs │ │ │ │ │ ├── GeneratePropertyString.cs │ │ │ │ │ ├── ModelGeneratorConstants.cs │ │ │ │ │ └── PropertyGenerators.cs │ │ │ │ └── Sys/ │ │ │ │ ├── CSharp/ │ │ │ │ │ ├── CSharpCodeSpecs.cs │ │ │ │ │ ├── CSharpGeneratorBase.cs │ │ │ │ │ ├── CSharpGeneratorHelper.cs │ │ │ │ │ └── GeneratePropertyApp.cs │ │ │ │ ├── CSharpBaseClasses/ │ │ │ │ │ ├── BaseClassHelper.cs │ │ │ │ │ ├── CSharpServicesGenerator.cs │ │ │ │ │ ├── RazorViewsGenerator.cs │ │ │ │ │ └── WebApiGenerator.cs │ │ │ │ ├── CodeFragment.cs │ │ │ │ ├── CopilotContentTypeAutoGenerateService.cs │ │ │ │ ├── CopilotContentTypeDataProcessor.cs │ │ │ │ ├── FileGeneratorSpecs.cs │ │ │ │ ├── FileSaver.cs │ │ │ │ ├── GenerateConstants.cs │ │ │ │ ├── GeneratedDataModel.cs │ │ │ │ ├── GeneratedFile.cs │ │ │ │ ├── GeneratedFileSet.cs │ │ │ │ ├── IFileGenerator.cs │ │ │ │ ├── IFileGeneratorSpecs.cs │ │ │ │ ├── IGeneratedFile.cs │ │ │ │ ├── IGeneratedFileInfo.cs │ │ │ │ └── IGeneratedFileSet.cs │ │ │ ├── DataSources/ │ │ │ │ └── CodeGenerators.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── StartupSxcCodeGenerate.cs │ │ │ ├── ToSic.Sxc.Code.Generate.csproj │ │ │ └── ToSic.Sxc.Code.Generate.csproj.DotSettings │ │ ├── ToSic.Sxc.Code.HotBuild/ │ │ │ ├── Code.Sys.HotBuild/ │ │ │ │ ├── AppCodeCompiler.cs │ │ │ │ ├── AppCodeExtensions.cs │ │ │ │ ├── AppCodeLoader.cs │ │ │ │ ├── AssemblyAnalyzer.cs │ │ │ │ ├── AssemblyCacheManager.cs │ │ │ │ ├── AssemblyDiskCache.cs │ │ │ │ ├── AssemblyResolver.cs │ │ │ │ ├── DependenciesLoader.cs │ │ │ │ ├── ExtensionCompileReferenceService.cs │ │ │ │ ├── ImplicitUsings.cs │ │ │ │ ├── RoslynConstants.cs │ │ │ │ ├── SourceCodeHasher.cs │ │ │ │ └── Util.cs │ │ │ ├── Code.Sys.SourceCode/ │ │ │ │ ├── AssemblyResult.cs │ │ │ │ └── CodeCompiler.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInternalsVisibleTo.cs │ │ │ ├── StartupSxcCodeHotBuild.cs │ │ │ └── ToSic.Sxc.Code.HotBuild.csproj │ │ ├── ToSic.Sxc.Configuration.Tests/ │ │ │ ├── GlobalUsings.cs │ │ │ ├── ToSic.Sxc.Core.Configuration.Tests.csproj │ │ │ └── Web.Sys.Url/ │ │ │ └── NameValueCollectionSort.cs │ │ ├── ToSic.Sxc.Core/ │ │ │ ├── Cms.Settings/ │ │ │ │ ├── GoogleMaps.cs │ │ │ │ ├── InputFields/ │ │ │ │ │ └── StringWysiwyg.cs │ │ │ │ └── MapsCoordinates.cs │ │ │ ├── Cms.Sys/ │ │ │ │ └── CmsMetadata.cs │ │ │ ├── Code/ │ │ │ │ ├── Sys/ │ │ │ │ │ ├── CompatibilityLevels.cs │ │ │ │ │ ├── IGetCodePath.cs │ │ │ │ │ └── SourceCodeConstants.cs │ │ │ │ ├── Sys.Documentation/ │ │ │ │ │ └── DocsAttribute.cs │ │ │ │ └── Sys.HotBuild/ │ │ │ │ ├── HotBuildSpec.cs │ │ │ │ └── IClassCompiler.cs │ │ │ ├── Context/ │ │ │ │ └── IParameters.cs │ │ │ ├── Data/ │ │ │ │ ├── IHasKeys.cs │ │ │ │ ├── Sys.Json/ │ │ │ │ │ ├── DynamicJsonConverter.cs │ │ │ │ │ └── IHasJsonSource.cs │ │ │ │ └── Typed/ │ │ │ │ ├── ITyped.cs │ │ │ │ ├── ITyped_Html.cs │ │ │ │ └── ITyped_SharedGetGeneric.cs │ │ │ ├── Edit.Sys/ │ │ │ │ └── SxcEditSharedConstants.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── LookUp/ │ │ │ │ ├── DocsPlaceholder.cs │ │ │ │ └── Sys/ │ │ │ │ └── LookUpConstants.cs │ │ │ ├── Properties/ │ │ │ │ ├── GlobalSuppressions.cs │ │ │ │ └── SxcCoreNewAssemblyVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── Features/ │ │ │ │ │ └── IFeaturesService.cs │ │ │ │ ├── Json/ │ │ │ │ │ └── IJsonService.cs │ │ │ │ └── Page/ │ │ │ │ ├── IPageService.cs │ │ │ │ ├── IPageService_Features.cs │ │ │ │ ├── IPageService_Security.cs │ │ │ │ └── IPageService_TurnOn.cs │ │ │ ├── StartupSxcCore.cs │ │ │ ├── Sys/ │ │ │ │ └── SxcLogging.cs │ │ │ ├── Sys.Configuration/ │ │ │ │ ├── SxcBootFeaturesRegistrations.cs │ │ │ │ ├── SxcFeatures.cs │ │ │ │ ├── SxcFeatures_Beta.cs │ │ │ │ ├── SxcFeatures_Csp.cs │ │ │ │ ├── SxcFeatures_ImageService.cs │ │ │ │ ├── SxcFeatures_LightSpeed.cs │ │ │ │ ├── SxcFeatures_Performance.cs │ │ │ │ └── SxcLicenseRules.cs │ │ │ ├── Sys.DI/ │ │ │ │ ├── PageScopeAccessor.cs │ │ │ │ └── PageScopedService.cs │ │ │ ├── Sys.Integration/ │ │ │ │ ├── Installation/ │ │ │ │ │ ├── EnvironmentInstallerUnknown.cs │ │ │ │ │ └── IEnvironmentInstaller.cs │ │ │ │ ├── Paths/ │ │ │ │ │ ├── ILinkPaths.cs │ │ │ │ │ ├── LinkPaths.NetCore.cs │ │ │ │ │ ├── LinkPaths.NetFramework.cs │ │ │ │ │ ├── LinkPathsUnknown.cs │ │ │ │ │ └── ServerPaths.cs │ │ │ │ └── SxcImportExportEnvironmentBase.cs │ │ │ ├── Sys.Plumbing/ │ │ │ │ ├── ParseObject.Double.cs │ │ │ │ ├── ParseObject.Int.cs │ │ │ │ └── ParseObject.String.cs │ │ │ ├── ToSic.Sxc.Core.csproj │ │ │ ├── ToSic.Sxc.Core.csproj.DotSettings │ │ │ └── Web/ │ │ │ ├── Sys.Html/ │ │ │ │ ├── HtmlAttribute.cs │ │ │ │ ├── HybridHtmlString.cs │ │ │ │ └── HybridHtmlStringLog.cs │ │ │ ├── Sys.Http/ │ │ │ │ └── IHttp.cs │ │ │ ├── Sys.Parameters/ │ │ │ │ ├── OriginalParameters.cs │ │ │ │ └── UpperCaseStringKeyValuePair.cs │ │ │ ├── Sys.Url/ │ │ │ │ ├── NameObjectSet.cs │ │ │ │ ├── ObjectToUrl.cs │ │ │ │ ├── UrlHelpers.cs │ │ │ │ ├── UrlParts.cs │ │ │ │ ├── UrlValueCamelCase.cs │ │ │ │ ├── UrlValueFilterNames.cs │ │ │ │ ├── UrlValuePair.cs │ │ │ │ └── UrlValueProcess.cs │ │ │ └── Sys.WebResources/ │ │ │ └── WebResourceConstants.cs │ │ ├── ToSic.Sxc.Core.TestHelpers/ │ │ │ ├── Adam/ │ │ │ │ ├── MockSxcFile.cs │ │ │ │ └── MockSxcFolder.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Services.PageService/ │ │ │ │ └── MockPageService.cs │ │ │ └── ToSic.Sxc.Core.TestHelpers.csproj │ │ ├── ToSic.Sxc.Custom/ │ │ │ ├── Custom.Data/ │ │ │ │ ├── CustomItem.cs │ │ │ │ ├── CustomItem_Equatable.cs │ │ │ │ └── CustomModel.cs │ │ │ ├── Custom.DataSource/ │ │ │ │ ├── DataSource16.cs │ │ │ │ └── DataSources16_IDataSourceExplicit.cs │ │ │ ├── Custom.Hybrid/ │ │ │ │ ├── Code12.cs │ │ │ │ ├── Code14.cs │ │ │ │ └── CodeTyped.cs │ │ │ ├── Custom.Razor.Sys/ │ │ │ │ ├── IRazor.cs │ │ │ │ ├── IRazor12.cs │ │ │ │ └── IRazor14.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── StartupSxcCustom.cs │ │ │ ├── ToSic.Sxc.Code/ │ │ │ │ ├── Old/ │ │ │ │ │ ├── DynamicCode.cs │ │ │ │ │ └── DynamicCode12.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── CustomCodeBase.cs │ │ │ │ │ ├── IDynamicCode14.cs │ │ │ │ │ └── ITypedCode16.cs │ │ │ │ └── Sys.CodeRunHelpers/ │ │ │ │ ├── AppCodeGetNamedServiceHelper.cs │ │ │ │ ├── CodeHelperV14.cs │ │ │ │ ├── CodeHelperV16.cs │ │ │ │ ├── CompileCodeHelper.cs │ │ │ │ └── RazorHelperBase.cs │ │ │ ├── ToSic.Sxc.Custom.csproj │ │ │ ├── ToSic.Sxc.Custom.csproj.DotSettings │ │ │ ├── ToSic.Sxc.DataSources.Sys/ │ │ │ │ └── AppDataSourcesLoader.cs │ │ │ ├── ToSic.Sxc.Search/ │ │ │ │ ├── ICustomizeSearch.cs │ │ │ │ ├── ISearchItem.cs │ │ │ │ └── ToSic.SexyContent.Search.ISearchInfo.cs │ │ │ └── ToSic.Sxc.Services/ │ │ │ └── ServiceKitLight16.cs │ │ ├── ToSic.Sxc.Data/ │ │ │ ├── Adam/ │ │ │ │ ├── AssetTypes.cs │ │ │ │ ├── IAsset.cs │ │ │ │ ├── IFile.cs │ │ │ │ ├── IFolder.cs │ │ │ │ └── Sys/ │ │ │ │ └── AssetTypeNames.cs │ │ │ ├── Cms.Data/ │ │ │ │ └── GpsCoordinates.cs │ │ │ ├── Data/ │ │ │ │ ├── DynamicEntity (no namespace)/ │ │ │ │ │ ├── IDynamicEntity.cs │ │ │ │ │ ├── IDynamicEntity_SharedCms.cs │ │ │ │ │ ├── IDynamicEntity_SharedEntityProperties.cs │ │ │ │ │ └── IDynamicEntity_SharedGet.cs │ │ │ │ ├── ICanBeItem.cs │ │ │ │ ├── IDynamicStack.cs │ │ │ │ ├── IField.cs │ │ │ │ ├── IMetadataDynamic.cs │ │ │ │ ├── ISxcDynamicObject.cs │ │ │ │ ├── ITypedMetadata.cs │ │ │ │ ├── ITypedStack.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── ModelFromItem.cs │ │ │ │ │ ├── ModelFromItem_Equatable.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ └── DataModelHelpers.cs │ │ │ │ ├── Options/ │ │ │ │ │ ├── GetRelatedOptions.cs │ │ │ │ │ ├── ProcessDraft.cs │ │ │ │ │ └── ProcessNull.cs │ │ │ │ ├── Publishing (no namespace)/ │ │ │ │ │ ├── ILifecycle.cs │ │ │ │ │ ├── IPublishing.cs │ │ │ │ │ ├── Lifecycle.cs │ │ │ │ │ └── PublishingUnsupported.cs │ │ │ │ ├── Secret (no namespace)/ │ │ │ │ │ ├── ISecureData.cs │ │ │ │ │ └── SecureDataAuthorities.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── Decorators/ │ │ │ │ │ │ ├── CmsEditDecorator.cs │ │ │ │ │ │ ├── EntityInBlockDecorator.cs │ │ │ │ │ │ ├── EntityInListDecorator.cs │ │ │ │ │ │ └── IEntityExtensions.cs │ │ │ │ │ ├── Docs/ │ │ │ │ │ │ ├── DynamicEntityDocs.cs │ │ │ │ │ │ ├── IDynamicAnythingDocs.cs │ │ │ │ │ │ ├── ITypedRelationshipsDocs.cs │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── Dynamic/ │ │ │ │ │ │ ├── CodeDynHelper.cs │ │ │ │ │ │ ├── CodeItemHelper.cs │ │ │ │ │ │ ├── DynamicEntityListHelper.cs │ │ │ │ │ │ ├── DynamicFromDictionary.cs │ │ │ │ │ │ ├── GetAndConvertConverter.cs │ │ │ │ │ │ ├── GetAndConvertHelper.cs │ │ │ │ │ │ ├── LanguagePreprocessor.cs │ │ │ │ │ │ └── WrapObjectDynamic.cs │ │ │ │ │ ├── DynamicEntity/ │ │ │ │ │ │ ├── DynamicEntity.cs │ │ │ │ │ │ ├── DynamicEntity_Equality.cs │ │ │ │ │ │ ├── DynamicEntity_GetValues.cs │ │ │ │ │ │ ├── DynamicEntity_IListIDynamicEntity.cs │ │ │ │ │ │ ├── DynamicEntity_IListObject.cs │ │ │ │ │ │ ├── DynamicEntity_Obsolete.cs │ │ │ │ │ │ └── IOldDynamicEntityFeatures.cs │ │ │ │ │ ├── DynamicJacket/ │ │ │ │ │ │ ├── CodeJsonWrapper.cs │ │ │ │ │ │ ├── DynamicJacket.cs │ │ │ │ │ │ ├── DynamicJacketBase.cs │ │ │ │ │ │ ├── DynamicJacketBaseT.cs │ │ │ │ │ │ ├── DynamicJacketList.cs │ │ │ │ │ │ ├── PreWrapJsonArray.cs │ │ │ │ │ │ ├── PreWrapJsonBase.cs │ │ │ │ │ │ ├── PreWrapJsonDumperHelper.cs │ │ │ │ │ │ └── PreWrapJsonObject.cs │ │ │ │ │ ├── DynamicStack/ │ │ │ │ │ │ └── DynamicStack.cs │ │ │ │ │ ├── Factory/ │ │ │ │ │ │ ├── CodeDataServices.cs │ │ │ │ │ │ ├── ICodeDataFactory.cs │ │ │ │ │ │ ├── ICodeDataFactoryDeepWip.cs │ │ │ │ │ │ └── SubDataFactory.cs │ │ │ │ │ ├── Field/ │ │ │ │ │ │ ├── HasLink.cs │ │ │ │ │ │ ├── IFromField.cs │ │ │ │ │ │ └── IHasLink.cs │ │ │ │ │ ├── Fields/ │ │ │ │ │ │ ├── Field.cs │ │ │ │ │ │ └── FieldForDynamic.cs │ │ │ │ │ ├── InputTypes.cs │ │ │ │ │ ├── Metadata/ │ │ │ │ │ │ ├── Metadata.cs │ │ │ │ │ │ ├── MetadataDynamic.cs │ │ │ │ │ │ ├── Metadata_Typed.cs │ │ │ │ │ │ └── PropLookupMetadata.cs │ │ │ │ │ ├── PropLookupWithPathEntity.cs │ │ │ │ │ ├── Publishing/ │ │ │ │ │ │ └── Publishing.cs │ │ │ │ │ ├── Secret/ │ │ │ │ │ │ └── SecureData.cs │ │ │ │ │ ├── Stack/ │ │ │ │ │ │ └── PropLookupStack.cs │ │ │ │ │ ├── Typed/ │ │ │ │ │ │ ├── HasKeysHelper.cs │ │ │ │ │ │ ├── IValueOverrider.cs │ │ │ │ │ │ ├── ListTypedItems.cs │ │ │ │ │ │ ├── TryGetResult.cs │ │ │ │ │ │ ├── TypedHelpers.cs │ │ │ │ │ │ ├── TypedItemHelpers.cs │ │ │ │ │ │ ├── TypedItemOfEntity.cs │ │ │ │ │ │ ├── TypedItemOfEntityWithOverrides.cs │ │ │ │ │ │ ├── WrapObjectTyped.cs │ │ │ │ │ │ └── WrapObjectTypedItem.cs │ │ │ │ │ ├── TypedStack/ │ │ │ │ │ │ ├── TypedStack.cs │ │ │ │ │ │ └── TypedStack_Item.cs │ │ │ │ │ └── Wrappers/ │ │ │ │ │ ├── CodeDataPoCoWrapperService.cs │ │ │ │ │ ├── ICodeDataPoCoWrapperService.cs │ │ │ │ │ ├── IPreWrap.cs │ │ │ │ │ ├── JsonProcessingHelpers.cs │ │ │ │ │ ├── PreWrapBase.cs │ │ │ │ │ ├── PreWrapObject.cs │ │ │ │ │ ├── PreWrapObjectDumpHelper.cs │ │ │ │ │ ├── PreWrapObject_Debug.cs │ │ │ │ │ ├── WrapperConstants.cs │ │ │ │ │ └── WrapperSettings.cs │ │ │ │ └── TypedItem (no namespace)/ │ │ │ │ ├── ITypedItem.cs │ │ │ │ ├── ITypedItem_Adam.cs │ │ │ │ ├── ITypedItem_Relationships.cs │ │ │ │ ├── ITypedItem_SharedCms.cs │ │ │ │ └── ITypedItem_ShortEntityProperties.cs │ │ │ ├── Edit.Toolbar/ │ │ │ │ ├── Builder/ │ │ │ │ │ ├── IToolbarBuilder.cs │ │ │ │ │ ├── IToolbarBuilder_Buttons.cs │ │ │ │ │ ├── IToolbarBuilder_CommandsAdmin.cs │ │ │ │ │ ├── IToolbarBuilder_CommandsForLists.cs │ │ │ │ │ ├── IToolbarBuilder_CommandsItems.cs │ │ │ │ │ ├── IToolbarBuilder_CommandsView.cs │ │ │ │ │ ├── IToolbarBuilder_Context.cs │ │ │ │ │ ├── IToolbarBuilder_InfoNote.cs │ │ │ │ │ ├── IToolbarBuilder_Output.cs │ │ │ │ │ └── IToolbarBuilder_SettingsAndParams.cs │ │ │ │ ├── ToolbarContext.cs │ │ │ │ └── TweakButton/ │ │ │ │ └── ITweakButton.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Images/ │ │ │ │ ├── IResizeSettings.cs │ │ │ │ ├── IResponsiveImage.cs │ │ │ │ ├── IResponsivePicture.cs │ │ │ │ ├── ITweakMedia.cs │ │ │ │ ├── ITweakResize.cs │ │ │ │ ├── Recipes/ │ │ │ │ │ └── Recipe.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── CopyrightDecorator.cs │ │ │ │ │ ├── CopyrightSettings.cs │ │ │ │ │ ├── IImageDecorator.cs │ │ │ │ │ ├── IImageFormat.cs │ │ │ │ │ ├── IImageMetadataRecommendationsService.cs │ │ │ │ │ └── ImageDecorator.cs │ │ │ │ └── Sys.ResizeSettings/ │ │ │ │ ├── AdvancedSettings.cs │ │ │ │ ├── IResizeSettingsInternal.cs │ │ │ │ ├── RecipeHelpers.cs │ │ │ │ ├── RecipeVariant.cs │ │ │ │ └── RecipeVariantsParser.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcDataInternalsVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── IImageService.cs │ │ │ │ ├── Sys/ │ │ │ │ │ └── ServiceWithContext.cs │ │ │ │ ├── Sys.Cms/ │ │ │ │ │ └── ICmsService.cs │ │ │ │ ├── Sys.ConvertService/ │ │ │ │ │ ├── ConvertForCodeService.cs │ │ │ │ │ └── ConvertValueService.cs │ │ │ │ └── Tweaks/ │ │ │ │ └── ITweakInput.cs │ │ │ ├── StartupSxcData.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ ├── ExecutionContextStateNames.cs │ │ │ │ ├── ICanGetService.cs │ │ │ │ ├── IExecutionContext.cs │ │ │ │ ├── IExecutionContextCdf.cs │ │ │ │ ├── INeedsExecutionContext.cs │ │ │ │ └── readme.md │ │ │ ├── ToSic.Sxc.Data.csproj │ │ │ └── ToSic.Sxc.Data.csproj.DotSettings │ │ ├── ToSic.Sxc.Edit/ │ │ │ ├── Edit/ │ │ │ │ ├── EditService/ │ │ │ │ │ ├── EditService.cs │ │ │ │ │ ├── EditService_Context.cs │ │ │ │ │ ├── EditService_Enable.cs │ │ │ │ │ ├── EditService_Toolbar.cs │ │ │ │ │ └── IEditServiceSetup.cs │ │ │ │ ├── Sys/ │ │ │ │ │ └── SxcUiConstants.cs │ │ │ │ └── Toolbar/ │ │ │ │ ├── ActionNames.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── OldToolbarsForItems/ │ │ │ │ │ │ ├── EntityEditInfo.cs │ │ │ │ │ │ ├── ItemToolbar.cs │ │ │ │ │ │ ├── ItemToolbarAction.cs │ │ │ │ │ │ ├── ItemToolbarBase.cs │ │ │ │ │ │ ├── ItemToolbarPicker.cs │ │ │ │ │ │ ├── ItemToolbarV10.cs │ │ │ │ │ │ └── ItemToolbarV14.cs │ │ │ │ │ ├── ToolbarButtonActions.cs │ │ │ │ │ ├── ToolbarButtonDecorator.cs │ │ │ │ │ ├── ToolbarButtonDecoratorHelper.cs │ │ │ │ │ ├── ToolbarConstants.cs │ │ │ │ │ └── ToolbarContextExtensions.cs │ │ │ │ ├── Sys.Rules/ │ │ │ │ │ ├── ToolbarRule.cs │ │ │ │ │ ├── ToolbarRuleBase.cs │ │ │ │ │ ├── ToolbarRuleContext.cs │ │ │ │ │ ├── ToolbarRuleCustom.cs │ │ │ │ │ ├── ToolbarRuleForEntity.cs │ │ │ │ │ ├── ToolbarRuleForParams.cs │ │ │ │ │ ├── ToolbarRuleGeneric.cs │ │ │ │ │ ├── ToolbarRuleMetadata.cs │ │ │ │ │ ├── ToolbarRuleOperation.cs │ │ │ │ │ ├── ToolbarRuleOps.cs │ │ │ │ │ ├── ToolbarRuleSettings.cs │ │ │ │ │ ├── ToolbarRuleTargeted.cs │ │ │ │ │ └── ToolbarRuleToolbar.cs │ │ │ │ ├── Sys.ToolbarBuilder/ │ │ │ │ │ ├── FilterValueProcessor.cs │ │ │ │ │ ├── ToolbarBuilder.cs │ │ │ │ │ ├── ToolbarBuilderConfiguration.cs │ │ │ │ │ ├── ToolbarBuilderUtilities.cs │ │ │ │ │ ├── ToolbarBuilder_As.cs │ │ │ │ │ ├── ToolbarBuilder_Button.cs │ │ │ │ │ ├── ToolbarBuilder_CommandsAdmin.cs │ │ │ │ │ ├── ToolbarBuilder_CommandsForLists.cs │ │ │ │ │ ├── ToolbarBuilder_CommandsItems.cs │ │ │ │ │ ├── ToolbarBuilder_CommandsView.cs │ │ │ │ │ ├── ToolbarBuilder_Config.cs │ │ │ │ │ ├── ToolbarBuilder_Context.cs │ │ │ │ │ ├── ToolbarBuilder_DemoToolbar.cs │ │ │ │ │ ├── ToolbarBuilder_Helpers.cs │ │ │ │ │ ├── ToolbarBuilder_InfoNote.cs │ │ │ │ │ ├── ToolbarBuilder_MetadataRecommendations.cs │ │ │ │ │ ├── ToolbarBuilder_SettingsAndParams.cs │ │ │ │ │ ├── ToolbarBuilder_ToString.cs │ │ │ │ │ ├── ToolbarConfigurationShowHelper.cs │ │ │ │ │ ├── ToolbarHtmlModes.cs │ │ │ │ │ ├── ToolbarServiceExtensions.cs │ │ │ │ │ └── UiValueProcessor.cs │ │ │ │ └── Sys.TweakButton/ │ │ │ │ └── TweakButton.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcEditInternalsVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── IEditService.cs │ │ │ │ └── IToolbarService.cs │ │ │ ├── StartupSxcEdit.cs │ │ │ ├── ToSic.Sxc.Edit.csproj │ │ │ └── ToSic.Sxc.Edit.csproj.DotSettings │ │ ├── ToSic.Sxc.Engines/ │ │ │ ├── Engines/ │ │ │ │ ├── EngineAppRequirements.cs │ │ │ │ ├── EngineCheckTemplate.cs │ │ │ │ ├── EngineDefinitionAttribute.cs │ │ │ │ ├── EngineFactory.cs │ │ │ │ ├── EngineMessages.cs │ │ │ │ ├── EnginePolymorphism.cs │ │ │ │ ├── EngineRequirementsBase.cs │ │ │ │ ├── IEngine.cs │ │ │ │ ├── IEngineFactory.cs │ │ │ │ ├── IRazorEngine.cs │ │ │ │ ├── ITokenEngine.cs │ │ │ │ ├── RenderingException.cs │ │ │ │ └── Sys/ │ │ │ │ ├── EngineSpecs.cs │ │ │ │ ├── EngineSpecsService.cs │ │ │ │ ├── ISetDynamicModel.cs │ │ │ │ └── ViewDataWithModel.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Polymorphism/ │ │ │ │ ├── IPolymorphismResolver.cs │ │ │ │ └── Sys/ │ │ │ │ ├── PolymorphConfigReader.cs │ │ │ │ └── PolymorphismConfiguration.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcEnginesAssemblyVisibleTo.cs │ │ │ ├── Render.Sys.Output/ │ │ │ │ ├── ClientAssetConstants.cs │ │ │ │ ├── ClientAssetExtractSettingsForOneAssetType.cs │ │ │ │ ├── ClientAssetsExtractSettings.cs │ │ │ │ └── IBlockResourceExtractor.cs │ │ │ ├── Render.Sys.Specs/ │ │ │ │ ├── RenderPartialSpecs.cs │ │ │ │ └── RenderSpecs.cs │ │ │ ├── StartupSxcEngines.cs │ │ │ └── ToSic.Sxc.Engines.csproj │ │ ├── ToSic.Sxc.Images/ │ │ │ ├── GlobalUsings.cs │ │ │ ├── Images/ │ │ │ │ ├── Sys/ │ │ │ │ │ ├── CopyrightPreset.cs │ │ │ │ │ ├── ImageConstants.cs │ │ │ │ │ ├── ImageFormat.cs │ │ │ │ │ ├── ImageService/ │ │ │ │ │ │ ├── ImageService.cs │ │ │ │ │ │ ├── ImageService_GetFormat.cs │ │ │ │ │ │ ├── ImageService_Settings.cs │ │ │ │ │ │ └── TweakMedia.cs │ │ │ │ │ ├── ImgResizeLinker.cs │ │ │ │ │ └── ResizeSettingsHelper.cs │ │ │ │ ├── Sys.ImageflowRewrite/ │ │ │ │ │ └── ImageflowRewrite.cs │ │ │ │ ├── Sys.Metadata/ │ │ │ │ │ └── ImageMetadataRecommendationsService.cs │ │ │ │ ├── Sys.ResizeSettings/ │ │ │ │ │ ├── OneResize.cs │ │ │ │ │ ├── RecipeQuality.cs │ │ │ │ │ ├── ResizeDimensionGenerator.cs │ │ │ │ │ ├── ResizeParamMerger.cs │ │ │ │ │ ├── ResizeParams.cs │ │ │ │ │ ├── ResizeSettings.cs │ │ │ │ │ └── TweakResize.cs │ │ │ │ └── Sys.Responsive/ │ │ │ │ ├── LightboxHelpers.cs │ │ │ │ ├── ResponsiveBase.cs │ │ │ │ ├── ResponsiveImage.cs │ │ │ │ ├── ResponsivePicture.cs │ │ │ │ ├── ResponsiveSpecs.cs │ │ │ │ └── ResponsiveToolbarBuilder.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInternalsVisibleTo.cs │ │ │ ├── StartupSxcImages.cs │ │ │ ├── ToSic.Sxc.Images.csproj │ │ │ └── ToSic.Sxc.Images.csproj.DotSettings │ │ ├── ToSic.Sxc.LightSpeed/ │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcLightSpeedAssemblyVisibleTo.cs │ │ │ ├── StartupSxcLightSpeed.cs │ │ │ ├── ToSic.Sxc.LightSpeed.csproj │ │ │ ├── ToSic.Sxc.LightSpeed.csproj.DotSettings │ │ │ └── Web.Sys.LightSpeed/ │ │ │ ├── IOutputCache.cs │ │ │ ├── LightSpeed.cs │ │ │ ├── LightSpeedDataCompression.cs │ │ │ ├── LightSpeedStats.cs │ │ │ ├── LightSpeedUrlParams.cs │ │ │ ├── OutputCacheItem.cs │ │ │ ├── OutputCacheKeys.cs │ │ │ ├── OutputCacheManager.cs │ │ │ └── RazorPartial/ │ │ │ └── RazorPartialCachingHelper.cs │ │ ├── ToSic.Sxc.Render/ │ │ │ ├── Configuration.Sys/ │ │ │ │ └── ConfigStringHelpers.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcRenderAssemblyVisibleTo.cs │ │ │ ├── Render/ │ │ │ │ ├── Sys/ │ │ │ │ │ ├── IRenderResult.cs │ │ │ │ │ ├── IRenderingHelpers.cs │ │ │ │ │ ├── InTextContentBlockRenderer.cs │ │ │ │ │ ├── RenderResult.cs │ │ │ │ │ ├── RenderResultHtmlCompression.cs │ │ │ │ │ ├── RenderService.cs │ │ │ │ │ ├── RenderStatistics.cs │ │ │ │ │ ├── RenderingHelper.cs │ │ │ │ │ └── SimpleRenderer.cs │ │ │ │ ├── Sys.JsContext/ │ │ │ │ │ ├── ContentBlockDto.cs │ │ │ │ │ ├── ContentBlockReferenceDto.cs │ │ │ │ │ ├── EntityDto.cs │ │ │ │ │ ├── ErrorDto.cs │ │ │ │ │ ├── IJsApiService.cs │ │ │ │ │ ├── JsApi.cs │ │ │ │ │ ├── JsApiCacheService.cs │ │ │ │ │ ├── JsApiServiceUnknown.cs │ │ │ │ │ ├── JsContextAll.cs │ │ │ │ │ ├── JsContextEnvironment.cs │ │ │ │ │ ├── JsContextLanguage.cs │ │ │ │ │ ├── JsContextUser.cs │ │ │ │ │ └── UiDto.cs │ │ │ │ ├── Sys.ModuleHtml/ │ │ │ │ │ ├── IModuleHtmlService.cs │ │ │ │ │ ├── ModuleHtmlService.cs │ │ │ │ │ ├── ModuleOutputCacheState.cs │ │ │ │ │ └── ModuleTags.cs │ │ │ │ ├── Sys.Problems/ │ │ │ │ │ └── ProblemSuggestions.cs │ │ │ │ ├── Sys.RenderBlock/ │ │ │ │ │ ├── BlockBuilder.cs │ │ │ │ │ ├── BlockBuilder_Render.cs │ │ │ │ │ ├── BlockCachingHelper.cs │ │ │ │ │ ├── DependentApp.cs │ │ │ │ │ └── IBlockBuilder.cs │ │ │ │ └── Sys.ResourceExtractor/ │ │ │ │ ├── BlockResourceExtractor.cs │ │ │ │ ├── BlockResourceExtractorUnknown.cs │ │ │ │ ├── BlockResourceExtractorWithInline.cs │ │ │ │ ├── BlockResourceExtractor_RegEx.cs │ │ │ │ ├── BlockResourceExtractor_Scripts.cs │ │ │ │ └── BlockResourceExtractor_Styles.cs │ │ │ ├── Services/ │ │ │ │ ├── IRenderService.cs │ │ │ │ └── OutputCache/ │ │ │ │ ├── IOutputCacheSettings.cs │ │ │ │ └── OutputCacheSettings.cs │ │ │ ├── StartupSxcRender.cs │ │ │ ├── ToSic.Sxc.Render.csproj │ │ │ ├── ToSic.Sxc.Render.csproj.DotSettings │ │ │ ├── Web/ │ │ │ │ ├── Sys.ContentSecurityPolicy/ │ │ │ │ │ ├── ContentSecurityPolicyService.cs │ │ │ │ │ ├── ContentSecurityPolicyServiceBase.cs │ │ │ │ │ ├── CspConstants.cs │ │ │ │ │ ├── CspOfApp.cs │ │ │ │ │ ├── CspOfModule.cs │ │ │ │ │ ├── CspOfPage.cs │ │ │ │ │ ├── CspParameterFinalizer.cs │ │ │ │ │ ├── CspParameters.cs │ │ │ │ │ ├── CspPolicyTextProcessor.cs │ │ │ │ │ ├── CspSettingsReader.cs │ │ │ │ │ └── IContentSecurityPolicyService.cs │ │ │ │ ├── Sys.HtmlParsing/ │ │ │ │ │ └── RegexUtil.cs │ │ │ │ ├── Sys.PageFeatures/ │ │ │ │ │ ├── IPageFeaturesManager.cs │ │ │ │ │ ├── PageFeatures.cs │ │ │ │ │ ├── PageFeaturesCatalog.cs │ │ │ │ │ └── PageFeaturesManager.cs │ │ │ │ ├── Sys.PageService/ │ │ │ │ │ └── PageChangeSummary.cs │ │ │ │ └── Sys.PageServiceShared/ │ │ │ │ ├── IPageServiceSharedInternal.cs │ │ │ │ ├── PageServiceShared.cs │ │ │ │ ├── PageServiceShared_Assets.cs │ │ │ │ ├── PageServiceShared_Headers.cs │ │ │ │ ├── PageServiceShared_Http.cs │ │ │ │ ├── PageServiceShared_Properties.cs │ │ │ │ ├── PageUrlSpecs.cs │ │ │ │ └── UrlParameterSpecs.cs │ │ │ └── Web.Sys.LightSpeed/ │ │ │ ├── LightSpeedConfigHelper.cs │ │ │ └── LightSpeedDecorator.cs │ │ ├── ToSic.Sxc.RenderTests/ │ │ │ ├── Configuration.Sys/ │ │ │ │ └── ConfigStringHelpersTests.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── ToSic.Sxc.RenderTests.csproj │ │ │ └── Web.Sys.PageSpecsTests/ │ │ │ ├── PageSpecsComparison.cs │ │ │ └── PageSpecsTests.cs │ │ ├── ToSic.Sxc.Services/ │ │ │ ├── Code.Razor.Sys/ │ │ │ │ └── RenderPartialSpecsWithCaching.cs │ │ │ ├── Demo/ │ │ │ │ ├── ToolbarServiceExtensions.cs │ │ │ │ └── readme.md │ │ │ ├── GlobalUsings.cs │ │ │ ├── Properties/ │ │ │ │ └── SxcServicesInternalsVisibleTo.cs │ │ │ ├── Services/ │ │ │ │ ├── Cache/ │ │ │ │ │ ├── CacheDependencyScopes.cs │ │ │ │ │ ├── ICacheService.cs │ │ │ │ │ ├── ICacheSpecs.cs │ │ │ │ │ ├── INamedCacheDependencyService.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── CacheKey/ │ │ │ │ │ │ ├── CacheKeyConfig.cs │ │ │ │ │ │ ├── CacheKeyConfigExtensions.cs │ │ │ │ │ │ ├── CacheKeyConfigNamed.cs │ │ │ │ │ │ ├── CacheKeyParts.cs │ │ │ │ │ │ ├── CacheKeyPartsExtensions.cs │ │ │ │ │ │ └── ForElevationExtensions.cs │ │ │ │ │ ├── CacheService.cs │ │ │ │ │ ├── CacheServiceConstants.cs │ │ │ │ │ ├── CacheSpecConstants.cs │ │ │ │ │ ├── CacheSpecs.cs │ │ │ │ │ ├── CacheSpecsContextAndTools.cs │ │ │ │ │ ├── CacheSpecsExtensions.cs │ │ │ │ │ ├── CacheWriteConfig.cs │ │ │ │ │ ├── NamedCacheDependencyService.cs │ │ │ │ │ └── VaryBy/ │ │ │ │ │ ├── CacheVaryByHelper.cs │ │ │ │ │ └── CacheVaryByModelHelper.cs │ │ │ │ ├── Cms/ │ │ │ │ │ ├── Sys/ │ │ │ │ │ │ ├── CmsProcessed.cs │ │ │ │ │ │ ├── CmsService.cs │ │ │ │ │ │ ├── CmsServiceContainerHelper.cs │ │ │ │ │ │ ├── CmsServiceImageExtractor.cs │ │ │ │ │ │ ├── CmsServiceStringWysiwyg.cs │ │ │ │ │ │ ├── HtmlImgToPictureHelper.cs │ │ │ │ │ │ └── HtmlInnerContentHelper.cs │ │ │ │ │ └── WysiwygConstants.cs │ │ │ │ ├── Convert/ │ │ │ │ │ ├── ConvertService.cs │ │ │ │ │ ├── ConvertService16.cs │ │ │ │ │ ├── IConvertService.cs │ │ │ │ │ └── IConvertService16.cs │ │ │ │ ├── Data.Sys/ │ │ │ │ │ ├── DataService.cs │ │ │ │ │ └── DataService_GetSource.cs │ │ │ │ ├── Features/ │ │ │ │ │ └── FeaturesService.cs │ │ │ │ ├── HttpCtx/ │ │ │ │ │ ├── HttpContextService.cs │ │ │ │ │ └── IHttpContextService.cs │ │ │ │ ├── Json/ │ │ │ │ │ └── JsonService.cs │ │ │ │ ├── KeyService/ │ │ │ │ │ ├── KeyService.cs │ │ │ │ │ └── UniqueKeysServices.cs │ │ │ │ ├── Kits/ │ │ │ │ │ ├── IKeyService.cs │ │ │ │ │ ├── ServiceKit14.cs │ │ │ │ │ ├── ServiceKit16.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── IHasKit.cs │ │ │ │ │ ├── IHasKitExtensions.cs │ │ │ │ │ └── ServiceKit.cs │ │ │ │ ├── Link/ │ │ │ │ │ ├── ILinkService.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── ILinkServiceIntegration.cs │ │ │ │ │ ├── LinkServiceBase.cs │ │ │ │ │ └── LinkServiceUnknown.cs │ │ │ │ ├── Mail/ │ │ │ │ │ ├── IMailService.cs │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── MailServiceBase.cs │ │ │ │ │ └── MailServiceUnknown.cs │ │ │ │ ├── OutputCache/ │ │ │ │ │ ├── IModuleOutputCacheService.cs │ │ │ │ │ ├── IOutputCacheManagementService.cs │ │ │ │ │ ├── ModuleOutputCacheService.cs │ │ │ │ │ └── OutputCacheManagementService.cs │ │ │ │ ├── Page/ │ │ │ │ │ └── Sys/ │ │ │ │ │ ├── PageChangeListenerWip.cs │ │ │ │ │ ├── PageService.cs │ │ │ │ │ ├── PageService_Assets.cs │ │ │ │ │ ├── PageService_Features.cs │ │ │ │ │ ├── PageService_Headers.cs │ │ │ │ │ ├── PageService_Icons.cs │ │ │ │ │ ├── PageService_JsonLd.cs │ │ │ │ │ ├── PageService_OpenGraph.cs │ │ │ │ │ ├── PageService_Properties.cs │ │ │ │ │ ├── PageService_turnOn.cs │ │ │ │ │ └── WebResourceProcessor.cs │ │ │ │ ├── PageShield/ │ │ │ │ │ ├── IPageShield.cs │ │ │ │ │ └── PageShield.cs │ │ │ │ ├── SecureData/ │ │ │ │ │ ├── ISecureDataService.cs │ │ │ │ │ └── SecureDataService.cs │ │ │ │ ├── SystemLog/ │ │ │ │ │ ├── ILogService.cs │ │ │ │ │ └── LogServiceUnknown.cs │ │ │ │ ├── Templates/ │ │ │ │ │ ├── ITemplateEngine.cs │ │ │ │ │ ├── ITemplateService.cs │ │ │ │ │ ├── LookUpWithFunction.cs │ │ │ │ │ ├── LookUpWithFunctionAndFormat.cs │ │ │ │ │ ├── TemplateEngineTokens.cs │ │ │ │ │ └── TemplateService.cs │ │ │ │ ├── Toolbars/ │ │ │ │ │ └── ToolbarService.cs │ │ │ │ ├── TurnOn/ │ │ │ │ │ ├── Sys/ │ │ │ │ │ │ ├── ITurnOnService.cs │ │ │ │ │ │ └── TurnOnSpecs.cs │ │ │ │ │ └── TurnOnService.cs │ │ │ │ ├── Tweaks.Sys/ │ │ │ │ │ ├── ITweakData.cs │ │ │ │ │ ├── TweakConfig.T.cs │ │ │ │ │ ├── TweakConfig.cs │ │ │ │ │ ├── TweakConfigConstants.cs │ │ │ │ │ ├── TweakConfigListExtensions.cs │ │ │ │ │ ├── TweakConfigWithFunction.cs │ │ │ │ │ ├── TweakData.cs │ │ │ │ │ └── TweakInput.cs │ │ │ │ └── User/ │ │ │ │ ├── IUserService.cs │ │ │ │ └── Sys/ │ │ │ │ └── UserService.cs │ │ │ ├── StartupSxcServices.cs │ │ │ ├── Sys.ExecutionContext/ │ │ │ │ ├── IExCtxGetKit.cs │ │ │ │ └── IExCtxLookUpEngine.cs │ │ │ ├── ToSic.Sxc.Services.csproj │ │ │ ├── ToSic.Sxc.Services.csproj.DotSettings │ │ │ └── Web/ │ │ │ ├── IPageService.Obsolete.cs │ │ │ └── Web.PageServiceObsolete.cs │ │ ├── ToSic.Sxc.TemplateProject/ │ │ │ ├── GlobalUsings.cs │ │ │ ├── SxcEditStartup.cs │ │ │ └── ToSic.Sxc.Edit.csproj │ │ ├── ToSic.Sxc.Various.SystemTests/ │ │ │ ├── ConfigurationTests/ │ │ │ │ ├── VerifyPatronsHelper.cs │ │ │ │ ├── VerifyScenarioNoPatronsPerfectionist.cs │ │ │ │ └── VerifyScenarioPatronsPerfectionist.cs │ │ │ ├── DataForImageTests/ │ │ │ │ └── ResizeRecipesData.cs │ │ │ ├── DataSources/ │ │ │ │ ├── MockUserRolesProvider.cs │ │ │ │ ├── MockUsersProvider.cs │ │ │ │ ├── RolesDataSourceTests.cs │ │ │ │ └── UsersDataSourceTests.cs │ │ │ ├── DataTests/ │ │ │ │ ├── CodeDataConverterTestAccessors.cs │ │ │ │ ├── DynAndTypedTestHelper.cs │ │ │ │ ├── DynConverterTests/ │ │ │ │ │ ├── AsConverterAsItem.cs │ │ │ │ │ └── AsConverterFakeTests.cs │ │ │ │ ├── DynJson/ │ │ │ │ │ ├── Startup.cs │ │ │ │ │ ├── WrapAllGps.cs │ │ │ │ │ ├── WrapAllKeys.cs │ │ │ │ │ ├── WrapAllSerialize.cs │ │ │ │ │ ├── WrapJsonArray.cs │ │ │ │ │ ├── WrapJsonDeep.cs │ │ │ │ │ ├── WrapJsonMixed.cs │ │ │ │ │ └── WrapJsonValues.cs │ │ │ │ ├── DynStack/ │ │ │ │ │ ├── Startup.cs │ │ │ │ │ ├── TypedStackGet.cs │ │ │ │ │ ├── TypedStackKeys_NotImplemented.cs │ │ │ │ │ └── TypedStackTestData.cs │ │ │ │ ├── DynWrappers/ │ │ │ │ │ ├── Startup.cs │ │ │ │ │ ├── TestPerson.cs │ │ │ │ │ ├── WrapDicBasic.cs │ │ │ │ │ ├── WrapObjBasic.cs │ │ │ │ │ ├── WrapObjDeep.cs │ │ │ │ │ ├── WrapObjTypedItem.cs │ │ │ │ │ ├── WrapObjTypedItemAdvanced.cs │ │ │ │ │ ├── WrapObjTypedItemChildren.cs │ │ │ │ │ ├── WrapObjTypedItemEquality.cs │ │ │ │ │ ├── WrapObjTypedItemMetadata.cs │ │ │ │ │ └── WrapObjTypedItemParents.cs │ │ │ │ ├── GetAndConvertHelperTestAccessors.cs │ │ │ │ ├── GetAndConvertHelperTests.cs │ │ │ │ ├── HasKeysTests.cs │ │ │ │ ├── PropInfo.cs │ │ │ │ └── TypedItemTestAccessors.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── LinksAndImages/ │ │ │ │ ├── LinkHelperTests/ │ │ │ │ │ ├── LinkHelperImagePartFullTests.cs │ │ │ │ │ ├── LinkHelperImagePartUndefinedTests.cs │ │ │ │ │ ├── LinkHelperToApiPartUndefinedTests.cs │ │ │ │ │ ├── LinkHelperToCommonTests.cs │ │ │ │ │ ├── LinkHelperToPagePartUnknownTests.cs │ │ │ │ │ ├── LinkHelperToPartTests.cs │ │ │ │ │ ├── LinkHelperToTestBase.cs │ │ │ │ │ ├── LinkHelperToVerifyTests.cs │ │ │ │ │ └── LinkTestHelperExtensions.cs │ │ │ │ ├── LinkImageTests/ │ │ │ │ │ ├── ImageBasic.cs │ │ │ │ │ ├── ImageWithSettings.cs │ │ │ │ │ ├── ImgSrcSet.cs │ │ │ │ │ ├── LinkImageParameters.cs │ │ │ │ │ ├── LinkImageTestBase.cs │ │ │ │ │ ├── LinkImageTestHelper.cs │ │ │ │ │ ├── MultiResizeTests.cs │ │ │ │ │ ├── ResizeParamMergeTests.cs │ │ │ │ │ ├── ResizeParamsBestWh.cs │ │ │ │ │ └── Startup.cs │ │ │ │ ├── LinkToBasicTests.cs │ │ │ │ └── ParametersTestExtensions.cs │ │ │ ├── Mocks/ │ │ │ │ └── ExecutionContextMock.cs │ │ │ ├── ServicesTests/ │ │ │ │ ├── CacheTests/ │ │ │ │ │ ├── CacheKeyForElevationTests.cs │ │ │ │ │ ├── CacheKeyTests.cs │ │ │ │ │ ├── CacheSpecsTestAccessors.cs │ │ │ │ │ └── CacheSpecsTests.cs │ │ │ │ ├── CmsService/ │ │ │ │ │ ├── CmsServiceTests.cs │ │ │ │ │ ├── DataForCmsServiceTests.cs │ │ │ │ │ ├── DataForImgConversionTest.cs │ │ │ │ │ ├── HtmlImgToPictureHelperTests.cs │ │ │ │ │ ├── ImageExtractor/ │ │ │ │ │ │ ├── CmsServiceImageExtractorTestAccessors.cs │ │ │ │ │ │ ├── CmsServiceImageExtractorTests.cs │ │ │ │ │ │ └── ExtractorPartsTests.cs │ │ │ │ │ ├── ImgConversionTest.cs │ │ │ │ │ ├── MockHtmlContentType.cs │ │ │ │ │ ├── Startup.cs │ │ │ │ │ └── StringWysiwygTests.cs │ │ │ │ ├── ConvertService/ │ │ │ │ │ └── ConvertServiceTest.cs │ │ │ │ ├── ImageServiceTests/ │ │ │ │ │ ├── FactorMapTests.cs │ │ │ │ │ ├── ImageServiceAttributes.cs │ │ │ │ │ ├── ImageServiceFormatsBase.cs │ │ │ │ │ ├── ImageServiceFormatsBase_Best.cs │ │ │ │ │ ├── ImageServiceFormatsNoPatron.cs │ │ │ │ │ ├── ImageServiceFormatsPatronPerfectionist.cs │ │ │ │ │ ├── ImageServiceResizeSettings.cs │ │ │ │ │ ├── ImageServiceTagsBase.cs │ │ │ │ │ ├── ImageServiceTagsImgBase.cs │ │ │ │ │ ├── ImageServiceTagsImgNoPatron.cs │ │ │ │ │ ├── ImageServiceTagsImgPatronPerfectionist.cs │ │ │ │ │ ├── ImageServiceTagsNoPatron.cs │ │ │ │ │ ├── ImageServiceTagsPatronPerfectionist.cs │ │ │ │ │ ├── ImageServiceTestAccessors.cs │ │ │ │ │ ├── ImageTagsTestPermutations.cs │ │ │ │ │ └── TweakMediaTests.cs │ │ │ │ ├── Mail/ │ │ │ │ │ ├── AddMailAddressesInputTypeTests.cs │ │ │ │ │ ├── MailAddressCollectionTests.cs │ │ │ │ │ ├── MailAddressInputTypeTests.cs │ │ │ │ │ ├── MailAddressTests.cs │ │ │ │ │ ├── MailServiceBaseTests.cs │ │ │ │ │ ├── MailServiceTestsHelper.cs │ │ │ │ │ └── Startup.cs │ │ │ │ ├── SecureData/ │ │ │ │ │ ├── SecureDataHashTests.cs │ │ │ │ │ ├── SecureDataTest.cs │ │ │ │ │ └── Startup.cs │ │ │ │ └── Templates/ │ │ │ │ ├── Startup.cs │ │ │ │ ├── TemplatesBasicTests.cs │ │ │ │ ├── TemplatesDefaultSourcesTests.cs │ │ │ │ ├── TemplatesDefaultTests.cs │ │ │ │ ├── TemplatesEmptySourcesTests.cs │ │ │ │ ├── TemplatesEmptyTests.cs │ │ │ │ ├── TemplatesHtmlTests.cs │ │ │ │ └── TemplatesTestsBaseHelper.cs │ │ │ ├── StartupMockExecutionContext.cs │ │ │ ├── StartupSxcCoreOnly.cs │ │ │ ├── StartupSxcWithDb.cs │ │ │ ├── StartupSxcWithDbBasic.cs │ │ │ ├── StartupSxcWithDbPatronPerfectionist.cs │ │ │ ├── ToSic.Sxc.Various.SystemTests.csproj │ │ │ ├── Web.PageFeatures/ │ │ │ │ └── SimpleFeatureManagement.cs │ │ │ └── WebLightSpeed/ │ │ │ ├── LightSpeedDecoratorTests.cs │ │ │ ├── LightSpeedOutputCacheCompressionTestData.cs │ │ │ ├── LightSpeedOutputCacheCompressionTests.cs │ │ │ ├── LightSpeedTestData.cs │ │ │ ├── LightSpeedUrlParamsTest.cs │ │ │ ├── NamedCacheDependencyServiceTests.cs │ │ │ └── OutputCacheServiceWithoutLightSpeedTests.cs │ │ ├── ToSic.Sxc.Various.UnitTests/ │ │ │ ├── Adam/ │ │ │ │ ├── AdamPathsBaseTests.cs │ │ │ │ └── AdamSecurity.cs │ │ │ ├── Blocks/ │ │ │ │ └── Output/ │ │ │ │ └── BlockResourceExtractorGetHtmlAttributesTests.cs │ │ │ ├── Code/ │ │ │ │ └── Help/ │ │ │ │ └── SourceAnalyzerTests.cs │ │ │ ├── CodeTests/ │ │ │ │ └── LoggingTests/ │ │ │ │ ├── LogAdapterTests.cs │ │ │ │ ├── LogFnOldTests.cs │ │ │ │ ├── LogFnTests.cs │ │ │ │ └── LogTestBase.cs │ │ │ ├── ContentSecurityPolicyTests/ │ │ │ │ ├── CspParameterFinalizerTests.cs │ │ │ │ ├── CspParametersTests.cs │ │ │ │ └── CspPolicyTextProcessorTests.cs │ │ │ ├── ContextTests/ │ │ │ │ ├── ParametersAccessedTests.cs │ │ │ │ ├── ParametersTestData.cs │ │ │ │ ├── ParametersTests.cs │ │ │ │ ├── ParametersToStringTests.cs │ │ │ │ └── UniqueKeyTests.cs │ │ │ ├── Edit/ │ │ │ │ ├── ItemToolbarPickerTests/ │ │ │ │ │ └── ItemToolbarPikerWithRulesTests.cs │ │ │ │ ├── ToolbarConfigurationTests/ │ │ │ │ │ └── ToolbarConfigurationShowByRole.cs │ │ │ │ ├── ToolbarRuleTests/ │ │ │ │ │ ├── ToolbarRuleBasicTests.cs │ │ │ │ │ ├── ToolbarRuleForTest.cs │ │ │ │ │ ├── ToolbarRuleOpPickTests.cs │ │ │ │ │ └── ToolbarRuleToolbarTests.cs │ │ │ │ └── TweakButtonTests/ │ │ │ │ ├── TweakButtonColor.cs │ │ │ │ ├── TweakButtonOther.cs │ │ │ │ ├── TweakButtonParameters.cs │ │ │ │ ├── TweakButtonShow.cs │ │ │ │ ├── TweakButtonTestAccessors.cs │ │ │ │ └── TweakButtonTestsBase.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── Images/ │ │ │ │ └── ImageflowRewriteTests.cs │ │ │ ├── LinksAndImages/ │ │ │ │ ├── ParametersTestExtensions.cs │ │ │ │ ├── QueryHelperTests.cs │ │ │ │ ├── SrcSetParsePart.cs │ │ │ │ ├── UrlHelperTests/ │ │ │ │ │ ├── MergeNameValueCollectionTests.cs │ │ │ │ │ ├── Obj2UrlMerge.cs │ │ │ │ │ ├── Obj2UrlTests.cs │ │ │ │ │ └── ParseQueryStringTests.cs │ │ │ │ └── UrlParts/ │ │ │ │ ├── UrlPartsProtocolAndDomain.cs │ │ │ │ ├── UrlPartsTestBase.cs │ │ │ │ ├── UrlPartsToLink.cs │ │ │ │ └── UrlPartsTrivial.cs │ │ │ ├── PageProperty/ │ │ │ │ └── UpdatePropertyTest.cs │ │ │ ├── PlumbingTests/ │ │ │ │ └── CleanParamTests.cs │ │ │ ├── ServiceTweaks/ │ │ │ │ ├── CmsHtmlTweakTests.cs │ │ │ │ └── TweakListTests.cs │ │ │ ├── Services/ │ │ │ │ ├── HttpContextServiceTests.cs │ │ │ │ └── TurnOnTests/ │ │ │ │ ├── PickOrBuildSpecsTests.cs │ │ │ │ └── TurnOnTestAccessors.cs │ │ │ ├── ToSic.Sxc.Various.UnitTests.csproj │ │ │ └── WebUrlTests/ │ │ │ ├── UrlValueCamelCaseTest.cs │ │ │ └── UrlValueFilterTests.cs │ │ ├── ToSic.Sxc.Web/ │ │ │ ├── Apps.Sys.Installation/ │ │ │ │ ├── IPlatformAppInstaller.cs │ │ │ │ └── PlatformAppInstallerUnknown.cs │ │ │ ├── Data.Sys.Convert/ │ │ │ │ └── ConvertToEavLightWithCmsInfo.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── LookUp/ │ │ │ │ ├── DateTimeLookUp.cs │ │ │ │ ├── QueryStringLookUp.cs │ │ │ │ └── TicksLookUp.cs │ │ │ ├── Polymorphism.Sys/ │ │ │ │ ├── CssFrameworkDetectorUnknown.cs │ │ │ │ ├── PolymorphismConstants.cs │ │ │ │ ├── PolymorphismKoi.cs │ │ │ │ └── PolymorphismPermissions.cs │ │ │ ├── StartupSxcWeb.cs │ │ │ ├── ToSic.Sxc.Web.csproj │ │ │ ├── Web.Sys.EditUi/ │ │ │ │ ├── EditUiResourceSettings.cs │ │ │ │ ├── EditUiResources.cs │ │ │ │ └── HtmlDialog.cs │ │ │ └── Web.Sys.Http/ │ │ │ ├── HttpAbstractionBase.cs │ │ │ ├── HttpHybrid-NetCore.cs │ │ │ └── HttpHybrid-NetFramework.cs │ │ ├── ToSic.Sxc.WebApi/ │ │ │ ├── Apps.Sys.EditAssets/ │ │ │ │ ├── AssetEditInfo.cs │ │ │ │ ├── AssetEditor.cs │ │ │ │ ├── AssetTemplates.Dnn.cs │ │ │ │ ├── AssetTemplates.Hybrid.cs │ │ │ │ ├── AssetTemplates.Markdown.cs │ │ │ │ ├── AssetTemplates.Oqtane.cs │ │ │ │ ├── AssetTemplates.Text.cs │ │ │ │ ├── AssetTemplates.Token.cs │ │ │ │ ├── AssetTemplates.Typed.cs │ │ │ │ ├── AssetTemplates.cs │ │ │ │ └── TemplateInfo.cs │ │ │ ├── Backend/ │ │ │ │ ├── Adam/ │ │ │ │ │ ├── AdamCode.cs │ │ │ │ │ ├── AdamControllerReal.cs │ │ │ │ │ ├── AdamItemDtoMaker.cs │ │ │ │ │ ├── AdamPrefetchHelper.cs │ │ │ │ │ ├── IAdamController.cs │ │ │ │ │ ├── IAdamItemDtoMaker.cs │ │ │ │ │ └── IAdamPrefetchHelper.cs │ │ │ │ ├── Admin/ │ │ │ │ │ ├── AppControllerReal.cs │ │ │ │ │ ├── AppExtensionsControllerReal.cs │ │ │ │ │ ├── AppFiles/ │ │ │ │ │ │ ├── AppFileDto.cs │ │ │ │ │ │ ├── AppFilesControllerReal.cs │ │ │ │ │ │ ├── AppFilesControllerReal_ApiExplorer.cs │ │ │ │ │ │ ├── AppFilesControllerReal_Directory.cs │ │ │ │ │ │ ├── AppFilesControllerReal_List.cs │ │ │ │ │ │ ├── AppFilesControllerReal_Path.cs │ │ │ │ │ │ ├── AppFilesControllerReal_Security.cs │ │ │ │ │ │ ├── IAppFilesController.cs │ │ │ │ │ │ └── TemplatesDto.cs │ │ │ │ │ ├── AppPartsControllerReal.cs │ │ │ │ │ ├── CodeControllerReal.cs │ │ │ │ │ ├── DataControllerReal.cs │ │ │ │ │ ├── DialogControllerReal.cs │ │ │ │ │ ├── EditionsDto.cs │ │ │ │ │ ├── ExtensionsDto.cs │ │ │ │ │ ├── IAdminDataController.cs │ │ │ │ │ ├── IAppExtensionsController.cs │ │ │ │ │ ├── IDialogController.cs │ │ │ │ │ ├── IViewController.cs │ │ │ │ │ ├── Query/ │ │ │ │ │ │ └── QueryControllerReal.cs │ │ │ │ │ ├── ScopeDetailsDto.cs │ │ │ │ │ ├── TypeControllerReal.cs │ │ │ │ │ └── ViewControllerReal.cs │ │ │ │ ├── ApiForBlockHelpers.cs │ │ │ │ ├── App/ │ │ │ │ │ ├── AppCacheFlushSpecs.cs │ │ │ │ │ ├── AppContent.cs │ │ │ │ │ ├── AppDataControllerReal.cs │ │ │ │ │ ├── AppExtensionRelease.cs │ │ │ │ │ ├── AppQueryControllerReal.cs │ │ │ │ │ ├── AppQueryODataHelper.cs │ │ │ │ │ ├── AppsBackend.cs │ │ │ │ │ ├── CacheControllerReal.cs │ │ │ │ │ ├── ExtensionDeleteBackend.cs │ │ │ │ │ ├── ExtensionDownloadBackend.cs │ │ │ │ │ ├── ExtensionEditionHelper.cs │ │ │ │ │ ├── ExtensionExportService.cs │ │ │ │ │ ├── ExtensionExtractionHelper.cs │ │ │ │ │ ├── ExtensionFolderNameValidator.cs │ │ │ │ │ ├── ExtensionInspectBackend.cs │ │ │ │ │ ├── ExtensionInspectDtos.cs │ │ │ │ │ ├── ExtensionInstallBackend.cs │ │ │ │ │ ├── ExtensionInstallHelper.cs │ │ │ │ │ ├── ExtensionLockHelper.cs │ │ │ │ │ ├── ExtensionManifestSerializer.cs │ │ │ │ │ ├── ExtensionPreflightDtos.cs │ │ │ │ │ ├── ExtensionPreflightHelper.cs │ │ │ │ │ ├── ExtensionReaderBackend.cs │ │ │ │ │ ├── ExtensionValidationHelper.cs │ │ │ │ │ ├── ExtensionValidationModels.cs │ │ │ │ │ ├── ExtensionWriterBackend.cs │ │ │ │ │ ├── ExtensionsForIApp.cs │ │ │ │ │ └── ReadOnlyFileHelper.cs │ │ │ │ ├── AppStack/ │ │ │ │ │ └── AppStackBackend.cs │ │ │ │ ├── Cms/ │ │ │ │ │ ├── Block/ │ │ │ │ │ │ ├── BlockControllerReal.cs │ │ │ │ │ │ └── IBlockController.cs │ │ │ │ │ ├── Edit/ │ │ │ │ │ │ ├── EditControllerReal.cs │ │ │ │ │ │ ├── EditLoadBackend.cs │ │ │ │ │ │ ├── EditSaveBackend.cs │ │ │ │ │ │ ├── IUiPicker.cs │ │ │ │ │ │ ├── IUiPickerSourceEntity.cs │ │ │ │ │ │ ├── Load.Activities/ │ │ │ │ │ │ │ ├── EditLoadActivityAddContentTypes.cs │ │ │ │ │ │ │ ├── EditLoadActivityAddContext.cs │ │ │ │ │ │ │ ├── EditLoadActivityAddNecessaryInputTypes.cs │ │ │ │ │ │ │ ├── EditLoadActivityAddPrefetch.cs │ │ │ │ │ │ │ ├── EditLoadActivityAddRequiredFeatures.cs │ │ │ │ │ │ │ ├── EditLoadActivityCleanupRequest.cs │ │ │ │ │ │ │ ├── EditLoadActivityConvertRequest.cs │ │ │ │ │ │ │ ├── EditLoadActivityPrefetchHelper_Adam.cs │ │ │ │ │ │ │ ├── EditLoadActivityPrefetchHelper_Links.cs │ │ │ │ │ │ │ └── EditLoadActivitySettingsHelper.cs │ │ │ │ │ │ └── Load.Settings/ │ │ │ │ │ │ ├── ILoadSettingsContentTypesProvider.cs │ │ │ │ │ │ ├── ILoadSettingsProvider.cs │ │ │ │ │ │ ├── LoadSettingsApiKeys.cs │ │ │ │ │ │ ├── LoadSettingsForBase.cs │ │ │ │ │ │ ├── LoadSettingsForContentType.cs │ │ │ │ │ │ ├── LoadSettingsForGpsDefaults.cs │ │ │ │ │ │ ├── LoadSettingsForPickerSources.cs │ │ │ │ │ │ ├── LoadSettingsForWysiwygDefaults.cs │ │ │ │ │ │ ├── LoadSettingsProviderBase.cs │ │ │ │ │ │ └── LoadSettingsProviderParameters.cs │ │ │ │ │ ├── HistoryControllerReal.cs │ │ │ │ │ ├── HyperlinkBackend.cs │ │ │ │ │ └── List/ │ │ │ │ │ ├── ContentGroupControllerReal.cs │ │ │ │ │ ├── EntityInListDto.cs │ │ │ │ │ ├── IContentGroupController.cs │ │ │ │ │ ├── ListControllerReal.cs │ │ │ │ │ ├── ListControllerReal_Replace.cs │ │ │ │ │ └── ReplacementListDto.cs │ │ │ │ ├── ContentBlocks/ │ │ │ │ │ └── ContentBlockBackend.cs │ │ │ │ ├── Context/ │ │ │ │ │ ├── IWebApiContextBuilder.cs │ │ │ │ │ ├── NetCoreWebApiContextHelper.cs │ │ │ │ │ ├── UiContextBuilderBase.cs │ │ │ │ │ ├── UiContextBuilderUnknown.cs │ │ │ │ │ └── WebApiContextBuilderUnknown.cs │ │ │ │ ├── CustomApiHelpers.cs │ │ │ │ ├── ImportExport/ │ │ │ │ │ ├── AppStateSyncRestore.cs │ │ │ │ │ ├── AppStateSyncSave.cs │ │ │ │ │ ├── ExportApp.cs │ │ │ │ │ ├── ExportContent.cs │ │ │ │ │ ├── ImpExpHelpers.cs │ │ │ │ │ └── ImportContent.cs │ │ │ │ ├── InPage/ │ │ │ │ │ ├── AjaxPreviewHelperWIP.cs │ │ │ │ │ ├── AjaxRenderDto.cs │ │ │ │ │ └── AppViewPickerBackend.cs │ │ │ │ ├── SaveHelpers/ │ │ │ │ │ ├── ContentGroupList.cs │ │ │ │ │ ├── DataValidatorContentTypeDataStore.cs │ │ │ │ │ ├── SaveDataPackageValidator.cs │ │ │ │ │ ├── SaveDataUpdateValidator.cs │ │ │ │ │ ├── SaveDataValidator.cs │ │ │ │ │ ├── SavePermissionDataHelper.cs │ │ │ │ │ ├── SaveSecurityCheck.cs │ │ │ │ │ └── SxcPagePublishing.cs │ │ │ │ ├── SxcWebApiConstants.cs │ │ │ │ ├── Sys/ │ │ │ │ │ ├── Insights/ │ │ │ │ │ │ ├── InsightsAppCodeBuild.cs │ │ │ │ │ │ ├── InsightsAppCodeOverview.cs │ │ │ │ │ │ └── InsightsLightSpeed.cs │ │ │ │ │ ├── InstallControllerReal.cs │ │ │ │ │ └── SiteSetupAutoInstallAppsRule.cs │ │ │ │ ├── Usage/ │ │ │ │ │ ├── Dto/ │ │ │ │ │ │ ├── ContentTypeDto.cs │ │ │ │ │ │ ├── EntityDto.cs │ │ │ │ │ │ └── EntityInRelationDto.cs │ │ │ │ │ ├── EntityBackend.cs │ │ │ │ │ └── UsageBackend.cs │ │ │ │ └── Views/ │ │ │ │ ├── AppPolymorphism.cs │ │ │ │ ├── ViewContentTypeDto.cs │ │ │ │ ├── ViewDetailsDto.cs │ │ │ │ ├── ViewsBackend.cs │ │ │ │ └── ViewsExportImport.cs │ │ │ ├── GlobalUsings.cs │ │ │ ├── ImportExport.Package.Sys/ │ │ │ │ ├── PackageIndexFile.cs │ │ │ │ ├── PackageIndexFileEntry.cs │ │ │ │ ├── PackageInstallAbout.cs │ │ │ │ ├── PackageInstallExtension.cs │ │ │ │ ├── PackageInstallFile.cs │ │ │ │ └── PackageInstallHeader.cs │ │ │ ├── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── launchSettings.json │ │ │ ├── StartupSxcWebApi.cs │ │ │ ├── ToSic.Sxc.WebApi.csproj │ │ │ ├── ToSic.Sxc.WebApi.csproj.DotSettings │ │ │ ├── WebApi/ │ │ │ │ ├── IDynamicWebApi.cs │ │ │ │ ├── JsonFormatter/ │ │ │ │ │ ├── Casing.cs │ │ │ │ │ ├── EntityFormat.cs │ │ │ │ │ ├── JsonCasingOverrideHelper.cs │ │ │ │ │ ├── JsonFormatterAttribute.cs │ │ │ │ │ └── JsonFormatterHelpers.cs │ │ │ │ └── SecureEndpoint/ │ │ │ │ ├── SecureEndpointAttributeNetCore.cs │ │ │ │ ├── SecureEndpointAttributeNetFull.cs │ │ │ │ └── SecureEndpointShared.cs │ │ │ └── WebApi.Sys/ │ │ │ ├── ActionFilters/ │ │ │ │ ├── HttpResponseExceptionFilter.cs │ │ │ │ ├── JsonConverterFactoryHelpers.cs │ │ │ │ ├── OptionalBodyFilter.cs │ │ │ │ ├── SystemTextJsonBodyModelBinder.cs │ │ │ │ └── SystemTextJsonFormatterAttribute.cs │ │ │ ├── AppFolderLookupForWebApi.cs │ │ │ ├── ExternalLinks/ │ │ │ │ ├── ExternalLinksService.cs │ │ │ │ └── ExternalSxcDestinations.cs │ │ │ └── NetCoreControllersHelper.cs │ │ └── ToSic.Sxc.WebApi.Tests/ │ │ ├── Extensions/ │ │ │ ├── ExportExtensionTestAccessors.cs │ │ │ ├── ExportExtensionTestContext.cs │ │ │ ├── ExportExtensionTestHelpers.cs │ │ │ ├── ExportExtensionTests.cs │ │ │ ├── ExtensionBackendTestAccessors.cs │ │ │ ├── ExtensionInstallBackendTest.cs │ │ │ ├── ExtensionManifestServiceTestAccessors.cs │ │ │ ├── ExtensionManifestServiceTests.cs │ │ │ ├── ExtensionsBackendTestContext.cs │ │ │ ├── ExtensionsBackendTests.cs │ │ │ ├── ExtensionsReaderEditionsTests.cs │ │ │ └── ExtensionsReaderTestContext.cs │ │ ├── GlobalUsings.cs │ │ └── ToSic.Sxc.WebApi.Tests.csproj │ └── nuget.config ├── contributing.md └── readme.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: 2sic # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: "[BUG] " labels: '' assignees: '' --- ### Bug Affects... [x] edit experience / UI [x] admin experience UI [x] Razor templating [x] JS development [x] Content Types or data management [x] APIs like REST [x] Platform parts (Dnn/Oqtane) [x] other / unknown ### Current Behavior / Expected Behavior ### To Reproduce (Steps, Videos, Screenshots, Apps) 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error ### Your environment * **2sxc version(s):** 16.0X.X * **Browser:** all | Chrome XX | Firefox XX | Edge XX | IE XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari * **DNN / Oqtane:** all | Dnn 9.6.1 | Dnn 9.xx.xx | Dnn 10 beta | Oqtane 6.0.1 | ... * **Hosting platform:** all | IIS | azure | ... * **Ui Languages:** any/all | English | German | ... ### Additional context Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: "[FEAT] " labels: '' assignees: '' --- ### This Feature is About [x] edit experience / UI [x] admin experience UI [x] Razor templating [x] JS development [x] Content Types or data management [x] APIs like REST [x] Platform parts (Dnn/Oqtane) [x] other / unknown ### Feature request **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/ISSUE_TEMPLATE.md ================================================ ### I'm submitting a [x] bug report => search github for a similar issue before submitting [x] feature request [x] support request => use stackoverflow and tag with 2sxc [x] security issue => do not submit here but on [x] not sure ### ...about [x] edit experience / UI [x] admin experience UI [x] Razor templating [x] JS development [x] Content Types or data management [x] APIs like REST [x] DNN parts [x] other / unknown ### Current Behavior / Expected Behavior ### Instructions to Reproduce the Problem ### Your environment * **2sxc version(s):** 20.0X.X * **Browser:** all | Chrome XX | Firefox XX | Edge XX | IE XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari * **DNN:** all | 9.6.1 | 9.xx.xx * **Hosting platform:** all | IIS | azure | other * **Language:** any/all | English | German | other ================================================ FILE: .gitignore ================================================ # Keep ToSic_SexyContent folder !ToSIC_SexyContent !ToSic.Sxc # other stuff in the DesktopModules Folder /2sxc-docs/* /InstallPackages/* Src/Mvc/Website/wwwroot/adam/Blog App/* bin/ Src/Integration/SxcEdit01/wwwroot/adam/* # 2sxc assets /Src/Oqtane/ToSic.Sxc.Oqt.Server/2sxc /Src/Oqtane/ToSic.Sxc.Oqt.Server/Content /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc/assets /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc/dist /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc/extensions /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc/js /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc/system /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane/assets /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane/dist /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane/extensions /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane/js /Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane/system *.lutconfig # Exclude 2sxc-build.config.json **/2sxc-build.config.json .vs/ /Src/2sxc Multi-Target Oqt510.sln /Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/ToSic.Sxc.Dnn.dnn ================================================ FILE: .vscode/settings.json ================================================ { "files.associations": { "app.json": "jsonc" }, "cSpell.words": [ "Oqtane" ], "sarif-viewer.connectToGithubCodeScanning": "off", "chat.promptFilesRecommendations": { "speckit.constitution": true, "speckit.specify": true, "speckit.plan": true, "speckit.tasks": true, "speckit.implement": true }, "chat.tools.terminal.autoApprove": { ".specify/scripts/bash/": true, ".specify/scripts/powershell/": true } } ================================================ FILE: 2sxc-build-fallback.config.json ================================================ { /* ----- for developers - please read this ----- - Do not modify this file, it's a fallback for the build process and should be configured to do nothing - Read https://go.2sxc.org/build for more details */ "JsTargets": [ // "C:/Projects/2sxc/2sxc-dnn/Website/DesktopModules/ToSIC_SexyContent", // "C:/Projects/2sxc/2sxc/Src/Oqtane/ToSic.Sxc.Oqt.Server/wwwroot/Modules/ToSic.Sxc.Oqtane", // "C:/Projects/2sxc/2sxc-ui/projects/$2sxc-jasmine-browser/src" ], /* "DnnTargets": [ // "C:/Projects/2sxc/2sxc-dnn/Website" ], "OqtaneTargets": [ // "C:/Projects/2sxc/oqtane/oqtane.framework/Oqtane.Server" ], */ "Sources": [ // "C:/Projects/2sxc/2sxc-sources/_latest" ], // "DnnInstallPackage": "C:/Projects/2sxc/2sxc/InstallPackages/Dnn-Installer", // "OqtaneInstallPackage": "C:/Projects/2sxc/2sxc/InstallPackages/OqtaneModule", } ================================================ FILE: Dependencies/Imageflow/Dnn/ToSic.Imageflow.Dnn.xml ================================================ ToSic.Imageflow.Dnn BusinessController to support UpgradeModule Executed on module upgrade. This Library package have dnn manifest with simplified "module" component, to specify this BusinessController that supports upgrade. Hybrid cache options Where to store the cached files and the database How many RAM bytes to use when writing asynchronously to disk before we switch to writing synchronously. Defaults to 100MiB. Defaults to 1 GiB. Don't set below 9MB or no files will be cached, since 9MB is reserved just for empty directory entries. The minimum number of bytes to free when running a cleanup task. Defaults to 1MiB; The minimum age of files to delete. Defaults to 10 seconds. The number of shards to split the metabase into. More shards means more open log files, slower shutdown. But more shards also mean less lock contention and faster start time for individual cached requests. Defaults to 8. You have to delete the database directory each time you change this number. HybridCacheOptions with cache folder Constructor for the Hybrid Cache service. Options for the Hybrid Cache service. Logger instance for logging events. Get a list of issues within the Hybrid Cache. A list of issues within the cache. Start the Hybrid Cache. Cancellation token for the operation. A task representing the starting of the cache. Stop the Hybrid Cache. Cancellation token for the operation. A task representing the stopping of the cache. Retrieve or create a new set of bytes within the cache. The key to identify the cache entry. The function that retrieves missing data. Cancellation token for the operation. Whether or not to retrieve the content type of the data. The result of the cache retrieval or creation. Extension method for adding hybrid cache service to the IServiceCollection. Adds image flow hybrid cache service to the IServiceCollection. The IServiceCollection instance. The hybrid cache options. The updated IServiceCollection instance. Dependency Injection resolver with a known type as a parameter. The type / interface we need. Configure IoC. If it's already configured, do nothing. ConfigureServices for DI Identify common file formats and proxy streams to the HTTP response. Returns the MIME type based on the provided byte array data. The byte array data to check for the MIME type. A string representing the MIME type of the provided data. Proxies the given stream to the provided HTTP response, while also setting the content length and the content type based off the provided data if possible. The source stream to proxy. The HTTP response to write to. Return the Base64 encoded hash string Create a dictionary from a name value collection. A dictionary containing all the key-value pairs from a NameValueCollection The NameValueCollection containing the input key-value pairs. ImageflowModule Init Imageflow HttpModule Dispose Imageflow HttpModule ImageflowModuleOptions Use "public, max-age=2592000" to cache for 30 days and cache on CDNs and proxies. StartUp is helper class to enable registration of QueryStringRewrite functionality from main 2sxc dnn module Register QueryStringRewrite function for use in ImageJobInfo. This registration should be called from the main 2sxc dnn module before we use dnn imageflow. This configures .net Dependency Injection The StartUp is defined as an IServiceRouteMapper. This way DNN will auto-run this code before anything else This will be called by DNN when loading the assemblies. We just want to trigger the DependencyInjection-Configure Ensure that native assemblies are in place, before we start to use them. Replacing of native assemblies is only possible when this assemblies are not already locked, because are in use and loaded. This part is tricky and it is possible that it will be executed more times, until all work is done. ================================================ FILE: Dependencies/Koi/net6.0/Connect.Koi.deps.json ================================================ { "runtimeTarget": { "name": ".NETCoreApp,Version=v6.0", "signature": "" }, "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v6.0": { "Connect.Koi/03.00.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.0.0", "Microsoft.AspNetCore.Http": "2.0.0", "Microsoft.AspNetCore.Http.Abstractions": "2.0.0" }, "runtime": { "Connect.Koi.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "dependencies": { "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Abstractions": "2.0.0", "Microsoft.AspNetCore.WebUtilities": "2.0.0", "Microsoft.Extensions.ObjectPool": "2.0.0", "Microsoft.Extensions.Options": "2.0.0", "Microsoft.Net.Http.Headers": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Features": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "dependencies": { "Microsoft.Net.Http.Headers": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.ObjectPool/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.ObjectPool.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Options/2.0.0": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0", "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Primitives/2.0.0": { "dependencies": { "System.Runtime.CompilerServices.Unsafe": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Net.Http.Headers/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0", "System.Buffers": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "System.Buffers/4.4.0": {}, "System.Runtime.CompilerServices.Unsafe/4.4.0": {}, "System.Text.Encodings.Web/4.4.0": {} } }, "libraries": { "Connect.Koi/03.00.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Tdy0VkAnSeynmnbqF1JLchyPg5iQwmxTTG16byenoD2SXn/W8DR6HagZOZxvDb7gc4IerjdhIwuY8aV8nm7FAA==", "path": "microsoft.aspnetcore.html.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-2YNhcHrGxo2YufA8TYGyaEMIJwikyisZqEzHCRpIuI0D6ZXkA47U/3NJg2r/x5/gGHNM3TXO7DsqH88qRda+yg==", "path": "microsoft.aspnetcore.http/2.0.0", "hashPath": "microsoft.aspnetcore.http.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-pblZLY7IfNqhQ5wwGQ0vNq2mG6W5YgZI1fk7suEuwZsGxGEADNBAyNlTALM9L8nMXdvbp6aHP/t4wHrFpcL3Sw==", "path": "microsoft.aspnetcore.http.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.http.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-yk62muzFTZTKCQuo3nmVPkPvGBlM2qbdSxbX62TufuONuKQrTGQ/SwhwBbYutk5/YY7u4HETu0n9BKOn7mMgmA==", "path": "microsoft.aspnetcore.http.features/2.0.0", "hashPath": "microsoft.aspnetcore.http.features.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-RqDEwy7jdHJ0NunWydSzJrpODnsF7NPdB0KaRdG60H1bMEt4DbjcWkUb+XxjZ15uWCMi7clTQClpPuIFLwD1yQ==", "path": "microsoft.aspnetcore.webutilities/2.0.0", "hashPath": "microsoft.aspnetcore.webutilities.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-eUdJ0Q/GfVyUJc0Jal5L1QZLceL78pvEM9wEKcHeI24KorqMDoVX+gWsMGLulQMfOwsUaPtkpQM2pFERTzSfSg==", "path": "microsoft.extensions.dependencyinjection.abstractions/2.0.0", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.ObjectPool/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-drOmgNZCJiNEqFM/TvyqwtogS8wqoWGQCW5KB/CVGKL6VXHw8OOMdaHyspp8HPstP9UDnrnuq+8eaCaAcQg6tA==", "path": "microsoft.extensions.objectpool/2.0.0", "hashPath": "microsoft.extensions.objectpool.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Options/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-sAKBgjl2gWsECBLLR9K54T7/uZaP2n9GhMYHay/oOLfvpvX0+iNAlQ2NJgVE352C9Fs5CDV3VbNTK8T2aNKQFA==", "path": "microsoft.extensions.options/2.0.0", "hashPath": "microsoft.extensions.options.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Primitives/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-ukg53qNlqTrK38WA30b5qhw0GD7y3jdI9PHHASjdKyTcBHTevFM2o23tyk3pWCgAV27Bbkm+CPQ2zUe1ZOuYSA==", "path": "microsoft.extensions.primitives/2.0.0", "hashPath": "microsoft.extensions.primitives.2.0.0.nupkg.sha512" }, "Microsoft.Net.Http.Headers/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Rm9zeNCWyNrGnysHdRXJpNfeDVlPzzFuidSuRLRNvOrnw71vgNPlR4H9wHo2hG/oSaruukqNjK06MDQqb+eXhA==", "path": "microsoft.net.http.headers/2.0.0", "hashPath": "microsoft.net.http.headers.2.0.0.nupkg.sha512" }, "System.Buffers/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==", "path": "system.buffers/4.4.0", "hashPath": "system.buffers.4.4.0.nupkg.sha512" }, "System.Runtime.CompilerServices.Unsafe/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-9dLLuBxr5GNmOfl2jSMcsHuteEg32BEfUotmmUkmZjpR3RpVHE8YQwt0ow3p6prwA1ME8WqDVZqrr8z6H8G+Kw==", "path": "system.runtime.compilerservices.unsafe/4.4.0", "hashPath": "system.runtime.compilerservices.unsafe.4.4.0.nupkg.sha512" }, "System.Text.Encodings.Web/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-l/tYeikqMHX2MD2jzrHDfR9ejrpTTF7wvAEbR51AMvzip1wSJgiURbDik4iv/w7ZgytmTD/hlwpplEhF9bmFNw==", "path": "system.text.encodings.web/4.4.0", "hashPath": "system.text.encodings.web.4.4.0.nupkg.sha512" } } } ================================================ FILE: Dependencies/Koi/net7.0/Connect.Koi.deps.json ================================================ { "runtimeTarget": { "name": ".NETCoreApp,Version=v7.0", "signature": "" }, "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v7.0": { "Connect.Koi/03.00.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.0.0", "Microsoft.AspNetCore.Http": "2.0.0", "Microsoft.AspNetCore.Http.Abstractions": "2.0.0" }, "runtime": { "Connect.Koi.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "dependencies": { "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Abstractions": "2.0.0", "Microsoft.AspNetCore.WebUtilities": "2.0.0", "Microsoft.Extensions.ObjectPool": "2.0.0", "Microsoft.Extensions.Options": "2.0.0", "Microsoft.Net.Http.Headers": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Features": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "dependencies": { "Microsoft.Net.Http.Headers": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.ObjectPool/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.ObjectPool.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Options/2.0.0": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0", "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Primitives/2.0.0": { "dependencies": { "System.Runtime.CompilerServices.Unsafe": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Net.Http.Headers/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0", "System.Buffers": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "System.Buffers/4.4.0": {}, "System.Runtime.CompilerServices.Unsafe/4.4.0": {}, "System.Text.Encodings.Web/4.4.0": {} } }, "libraries": { "Connect.Koi/03.00.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Tdy0VkAnSeynmnbqF1JLchyPg5iQwmxTTG16byenoD2SXn/W8DR6HagZOZxvDb7gc4IerjdhIwuY8aV8nm7FAA==", "path": "microsoft.aspnetcore.html.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-2YNhcHrGxo2YufA8TYGyaEMIJwikyisZqEzHCRpIuI0D6ZXkA47U/3NJg2r/x5/gGHNM3TXO7DsqH88qRda+yg==", "path": "microsoft.aspnetcore.http/2.0.0", "hashPath": "microsoft.aspnetcore.http.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-pblZLY7IfNqhQ5wwGQ0vNq2mG6W5YgZI1fk7suEuwZsGxGEADNBAyNlTALM9L8nMXdvbp6aHP/t4wHrFpcL3Sw==", "path": "microsoft.aspnetcore.http.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.http.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-yk62muzFTZTKCQuo3nmVPkPvGBlM2qbdSxbX62TufuONuKQrTGQ/SwhwBbYutk5/YY7u4HETu0n9BKOn7mMgmA==", "path": "microsoft.aspnetcore.http.features/2.0.0", "hashPath": "microsoft.aspnetcore.http.features.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-RqDEwy7jdHJ0NunWydSzJrpODnsF7NPdB0KaRdG60H1bMEt4DbjcWkUb+XxjZ15uWCMi7clTQClpPuIFLwD1yQ==", "path": "microsoft.aspnetcore.webutilities/2.0.0", "hashPath": "microsoft.aspnetcore.webutilities.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-eUdJ0Q/GfVyUJc0Jal5L1QZLceL78pvEM9wEKcHeI24KorqMDoVX+gWsMGLulQMfOwsUaPtkpQM2pFERTzSfSg==", "path": "microsoft.extensions.dependencyinjection.abstractions/2.0.0", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.ObjectPool/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-drOmgNZCJiNEqFM/TvyqwtogS8wqoWGQCW5KB/CVGKL6VXHw8OOMdaHyspp8HPstP9UDnrnuq+8eaCaAcQg6tA==", "path": "microsoft.extensions.objectpool/2.0.0", "hashPath": "microsoft.extensions.objectpool.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Options/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-sAKBgjl2gWsECBLLR9K54T7/uZaP2n9GhMYHay/oOLfvpvX0+iNAlQ2NJgVE352C9Fs5CDV3VbNTK8T2aNKQFA==", "path": "microsoft.extensions.options/2.0.0", "hashPath": "microsoft.extensions.options.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Primitives/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-ukg53qNlqTrK38WA30b5qhw0GD7y3jdI9PHHASjdKyTcBHTevFM2o23tyk3pWCgAV27Bbkm+CPQ2zUe1ZOuYSA==", "path": "microsoft.extensions.primitives/2.0.0", "hashPath": "microsoft.extensions.primitives.2.0.0.nupkg.sha512" }, "Microsoft.Net.Http.Headers/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Rm9zeNCWyNrGnysHdRXJpNfeDVlPzzFuidSuRLRNvOrnw71vgNPlR4H9wHo2hG/oSaruukqNjK06MDQqb+eXhA==", "path": "microsoft.net.http.headers/2.0.0", "hashPath": "microsoft.net.http.headers.2.0.0.nupkg.sha512" }, "System.Buffers/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==", "path": "system.buffers/4.4.0", "hashPath": "system.buffers.4.4.0.nupkg.sha512" }, "System.Runtime.CompilerServices.Unsafe/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-9dLLuBxr5GNmOfl2jSMcsHuteEg32BEfUotmmUkmZjpR3RpVHE8YQwt0ow3p6prwA1ME8WqDVZqrr8z6H8G+Kw==", "path": "system.runtime.compilerservices.unsafe/4.4.0", "hashPath": "system.runtime.compilerservices.unsafe.4.4.0.nupkg.sha512" }, "System.Text.Encodings.Web/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-l/tYeikqMHX2MD2jzrHDfR9ejrpTTF7wvAEbR51AMvzip1wSJgiURbDik4iv/w7ZgytmTD/hlwpplEhF9bmFNw==", "path": "system.text.encodings.web/4.4.0", "hashPath": "system.text.encodings.web.4.4.0.nupkg.sha512" } } } ================================================ FILE: Dependencies/Koi/netstandard2.0/Connect.Koi.deps.json ================================================ { "runtimeTarget": { "name": ".NETStandard,Version=v2.0/", "signature": "" }, "compilationOptions": {}, "targets": { ".NETStandard,Version=v2.0": {}, ".NETStandard,Version=v2.0/": { "Connect.Koi/03.00.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.0.0", "Microsoft.AspNetCore.Http": "2.0.0", "Microsoft.AspNetCore.Http.Abstractions": "2.0.0", "NETStandard.Library": "2.0.3" }, "runtime": { "Connect.Koi.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "dependencies": { "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Abstractions": "2.0.0", "Microsoft.AspNetCore.WebUtilities": "2.0.0", "Microsoft.Extensions.ObjectPool": "2.0.0", "Microsoft.Extensions.Options": "2.0.0", "Microsoft.Net.Http.Headers": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "dependencies": { "Microsoft.AspNetCore.Http.Features": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "dependencies": { "Microsoft.Net.Http.Headers": "2.0.0", "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.ObjectPool/2.0.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.ObjectPool.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Options/2.0.0": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0", "Microsoft.Extensions.Primitives": "2.0.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Extensions.Primitives/2.0.0": { "dependencies": { "System.Runtime.CompilerServices.Unsafe": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Net.Http.Headers/2.0.0": { "dependencies": { "Microsoft.Extensions.Primitives": "2.0.0", "System.Buffers": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.NETCore.Platforms/1.1.0": {}, "NETStandard.Library/2.0.3": { "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0" } }, "System.Buffers/4.4.0": { "runtime": { "lib/netstandard2.0/System.Buffers.dll": { "assemblyVersion": "4.0.2.0", "fileVersion": "4.6.25519.3" } } }, "System.Runtime.CompilerServices.Unsafe/4.4.0": { "runtime": { "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": { "assemblyVersion": "4.0.3.0", "fileVersion": "0.0.0.0" } } }, "System.Text.Encodings.Web/4.4.0": { "runtime": { "lib/netstandard2.0/System.Text.Encodings.Web.dll": { "assemblyVersion": "4.0.2.0", "fileVersion": "4.6.25519.3" } } } } }, "libraries": { "Connect.Koi/03.00.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Tdy0VkAnSeynmnbqF1JLchyPg5iQwmxTTG16byenoD2SXn/W8DR6HagZOZxvDb7gc4IerjdhIwuY8aV8nm7FAA==", "path": "microsoft.aspnetcore.html.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-2YNhcHrGxo2YufA8TYGyaEMIJwikyisZqEzHCRpIuI0D6ZXkA47U/3NJg2r/x5/gGHNM3TXO7DsqH88qRda+yg==", "path": "microsoft.aspnetcore.http/2.0.0", "hashPath": "microsoft.aspnetcore.http.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-pblZLY7IfNqhQ5wwGQ0vNq2mG6W5YgZI1fk7suEuwZsGxGEADNBAyNlTALM9L8nMXdvbp6aHP/t4wHrFpcL3Sw==", "path": "microsoft.aspnetcore.http.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.http.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.Http.Features/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-yk62muzFTZTKCQuo3nmVPkPvGBlM2qbdSxbX62TufuONuKQrTGQ/SwhwBbYutk5/YY7u4HETu0n9BKOn7mMgmA==", "path": "microsoft.aspnetcore.http.features/2.0.0", "hashPath": "microsoft.aspnetcore.http.features.2.0.0.nupkg.sha512" }, "Microsoft.AspNetCore.WebUtilities/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-RqDEwy7jdHJ0NunWydSzJrpODnsF7NPdB0KaRdG60H1bMEt4DbjcWkUb+XxjZ15uWCMi7clTQClpPuIFLwD1yQ==", "path": "microsoft.aspnetcore.webutilities/2.0.0", "hashPath": "microsoft.aspnetcore.webutilities.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-eUdJ0Q/GfVyUJc0Jal5L1QZLceL78pvEM9wEKcHeI24KorqMDoVX+gWsMGLulQMfOwsUaPtkpQM2pFERTzSfSg==", "path": "microsoft.extensions.dependencyinjection.abstractions/2.0.0", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.ObjectPool/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-drOmgNZCJiNEqFM/TvyqwtogS8wqoWGQCW5KB/CVGKL6VXHw8OOMdaHyspp8HPstP9UDnrnuq+8eaCaAcQg6tA==", "path": "microsoft.extensions.objectpool/2.0.0", "hashPath": "microsoft.extensions.objectpool.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Options/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-sAKBgjl2gWsECBLLR9K54T7/uZaP2n9GhMYHay/oOLfvpvX0+iNAlQ2NJgVE352C9Fs5CDV3VbNTK8T2aNKQFA==", "path": "microsoft.extensions.options/2.0.0", "hashPath": "microsoft.extensions.options.2.0.0.nupkg.sha512" }, "Microsoft.Extensions.Primitives/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-ukg53qNlqTrK38WA30b5qhw0GD7y3jdI9PHHASjdKyTcBHTevFM2o23tyk3pWCgAV27Bbkm+CPQ2zUe1ZOuYSA==", "path": "microsoft.extensions.primitives/2.0.0", "hashPath": "microsoft.extensions.primitives.2.0.0.nupkg.sha512" }, "Microsoft.Net.Http.Headers/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Rm9zeNCWyNrGnysHdRXJpNfeDVlPzzFuidSuRLRNvOrnw71vgNPlR4H9wHo2hG/oSaruukqNjK06MDQqb+eXhA==", "path": "microsoft.net.http.headers/2.0.0", "hashPath": "microsoft.net.http.headers.2.0.0.nupkg.sha512" }, "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "serviceable": true, "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", "path": "microsoft.netcore.platforms/1.1.0", "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" }, "NETStandard.Library/2.0.3": { "type": "package", "serviceable": true, "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, "System.Buffers/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==", "path": "system.buffers/4.4.0", "hashPath": "system.buffers.4.4.0.nupkg.sha512" }, "System.Runtime.CompilerServices.Unsafe/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-9dLLuBxr5GNmOfl2jSMcsHuteEg32BEfUotmmUkmZjpR3RpVHE8YQwt0ow3p6prwA1ME8WqDVZqrr8z6H8G+Kw==", "path": "system.runtime.compilerservices.unsafe/4.4.0", "hashPath": "system.runtime.compilerservices.unsafe.4.4.0.nupkg.sha512" }, "System.Text.Encodings.Web/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-l/tYeikqMHX2MD2jzrHDfR9ejrpTTF7wvAEbR51AMvzip1wSJgiURbDik4iv/w7ZgytmTD/hlwpplEhF9bmFNw==", "path": "system.text.encodings.web/4.4.0", "hashPath": "system.text.encodings.web.4.4.0.nupkg.sha512" } } } ================================================ FILE: Dependencies/RazorBlade/Release/net6.0/ToSic.Razor.deps.json ================================================ { "runtimeTarget": { "name": ".NETCoreApp,Version=v6.0", "signature": "" }, "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v6.0": { "ToSic.Razor/04.04.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.2.0", "Microsoft.Extensions.DependencyInjection": "3.1.16" }, "runtime": { "ToSic.Razor.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.2.0": { "dependencies": { "System.Text.Encodings.Web": "4.5.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.2.0.0", "fileVersion": "2.2.0.18316" } } }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.16" } }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": {}, "System.Text.Encodings.Web/4.5.0": {} } }, "libraries": { "ToSic.Razor/04.04.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.2.0": { "type": "package", "serviceable": true, "sha512": "sha512-Y4rs5aMEXY8G7wJo5S3EEt6ltqyOTr/qOeZzfn+hw/fuQj5GppGckMY5psGLETo1U9hcT5MmAhaT5xtusM1b5g==", "path": "microsoft.aspnetcore.html.abstractions/2.2.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.2.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-zgV27UpG5tc/oW23Gh4r6DA1biMvdPv/efcNVp25Cx7bDcdoP3/snrdH+dscaOyjXtiZtYXELN4cDlyIAvNO+g==", "path": "microsoft.extensions.dependencyinjection/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.3.1.16.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-pFCBSw5MJiuucZAG+IrJLcQd4c7JIgc/7t6Mm6Q31wjEeamKQ+r7p1Aw21IHJm5KHqLNG/UdeaIt6ffullkC0Q==", "path": "microsoft.extensions.dependencyinjection.abstractions/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.3.1.16.nupkg.sha512" }, "System.Text.Encodings.Web/4.5.0": { "type": "package", "serviceable": true, "sha512": "sha512-Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==", "path": "system.text.encodings.web/4.5.0", "hashPath": "system.text.encodings.web.4.5.0.nupkg.sha512" } } } ================================================ FILE: Dependencies/RazorBlade/Release/net7.0/ToSic.Razor.deps.json ================================================ { "runtimeTarget": { "name": ".NETCoreApp,Version=v7.0", "signature": "" }, "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v7.0": { "ToSic.Razor/04.04.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.2.0", "Microsoft.Extensions.DependencyInjection": "3.1.16" }, "runtime": { "ToSic.Razor.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.2.0": { "dependencies": { "System.Text.Encodings.Web": "4.5.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.2.0.0", "fileVersion": "2.2.0.18316" } } }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.16" } }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": {}, "System.Text.Encodings.Web/4.5.0": {} } }, "libraries": { "ToSic.Razor/04.04.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.2.0": { "type": "package", "serviceable": true, "sha512": "sha512-Y4rs5aMEXY8G7wJo5S3EEt6ltqyOTr/qOeZzfn+hw/fuQj5GppGckMY5psGLETo1U9hcT5MmAhaT5xtusM1b5g==", "path": "microsoft.aspnetcore.html.abstractions/2.2.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.2.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-zgV27UpG5tc/oW23Gh4r6DA1biMvdPv/efcNVp25Cx7bDcdoP3/snrdH+dscaOyjXtiZtYXELN4cDlyIAvNO+g==", "path": "microsoft.extensions.dependencyinjection/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.3.1.16.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-pFCBSw5MJiuucZAG+IrJLcQd4c7JIgc/7t6Mm6Q31wjEeamKQ+r7p1Aw21IHJm5KHqLNG/UdeaIt6ffullkC0Q==", "path": "microsoft.extensions.dependencyinjection.abstractions/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.3.1.16.nupkg.sha512" }, "System.Text.Encodings.Web/4.5.0": { "type": "package", "serviceable": true, "sha512": "sha512-Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==", "path": "system.text.encodings.web/4.5.0", "hashPath": "system.text.encodings.web.4.5.0.nupkg.sha512" } } } ================================================ FILE: Dependencies/RazorBlade/Release/netstandard2.0/ToSic.Razor.deps.json ================================================ { "runtimeTarget": { "name": ".NETStandard,Version=v2.0/", "signature": "" }, "compilationOptions": {}, "targets": { ".NETStandard,Version=v2.0": {}, ".NETStandard,Version=v2.0/": { "ToSic.Razor/04.04.01": { "dependencies": { "Microsoft.AspNetCore.Html.Abstractions": "2.0.0", "Microsoft.Extensions.DependencyInjection": "3.1.16", "NETStandard.Library": "2.0.3" }, "runtime": { "ToSic.Razor.dll": {} } }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "dependencies": { "System.Text.Encodings.Web": "4.4.0" }, "runtime": { "lib/netstandard2.0/Microsoft.AspNetCore.Html.Abstractions.dll": { "assemblyVersion": "2.0.0.0", "fileVersion": "2.0.0.17205" } } }, "Microsoft.Bcl.AsyncInterfaces/1.1.1": { "dependencies": { "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.16" } }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": {}, "Microsoft.NETCore.Platforms/1.1.0": {}, "NETStandard.Library/2.0.3": { "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0" } }, "System.Runtime.CompilerServices.Unsafe/4.5.3": {}, "System.Text.Encodings.Web/4.4.0": { "runtime": { "lib/netstandard2.0/System.Text.Encodings.Web.dll": { "assemblyVersion": "4.0.2.0", "fileVersion": "4.6.25519.3" } } }, "System.Threading.Tasks.Extensions/4.5.4": { "dependencies": { "System.Runtime.CompilerServices.Unsafe": "4.5.3" } } } }, "libraries": { "ToSic.Razor/04.04.01": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.AspNetCore.Html.Abstractions/2.0.0": { "type": "package", "serviceable": true, "sha512": "sha512-Tdy0VkAnSeynmnbqF1JLchyPg5iQwmxTTG16byenoD2SXn/W8DR6HagZOZxvDb7gc4IerjdhIwuY8aV8nm7FAA==", "path": "microsoft.aspnetcore.html.abstractions/2.0.0", "hashPath": "microsoft.aspnetcore.html.abstractions.2.0.0.nupkg.sha512" }, "Microsoft.Bcl.AsyncInterfaces/1.1.1": { "type": "package", "serviceable": true, "sha512": "sha512-yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==", "path": "microsoft.bcl.asyncinterfaces/1.1.1", "hashPath": "microsoft.bcl.asyncinterfaces.1.1.1.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-zgV27UpG5tc/oW23Gh4r6DA1biMvdPv/efcNVp25Cx7bDcdoP3/snrdH+dscaOyjXtiZtYXELN4cDlyIAvNO+g==", "path": "microsoft.extensions.dependencyinjection/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.3.1.16.nupkg.sha512" }, "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.16": { "type": "package", "serviceable": true, "sha512": "sha512-pFCBSw5MJiuucZAG+IrJLcQd4c7JIgc/7t6Mm6Q31wjEeamKQ+r7p1Aw21IHJm5KHqLNG/UdeaIt6ffullkC0Q==", "path": "microsoft.extensions.dependencyinjection.abstractions/3.1.16", "hashPath": "microsoft.extensions.dependencyinjection.abstractions.3.1.16.nupkg.sha512" }, "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "serviceable": true, "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", "path": "microsoft.netcore.platforms/1.1.0", "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" }, "NETStandard.Library/2.0.3": { "type": "package", "serviceable": true, "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, "System.Runtime.CompilerServices.Unsafe/4.5.3": { "type": "package", "serviceable": true, "sha512": "sha512-3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==", "path": "system.runtime.compilerservices.unsafe/4.5.3", "hashPath": "system.runtime.compilerservices.unsafe.4.5.3.nupkg.sha512" }, "System.Text.Encodings.Web/4.4.0": { "type": "package", "serviceable": true, "sha512": "sha512-l/tYeikqMHX2MD2jzrHDfR9ejrpTTF7wvAEbR51AMvzip1wSJgiURbDik4iv/w7ZgytmTD/hlwpplEhF9bmFNw==", "path": "system.text.encodings.web/4.4.0", "hashPath": "system.text.encodings.web.4.4.0.nupkg.sha512" }, "System.Threading.Tasks.Extensions/4.5.4": { "type": "package", "serviceable": true, "sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", "path": "system.threading.tasks.extensions/4.5.4", "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512" } } } ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 2sic Internet Solutions GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Src/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates .vs # Build results [Dd]ebug/ [Rr]elease/ x64/ build/ [Bb]in/ [Oo]bj/ # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets !packages/*/build/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* *_i.c *_p.c *.ilk *.meta *.obj *.pch *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.log *.scc # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper # Windows Azure Build Output csx *.build.csdef # Others ClientBin/ # ========================= # Windows detritus # ========================= # Windows image file caches Thumbs.db ehthumbs.db # Folder config file Desktop.ini # ========================= # DNN Module # ========================= # Ignore .manifest file created by DNN while installing the module Resources.zip.manifest # Ignore ModulePackages /ModulePackages/ /Upgrade/Log /Packages/ /_/ # include bin files from koi, razor blade, and old-razorblade !koi/bin/ !razorblade/bin/ !razorblade-old/bin/ !Extensions/ImageResizer/bin/ # Test data \.data-custom/configurations/features.json .data-custom/contenttypes 2/ \.data-custom/configurations/** .data-custom/configurations/** # Assets # Normally we would place this in the assets folder, but then the .gitignore is included in the DNN bundle, so we have the rules here # exclude map files from dist and system # note that we want to keep the old angular maps # because they never change, and in case of emergencies they are only located here and not on sources Assets/dist/**/*.map Assets/system/**/*.map Assets/js/*.map ================================================ FILE: Src/2sxc Integration.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28803.202 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Core", "..\..\eav-server\ToSic.Eav.Core\ToSic.Eav.Core.csproj", "{82F94588-269B-4CDD-98D1-D5CB14C39090}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Apps", "..\..\eav-server\ToSic.Eav.Apps\ToSic.Eav.Apps.csproj", "{FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Tests", "Dnn.Tests\ToSic.Sxc.Tests\ToSic.Sxc.Tests.csproj", "{0EA1085A-D15F-4254-8A79-DE811C47EBF4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.DataSources", "..\..\eav-server\ToSic.Eav.DataSources\ToSic.Eav.DataSources.csproj", "{93149D23-E6CC-43AF-97D0-32D89D29D714}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Repository.Efc", "..\..\eav-server\ToSic.Eav.Repository.Efc\ToSic.Eav.Repository.Efc.csproj", "{CB322A0B-0C28-4165-87A8-7BBE78911451}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Persistence.Efc", "..\..\eav-server\ToSic.Eav.Persistence.Efc\ToSic.Eav.Persistence.Efc.csproj", "{B45F98A5-BBA9-4418-A5A1-7CA747E1698B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.ImportExport", "..\..\eav-server\ToSic.Eav.ImportExport\ToSic.Eav.ImportExport.csproj", "{1253087A-070D-4BF7-B3C2-841537489910}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav", "..\..\eav-server\ToSic.Eav\ToSic.Eav.csproj", "{892F9D3B-0578-46A1-A46A-B694A7E15669}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.WebApi", "..\..\eav-server\ToSic.Eav.WebApi\ToSic.Eav.WebApi.csproj", "{04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc", "Sxc\ToSic.Sxc\ToSic.Sxc.csproj", "{5D87EB0C-BF67-4814-A0FF-D96256C9B852}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2sxc Core", "2sxc Core", "{5CD8015A-76D8-4633-8469-53B62A6C1894}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eav", "Eav", "{2DBCC960-1C0B-494F-9E21-8707A1D344C3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.WebApi", "Sxc\ToSic.Sxc.WebApi\ToSic.Sxc.WebApi.csproj", "{80D15F35-334B-4C7C-AF94-B0FF1E6CC354}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc", "Mvc", "{F1366AA6-6508-47E4-AE39-CB39537CA220}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Mvc", "Mvc\ToSic.Sxc.Mvc\ToSic.Sxc.Mvc.csproj", "{AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Website", "Mvc\Website\Website.csproj", "{28A58816-468A-44E0-85CA-0428F0D87E27}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Razor.Engine", "Razor\ToSic.Sxc.Razor.Engine\ToSic.Sxc.Razor.Engine.csproj", "{9269847A-20A1-4F72-9E14-36BFE0323632}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Hybrid", "Razor\ToSic.Sxc.Hybrid\ToSic.Sxc.Hybrid.csproj", "{ACD30ED0-0B6E-48E7-A898-CF42C93E857A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor", "Razor", "{DD59EAFD-02D1-4285-B8BE-D2DD40536304}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Integration", "Integration", "{783FE270-1D23-4B43-8B17-C87C0697DBD5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicEav01", "Integration\BasicEav01\BasicEav01.csproj", "{7F370FB9-704B-400C-B907-F4D7B884006A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SxcEdit01", "Integration\SxcEdit01\SxcEdit01.csproj", "{67672FFA-702D-423F-906E-5E6A6D6B9EFD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|DNN = Debug|DNN Debug|Windows-x64 = Debug|Windows-x64 Debug|Windows-x86 = Debug|Windows-x86 Release|Any CPU = Release|Any CPU Release|DNN = Release|DNN Release|Windows-x64 = Release|Windows-x64 Release|Windows-x86 = Release|Windows-x86 Testing|Any CPU = Testing|Any CPU Testing|DNN = Testing|DNN Testing|Windows-x64 = Testing|Windows-x64 Testing|Windows-x86 = Testing|Windows-x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Any CPU.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|DNN.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|DNN.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x64.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x86.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Any CPU.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Any CPU.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|DNN.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|DNN.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x64.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x64.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x86.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x86.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Any CPU.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|DNN.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|DNN.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x64.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x86.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|DNN.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|DNN.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x64.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x64.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x86.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x86.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|DNN.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|DNN.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x64.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x86.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|DNN.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|DNN.Build.0 = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x64.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x86.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x86.Build.0 = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Any CPU.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|DNN.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|DNN.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x64.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x86.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|DNN.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|DNN.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x64.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x86.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|DNN.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|DNN.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x64.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x64.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x86.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x86.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|DNN.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|DNN.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x64.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x86.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|DNN.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|DNN.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x64.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x86.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|DNN.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|DNN.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x64.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x64.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x86.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x86.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|DNN.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|DNN.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x64.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x86.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|DNN.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|DNN.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x64.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x86.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|DNN.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|DNN.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x64.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x64.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x86.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x86.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|DNN.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|DNN.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x64.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x86.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|DNN.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|DNN.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x64.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x86.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|DNN.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|DNN.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x64.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x64.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x86.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x86.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|DNN.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|DNN.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x64.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x86.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Any CPU.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|DNN.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|DNN.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x64.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x86.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Any CPU.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Any CPU.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|DNN.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|DNN.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x64.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x64.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x86.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x86.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Any CPU.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|DNN.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|DNN.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x64.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x86.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|DNN.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|DNN.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x64.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x86.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|DNN.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|DNN.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x64.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x64.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x86.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x86.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|DNN.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|DNN.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x64.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x86.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|DNN.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|DNN.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x64.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x86.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Any CPU.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|DNN.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|DNN.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x64.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x64.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x86.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x86.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Any CPU.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|DNN.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|DNN.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x64.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x86.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|DNN.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|DNN.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x64.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x86.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|DNN.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|DNN.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x64.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x64.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x86.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x86.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|DNN.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|DNN.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x64.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x86.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|DNN.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|DNN.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x64.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x86.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|DNN.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|DNN.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x64.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x64.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x86.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x86.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Any CPU.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|DNN.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|DNN.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x64.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x86.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Any CPU.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|DNN.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|DNN.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x64.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x86.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Any CPU.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|DNN.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|DNN.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x64.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x64.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x86.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x86.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Any CPU.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|DNN.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|DNN.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x64.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x86.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|DNN.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|DNN.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x64.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x86.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|DNN.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|DNN.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x64.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x64.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x86.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x86.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|DNN.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|DNN.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x64.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x64.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x86.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x86.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|DNN.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|DNN.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x64.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x86.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Any CPU.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|DNN.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|DNN.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x64.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x64.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x86.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x86.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Any CPU.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Any CPU.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|DNN.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|DNN.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x64.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x64.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x86.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x86.Build.0 = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|DNN.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|DNN.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Windows-x64.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Windows-x86.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|DNN.ActiveCfg = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|DNN.Build.0 = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Windows-x64.ActiveCfg = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Windows-x64.Build.0 = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Windows-x86.ActiveCfg = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Windows-x86.Build.0 = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Any CPU.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|DNN.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|DNN.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Windows-x64.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Windows-x86.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Any CPU.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|DNN.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|DNN.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Windows-x64.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Windows-x86.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Any CPU.Build.0 = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|DNN.ActiveCfg = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|DNN.Build.0 = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Windows-x64.ActiveCfg = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Windows-x64.Build.0 = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Windows-x86.ActiveCfg = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Windows-x86.Build.0 = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Any CPU.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|DNN.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|DNN.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Windows-x64.Build.0 = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Windows-x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {82F94588-269B-4CDD-98D1-D5CB14C39090} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {0EA1085A-D15F-4254-8A79-DE811C47EBF4} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {93149D23-E6CC-43AF-97D0-32D89D29D714} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {CB322A0B-0C28-4165-87A8-7BBE78911451} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {B45F98A5-BBA9-4418-A5A1-7CA747E1698B} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {1253087A-070D-4BF7-B3C2-841537489910} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {892F9D3B-0578-46A1-A46A-B694A7E15669} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {5D87EB0C-BF67-4814-A0FF-D96256C9B852} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {80D15F35-334B-4C7C-AF94-B0FF1E6CC354} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {28A58816-468A-44E0-85CA-0428F0D87E27} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {9269847A-20A1-4F72-9E14-36BFE0323632} = {DD59EAFD-02D1-4285-B8BE-D2DD40536304} {ACD30ED0-0B6E-48E7-A898-CF42C93E857A} = {DD59EAFD-02D1-4285-B8BE-D2DD40536304} {7F370FB9-704B-400C-B907-F4D7B884006A} = {783FE270-1D23-4B43-8B17-C87C0697DBD5} {67672FFA-702D-423F-906E-5E6A6D6B9EFD} = {783FE270-1D23-4B43-8B17-C87C0697DBD5} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.2.1.505.0\lib\NET35 SolutionGuid = {705647E1-B5B1-4D94-888C-1D918095554C} EndGlobalSection EndGlobal ================================================ FILE: Src/2sxc Integration.sln.DotSettings ================================================  True True True True True True True True True True True True True True True True ================================================ FILE: Src/2sxc Multi-Target Oqt510.sln.DotSettings ================================================  True ================================================ FILE: Src/2sxc Multi-Target.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 VisualStudioVersion = 18.0.11217.181 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Apps", "..\..\eav-server\ToSic.Eav.Apps\ToSic.Eav.Apps.csproj", "{FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Dnn.WebApi", "Dnn\ToSic.Sxc.Dnn.WebApi\ToSic.Sxc.Dnn.WebApi.csproj", "{8398FE44-7164-48CB-96CF-74BA9C270BD2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Dnn.Razor", "Dnn\ToSic.Sxc.Dnn.Razor\ToSic.Sxc.Dnn.Razor.csproj", "{78A558AF-F274-4E3C-95FE-8DE9226E0EBC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Dnn", "Dnn\ToSic.Sxc.Dnn\ToSic.Sxc.Dnn.csproj", "{D4250011-B9BE-4326-9736-4F0122C79802}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Testing.Performance", "..\..\eav-server\ToSic.Testing.Performance\ToSic.Testing.Performance.csproj", "{6735DC37-2849-45DB-BA76-C5663B6FFB1F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Dnn.Core", "Dnn\ToSic.Sxc.Dnn.Core\ToSic.Sxc.Dnn.Core.csproj", "{A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.WebApi.Tests", "Sxc\ToSic.Sxc.WebApi.Tests\ToSic.Sxc.WebApi.Tests.csproj", "{000D1ACB-7247-42CF-A86F-987A0AF68BA1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.DataSources", "..\..\eav-server\ToSic.Eav.DataSources\ToSic.Eav.DataSources.csproj", "{93149D23-E6CC-43AF-97D0-32D89D29D714}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Repository.Efc", "..\..\eav-server\ToSic.Eav.Repository.Efc\ToSic.Eav.Repository.Efc.csproj", "{CB322A0B-0C28-4165-87A8-7BBE78911451}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Persistence.Efc", "..\..\eav-server\ToSic.Eav.Persistence.Efc\ToSic.Eav.Persistence.Efc.csproj", "{B45F98A5-BBA9-4418-A5A1-7CA747E1698B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.ImportExport", "..\..\eav-server\ToSic.Eav.ImportExport\ToSic.Eav.ImportExport.csproj", "{1253087A-070D-4BF7-B3C2-841537489910}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.WebApi", "..\..\eav-server\ToSic.Eav.WebApi\ToSic.Eav.WebApi.csproj", "{04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform Dnn", "Platform Dnn", "{82831295-FA89-4F5A-9420-DB6E15A8AD99}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.3 Sxc.Services", "L3.3 Sxc.Services", "{5CD8015A-76D8-4633-8469-53B62A6C1894}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.1 Eav.Data", "L2.1 Eav.Data", "{2DBCC960-1C0B-494F-9E21-8707A1D344C3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.4 Eav.DataSources", "L2.4 Eav.DataSources", "{6D320108-78ED-40E6-83F7-9CD423471DB3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.WebApi", "Sxc\ToSic.Sxc.WebApi\ToSic.Sxc.WebApi.csproj", "{80D15F35-334B-4C7C-AF94-B0FF1E6CC354}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform Mvc", "Platform Mvc", "{F1366AA6-6508-47E4-AE39-CB39537CA220}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Mvc", "Mvc\ToSic.Sxc.Mvc\ToSic.Sxc.Mvc.csproj", "{AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Website", "Mvc\Website\Website.csproj", "{28A58816-468A-44E0-85CA-0428F0D87E27}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform Oqtane", "Platform Oqtane", "{C2BEB114-B1DB-404D-8442-A75809059619}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Oqt.Server", "Oqtane\ToSic.Sxc.Oqt.Server\ToSic.Sxc.Oqt.Server.csproj", "{8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Oqt.Client", "Oqtane\ToSic.Sxc.Oqt.Client\ToSic.Sxc.Oqt.Client.csproj", "{5D7BC881-21DD-4123-985E-BBFFD8D683F3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Oqt.Shared", "Oqtane\ToSic.Sxc.Oqt.Shared\ToSic.Sxc.Oqt.Shared.csproj", "{4E24511B-CF81-4F93-AF8F-D41D306133E9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Oqt.Package", "Oqtane\ToSic.Sxc.Oqt.Package\ToSic.Sxc.Oqt.Package.csproj", "{8885C3AD-A7D0-4725-BF28-23C55522083E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Server", "..\..\oqtane\oqtane.framework\Oqtane.Server\Oqtane.Server.csproj", "{1F1C0F04-736D-4A4D-A324-8FCA8C373738}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Shared", "..\..\oqtane\oqtane.framework\Oqtane.Shared\Oqtane.Shared.csproj", "{748C1FF5-D9A0-4F8D-A113-0D1C54791CE8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Client", "..\..\oqtane\oqtane.framework\Oqtane.Client\Oqtane.Client.csproj", "{62B0A822-C3ED-436E-A67B-8E99A7E89B24}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Razor", "Razor\ToSic.Sxc.Razor\ToSic.Sxc.Razor.csproj", "{9269847A-20A1-4F72-9E14-36BFE0323632}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layer 4 - ToSic.Sxc.Razor (net core)", "Layer 4 - ToSic.Sxc.Razor (net core)", "{DD59EAFD-02D1-4285-B8BE-D2DD40536304}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform Integration Tests", "Platform Integration Tests", "{783FE270-1D23-4B43-8B17-C87C0697DBD5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicEav01", "Integration\BasicEav01\BasicEav01.csproj", "{7F370FB9-704B-400C-B907-F4D7B884006A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SxcEdit01", "Integration\SxcEdit01\SxcEdit01.csproj", "{67672FFA-702D-423F-906E-5E6A6D6B9EFD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Oqt.Server.Tests", "Oqtane\ToSic.Sxc.Oqt.Server.Tests\ToSic.Sxc.Oqt.Server.Tests.csproj", "{4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L1.1 Sys (Core)", "L1.1 Sys (Core)", "{32E45183-6A02-41A2-A4D5-6CB58A6D39A9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sys.Core", "..\..\eav-server\ToSic.Sys.Core\ToSic.Sys.Core.csproj", "{BC93EFB1-D740-4617-9C90-D9167F9E4545}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.2 Eav.Persistence", "L2.2 Eav.Persistence", "{896200CD-54AF-462D-881C-0C7A43F0D6AF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sys.Core.Tests", "..\..\eav-server\ToSic.Sys.Core.Tests\ToSic.Sys.Core.Tests.csproj", "{2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Oqtane (Framework)", "Oqtane (Framework)", "{C4B25918-A3FA-49E6-8CE1-BF2A41FC4F45}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ZZ Build Tools for Visual Studio", "ZZ Build Tools for Visual Studio", "{B39F27D8-8D23-4FE4-8007-0A744BBD0645}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.BuildTasks", "Build\ToSic.Sxc.BuildTasks\ToSic.Sxc.BuildTasks.csproj", "{B8DC61F4-CA64-441E-8508-206F2432AADB}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Code.Generate", "Sxc\ToSic.Sxc.Code.Generate\ToSic.Sxc.Code.Generate.csproj", "{FB557EF7-8120-4B05-B250-7FA49916BBB4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Core.Configuration.Tests", "Sxc\ToSic.Sxc.Configuration.Tests\ToSic.Sxc.Core.Configuration.Tests.csproj", "{FA7585D8-CF3A-4027-BAA8-88CB08F273BB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.DI.Tests", "..\..\eav-server\ToSic.Sys.DI.Tests\ToSic.Sys.DI.Tests.csproj", "{1BAF0475-B349-44EC-907F-5F87E949D560}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Tests", "..\..\eav-server\ToSic.Eav.Data.Tests\ToSic.Eav.Data.Tests.csproj", "{AA955C7C-5D29-4125-85E3-557D254257C5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSource.TestHelpers", "..\..\eav-server\ToSic.Eav.DataSource.TestHelpers\ToSic.Eav.DataSource.TestHelpers.csproj", "{8F0F0A98-19C0-443A-9666-56F92A7B6BCE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSources.Tests", "..\..\eav-server\ToSic.Eav.DataSources.Tests\ToSic.Eav.DataSources.Tests.csproj", "{15640566-0ECA-4006-A55B-FDF53EAF7549}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSource.DbTests", "..\..\eav-server\ToSic.Eav.DataSource.DbTests\ToSic.Eav.DataSource.DbTests.csproj", "{E221C1FB-CA6B-4B80-81BE-130F73D878AB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Testing.FullDbFixtures", "..\..\eav-server\ToSic.Eav.Testing.FullDbFixtures\ToSic.Eav.Testing.FullDbFixtures.csproj", "{233738E3-515C-4EAD-BA80-D649BEF43255}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.StartupTests", "..\..\eav-server\ToSic.Eav.StartupTests\ToSic.Eav.StartupTests.csproj", "{8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Persistence.Efc.Tests", "..\..\eav-server\ToSic.Eav.Persistence.Efc.Tests\ToSic.Eav.Persistence.Efc.Tests.csproj", "{DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Repository.Efc.Tests", "..\..\eav-server\ToSic.Eav.Repository.Efc.Tests\ToSic.Eav.Repository.Efc.Tests.csproj", "{DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Apps.TestHelpers", "..\..\eav-server\ToSic.Eav.Apps.TestsHelpers\ToSic.Eav.Apps.TestHelpers.csproj", "{3D8DDAE5-E025-4917-8570-6B428A520B7D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Apps.Tests", "..\..\eav-server\ToSic.Eav.Apps.Tests\ToSic.Eav.Apps.Tests.csproj", "{F2582791-2A07-0F5F-836F-AA977F7A4169}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.ImportExport.Tests", "..\..\eav-server\ToSic.Eav.ImportExport.Tests\ToSic.Eav.ImportExport.Tests.csproj", "{DBD36AC0-D874-25CC-4618-2A848D5E6584}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Dnn.SystemTests", "Dnn\ToSic.Sxc.Dnn.SystemTests\ToSic.Sxc.Dnn.SystemTests.csproj", "{5CC076B6-F193-4954-8287-0B3DD547BB8C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Oqt.Shared.Tests", "Oqtane\ToSic.Sxc.Oqt.Shared.Tests\ToSic.Sxc.Oqt.Shared.Tests.csproj", "{BE3193C4-61CC-479B-8B0E-604F22B7AFBC}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Utils", "..\..\eav-server\ToSic.Sys.Utils\ToSic.Sys.Utils.csproj", "{00E352CC-021D-4D44-8B64-D2574CABD949}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Code", "..\..\eav-server\ToSic.Sys.Code\ToSic.Sys.Code.csproj", "{918D4D29-AF04-47E6-8354-FA26B7CD50D1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Features", "..\..\eav-server\ToSic.Sys.Features\ToSic.Sys.Features.csproj", "{21B6CF7B-9960-4565-A12C-410F87299621}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Features.Tests", "..\..\eav-server\ToSic.Sys.Features.Tests\ToSic.Sys.Features.Tests.csproj", "{B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Caching", "..\..\eav-server\ToSic.Sys.Caching\ToSic.Sys.Caching.csproj", "{F0B3DAEE-647E-4394-8493-B4436C988DA4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L1.2 Sys.Abc and Lib.Xyz", "L1.2 Sys.Abc and Lib.Xyz", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Persistence", "..\..\eav-server\ToSic.Eav.Persistence\ToSic.Eav.Persistence.csproj", "{7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Security", "..\..\eav-server\ToSic.Sys.Security\ToSic.Sys.Security.csproj", "{D61F1F78-5B21-4123-9F95-6EF74BFD349B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Build", "..\..\eav-server\ToSic.Eav.Data.Build\ToSic.Eav.Data.Build.csproj", "{1A6E3BED-07A4-4FE7-868E-FDD322584559}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Build.Tests", "..\..\eav-server\ToSic.Eav.Data.BuildTests\ToSic.Eav.Data.Build.Tests.csproj", "{67B8056E-542E-4236-B3C6-E5E2E97A7256}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Custom", "Sxc\ToSic.Sxc.Custom\ToSic.Sxc.Custom.csproj", "{E36C050F-0B20-D6DB-E59D-04E16BF967A2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Code", "Sxc\ToSic.Sxc.Code\ToSic.Sxc.Code.csproj", "{7723AE83-8207-4689-94BC-FA3E6473C851}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Code.HotBuild", "Sxc\ToSic.Sxc.Code.HotBuild\ToSic.Sxc.Code.HotBuild.csproj", "{ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Services", "Sxc\ToSic.Sxc.Services\ToSic.Sxc.Services.csproj", "{079C92D4-F250-4343-ACF0-4EBE567B0CBE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Images", "Sxc\ToSic.Sxc.Images\ToSic.Sxc.Images.csproj", "{DA6E8814-3D50-485C-8687-ECD1C8D143A9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Engines", "Sxc\ToSic.Sxc.Engines\ToSic.Sxc.Engines.csproj", "{238BADBB-E464-4865-A16B-89273C63193B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Blocks", "Sxc\ToSic.Sxc.Blocks\ToSic.Sxc.Blocks.csproj", "{ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Cms", "Sxc\ToSic.Sxc.Cms\ToSic.Sxc.Cms.csproj", "{0938A266-FF63-459A-AFE7-FAFC3D0E4818}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Edit", "Sxc\ToSic.Sxc.Edit\ToSic.Sxc.Edit.csproj", "{5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.LightSpeed", "Sxc\ToSic.Sxc.LightSpeed\ToSic.Sxc.LightSpeed.csproj", "{C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Web", "Sxc\ToSic.Sxc.Web\ToSic.Sxc.Web.csproj", "{1755959F-9267-7500-91F3-72E0477F0532}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.1 Sxc (Core)", "L3.1 Sxc (Core)", "{94A758E0-FE77-4E90-8ACF-75DDDC6224B5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Apps", "Sxc\ToSic.Sxc.Apps\ToSic.Sxc.Apps.csproj", "{06706A1F-6B97-5773-2786-48045DD25A9A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Render", "Sxc\ToSic.Sxc.Render\ToSic.Sxc.Render.csproj", "{173D3C32-4964-3514-6733-7185517086AE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Data", "Sxc\ToSic.Sxc.Data\ToSic.Sxc.Data.csproj", "{B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Core", "Sxc\ToSic.Sxc.Core\ToSic.Sxc.Core.csproj", "{3C58BD36-EC9F-E653-B04E-50B6647E74D4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Adam", "Sxc\ToSic.Sxc.Adam\ToSic.Sxc.Adam.csproj", "{52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.2 Sxc (Data)", "L3.2 Sxc (Data)", "{8032CCCC-682E-45C3-8E4B-E2D91B63FEE5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.4 Sxc.Code", "L3.4 Sxc.Code", "{EF5E7304-EC1C-456D-A2FD-B90E0299A6D1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.4 Sxc.Web(Api)", "L3.4 Sxc.Web(Api)", "{2F9BC915-92B9-4973-A63E-59A05ADD4E88}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.9 Eav (Unified)", "L2.9 Eav (Unified)", "{25F1BD72-BA38-41C3-A24F-57110B544285}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.6 Eav.ImportExport and DB", "L2.6 Eav.ImportExport and DB", "{7A84A35D-E2AC-4A05-8751-B51B99EA0967}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layer 1 - ToSic.Sys and ToSic.Lib", "Layer 1 - ToSic.Sys and ToSic.Lib", "{5F9A8C26-582F-445D-9D30-5ADAB64B92CB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{336BFF22-E482-46F3-97EF-D8EEB07751AB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layer 2 - ToSic.Eav", "Layer 2 - ToSic.Eav", "{46C0FCB4-4589-42CA-8553-9647B1E58BED}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layer 3 - ToSic.Sxc", "Layer 3 - ToSic.Sxc", "{1C7429F8-2815-4612-B5D0-3825E9A381E7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L3.9 Sxc (Unified)", "L3.9 Sxc (Unified)", "{4A88BE0D-10C5-4CC0-9A43-C816F2AD752C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared Imports (never build this)", "SharedImports\Shared Imports (never build this).csproj", "{C7306F87-56EE-44C8-9D06-F4CBA43F08B2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Various.UnitTests", "Sxc\ToSic.Sxc.Various.UnitTests\ToSic.Sxc.Various.UnitTests.csproj", "{DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Various.SystemTests", "Sxc\ToSic.Sxc.Various.SystemTests\ToSic.Sxc.Various.SystemTests.csproj", "{6448A662-EC17-8345-589E-0234EFF04CD8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Core.TestHelpers", "Sxc\ToSic.Sxc.Core.TestHelpers\ToSic.Sxc.Core.TestHelpers.csproj", "{E4F112C9-2682-66B2-4B1E-39C3461377C6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared Imports (never build this)", "..\..\eav-server\SharedImports\Shared Imports (never build this).csproj", "{DBAD0308-A4CB-4257-BC48-09C5C9CD389E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.7 Eav.WebApi", "L2.7 Eav.WebApi", "{55799BAC-652D-4A04-96AC-FCD790A38260}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Work", "..\..\eav-server\ToSic.Eav.Work\ToSic.Eav.Work.csproj", "{857450DA-7712-16A6-71DD-79817FFD356D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Utils.Tests", "..\..\eav-server\ToSic.Sys.Utils.Tests\ToSic.Sys.Utils.Tests.csproj", "{C87ACAFD-732A-FBC3-36FA-7038145AE3CD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L2.3 Eav.Apps", "L2.3 Eav.Apps", "{CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Apps.Persistence", "..\..\eav-server\ToSic.Eav.Apps.Persistence\ToSic.Eav.Apps.Persistence.csproj", "{167D5DF9-9712-4496-B00F-8E74AB5F8FA2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Context", "..\..\eav-server\ToSic.Eav.Context\ToSic.Eav.Context.csproj", "{908DFB9A-8532-41CD-8153-D6BA5A209386}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Persistence.Tests", "..\..\eav-server\ToSic.Eav.Persistence.Tests\ToSic.Eav.Persistence.Tests.csproj", "{2715DFC3-147E-4FF1-84FF-3413F945A3D2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Apps.Persistence.Tests", "..\..\eav-server\ToSic.Eav.Apps.Persistence.Tests\ToSic.Eav.Apps.Persistence.Tests.csproj", "{4974EA0B-2303-4BA4-B57E-EE69FA3F0089}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Work.Tests", "..\..\eav-server\ToSic.Eav.Work.Tests\ToSic.Eav.Work.Tests.csproj", "{13865038-0CDD-4EDA-8573-45A14F71E50C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Apps.Tests", "Sxc\ToSic.Sxc.Apps.Tests\ToSic.Sxc.Apps.Tests.csproj", "{BD2E35A4-6337-415E-A42F-C60BA90E3A04}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Insights", "..\..\eav-server\ToSic.Eav.Insights\ToSic.Eav.Insights.csproj", "{39C9141D-152F-4F73-AA4B-B7EBA876CA3B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data", "..\..\eav-server\ToSic.Eav.Data\ToSic.Eav.Data.csproj", "{13862C0A-B482-4DAB-8B63-B97E29A13566}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Stack", "..\..\eav-server\ToSic.Eav.Data.Stack\ToSic.Eav.Data.Stack.csproj", "{171AE0B3-0488-4500-97A2-8F4508CABE52}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Stack.Tests", "..\..\eav-server\ToSic.Eav.Data.Stack.Tests\ToSic.Eav.Data.Stack.Tests.csproj", "{13515640-4870-4679-A7D1-185884ED26AF}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSource", "..\..\eav-server\ToSic.Eav.DataSource\ToSic.Eav.DataSource.csproj", "{F036E03A-2A87-FC19-74E3-CCB015E2D619}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.LookUp", "..\..\eav-server\ToSic.Eav.LookUp\ToSic.Eav.LookUp.csproj", "{3ADABC34-DDE6-A2CB-77E8-49E888529E11}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.OData", "..\..\eav-server\ToSic.Sys.OData\ToSic.Sys.OData.csproj", "{6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.OData.Tests", "..\..\eav-server\ToSic.Sys.OData.Tests\ToSic.Sys.OData.Tests.csproj", "{342A893E-B25F-628F-09C4-605EEFB3D879}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.WebApi.Tests", "..\..\eav-server\ToSic.Eav.WebApi.Tests\ToSic.Eav.WebApi.Tests.csproj", "{286F6C95-62FF-CCAB-EF67-DB6AADFB49E7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.LookUp.Tests", "..\..\eav-server\ToSic.Eav.LookUp.Tests\ToSic.Eav.LookUp.Tests.csproj", "{DF78EFBE-9330-4DFE-9996-835147C6D609}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.LookUp.TestHelpers", "..\..\eav-server\ToSic.Eav.LookUp.TestHelpers\ToSic.Eav.LookUp.TestHelpers.csproj", "{6784F6B4-98EF-4476-B2A5-4CE6413BF086}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Caching.Tests", "..\..\eav-server\ToSic.Sys.Caching.Tests\ToSic.Sys.Caching.Tests.csproj", "{03B8F8AA-EA03-4A6E-8B58-C8A011A3900C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.TestHelpers", "..\..\eav-server\ToSic.Eav.Data.TestHelpers\ToSic.Eav.Data.TestHelpers.csproj", "{94D57C1A-C4E5-40AC-89E1-DE67D74E6750}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.Build.TestHelpers", "..\..\eav-server\ToSic.Eav.Data.Build.TestHelpers\ToSic.Eav.Data.Build.TestHelpers.csproj", "{CDF835A4-766D-46CE-AD69-5A1D89A00A9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Features.TestHelpers", "..\..\eav-server\ToSic.Sys.Features.TestHelpers\ToSic.Sys.Features.TestHelpers.csproj", "{7B3BB702-5BEF-48EB-91A9-8E34D99F321E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Data.TestsPostBuild", "..\..\eav-server\ToSic.Eav.Data.TestsPostBuild\ToSic.Eav.Data.TestsPostBuild.csproj", "{846B7A05-F8F0-48C1-8A17-28E9F2AD629B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSource.Tests", "..\..\eav-server\ToSic.Eav.DataSource.Tests\ToSic.Eav.DataSource.Tests.csproj", "{679DA9D4-D38E-4F50-AA27-3A5F50A3ED58}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.TestHelpers", "..\..\eav-server\ToSic.Sys.TestHelpers\ToSic.Sys.TestHelpers.csproj", "{AA708E63-59DE-4677-B8ED-4E8549482B90}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sys.Security.TestHelpers", "..\..\eav-server\ToSic.Sys.Security.TestHelpers\ToSic.Sys.Security.TestHelpers.csproj", "{C386DA5C-248C-4B91-BB00-C083EC7914AA}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.RenderTests", "Sxc\ToSic.Sxc.RenderTests\ToSic.Sxc.RenderTests.csproj", "{82DC9B95-9015-4EF3-87A6-07848CB1D89E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU Testing|Any CPU = Testing|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.Build.0 = Debug|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Debug|Any CPU.Build.0 = Debug|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Release|Any CPU.ActiveCfg = Release|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Release|Any CPU.Build.0 = Release|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {8398FE44-7164-48CB-96CF-74BA9C270BD2}.Testing|Any CPU.Build.0 = Debug|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Release|Any CPU.Build.0 = Release|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {78A558AF-F274-4E3C-95FE-8DE9226E0EBC}.Testing|Any CPU.Build.0 = Debug|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Debug|Any CPU.Build.0 = Debug|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Release|Any CPU.ActiveCfg = Release|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Release|Any CPU.Build.0 = Release|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {D4250011-B9BE-4326-9736-4F0122C79802}.Testing|Any CPU.Build.0 = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Debug|Any CPU.Build.0 = Debug|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Release|Any CPU.ActiveCfg = Release|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Release|Any CPU.Build.0 = Release|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80}.Testing|Any CPU.Build.0 = Debug|Any CPU {000D1ACB-7247-42CF-A86F-987A0AF68BA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {000D1ACB-7247-42CF-A86F-987A0AF68BA1}.Release|Any CPU.ActiveCfg = Release|Any CPU {000D1ACB-7247-42CF-A86F-987A0AF68BA1}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {000D1ACB-7247-42CF-A86F-987A0AF68BA1}.Testing|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Any CPU.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Debug|Any CPU.Build.0 = Debug|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Release|Any CPU.ActiveCfg = Release|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Release|Any CPU.Build.0 = Release|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785}.Testing|Any CPU.Build.0 = Debug|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Release|Any CPU.Build.0 = Release|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5D7BC881-21DD-4123-985E-BBFFD8D683F3}.Testing|Any CPU.Build.0 = Debug|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Debug|Any CPU.Build.0 = Debug|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Release|Any CPU.Build.0 = Release|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {4E24511B-CF81-4F93-AF8F-D41D306133E9}.Testing|Any CPU.Build.0 = Debug|Any CPU {8885C3AD-A7D0-4725-BF28-23C55522083E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8885C3AD-A7D0-4725-BF28-23C55522083E}.Debug|Any CPU.Build.0 = Debug|Any CPU {8885C3AD-A7D0-4725-BF28-23C55522083E}.Release|Any CPU.ActiveCfg = Release|Any CPU {8885C3AD-A7D0-4725-BF28-23C55522083E}.Release|Any CPU.Build.0 = Release|Any CPU {8885C3AD-A7D0-4725-BF28-23C55522083E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1F1C0F04-736D-4A4D-A324-8FCA8C373738}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1F1C0F04-736D-4A4D-A324-8FCA8C373738}.Release|Any CPU.ActiveCfg = Release|Any CPU {1F1C0F04-736D-4A4D-A324-8FCA8C373738}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {748C1FF5-D9A0-4F8D-A113-0D1C54791CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {748C1FF5-D9A0-4F8D-A113-0D1C54791CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU {748C1FF5-D9A0-4F8D-A113-0D1C54791CE8}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {62B0A822-C3ED-436E-A67B-8E99A7E89B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62B0A822-C3ED-436E-A67B-8E99A7E89B24}.Release|Any CPU.ActiveCfg = Release|Any CPU {62B0A822-C3ED-436E-A67B-8E99A7E89B24}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.Build.0 = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F370FB9-704B-400C-B907-F4D7B884006A}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {67672FFA-702D-423F-906E-5E6A6D6B9EFD}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0}.Release|Any CPU.ActiveCfg = Release|Any CPU {4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0}.Testing|Any CPU.Build.0 = Debug|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Debug|Any CPU.Build.0 = Debug|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Release|Any CPU.Build.0 = Release|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {BC93EFB1-D740-4617-9C90-D9167F9E4545}.Testing|Any CPU.Build.0 = Debug|Any CPU {2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8}.Testing|Any CPU.Build.0 = Debug|Any CPU {B8DC61F4-CA64-441E-8508-206F2432AADB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B8DC61F4-CA64-441E-8508-206F2432AADB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8DC61F4-CA64-441E-8508-206F2432AADB}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Release|Any CPU.Build.0 = Release|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FB557EF7-8120-4B05-B250-7FA49916BBB4}.Testing|Any CPU.Build.0 = Debug|Any CPU {FA7585D8-CF3A-4027-BAA8-88CB08F273BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA7585D8-CF3A-4027-BAA8-88CB08F273BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA7585D8-CF3A-4027-BAA8-88CB08F273BB}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FA7585D8-CF3A-4027-BAA8-88CB08F273BB}.Testing|Any CPU.Build.0 = Debug|Any CPU {1BAF0475-B349-44EC-907F-5F87E949D560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1BAF0475-B349-44EC-907F-5F87E949D560}.Release|Any CPU.ActiveCfg = Release|Any CPU {1BAF0475-B349-44EC-907F-5F87E949D560}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1BAF0475-B349-44EC-907F-5F87E949D560}.Testing|Any CPU.Build.0 = Debug|Any CPU {AA955C7C-5D29-4125-85E3-557D254257C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA955C7C-5D29-4125-85E3-557D254257C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA955C7C-5D29-4125-85E3-557D254257C5}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {AA955C7C-5D29-4125-85E3-557D254257C5}.Testing|Any CPU.Build.0 = Debug|Any CPU {8F0F0A98-19C0-443A-9666-56F92A7B6BCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F0F0A98-19C0-443A-9666-56F92A7B6BCE}.Release|Any CPU.ActiveCfg = Release|Any CPU {8F0F0A98-19C0-443A-9666-56F92A7B6BCE}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {8F0F0A98-19C0-443A-9666-56F92A7B6BCE}.Testing|Any CPU.Build.0 = Debug|Any CPU {15640566-0ECA-4006-A55B-FDF53EAF7549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {15640566-0ECA-4006-A55B-FDF53EAF7549}.Release|Any CPU.ActiveCfg = Release|Any CPU {15640566-0ECA-4006-A55B-FDF53EAF7549}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {15640566-0ECA-4006-A55B-FDF53EAF7549}.Testing|Any CPU.Build.0 = Debug|Any CPU {E221C1FB-CA6B-4B80-81BE-130F73D878AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E221C1FB-CA6B-4B80-81BE-130F73D878AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E221C1FB-CA6B-4B80-81BE-130F73D878AB}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {E221C1FB-CA6B-4B80-81BE-130F73D878AB}.Testing|Any CPU.Build.0 = Debug|Any CPU {233738E3-515C-4EAD-BA80-D649BEF43255}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {233738E3-515C-4EAD-BA80-D649BEF43255}.Release|Any CPU.ActiveCfg = Release|Any CPU {233738E3-515C-4EAD-BA80-D649BEF43255}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {233738E3-515C-4EAD-BA80-D649BEF43255}.Testing|Any CPU.Build.0 = Debug|Any CPU {8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325}.Testing|Any CPU.Build.0 = Debug|Any CPU {DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F}.Testing|Any CPU.Build.0 = Debug|Any CPU {DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1}.Testing|Any CPU.Build.0 = Debug|Any CPU {3D8DDAE5-E025-4917-8570-6B428A520B7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3D8DDAE5-E025-4917-8570-6B428A520B7D}.Release|Any CPU.ActiveCfg = Release|Any CPU {3D8DDAE5-E025-4917-8570-6B428A520B7D}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {3D8DDAE5-E025-4917-8570-6B428A520B7D}.Testing|Any CPU.Build.0 = Debug|Any CPU {F2582791-2A07-0F5F-836F-AA977F7A4169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2582791-2A07-0F5F-836F-AA977F7A4169}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2582791-2A07-0F5F-836F-AA977F7A4169}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {F2582791-2A07-0F5F-836F-AA977F7A4169}.Testing|Any CPU.Build.0 = Debug|Any CPU {DBD36AC0-D874-25CC-4618-2A848D5E6584}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBD36AC0-D874-25CC-4618-2A848D5E6584}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBD36AC0-D874-25CC-4618-2A848D5E6584}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DBD36AC0-D874-25CC-4618-2A848D5E6584}.Testing|Any CPU.Build.0 = Debug|Any CPU {5CC076B6-F193-4954-8287-0B3DD547BB8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5CC076B6-F193-4954-8287-0B3DD547BB8C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5CC076B6-F193-4954-8287-0B3DD547BB8C}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5CC076B6-F193-4954-8287-0B3DD547BB8C}.Testing|Any CPU.Build.0 = Debug|Any CPU {BE3193C4-61CC-479B-8B0E-604F22B7AFBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE3193C4-61CC-479B-8B0E-604F22B7AFBC}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE3193C4-61CC-479B-8B0E-604F22B7AFBC}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {BE3193C4-61CC-479B-8B0E-604F22B7AFBC}.Testing|Any CPU.Build.0 = Debug|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Debug|Any CPU.Build.0 = Debug|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Release|Any CPU.ActiveCfg = Release|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Release|Any CPU.Build.0 = Release|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {00E352CC-021D-4D44-8B64-D2574CABD949}.Testing|Any CPU.Build.0 = Debug|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Release|Any CPU.Build.0 = Release|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {918D4D29-AF04-47E6-8354-FA26B7CD50D1}.Testing|Any CPU.Build.0 = Debug|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Debug|Any CPU.Build.0 = Debug|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Release|Any CPU.ActiveCfg = Release|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Release|Any CPU.Build.0 = Release|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {21B6CF7B-9960-4565-A12C-410F87299621}.Testing|Any CPU.Build.0 = Debug|Any CPU {B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8}.Testing|Any CPU.Build.0 = Debug|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Release|Any CPU.Build.0 = Release|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {F0B3DAEE-647E-4394-8493-B4436C988DA4}.Testing|Any CPU.Build.0 = Debug|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Release|Any CPU.Build.0 = Release|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73}.Testing|Any CPU.Build.0 = Debug|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Debug|Any CPU.Build.0 = Debug|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Release|Any CPU.ActiveCfg = Release|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Release|Any CPU.Build.0 = Release|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {D61F1F78-5B21-4123-9F95-6EF74BFD349B}.Testing|Any CPU.Build.0 = Debug|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Debug|Any CPU.Build.0 = Debug|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Release|Any CPU.Build.0 = Release|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1A6E3BED-07A4-4FE7-868E-FDD322584559}.Testing|Any CPU.Build.0 = Debug|Any CPU {67B8056E-542E-4236-B3C6-E5E2E97A7256}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {67B8056E-542E-4236-B3C6-E5E2E97A7256}.Release|Any CPU.ActiveCfg = Release|Any CPU {67B8056E-542E-4236-B3C6-E5E2E97A7256}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {67B8056E-542E-4236-B3C6-E5E2E97A7256}.Testing|Any CPU.Build.0 = Debug|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Release|Any CPU.Build.0 = Release|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {E36C050F-0B20-D6DB-E59D-04E16BF967A2}.Testing|Any CPU.Build.0 = Debug|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Debug|Any CPU.Build.0 = Debug|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Release|Any CPU.ActiveCfg = Release|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Release|Any CPU.Build.0 = Release|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {7723AE83-8207-4689-94BC-FA3E6473C851}.Testing|Any CPU.Build.0 = Debug|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Release|Any CPU.Build.0 = Release|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8}.Testing|Any CPU.Build.0 = Debug|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Debug|Any CPU.Build.0 = Debug|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Release|Any CPU.ActiveCfg = Release|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Release|Any CPU.Build.0 = Release|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {079C92D4-F250-4343-ACF0-4EBE567B0CBE}.Testing|Any CPU.Build.0 = Debug|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Release|Any CPU.Build.0 = Release|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DA6E8814-3D50-485C-8687-ECD1C8D143A9}.Testing|Any CPU.Build.0 = Debug|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Debug|Any CPU.Build.0 = Debug|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Release|Any CPU.ActiveCfg = Release|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Release|Any CPU.Build.0 = Release|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {238BADBB-E464-4865-A16B-89273C63193B}.Testing|Any CPU.Build.0 = Debug|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Release|Any CPU.Build.0 = Release|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36}.Testing|Any CPU.Build.0 = Debug|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Debug|Any CPU.Build.0 = Debug|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Release|Any CPU.ActiveCfg = Release|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Release|Any CPU.Build.0 = Release|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {0938A266-FF63-459A-AFE7-FAFC3D0E4818}.Testing|Any CPU.Build.0 = Debug|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Debug|Any CPU.Build.0 = Debug|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Release|Any CPU.ActiveCfg = Release|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Release|Any CPU.Build.0 = Release|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853}.Testing|Any CPU.Build.0 = Debug|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Release|Any CPU.Build.0 = Release|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD}.Testing|Any CPU.Build.0 = Debug|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Debug|Any CPU.Build.0 = Debug|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Release|Any CPU.ActiveCfg = Release|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Release|Any CPU.Build.0 = Release|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1755959F-9267-7500-91F3-72E0477F0532}.Testing|Any CPU.Build.0 = Debug|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Debug|Any CPU.Build.0 = Debug|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Release|Any CPU.ActiveCfg = Release|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Release|Any CPU.Build.0 = Release|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {06706A1F-6B97-5773-2786-48045DD25A9A}.Testing|Any CPU.Build.0 = Debug|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Debug|Any CPU.Build.0 = Debug|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Release|Any CPU.ActiveCfg = Release|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Release|Any CPU.Build.0 = Release|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {173D3C32-4964-3514-6733-7185517086AE}.Testing|Any CPU.Build.0 = Debug|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Release|Any CPU.ActiveCfg = Release|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Release|Any CPU.Build.0 = Release|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3}.Testing|Any CPU.Build.0 = Debug|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Release|Any CPU.Build.0 = Release|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {3C58BD36-EC9F-E653-B04E-50B6647E74D4}.Testing|Any CPU.Build.0 = Debug|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Debug|Any CPU.Build.0 = Debug|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Release|Any CPU.ActiveCfg = Release|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Release|Any CPU.Build.0 = Release|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9}.Testing|Any CPU.Build.0 = Debug|Any CPU {C7306F87-56EE-44C8-9D06-F4CBA43F08B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7306F87-56EE-44C8-9D06-F4CBA43F08B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {C7306F87-56EE-44C8-9D06-F4CBA43F08B2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE}.Testing|Any CPU.Build.0 = Debug|Any CPU {6448A662-EC17-8345-589E-0234EFF04CD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6448A662-EC17-8345-589E-0234EFF04CD8}.Release|Any CPU.ActiveCfg = Release|Any CPU {6448A662-EC17-8345-589E-0234EFF04CD8}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {6448A662-EC17-8345-589E-0234EFF04CD8}.Testing|Any CPU.Build.0 = Debug|Any CPU {E4F112C9-2682-66B2-4B1E-39C3461377C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E4F112C9-2682-66B2-4B1E-39C3461377C6}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4F112C9-2682-66B2-4B1E-39C3461377C6}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {E4F112C9-2682-66B2-4B1E-39C3461377C6}.Testing|Any CPU.Build.0 = Debug|Any CPU {DBAD0308-A4CB-4257-BC48-09C5C9CD389E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBAD0308-A4CB-4257-BC48-09C5C9CD389E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBAD0308-A4CB-4257-BC48-09C5C9CD389E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Debug|Any CPU.Build.0 = Debug|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Release|Any CPU.ActiveCfg = Release|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Release|Any CPU.Build.0 = Release|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {857450DA-7712-16A6-71DD-79817FFD356D}.Testing|Any CPU.Build.0 = Testing|Any CPU {C87ACAFD-732A-FBC3-36FA-7038145AE3CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C87ACAFD-732A-FBC3-36FA-7038145AE3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C87ACAFD-732A-FBC3-36FA-7038145AE3CD}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {C87ACAFD-732A-FBC3-36FA-7038145AE3CD}.Testing|Any CPU.Build.0 = Testing|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Debug|Any CPU.Build.0 = Debug|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Release|Any CPU.ActiveCfg = Release|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Release|Any CPU.Build.0 = Release|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {167D5DF9-9712-4496-B00F-8E74AB5F8FA2}.Testing|Any CPU.Build.0 = Debug|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Debug|Any CPU.Build.0 = Debug|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Release|Any CPU.ActiveCfg = Release|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Release|Any CPU.Build.0 = Release|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {908DFB9A-8532-41CD-8153-D6BA5A209386}.Testing|Any CPU.Build.0 = Debug|Any CPU {2715DFC3-147E-4FF1-84FF-3413F945A3D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2715DFC3-147E-4FF1-84FF-3413F945A3D2}.Release|Any CPU.ActiveCfg = Release|Any CPU {2715DFC3-147E-4FF1-84FF-3413F945A3D2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {2715DFC3-147E-4FF1-84FF-3413F945A3D2}.Testing|Any CPU.Build.0 = Debug|Any CPU {4974EA0B-2303-4BA4-B57E-EE69FA3F0089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4974EA0B-2303-4BA4-B57E-EE69FA3F0089}.Release|Any CPU.ActiveCfg = Release|Any CPU {4974EA0B-2303-4BA4-B57E-EE69FA3F0089}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {4974EA0B-2303-4BA4-B57E-EE69FA3F0089}.Testing|Any CPU.Build.0 = Debug|Any CPU {13865038-0CDD-4EDA-8573-45A14F71E50C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13865038-0CDD-4EDA-8573-45A14F71E50C}.Release|Any CPU.ActiveCfg = Release|Any CPU {13865038-0CDD-4EDA-8573-45A14F71E50C}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {13865038-0CDD-4EDA-8573-45A14F71E50C}.Testing|Any CPU.Build.0 = Debug|Any CPU {BD2E35A4-6337-415E-A42F-C60BA90E3A04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD2E35A4-6337-415E-A42F-C60BA90E3A04}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD2E35A4-6337-415E-A42F-C60BA90E3A04}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {BD2E35A4-6337-415E-A42F-C60BA90E3A04}.Testing|Any CPU.Build.0 = Debug|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Debug|Any CPU.Build.0 = Debug|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Release|Any CPU.ActiveCfg = Release|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Release|Any CPU.Build.0 = Release|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {39C9141D-152F-4F73-AA4B-B7EBA876CA3B}.Testing|Any CPU.Build.0 = Debug|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Debug|Any CPU.Build.0 = Debug|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Release|Any CPU.ActiveCfg = Release|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Release|Any CPU.Build.0 = Release|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {13862C0A-B482-4DAB-8B63-B97E29A13566}.Testing|Any CPU.Build.0 = Debug|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Debug|Any CPU.Build.0 = Debug|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Release|Any CPU.ActiveCfg = Release|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Release|Any CPU.Build.0 = Release|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {171AE0B3-0488-4500-97A2-8F4508CABE52}.Testing|Any CPU.Build.0 = Debug|Any CPU {13515640-4870-4679-A7D1-185884ED26AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13515640-4870-4679-A7D1-185884ED26AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {13515640-4870-4679-A7D1-185884ED26AF}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {13515640-4870-4679-A7D1-185884ED26AF}.Testing|Any CPU.Build.0 = Debug|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Debug|Any CPU.Build.0 = Debug|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Release|Any CPU.ActiveCfg = Release|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Release|Any CPU.Build.0 = Release|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {F036E03A-2A87-FC19-74E3-CCB015E2D619}.Testing|Any CPU.Build.0 = Testing|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Debug|Any CPU.Build.0 = Debug|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Release|Any CPU.ActiveCfg = Release|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Release|Any CPU.Build.0 = Release|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {3ADABC34-DDE6-A2CB-77E8-49E888529E11}.Testing|Any CPU.Build.0 = Testing|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Release|Any CPU.Build.0 = Release|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF}.Testing|Any CPU.Build.0 = Testing|Any CPU {342A893E-B25F-628F-09C4-605EEFB3D879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {342A893E-B25F-628F-09C4-605EEFB3D879}.Release|Any CPU.ActiveCfg = Release|Any CPU {342A893E-B25F-628F-09C4-605EEFB3D879}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {342A893E-B25F-628F-09C4-605EEFB3D879}.Testing|Any CPU.Build.0 = Testing|Any CPU {286F6C95-62FF-CCAB-EF67-DB6AADFB49E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {286F6C95-62FF-CCAB-EF67-DB6AADFB49E7}.Release|Any CPU.ActiveCfg = Release|Any CPU {286F6C95-62FF-CCAB-EF67-DB6AADFB49E7}.Testing|Any CPU.ActiveCfg = Testing|Any CPU {286F6C95-62FF-CCAB-EF67-DB6AADFB49E7}.Testing|Any CPU.Build.0 = Testing|Any CPU {DF78EFBE-9330-4DFE-9996-835147C6D609}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF78EFBE-9330-4DFE-9996-835147C6D609}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF78EFBE-9330-4DFE-9996-835147C6D609}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {DF78EFBE-9330-4DFE-9996-835147C6D609}.Testing|Any CPU.Build.0 = Debug|Any CPU {6784F6B4-98EF-4476-B2A5-4CE6413BF086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6784F6B4-98EF-4476-B2A5-4CE6413BF086}.Release|Any CPU.ActiveCfg = Release|Any CPU {6784F6B4-98EF-4476-B2A5-4CE6413BF086}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {6784F6B4-98EF-4476-B2A5-4CE6413BF086}.Testing|Any CPU.Build.0 = Debug|Any CPU {03B8F8AA-EA03-4A6E-8B58-C8A011A3900C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {03B8F8AA-EA03-4A6E-8B58-C8A011A3900C}.Release|Any CPU.ActiveCfg = Release|Any CPU {03B8F8AA-EA03-4A6E-8B58-C8A011A3900C}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {03B8F8AA-EA03-4A6E-8B58-C8A011A3900C}.Testing|Any CPU.Build.0 = Debug|Any CPU {94D57C1A-C4E5-40AC-89E1-DE67D74E6750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94D57C1A-C4E5-40AC-89E1-DE67D74E6750}.Release|Any CPU.ActiveCfg = Release|Any CPU {94D57C1A-C4E5-40AC-89E1-DE67D74E6750}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {94D57C1A-C4E5-40AC-89E1-DE67D74E6750}.Testing|Any CPU.Build.0 = Debug|Any CPU {CDF835A4-766D-46CE-AD69-5A1D89A00A9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CDF835A4-766D-46CE-AD69-5A1D89A00A9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDF835A4-766D-46CE-AD69-5A1D89A00A9C}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {CDF835A4-766D-46CE-AD69-5A1D89A00A9C}.Testing|Any CPU.Build.0 = Debug|Any CPU {7B3BB702-5BEF-48EB-91A9-8E34D99F321E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7B3BB702-5BEF-48EB-91A9-8E34D99F321E}.Release|Any CPU.ActiveCfg = Release|Any CPU {7B3BB702-5BEF-48EB-91A9-8E34D99F321E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {7B3BB702-5BEF-48EB-91A9-8E34D99F321E}.Testing|Any CPU.Build.0 = Debug|Any CPU {846B7A05-F8F0-48C1-8A17-28E9F2AD629B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {846B7A05-F8F0-48C1-8A17-28E9F2AD629B}.Release|Any CPU.ActiveCfg = Release|Any CPU {846B7A05-F8F0-48C1-8A17-28E9F2AD629B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {846B7A05-F8F0-48C1-8A17-28E9F2AD629B}.Testing|Any CPU.Build.0 = Debug|Any CPU {679DA9D4-D38E-4F50-AA27-3A5F50A3ED58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {679DA9D4-D38E-4F50-AA27-3A5F50A3ED58}.Release|Any CPU.ActiveCfg = Release|Any CPU {679DA9D4-D38E-4F50-AA27-3A5F50A3ED58}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {679DA9D4-D38E-4F50-AA27-3A5F50A3ED58}.Testing|Any CPU.Build.0 = Debug|Any CPU {AA708E63-59DE-4677-B8ED-4E8549482B90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA708E63-59DE-4677-B8ED-4E8549482B90}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA708E63-59DE-4677-B8ED-4E8549482B90}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {AA708E63-59DE-4677-B8ED-4E8549482B90}.Testing|Any CPU.Build.0 = Debug|Any CPU {C386DA5C-248C-4B91-BB00-C083EC7914AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C386DA5C-248C-4B91-BB00-C083EC7914AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {C386DA5C-248C-4B91-BB00-C083EC7914AA}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {C386DA5C-248C-4B91-BB00-C083EC7914AA}.Testing|Any CPU.Build.0 = Debug|Any CPU {82DC9B95-9015-4EF3-87A6-07848CB1D89E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82DC9B95-9015-4EF3-87A6-07848CB1D89E}.Release|Any CPU.ActiveCfg = Release|Any CPU {82DC9B95-9015-4EF3-87A6-07848CB1D89E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {82DC9B95-9015-4EF3-87A6-07848CB1D89E}.Testing|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {8398FE44-7164-48CB-96CF-74BA9C270BD2} = {82831295-FA89-4F5A-9420-DB6E15A8AD99} {78A558AF-F274-4E3C-95FE-8DE9226E0EBC} = {82831295-FA89-4F5A-9420-DB6E15A8AD99} {D4250011-B9BE-4326-9736-4F0122C79802} = {82831295-FA89-4F5A-9420-DB6E15A8AD99} {6735DC37-2849-45DB-BA76-C5663B6FFB1F} = {25F1BD72-BA38-41C3-A24F-57110B544285} {A94DE6D7-D1E6-4BE2-B5B5-DC4A6A61CD80} = {82831295-FA89-4F5A-9420-DB6E15A8AD99} {000D1ACB-7247-42CF-A86F-987A0AF68BA1} = {2F9BC915-92B9-4973-A63E-59A05ADD4E88} {93149D23-E6CC-43AF-97D0-32D89D29D714} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {CB322A0B-0C28-4165-87A8-7BBE78911451} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {B45F98A5-BBA9-4418-A5A1-7CA747E1698B} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {1253087A-070D-4BF7-B3C2-841537489910} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52} = {55799BAC-652D-4A04-96AC-FCD790A38260} {82831295-FA89-4F5A-9420-DB6E15A8AD99} = {336BFF22-E482-46F3-97EF-D8EEB07751AB} {5CD8015A-76D8-4633-8469-53B62A6C1894} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {2DBCC960-1C0B-494F-9E21-8707A1D344C3} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {6D320108-78ED-40E6-83F7-9CD423471DB3} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {80D15F35-334B-4C7C-AF94-B0FF1E6CC354} = {2F9BC915-92B9-4973-A63E-59A05ADD4E88} {F1366AA6-6508-47E4-AE39-CB39537CA220} = {336BFF22-E482-46F3-97EF-D8EEB07751AB} {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {28A58816-468A-44E0-85CA-0428F0D87E27} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {C2BEB114-B1DB-404D-8442-A75809059619} = {336BFF22-E482-46F3-97EF-D8EEB07751AB} {8DDD9ECE-28B0-4714-AD1A-B24FEF0C6785} = {C2BEB114-B1DB-404D-8442-A75809059619} {5D7BC881-21DD-4123-985E-BBFFD8D683F3} = {C2BEB114-B1DB-404D-8442-A75809059619} {4E24511B-CF81-4F93-AF8F-D41D306133E9} = {C2BEB114-B1DB-404D-8442-A75809059619} {8885C3AD-A7D0-4725-BF28-23C55522083E} = {C2BEB114-B1DB-404D-8442-A75809059619} {1F1C0F04-736D-4A4D-A324-8FCA8C373738} = {C4B25918-A3FA-49E6-8CE1-BF2A41FC4F45} {748C1FF5-D9A0-4F8D-A113-0D1C54791CE8} = {C4B25918-A3FA-49E6-8CE1-BF2A41FC4F45} {62B0A822-C3ED-436E-A67B-8E99A7E89B24} = {C4B25918-A3FA-49E6-8CE1-BF2A41FC4F45} {9269847A-20A1-4F72-9E14-36BFE0323632} = {DD59EAFD-02D1-4285-B8BE-D2DD40536304} {783FE270-1D23-4B43-8B17-C87C0697DBD5} = {336BFF22-E482-46F3-97EF-D8EEB07751AB} {7F370FB9-704B-400C-B907-F4D7B884006A} = {783FE270-1D23-4B43-8B17-C87C0697DBD5} {67672FFA-702D-423F-906E-5E6A6D6B9EFD} = {783FE270-1D23-4B43-8B17-C87C0697DBD5} {4BCB31EB-A3F8-41A0-B8E9-FFF06CFDBBF0} = {C2BEB114-B1DB-404D-8442-A75809059619} {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} = {5F9A8C26-582F-445D-9D30-5ADAB64B92CB} {BC93EFB1-D740-4617-9C90-D9167F9E4545} = {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} {896200CD-54AF-462D-881C-0C7A43F0D6AF} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {2B1FE78B-9BB5-4B7D-9409-B2B5A3BF85A8} = {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} {C4B25918-A3FA-49E6-8CE1-BF2A41FC4F45} = {C2BEB114-B1DB-404D-8442-A75809059619} {B8DC61F4-CA64-441E-8508-206F2432AADB} = {B39F27D8-8D23-4FE4-8007-0A744BBD0645} {FB557EF7-8120-4B05-B250-7FA49916BBB4} = {EF5E7304-EC1C-456D-A2FD-B90E0299A6D1} {FA7585D8-CF3A-4027-BAA8-88CB08F273BB} = {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} {1BAF0475-B349-44EC-907F-5F87E949D560} = {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} {AA955C7C-5D29-4125-85E3-557D254257C5} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {8F0F0A98-19C0-443A-9666-56F92A7B6BCE} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {15640566-0ECA-4006-A55B-FDF53EAF7549} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {E221C1FB-CA6B-4B80-81BE-130F73D878AB} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {233738E3-515C-4EAD-BA80-D649BEF43255} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {8FA5D0CF-619F-4B2A-9BA7-0124B2C5F325} = {25F1BD72-BA38-41C3-A24F-57110B544285} {DA2CF8DA-BD16-825E-CA43-EF69F2CBE95F} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {DBF7E808-4DB5-67DB-2D6B-A044BE3D81F1} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {3D8DDAE5-E025-4917-8570-6B428A520B7D} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {F2582791-2A07-0F5F-836F-AA977F7A4169} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {DBD36AC0-D874-25CC-4618-2A848D5E6584} = {7A84A35D-E2AC-4A05-8751-B51B99EA0967} {5CC076B6-F193-4954-8287-0B3DD547BB8C} = {82831295-FA89-4F5A-9420-DB6E15A8AD99} {BE3193C4-61CC-479B-8B0E-604F22B7AFBC} = {C2BEB114-B1DB-404D-8442-A75809059619} {00E352CC-021D-4D44-8B64-D2574CABD949} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {918D4D29-AF04-47E6-8354-FA26B7CD50D1} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {21B6CF7B-9960-4565-A12C-410F87299621} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {B6FCFFF3-2832-4BEB-BB00-134F8F28B7F8} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {F0B3DAEE-647E-4394-8493-B4436C988DA4} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {5F9A8C26-582F-445D-9D30-5ADAB64B92CB} {7F4F52EB-C9D8-4D80-BA3C-5C69C3531B73} = {896200CD-54AF-462D-881C-0C7A43F0D6AF} {D61F1F78-5B21-4123-9F95-6EF74BFD349B} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {1A6E3BED-07A4-4FE7-868E-FDD322584559} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {67B8056E-542E-4236-B3C6-E5E2E97A7256} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {E36C050F-0B20-D6DB-E59D-04E16BF967A2} = {EF5E7304-EC1C-456D-A2FD-B90E0299A6D1} {7723AE83-8207-4689-94BC-FA3E6473C851} = {EF5E7304-EC1C-456D-A2FD-B90E0299A6D1} {ED7E1D31-1124-4A9E-9FB2-FBCDA7928BA8} = {EF5E7304-EC1C-456D-A2FD-B90E0299A6D1} {079C92D4-F250-4343-ACF0-4EBE567B0CBE} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {DA6E8814-3D50-485C-8687-ECD1C8D143A9} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {238BADBB-E464-4865-A16B-89273C63193B} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {ACA628BE-DD0B-41BE-B964-47DA6B1C8C36} = {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} {0938A266-FF63-459A-AFE7-FAFC3D0E4818} = {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} {5A485FF9-6DD9-4C3D-AB3F-41F0BA864853} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {C8EFA3F1-A420-053C-3DF2-0E19B4781ECD} = {2F9BC915-92B9-4973-A63E-59A05ADD4E88} {1755959F-9267-7500-91F3-72E0477F0532} = {2F9BC915-92B9-4973-A63E-59A05ADD4E88} {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {06706A1F-6B97-5773-2786-48045DD25A9A} = {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} {173D3C32-4964-3514-6733-7185517086AE} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {B7445FDD-EFFC-A31A-3437-E3F1A36B70E3} = {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} {3C58BD36-EC9F-E653-B04E-50B6647E74D4} = {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} {52D56D1E-6F2F-0408-9BFD-0A910E39BEE9} = {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {EF5E7304-EC1C-456D-A2FD-B90E0299A6D1} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {2F9BC915-92B9-4973-A63E-59A05ADD4E88} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {25F1BD72-BA38-41C3-A24F-57110B544285} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {7A84A35D-E2AC-4A05-8751-B51B99EA0967} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {4A88BE0D-10C5-4CC0-9A43-C816F2AD752C} = {1C7429F8-2815-4612-B5D0-3825E9A381E7} {C7306F87-56EE-44C8-9D06-F4CBA43F08B2} = {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} {DB0FC72C-CAE7-5A8A-7F3B-85110F241BAE} = {4A88BE0D-10C5-4CC0-9A43-C816F2AD752C} {6448A662-EC17-8345-589E-0234EFF04CD8} = {4A88BE0D-10C5-4CC0-9A43-C816F2AD752C} {E4F112C9-2682-66B2-4B1E-39C3461377C6} = {94A758E0-FE77-4E90-8ACF-75DDDC6224B5} {DBAD0308-A4CB-4257-BC48-09C5C9CD389E} = {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} {55799BAC-652D-4A04-96AC-FCD790A38260} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {857450DA-7712-16A6-71DD-79817FFD356D} = {55799BAC-652D-4A04-96AC-FCD790A38260} {C87ACAFD-732A-FBC3-36FA-7038145AE3CD} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} = {46C0FCB4-4589-42CA-8553-9647B1E58BED} {167D5DF9-9712-4496-B00F-8E74AB5F8FA2} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {908DFB9A-8532-41CD-8153-D6BA5A209386} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {2715DFC3-147E-4FF1-84FF-3413F945A3D2} = {896200CD-54AF-462D-881C-0C7A43F0D6AF} {4974EA0B-2303-4BA4-B57E-EE69FA3F0089} = {CC8DE3B4-BE02-45B9-BB26-30B4654DC5E2} {13865038-0CDD-4EDA-8573-45A14F71E50C} = {55799BAC-652D-4A04-96AC-FCD790A38260} {BD2E35A4-6337-415E-A42F-C60BA90E3A04} = {8032CCCC-682E-45C3-8E4B-E2D91B63FEE5} {39C9141D-152F-4F73-AA4B-B7EBA876CA3B} = {55799BAC-652D-4A04-96AC-FCD790A38260} {13862C0A-B482-4DAB-8B63-B97E29A13566} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {171AE0B3-0488-4500-97A2-8F4508CABE52} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {13515640-4870-4679-A7D1-185884ED26AF} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {F036E03A-2A87-FC19-74E3-CCB015E2D619} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {3ADABC34-DDE6-A2CB-77E8-49E888529E11} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {6DA3B0B5-4EFD-4D9F-2352-757B776C17CF} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {342A893E-B25F-628F-09C4-605EEFB3D879} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {286F6C95-62FF-CCAB-EF67-DB6AADFB49E7} = {55799BAC-652D-4A04-96AC-FCD790A38260} {DF78EFBE-9330-4DFE-9996-835147C6D609} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {6784F6B4-98EF-4476-B2A5-4CE6413BF086} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {03B8F8AA-EA03-4A6E-8B58-C8A011A3900C} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {94D57C1A-C4E5-40AC-89E1-DE67D74E6750} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {CDF835A4-766D-46CE-AD69-5A1D89A00A9C} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {7B3BB702-5BEF-48EB-91A9-8E34D99F321E} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {846B7A05-F8F0-48C1-8A17-28E9F2AD629B} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {679DA9D4-D38E-4F50-AA27-3A5F50A3ED58} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {AA708E63-59DE-4677-B8ED-4E8549482B90} = {32E45183-6A02-41A2-A4D5-6CB58A6D39A9} {C386DA5C-248C-4B91-BB00-C083EC7914AA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {82DC9B95-9015-4EF3-87A6-07848CB1D89E} = {5CD8015A-76D8-4633-8469-53B62A6C1894} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.2.1.505.0\lib\NET35 SolutionGuid = {705647E1-B5B1-4D94-888C-1D918095554C} EndGlobalSection EndGlobal ================================================ FILE: Src/2sxc Multi-Target.sln.DotSettings ================================================  DS True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True ================================================ FILE: Src/2sxc for MVC PoC.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28803.202 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Core", "..\..\eav-server\ToSic.Eav.Core\ToSic.Eav.Core.csproj", "{82F94588-269B-4CDD-98D1-D5CB14C39090}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.DataSources.Tests", "..\..\eav-server\ToSic.Eav.DataSources.Tests\ToSic.Eav.DataSources.Tests.csproj", "{C212A78C-25BB-4A77-AFBB-B5939352CE36}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Apps", "..\..\eav-server\ToSic.Eav.Apps\ToSic.Eav.Apps.csproj", "{FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Persistence.Efc.Tests", "..\..\eav-server\ToSic.Eav.Persistence.Efc.Tests\ToSic.Eav.Persistence.Efc.Tests.csproj", "{EB8491A7-4147-4A18-AC74-CD1BE957FF48}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Repository.Efc.Tests", "..\..\eav-server\ToSic.Eav.Repository.Efc.Tests\ToSic.Eav.Repository.Efc.Tests.csproj", "{F989FE10-C84A-4B18-AAA7-4665EC85B059}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.ImportExport.Tests", "..\..\eav-server\ToSic.Eav.ImportExport.Tests\ToSic.Eav.ImportExport.Tests.csproj", "{00C8672B-E79E-42D4-A512-6C0ABCCAF046}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Testing.Shared", "..\..\eav-server\ToSic.Testing.Shared\ToSic.Testing.Shared.csproj", "{41243C6D-2D10-4285-8AF2-719497AE00DB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Testing.Performance", "..\..\eav-server\ToSic.Testing.Performance\ToSic.Testing.Performance.csproj", "{6735DC37-2849-45DB-BA76-C5663B6FFB1F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Core.Tests", "..\..\eav-server\ToSic.Eav.Core.Tests\ToSic.Eav.Core.Tests.csproj", "{AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.TokenEngine.Tests", "..\..\eav-server\ToSic.Eav.TokenEngine.Tests\ToSic.Eav.TokenEngine.Tests.csproj", "{EF7808DF-F67F-4E0A-A851-21358773DD25}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Eav.Apps.Tests", "..\..\eav-server\ToSic.Eav.Apps.Tests\ToSic.Eav.Apps.Tests.csproj", "{5BAEFA99-42C6-4C06-96DE-881303AAE178}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToSic.Sxc.Tests", "Dnn.Tests\ToSic.Sxc.Tests\ToSic.Sxc.Tests.csproj", "{0EA1085A-D15F-4254-8A79-DE811C47EBF4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.DataSources", "..\..\eav-server\ToSic.Eav.DataSources\ToSic.Eav.DataSources.csproj", "{93149D23-E6CC-43AF-97D0-32D89D29D714}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Repository.Efc", "..\..\eav-server\ToSic.Eav.Repository.Efc\ToSic.Eav.Repository.Efc.csproj", "{CB322A0B-0C28-4165-87A8-7BBE78911451}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.Persistence.Efc", "..\..\eav-server\ToSic.Eav.Persistence.Efc\ToSic.Eav.Persistence.Efc.csproj", "{B45F98A5-BBA9-4418-A5A1-7CA747E1698B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.ImportExport", "..\..\eav-server\ToSic.Eav.ImportExport\ToSic.Eav.ImportExport.csproj", "{1253087A-070D-4BF7-B3C2-841537489910}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav", "..\..\eav-server\ToSic.Eav\ToSic.Eav.csproj", "{892F9D3B-0578-46A1-A46A-B694A7E15669}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Eav.WebApi", "..\..\eav-server\ToSic.Eav.WebApi\ToSic.Eav.WebApi.csproj", "{04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc", "Sxc\ToSic.Sxc\ToSic.Sxc.csproj", "{5D87EB0C-BF67-4814-A0FF-D96256C9B852}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2sxc Core", "2sxc Core", "{5CD8015A-76D8-4633-8469-53B62A6C1894}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eav", "Eav", "{2DBCC960-1C0B-494F-9E21-8707A1D344C3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eav Tests", "Eav Tests", "{6D320108-78ED-40E6-83F7-9CD423471DB3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.WebApi", "Sxc\ToSic.Sxc.WebApi\ToSic.Sxc.WebApi.csproj", "{80D15F35-334B-4C7C-AF94-B0FF1E6CC354}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc", "Mvc", "{F1366AA6-6508-47E4-AE39-CB39537CA220}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Mvc", "Mvc\ToSic.Sxc.Mvc\ToSic.Sxc.Mvc.csproj", "{AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Website", "Mvc\Website\Website.csproj", "{28A58816-468A-44E0-85CA-0428F0D87E27}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Razor.Engine", "Razor\ToSic.Sxc.Razor.Engine\ToSic.Sxc.Razor.Engine.csproj", "{9269847A-20A1-4F72-9E14-36BFE0323632}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ToSic.Sxc.Hybrid", "Razor\ToSic.Sxc.Hybrid\ToSic.Sxc.Hybrid.csproj", "{ACD30ED0-0B6E-48E7-A898-CF42C93E857A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor", "Razor", "{DD59EAFD-02D1-4285-B8BE-D2DD40536304}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|DNN = Debug|DNN Debug|Windows-x64 = Debug|Windows-x64 Debug|Windows-x86 = Debug|Windows-x86 Release|Any CPU = Release|Any CPU Release|DNN = Release|DNN Release|Windows-x64 = Release|Windows-x64 Release|Windows-x86 = Release|Windows-x86 Testing|Any CPU = Testing|Any CPU Testing|DNN = Testing|DNN Testing|Windows-x64 = Testing|Windows-x64 Testing|Windows-x86 = Testing|Windows-x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Any CPU.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|DNN.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|DNN.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x64.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Debug|Windows-x86.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Any CPU.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Any CPU.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|DNN.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|DNN.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x64.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x64.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x86.ActiveCfg = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Release|Windows-x86.Build.0 = Release|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Any CPU.Build.0 = Debug|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {82F94588-269B-4CDD-98D1-D5CB14C39090}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|DNN.ActiveCfg = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|Windows-x64.Build.0 = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Debug|Windows-x86.Build.0 = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Release|Any CPU.ActiveCfg = Release|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Release|DNN.ActiveCfg = Release|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Release|Windows-x64.ActiveCfg = Release|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Release|Windows-x86.ActiveCfg = Release|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Release|Windows-x86.Build.0 = Release|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Any CPU.Build.0 = Debug|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {C212A78C-25BB-4A77-AFBB-B5939352CE36}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Any CPU.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|DNN.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|DNN.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x64.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Debug|Windows-x86.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Any CPU.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|DNN.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|DNN.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x64.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x64.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x86.ActiveCfg = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Release|Windows-x86.Build.0 = Release|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Any CPU.Build.0 = Debug|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|DNN.ActiveCfg = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|Windows-x64.Build.0 = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Debug|Windows-x86.Build.0 = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Release|DNN.ActiveCfg = Release|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Release|Windows-x64.ActiveCfg = Release|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Release|Windows-x86.ActiveCfg = Release|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Release|Windows-x86.Build.0 = Release|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Any CPU.Build.0 = Debug|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {EB8491A7-4147-4A18-AC74-CD1BE957FF48}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|DNN.ActiveCfg = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|Windows-x64.Build.0 = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Debug|Windows-x86.Build.0 = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Release|Any CPU.ActiveCfg = Release|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Release|DNN.ActiveCfg = Release|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Release|Windows-x64.ActiveCfg = Release|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Release|Windows-x86.ActiveCfg = Release|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Release|Windows-x86.Build.0 = Release|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Any CPU.Build.0 = Debug|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {F989FE10-C84A-4B18-AAA7-4665EC85B059}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|DNN.ActiveCfg = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|DNN.Build.0 = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|Windows-x64.Build.0 = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Debug|Windows-x86.Build.0 = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|Any CPU.ActiveCfg = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|DNN.ActiveCfg = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|DNN.Build.0 = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|Windows-x64.ActiveCfg = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|Windows-x86.ActiveCfg = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Release|Windows-x86.Build.0 = Release|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Any CPU.Build.0 = Debug|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {00C8672B-E79E-42D4-A512-6C0ABCCAF046}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|DNN.ActiveCfg = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|DNN.Build.0 = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|Windows-x64.Build.0 = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Debug|Windows-x86.Build.0 = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|Any CPU.ActiveCfg = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|DNN.ActiveCfg = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|DNN.Build.0 = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|Windows-x64.ActiveCfg = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|Windows-x86.ActiveCfg = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Release|Windows-x86.Build.0 = Release|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Any CPU.Build.0 = Debug|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {41243C6D-2D10-4285-8AF2-719497AE00DB}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|DNN.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|DNN.Build.0 = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Windows-x64.Build.0 = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Debug|Windows-x86.Build.0 = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|DNN.ActiveCfg = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|DNN.Build.0 = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|Windows-x64.ActiveCfg = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|Windows-x86.ActiveCfg = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Release|Windows-x86.Build.0 = Release|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Any CPU.Build.0 = Debug|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {6735DC37-2849-45DB-BA76-C5663B6FFB1F}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|DNN.ActiveCfg = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|DNN.Build.0 = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|Windows-x64.Build.0 = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Debug|Windows-x86.Build.0 = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|DNN.ActiveCfg = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|DNN.Build.0 = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|Windows-x64.ActiveCfg = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|Windows-x86.ActiveCfg = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Release|Windows-x86.Build.0 = Release|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Any CPU.Build.0 = Debug|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|DNN.ActiveCfg = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|DNN.Build.0 = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|Windows-x64.Build.0 = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Debug|Windows-x86.Build.0 = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|DNN.ActiveCfg = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|DNN.Build.0 = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|Windows-x64.ActiveCfg = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|Windows-x86.ActiveCfg = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Release|Windows-x86.Build.0 = Release|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Any CPU.Build.0 = Debug|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {EF7808DF-F67F-4E0A-A851-21358773DD25}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|DNN.ActiveCfg = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|DNN.Build.0 = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|Windows-x64.Build.0 = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Debug|Windows-x86.Build.0 = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|Any CPU.ActiveCfg = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|DNN.ActiveCfg = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|DNN.Build.0 = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|Windows-x64.ActiveCfg = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|Windows-x86.ActiveCfg = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Release|Windows-x86.Build.0 = Release|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Any CPU.Build.0 = Debug|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|DNN.ActiveCfg = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|DNN.Build.0 = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Windows-x64.ActiveCfg = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Windows-x64.Build.0 = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Windows-x86.ActiveCfg = Dbg Testing|Any CPU {5BAEFA99-42C6-4C06-96DE-881303AAE178}.Testing|Windows-x86.Build.0 = Dbg Testing|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|DNN.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|DNN.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x64.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Debug|Windows-x86.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|DNN.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|DNN.Build.0 = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x64.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x86.ActiveCfg = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Release|Windows-x86.Build.0 = Release|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Any CPU.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|DNN.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|DNN.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x64.Build.0 = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {0EA1085A-D15F-4254-8A79-DE811C47EBF4}.Testing|Windows-x86.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|DNN.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|DNN.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x64.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Debug|Windows-x86.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Any CPU.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|DNN.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|DNN.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x64.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x64.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x86.ActiveCfg = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Release|Windows-x86.Build.0 = Release|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Any CPU.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|DNN.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|DNN.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x64.Build.0 = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {93149D23-E6CC-43AF-97D0-32D89D29D714}.Testing|Windows-x86.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|DNN.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|DNN.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x64.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Debug|Windows-x86.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Any CPU.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|DNN.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|DNN.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x64.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x64.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x86.ActiveCfg = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Release|Windows-x86.Build.0 = Release|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Any CPU.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|DNN.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|DNN.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x64.Build.0 = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {CB322A0B-0C28-4165-87A8-7BBE78911451}.Testing|Windows-x86.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|DNN.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|DNN.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x64.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Debug|Windows-x86.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Any CPU.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|DNN.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|DNN.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x64.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x64.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x86.ActiveCfg = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Release|Windows-x86.Build.0 = Release|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Any CPU.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|DNN.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|DNN.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x64.Build.0 = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {B45F98A5-BBA9-4418-A5A1-7CA747E1698B}.Testing|Windows-x86.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|DNN.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|DNN.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x64.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Debug|Windows-x86.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Any CPU.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|DNN.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|DNN.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x64.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x64.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x86.ActiveCfg = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Release|Windows-x86.Build.0 = Release|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Any CPU.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|DNN.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|DNN.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x64.Build.0 = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {1253087A-070D-4BF7-B3C2-841537489910}.Testing|Windows-x86.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Any CPU.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|DNN.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|DNN.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x64.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Debug|Windows-x86.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Any CPU.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Any CPU.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|DNN.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|DNN.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x64.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x64.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x86.ActiveCfg = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Release|Windows-x86.Build.0 = Release|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Any CPU.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|DNN.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|DNN.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x64.Build.0 = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {892F9D3B-0578-46A1-A46A-B694A7E15669}.Testing|Windows-x86.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|DNN.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|DNN.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x64.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Debug|Windows-x86.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Any CPU.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|DNN.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|DNN.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x64.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x64.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x86.ActiveCfg = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Release|Windows-x86.Build.0 = Release|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Any CPU.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|DNN.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|DNN.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x64.Build.0 = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52}.Testing|Windows-x86.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|DNN.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|DNN.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x64.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Debug|Windows-x86.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Any CPU.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|DNN.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|DNN.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x64.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x64.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x86.ActiveCfg = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Release|Windows-x86.Build.0 = Release|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Any CPU.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|DNN.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|DNN.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x64.Build.0 = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {5D87EB0C-BF67-4814-A0FF-D96256C9B852}.Testing|Windows-x86.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|DNN.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|DNN.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x64.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Debug|Windows-x86.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Any CPU.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|DNN.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|DNN.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x64.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x64.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x86.ActiveCfg = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Release|Windows-x86.Build.0 = Release|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Any CPU.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|DNN.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|DNN.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x64.Build.0 = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {80D15F35-334B-4C7C-AF94-B0FF1E6CC354}.Testing|Windows-x86.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|DNN.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|DNN.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x64.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Debug|Windows-x86.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Any CPU.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|DNN.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|DNN.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x64.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x64.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x86.ActiveCfg = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Release|Windows-x86.Build.0 = Release|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Any CPU.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|DNN.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|DNN.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x64.Build.0 = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E}.Testing|Windows-x86.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Any CPU.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|DNN.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|DNN.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x64.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Debug|Windows-x86.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Any CPU.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Any CPU.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|DNN.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|DNN.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x64.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x64.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x86.ActiveCfg = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Release|Windows-x86.Build.0 = Release|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Any CPU.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Any CPU.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|DNN.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|DNN.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x64.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x64.Build.0 = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x86.ActiveCfg = Debug|Any CPU {28A58816-468A-44E0-85CA-0428F0D87E27}.Testing|Windows-x86.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Any CPU.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|DNN.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|DNN.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x64.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Debug|Windows-x86.Build.0 = Debug|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Any CPU.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|DNN.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|DNN.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x64.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x64.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x86.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Release|Windows-x86.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Any CPU.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|DNN.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|DNN.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x64.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x64.Build.0 = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x86.ActiveCfg = Release|Any CPU {9269847A-20A1-4F72-9E14-36BFE0323632}.Testing|Windows-x86.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|DNN.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|DNN.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x64.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Debug|Windows-x86.Build.0 = Debug|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Any CPU.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|DNN.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|DNN.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x64.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x64.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x86.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Release|Windows-x86.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Any CPU.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Any CPU.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|DNN.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|DNN.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x64.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x64.Build.0 = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x86.ActiveCfg = Release|Any CPU {ACD30ED0-0B6E-48E7-A898-CF42C93E857A}.Testing|Windows-x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {82F94588-269B-4CDD-98D1-D5CB14C39090} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {C212A78C-25BB-4A77-AFBB-B5939352CE36} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {FA1B4495-6B85-400F-A5E3-0E292CCBFAE2} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {EB8491A7-4147-4A18-AC74-CD1BE957FF48} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {F989FE10-C84A-4B18-AAA7-4665EC85B059} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {00C8672B-E79E-42D4-A512-6C0ABCCAF046} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {41243C6D-2D10-4285-8AF2-719497AE00DB} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {6735DC37-2849-45DB-BA76-C5663B6FFB1F} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {AFED35B5-8E43-4F46-8E4D-FC3F07244D8B} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {EF7808DF-F67F-4E0A-A851-21358773DD25} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {5BAEFA99-42C6-4C06-96DE-881303AAE178} = {6D320108-78ED-40E6-83F7-9CD423471DB3} {0EA1085A-D15F-4254-8A79-DE811C47EBF4} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {93149D23-E6CC-43AF-97D0-32D89D29D714} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {CB322A0B-0C28-4165-87A8-7BBE78911451} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {B45F98A5-BBA9-4418-A5A1-7CA747E1698B} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {1253087A-070D-4BF7-B3C2-841537489910} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {892F9D3B-0578-46A1-A46A-B694A7E15669} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {04F3A07C-2C6C-4D87-9E8D-E2DB611B0D52} = {2DBCC960-1C0B-494F-9E21-8707A1D344C3} {5D87EB0C-BF67-4814-A0FF-D96256C9B852} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {80D15F35-334B-4C7C-AF94-B0FF1E6CC354} = {5CD8015A-76D8-4633-8469-53B62A6C1894} {AA274DBE-9E67-4B87-9D97-4E34F1D4D75E} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {28A58816-468A-44E0-85CA-0428F0D87E27} = {F1366AA6-6508-47E4-AE39-CB39537CA220} {9269847A-20A1-4F72-9E14-36BFE0323632} = {DD59EAFD-02D1-4285-B8BE-D2DD40536304} {ACD30ED0-0B6E-48E7-A898-CF42C93E857A} = {DD59EAFD-02D1-4285-B8BE-D2DD40536304} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {705647E1-B5B1-4D94-888C-1D918095554C} EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.2.1.505.0\lib\NET35 EndGlobalSection EndGlobal ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/BuildConfig.cs ================================================ using System.Collections.Generic; namespace ToSic.Sxc.BuildTasks { public class BuildConfig { public List JsTargets { get; set; } public List DnnTargets { get; set; } public List OqtaneTargets { get; set; } public List Sources { get; set; } public string DnnInstallPackage { get; set; } public string OqtaneInstallPackage { get; set; } } } ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/ColorMessage.cs ================================================ using Microsoft.Build.Utilities; using System; namespace ToSic.Sxc.BuildTasks { public class ColorMessage : Task { public string Text { get; set; } = string.Empty; public string ForegroundColor { get; set; } public string BackgroundColor { get; set; } public override bool Execute() { var originalForegroundColor = Console.ForegroundColor; var originalBgColor = Console.BackgroundColor; if (!string.IsNullOrEmpty(ForegroundColor)) if (Enum.TryParse(ForegroundColor, true, out ConsoleColor foregroundColor)) Console.ForegroundColor = foregroundColor; if (!string.IsNullOrEmpty(BackgroundColor)) if (Enum.TryParse(BackgroundColor, true, out ConsoleColor backgroundColor)) Console.BackgroundColor = backgroundColor; Console.Write(Text); // Log.LogMessage(MessageImportance.High, Text); Console.ForegroundColor = originalForegroundColor; Console.BackgroundColor = originalBgColor; Console.Write("\n"); return true; } } } ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/CopyNewerFileVersion.cs ================================================ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using System; using System.Diagnostics; using System.IO; namespace ToSic.Sxc.BuildTasks { /// /// Represents a custom MSBuild task that copies files from source to destination /// with additional logic for handling assembly files (DLLs), /// where overwrite will happen only if source FileVersion is newer than on destination /// public class CopyNewerFileVersion : Task { private const string LogPrefix = $"{nameof(CopyNewerFileVersion)}:"; /// /// Gets or sets the source files to be copied. /// [Required] public ITaskItem[] SourceFiles { get; set; } /// /// Gets or sets the destination folder where the files will be copied. /// [Required] public string DestinationFolder { get; set; } /// /// Executes the file copy operation. /// /// /// true if the operation succeeds; otherwise, false. /// /// /// This method iterates through the source files, checks if they need to be copied /// (based on version comparison for DLLs), and performs the copy operation. /// public override bool Execute() { foreach (var sourceFile in SourceFiles) { var sourcePath = sourceFile.ItemSpec; var relativePath = sourceFile.GetMetadata("RecursiveDir"); var destPath = Path.Combine(DestinationFolder, relativePath ?? "", Path.GetFileName(sourcePath)); try { if (!File.Exists(sourcePath)) { Log.LogMessage(MessageImportance.High, $"{LogPrefix} Source file '{sourcePath}' not found. Skipping."); continue; } var copy = true; if (File.Exists(destPath) && Path.GetExtension(sourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase)) { try { var srcVer = GetFileVersion(sourcePath); var dstVer = GetFileVersion(destPath); if (srcVer <= dstVer) { Log.LogMessage(MessageImportance.High, $"{LogPrefix} Skipping '{sourcePath}' — version {srcVer} <= {dstVer}"); copy = false; } } catch (Exception ex) { Log.LogMessage(MessageImportance.High, $"{LogPrefix} Error comparing versions: {ex.Message}. Proceeding to copy."); } } if (copy) { var directoryName = Path.GetDirectoryName(destPath); if (!string.IsNullOrEmpty(directoryName)) Directory.CreateDirectory(directoryName); File.Copy(sourcePath, destPath, true); Log.LogMessage(MessageImportance.High, $"{LogPrefix} Copied '{sourcePath}' to '{destPath}'"); } } catch (Exception ex) { Log.LogError($"{LogPrefix} Error failed to copy '{sourcePath}' to '{destPath}': {ex.Message}"); return false; } } return true; } /// /// Retrieves the version information of a file. /// /// The path to the file. /// The of the file. /// Thrown if the file does not exist. private static Version GetFileVersion(string filePath) { var versionInfo = FileVersionInfo.GetVersionInfo(filePath); return new Version(versionInfo.FileMajorPart, versionInfo.FileMinorPart, versionInfo.FileBuildPart, versionInfo.FilePrivatePart); } } } ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/GetBuildConfig.cs ================================================ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.Json; namespace ToSic.Sxc.BuildTasks { public class GetBuildConfig : Task { private const string BuildConfigJsonFileName = "2sxc-build.config.json"; private const string FallbackBuildConfigJsonFileName = "2sxc-build-fallback.config.json"; #region json properties [Output] public string[] JsTargets { get; private set; } = Array.Empty(); [Output] public string[] DnnTargets { get; private set; } = Array.Empty(); [Output] public string[] OqtaneTargets { get; private set; } = Array.Empty(); [Output] public string[] Sources { get; private set; } [Output] public string DnnInstallPackage { get; private set; } = string.Empty; [Output] public string OqtaneInstallPackage { get; private set; } = string.Empty; #endregion #region calculated properties [Output] public string BuildConfigPath { get; private set; } [Output] public string JsTarget { get; private set; } [Output] public string DnnTarget { get; private set; } [Output] public string OqtaneTarget { get; private set; } [Output] public string Source { get; private set; } #endregion public override bool Execute() { try { BuildConfigPath = FindJsonFile(BuildConfigJsonFileName) ?? FindJsonFile(FallbackBuildConfigJsonFileName); if (string.IsNullOrEmpty(BuildConfigPath)) { Log.LogError($"Could not find {FallbackBuildConfigJsonFileName} or {FallbackBuildConfigJsonFileName} file."); return false; } var jsonContent = File.ReadAllText(BuildConfigPath); var buildConfig = JsonSerializer.Deserialize(jsonContent, new JsonSerializerOptions { ReadCommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true }); Sources = FixAllTargets(buildConfig.Sources)?.ToArray(); Source = Sources?.FirstOrDefault(); JsTargets = FixAllTargets(buildConfig.JsTargets)?.ToArray(); JsTarget = JsTargets?.FirstOrDefault(); DnnTargets = FixAllTargets(buildConfig.DnnTargets)?.ToArray(); DnnTarget = DnnTargets?.FirstOrDefault(); OqtaneTargets = FixAllTargets(buildConfig.OqtaneTargets)?.ToArray(); OqtaneTarget = OqtaneTargets?.FirstOrDefault(); DnnInstallPackage = FixSingleTarget(buildConfig.DnnInstallPackage); OqtaneInstallPackage = FixSingleTarget(buildConfig.OqtaneInstallPackage); return true; } catch (Exception e) { Log.LogErrorFromException(e); return false; } } private static string FindJsonFile(string buildConfigJsonFileName) { // Start with the current directory var currentDirectory = Directory.GetCurrentDirectory(); // Continue to look in the parent directories until there's no parent while (currentDirectory != null) { // Combine the current directory with the file name to get the full path var jsonFilePath = Path.Combine(currentDirectory, buildConfigJsonFileName); // Check if the file exists in the current directory if (File.Exists(jsonFilePath)) return jsonFilePath; // Move to the parent directory for the next iteration currentDirectory = Directory.GetParent(currentDirectory)?.FullName; } // Return null if the file was not found in any directory return null; } /// /// Fix all targets, by adding the path to the target /// /// The list of target paths /// The path to add to the target /// The list of fixed target paths public static List FixAllTargets(List paths, string addOnPath = null) => paths?.Select(t => FixSingleTarget(t, addOnPath)).ToList(); /// /// Fix the target path by adding the path to the target /// /// The target path /// The path to add to the target /// The fixed target path public static string FixSingleTarget(string value, string addToPath = null) { if (string.IsNullOrEmpty(value)) return value; return string.IsNullOrEmpty(addToPath) ? FixPath(value, false, true) + Path.DirectorySeparatorChar : Path.Combine(FixPath(value, false, true) + Path.DirectorySeparatorChar, FixPath(addToPath, false, true) + Path.DirectorySeparatorChar); } /// /// Fix the path by replacing backslashes with forward slashes and removing double slashes /// /// The path to fix /// Remove the starting slash /// Remove the ending slash /// The fixed path public static string FixPath(string path, bool removeStartingSlash = false, bool removeEndingSlash = false) { if (string.IsNullOrEmpty(path)) return path; var clean = path.Trim().Replace("\\", "/").Replace("//", "/"); if (removeStartingSlash && clean.StartsWith("/")) clean = clean.Substring(1); if (removeEndingSlash && clean.EndsWith("/")) clean = clean.Remove(clean.Length - 1); return clean.Replace('/', Path.DirectorySeparatorChar); } } } ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/ModifyXmlDocumentation.cs ================================================ using System; using System.IO; using System.Text.RegularExpressions; using System.Xml.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace ToSic.Sxc.BuildTasks { public class ModifyXmlDocumentation : Task { [Required] public string XmlDocumentationPath { get; set; } public override bool Execute() { // Launches a dialog asking if you want to attach a debugger //System.Diagnostics.Debugger.Launch(); try { var content = File.ReadAllText(XmlDocumentationPath); var modifiedContent = ReplaceXrefsWithLinks(content); modifiedContent = AddDocsLinkToTypesAndProperties(modifiedContent); File.WriteAllText(XmlDocumentationPath, modifiedContent); Log.LogMessage(MessageImportance.High, $"XML documentation modified successfully at: {XmlDocumentationPath}"); } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } return true; } private static string ReplaceXrefsWithLinks(string content) { // regex pattern to handle method signatures with parentheses var pattern = @"\[(.*?)\]\(xref:((?:[^()]+|\((?:[^()]+|\([^()]*\))*\))*)\)"; // Replacement method defined as a local function string Replacement(Match m) { var label = m.Groups[1].Value; var reference = m.Groups[2].Value; // Use label if provided, otherwise use reference as label var linkText = !string.IsNullOrEmpty(label) ? label : reference; return $@"{linkText}"; } var modifiedContent = Regex.Replace(content, pattern, new MatchEvaluator(Replacement)); return modifiedContent; } private string AddDocsLinkToTypesAndProperties(string content) { var xdoc = XDocument.Parse(content); foreach (var member in xdoc.Descendants("member")) { try { var memberName = member.Attribute("name")?.Value; if (memberName == null || !(memberName.StartsWith("T:") || memberName.StartsWith("P:")) || memberName.Contains(".Internal.") || memberName.Contains(".Integration.")) continue; var summary = member.Element("summary"); if (summary == null) continue; var summaryContent = summary.Value; if (summaryContent.Contains("📖")) continue; var reference = memberName.Substring(2); // if it's a generic type, we need to remove the generic part and append * //if (reference.Contains("`")) reference = reference.Substring(0,reference.LastIndexOf('`')) + "*"; var label = reference.Substring(reference.LastIndexOf('.') + 1); summary.Add(new XElement("para", new XElement("a", new XAttribute("href", $"https://go.2sxc.org/find?xref={reference}"), "📖 " + label))); } catch (Exception ex) { Log.LogErrorFromException(ex); } } return xdoc.ToString(); } } } ================================================ FILE: Src/Build/ToSic.Sxc.BuildTasks/ToSic.Sxc.BuildTasks.csproj ================================================  net472;net9.0 v4.7.2 preview 9999 ================================================ FILE: Src/Data/App_Data/new-app/app.json ================================================ { "$schema": "https://schemas.2sxc.org/app/v17/app.json", /* This is a JSON file but it is treated like a JSONC (with comments). Different editors may complain about the comments. To reconfigure VS Code so it knows comments are ok, do this: https://azing.org/2sxc/r/h9m1l6JO */ // Export-App configuration "export": { // Exclude certain folders/file beginning with the values specified below // Note that it may look like glob, but ATM it's a simpler starts-with mechanism "exclude": [ // Skip git versioning folders, github config folders ".git/", ".github/", // ".gitignore", // Webpack 5 temporary folder and NPM folders ".temp_cache/", "node_modules/" // Other examples // ".vs", // ".vscode", // "package.json", // "package-lock.json", // "nuget.config", ] }, "editions": { "": { "description": "The default edition of the app", } } } ================================================ FILE: Src/Data/App_Data/system/bundles/system-cms.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "2SexyContent-ContentGroup", "Name": "2SexyContent-ContentGroup", "Scope": "System.Cms", "Metadata": [ { "Id": 45362, "Version": 3, "Guid": "f5b4e0e9-6e36-4ef6-b5e7-bcf40dd306e6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Contains a content group in 2sxc" }, "EditInstructions": { "*": "

Content-Groups are a fundamental part of 2sxc - they contain the definition of a set of selected items and how they should be displayed. You should almost never edit this - for more information read about it in the wiki.

" }, "Label": { "*": "Content Group" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "2SexyContent-ContentGroup" } } ], "Attributes": [ { "Name": "Template", "Type": "Entity", "InputType": "entity-default", "IsTitle": true, "Metadata": [ { "Id": 45265, "Version": 4, "Guid": "ae4b5b42-924f-48c9-92a6-af60cfe1fba4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "View" }, "Notes": { "*": "

This is a refernce to the view - internally it's called Template.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45357, "Version": 2, "Guid": "b4e505f8-6603-42fc-84d1-102bb529bc03", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "2SexyContent-Template" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Content", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45266, "Version": 2, "Guid": "99c18cf3-ba36-4efc-a8f1-784dc5ca4af3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "entity-default" }, "Name": { "*": "Content" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } } }, "Owner": "dnn:userid=1" }, { "Id": 45358, "Version": 2, "Guid": "0a6a2fe4-59ab-47a5-81ab-8b1fb623e0e6", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Presentation", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45267, "Version": 2, "Guid": "8a073b58-b7ed-4a56-8300-2a8a526a0766", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "entity-default" }, "Name": { "*": "Presentation" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } } }, "Owner": "dnn:userid=1" }, { "Id": 45359, "Version": 2, "Guid": "36fbbef5-d06b-4fc3-a9f9-4635e783ac5b", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ListContent", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45268, "Version": 9, "Guid": "1b1f604b-aa38-4239-b9ac-b6e544f92238", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Header" }, "Notes": { "*": "

This was previously called ListContent - but that was confusing. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45360, "Version": 7, "Guid": "85216f8e-d5b1-4845-b0da-5a5d87dc0580", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ListPresentation", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45269, "Version": 3, "Guid": "9b1e1bdb-4f8f-4422-a498-7a88432b0ecf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "" }, "Name": { "*": "Header Presentation" }, "Notes": { "*": "

This was previously called ListPresentation, but this was confusing. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45361, "Version": 2, "Guid": "c4a5f6ef-2645-487a-b850-20b13860ddcb", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "ContentGroupReference", "Name": "ContentGroupReference", "Scope": "System.Cms", "Metadata": [ { "Id": 45372, "Version": 3, "Guid": "c0363c70-20a4-4db6-8775-497a9842459a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "A pointer / reference to a content group" }, "EditInstructions": { "*": "

A reference to a content-group. As the target group/block could be inside another app, all fields are simple string fields, because they can't enforce that the target exists. See also what the wiki says about this.

" }, "Label": { "*": "Content Group Reference" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "ContentGroupReference" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45352, "Version": 1, "Guid": "fc7537ff-fd90-4ba5-bfa9-86c812f176fc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Title" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "App", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45353, "Version": 1, "Guid": "b43adb4a-bea7-444d-a6f9-b51f572be2b6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "App" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ContentGroup", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45354, "Version": 2, "Guid": "28101b11-6d4e-4a2e-beb0-4c3607a579a7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Content Group" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 84727, "Version": 1, "Guid": "edda694f-39a2-41cf-ac3f-85d93ee782ff", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 84728, "Version": 1, "Guid": "e3447c51-02d7-4135-9aa0-d6dad2adcb5f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowTemplateChooser", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45355, "Version": 1, "Guid": "a7b40d1a-2c2e-422d-9495-e4b8ab942ad6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-default" }, "Name": { "*": "ShowTemplateChooser" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Template", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45356, "Version": 2, "Guid": "4cf0e083-ac2e-4d16-952e-75f67984c298", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "View" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 84729, "Version": 1, "Guid": "5d3146bc-a07b-41a0-9e93-2a8b2f62466c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 84730, "Version": 1, "Guid": "75a75673-3336-46e2-9c93-36b733438f8d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "2SexyContent-Template", "Name": "2SexyContent-Template", "Scope": "System.Cms", "Metadata": [ { "Id": 45363, "Version": 3, "Guid": "a66b920b-05d8-4d41-b8d0-33648062776a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Contains all registered 2sxc templates" }, "EditInstructions": { "*": "

Templates / Views determine how output is shown. This dialog helps you configure what file is used, what data it expects and more. See View docs for more.

" }, "Label": { "*": "View Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "2SexyContent-Template" } }, { "Id": 136793, "Version": 7, "Guid": "1b9c635f-7aed-4b09-bad2-0ebf7f1d0808", "Type": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "

If you remove this, this view will not be the default any more.

" }, "MetadataTypes": { "en-us": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e" }, "Title": { "en-us": "Is Default Decorator on Views" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 4 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "2SexyContent-Template" } }, { "Id": 183807, "Version": 2, "Guid": "1406d8fe-e333-42c0-8284-59ca2e2cd652", "Type": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "MetadataTypes": { "en-us": "be34f64b-7d1f-4ad0-b488-dabbbb01a186" }, "Title": { "en-us": "Expects LightSpeedOutputDecorator" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 4 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "2SexyContent-Template" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45270, "Version": 1, "Guid": "06c96a88-1fe5-4bcf-a88c-26e26f005ca0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Name" }, "Notes": { "*": "

just a nice name which will be shown in dropdowns and similar

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45271, "Version": 1, "Guid": "4f5ac6bf-0185-4827-aeb3-2c2a19a028d8", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45272, "Version": 1, "Guid": "d8232645-15b9-4670-9035-435a24f99905", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupTemplate", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45278, "Version": 9, "Guid": "010e97d2-bc29-4457-ab0f-bba93542eb63", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Template" }, "Notes": { "*": "

The template is a html or code file, which is will generate the output. It could be simple HTML showing a decorative line, a token-based HTML with placeholders like [Content:Title], or an advanced c# Razor template with placeholders like @Content.Title as well as conditions, loops etc.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "204e815f-a0e6-4820-abf5-43851e0b9831", "1d80d0b3-9ffe-4496-90f1-9ae1027e6d16", "a40d7865-f0d4-41c4-a30f-c4ba8bbe2953" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45279, "Version": 9, "Guid": "bbef64eb-5ea3-4f32-8395-7d5679bbf984", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Type", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 45280, "Version": 3, "Guid": "3973286f-32aa-4713-bc98-7bca03cbbdd8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "C# Razor" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Type" }, "Notes": { "*": "

this type determines which view-engine will be used to render the result

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "37302ae7-4aa9-4c45-a99d-efe5ff9be05d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45281, "Version": 3, "Guid": "afcc31a1-b2e1-48d8-8158-0440b8977dd9", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45282, "Version": 3, "Guid": "1ef3b54e-0806-467c-ac96-c9bb73bda214", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Token\nC# Razor" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Location", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 45283, "Version": 10, "Guid": "e319559d-eaeb-4f51-aeae-5b8babcdbab3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Site" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Location" }, "Notes": { "en-us": "

templates are usually stored in the portal - or in rare cases or in the shared, default-zone - note that sharing templates has various caveats, so you should read about shared templates here

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "bbe01933-12da-4052-975e-795733012b74", "137d7d82-69dc-4216-8b16-7b28ce01f324" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "EnableExperimental": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45284, "Version": 10, "Guid": "536be02b-b517-4efc-939f-ca5030a1bae5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45285, "Version": 10, "Guid": "a9c9393e-b5b5-494e-99ac-78f6722d50f9", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Site:App Files in the Current Site\nGlobal:App Files in Shared (Global) section \uD83E\uDD1D" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Path", "Type": "String", "InputType": "string-template-picker", "IsTitle": false, "Metadata": [ { "Id": 45286, "Version": 1, "Guid": "69c72b8f-1246-46b4-95cf-baf5499c6393", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-template-picker" }, "Name": { "*": "Template file" }, "Notes": { "*": "

choose or create the template file - more help

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45287, "Version": 1, "Guid": "b723401a-b3e0-446b-b43a-b8d65777e705", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "VarCustomIcon", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130445, "Version": 6, "Guid": "61696aa2-e970-40a1-96bb-370e6e0a35b7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "VarCustomIcon" }, "Notes": { "en-us": "

Determine how the icon (if any) is provided. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "09cfe676-91a0-4f5f-8a20-a8b0d0fd420f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "IsEphemeral": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130449, "Version": 5, "Guid": "086a2c16-6684-47bd-9c90-5b1940b449e3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Icon uses the same-named file in the template folder or a default symbol" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Use Custom Icon" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Icon", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 130446, "Version": 8, "Guid": "12314234-571e-4399-8915-815a026ba6b9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Icon" }, "Notes": { "en-us": "

We recommend using the [App:Path] placeholder - see docs.

" }, "Placeholder": { "en-us": "Drop file or use [App:Path]/filename.png for files in your app-folder" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "4c014396-a4b7-4b2c-897e-b383d6f23021", "d14a0d46-518d-4dc9-b8a4-05444b70f97b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130452, "Version": 6, "Guid": "eb8f4150-4d29-4469-b31a-ab18e69de3fa", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupShowHide", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130153, "Version": 6, "Guid": "a0673981-299e-49a2-b79b-59458c3db589", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Show / Hide View Rules" }, "Notes": { "*": "

Views are visible and selectable by default. Here you can change how this behaves. Some reasons you may want to do this:

\n
    \n
  1. If your view is only needed on one page and then shouldn't be available any more (because it's an admin view or something) then you want to add it to that page and then configure to Hide from Editor.
  2. \n
  3. If your view is a details-view (so another list has a link which will show this, then...\n
      \n
    1. You want to specify that it only shows if a term is in the URL
    2. \n
    3. And you probably want to also hide it, so editors don't choose this view to add to a page directly.
    4. \n
    \n
  4. \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "295c8af6-cb9e-4394-9fcc-1f957907e94c", "50d9926b-bdc0-4e6e-a837-046fa1e59eee" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130154, "Version": 5, "Guid": "31aeacdd-225c-41e3-aaf0-c106e1cbcb95", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsHidden", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45276, "Version": 2, "Guid": "8df13ac0-3763-470e-90e9-6ca08ed7be57", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Hide from editor" }, "Notes": { "*": "

hide this template from the normal selection - this is for templates you only want to insert once or twice, and then prevent additional uses

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45277, "Version": 2, "Guid": "bc7a124e-87e7-45be-9348-b6241279c6ae", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Show in View Selection (default)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Hidden in View Selection ⛔" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ViewNameInUrl", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45273, "Version": 2, "Guid": "b7a0ac98-3599-4c91-8a9c-af90235b720b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "/* compatibility: 1.0 */\n\n// must must do some special stuff here\n// but for code maintenance reasons, we put it in the normal 2sxc-code\n\n// pick up the code-block already prepared, and give it back\nvar cs = window[\"2sxc-template-picker-custom-script-for-name-field\"];\nreturn cs;" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Name in URL Path" }, "Notes": { "*": "

specify this if you want this template to be activated automatically, when some keywords appear in the url - like showing details when /post/395 is in the path (note: this only works in Apps) - read more

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45274, "Version": 2, "Guid": "ffb32750-dfe6-414e-8e07-95906ad50d64", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45275, "Version": 2, "Guid": "5d5fe141-b048-4cf7-b7aa-ca0d2240939e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 130236, "Version": 1, "Guid": "94b2bc0a-9cf9-4410-91c9-28a051bab69d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarViewDataModel", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 130164, "Version": 16, "Guid": "e492bb92-066b-4617-bbd0-0a7ac8d1ebc7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Data Model used in View" }, "Notes": { "*": "

This shows/hides various settings based on what you need.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "07958470-13f6-4e7d-b2a2-901517058e2a", "d259040a-daca-473b-8fbe-7d8aacf8fa5e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130165, "Version": 15, "Guid": "21c7077f-1441-4c96-b5c3-ca21f6f9f1c3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130166, "Version": 15, "Guid": "4af51efc-6099-46ae-8749-e17117830025", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Please choose...:\nView doesn't need Data:-\nSingle Content Item:c\nList of Content Items:cl\nData from Query:q\nData from Query with Module-Content:cq\nShow all Settings:clq" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarPresentation", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130195, "Version": 12, "Guid": "acb08960-2653-4d4b-be18-35e755d773c3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show Presentation Settings" }, "Notes": { "*": "

Content-items can have a Presentation item to describe how it should be styled when shown on a specific Module instance. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7ef8345b-d7dd-45d6-b786-025a839f9e50", "fb171277-ef31-4a9b-957d-97f19ab3d7eb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130196, "Version": 11, "Guid": "c22acd85-0b45-4919-87e0-28d36c0af349", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Don't use Presentation on Content-Items" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Activate Presentation on Content-Items" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupContent", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45288, "Version": 8, "Guid": "bc2fdef6-59e4-49d3-b700-eebd6a7877fb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Content-Item" }, "Notes": { "*": "

Templates show either Content, Data, both, or neither. If you're just getting started, Content is the way to go. Read more about this in the online help.  

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "58a965e4-844e-42e7-86eb-272a5518c4f1", "c0459a50-fec5-44af-a9ec-178c11cc0066", "aa42949c-b740-4132-91f7-b32bb4b13cac" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45289, "Version": 8, "Guid": "b93717a1-66ac-4158-b450-fdca3d1963c4", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ContentTypeStaticName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 45290, "Version": 2, "Guid": "e1e88b2e-13eb-496b-9079-108a1c93538e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Content Type" }, "Notes": { "*": "

the type of content this template will show - like a person, simple content, etc.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45291, "Version": 6, "Guid": "f478424f-edaf-4638-80d7-2d04e52d5287", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53724, "Version": 5, "Guid": "49d68cc0-1d3f-48ac-9520-7256e15d79c9", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ContentDemoEntity", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45292, "Version": 5, "Guid": "267ef446-7e3e-4dc0-b028-a07419df6308", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Content Demo Item" }, "Notes": { "*": "

this item will be used for previews, so the user can see what the template does without entering any data

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "76f2bae3-c5db-4eb7-ab3f-492c0b423f96" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45293, "Version": 3, "Guid": "2bdb92d8-3161-4715-983a-6c98cc1c902e", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[ContentTypeStaticName]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupEnd2", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 130239, "Version": 1, "Guid": "224870b4-4652-4e98-aee2-fd4961cf4879", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupEndi2" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupContentPresentation", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45294, "Version": 8, "Guid": "bce3f386-7820-4d9d-8d80-1500c7ff4e50", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Content-Item Presentation" }, "Notes": { "en-us": "

Presentation settings are used to configure how your content will be shown. You can do very sophisticated things with this. Read more about it in help

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a233ee52-fe97-4725-98ba-8db297d2bfdd", "c3b896f8-40ce-4c5a-8c93-71d29da61e2a", "bb822c03-2199-4358-a206-a7fd0e80bc8f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "EnableExperimental": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45295, "Version": 8, "Guid": "2900df3a-3d19-45e7-aa5f-b03dc9549eea", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PresentationTypeStaticName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 45296, "Version": 6, "Guid": "7307c1f1-54c0-46ce-97bd-b3e33df57804", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Content Presentation Type" }, "Notes": { "*": "" }, "Placeholder": { "*": "Content-Type which is used for presentation-settings" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45297, "Version": 5, "Guid": "1a9554d0-2161-4232-9ec4-0f5a418933f4", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53725, "Version": 4, "Guid": "7fb11e1f-4719-46c2-8b74-a02239589b6d", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PresentationDemoEntity", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45298, "Version": 4, "Guid": "9304ce52-2cfc-4e5e-a4b7-7e41ac1aec27", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Demo item" }, "Notes": { "*": "

this will contain a demo entity which is used as a default (when the editor doesn't provide custom presentation settings) as well as for preview - when the template is just showing the demo-item to the editor - more

" }, "Placeholder": { "*": "Content Presentation Demo Item" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3d21c563-c7f4-4b62-9326-d9362124f2eb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45299, "Version": 4, "Guid": "4a6305ee-96f4-4571-98a9-9caa40adcc30", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[PresentationTypeStaticName]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupList", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45300, "Version": 4, "Guid": "0c46e686-71ee-49e4-bae4-7e45f5970d1f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "List Settings" }, "Notes": { "*": "

You can create templates which show multiple items - like a list of links or images. enable this here to tell the edit-UI, that this template can show more than just 1 item - so this will provide more buttons like addmove-up/down, etc. - more

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "4773a195-22b5-4bd6-b26e-e2d4ca3e4d37" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45301, "Version": 4, "Guid": "76a380d9-a5d9-4445-9c5a-7ef930342046", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "UseForList", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45302, "Version": 1, "Guid": "8c834ae1-1ff8-4ac0-8209-ea67bb3d5acb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Enable list" }, "Notes": { "*": "

turn this on, to tell the UI that this template handles lists

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45303, "Version": 1, "Guid": "b6456f82-b538-4c11-8ce7-467f8d4d1ac3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "ListContentTypeStaticName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 45304, "Version": 6, "Guid": "dd197dbf-cb4a-4b64-bea8-442e85525fd2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Header Item ContentType" }, "Notes": { "*": "

this is the content-type for the Header item in a list-template - more 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45305, "Version": 5, "Guid": "aff8c996-a71a-4151-ae67-2fb432d32f38", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53726, "Version": 4, "Guid": "577b2f0d-0639-40f8-99bf-dae5cda79742", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ListContentDemoEntity", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45306, "Version": 4, "Guid": "e09c78d0-3956-41af-b4df-a51fc4513d36", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Demo Item for the Header" }, "Notes": { "*": "

the default / demo-item for the list Header item - more

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3ecf8c26-2961-4e78-ad7a-008baa1fdd7e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45307, "Version": 4, "Guid": "a8e6c8fa-a615-425a-96f2-b7e9dcca80b9", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[ListContentTypeStaticName]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ListPresentationTypeStaticName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 45308, "Version": 12, "Guid": "220523e5-b075-4ce8-924a-0b98078ca8a1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Content Type of the Header Presentation" }, "Notes": { "*": "

Configure presentation settings of the list Header - read more about lists or presentation settings

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "da75905d-4dd7-4153-9956-a449af20b0c1" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45309, "Version": 11, "Guid": "6d543491-8ad6-4dee-bc9c-b79ef027c630", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53727, "Version": 10, "Guid": "4b30969b-6522-4063-87c4-7341b65aa974", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ListPresentationDemoEntity", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45310, "Version": 4, "Guid": "e75e76a4-feaa-427d-923c-d8d4980e2eb0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Demo Item for the Header Presentation" }, "Notes": { "*": "

the default/demo item for list presentations - more about presentation settings

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9d39e5f7-e53e-4c1d-84be-f7347688a77d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45311, "Version": 4, "Guid": "422e0309-5658-45cf-b9d9-b60359252a31", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[ListPresentationTypeStaticName]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupQuery", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45312, "Version": 7, "Guid": "582d633e-631a-4a31-b2c2-ebc377783a79", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Query Data for this Template" }, "Notes": { "*": "

A template instance can work with Content, Data, both or neither. Here you can configure the system to provide pre-processed data to the template. more

\n

Important: queries can only be used in views of an App. They are not available for normal Content. more

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8adcdefa-88e1-46d4-9874-c6a541774b6b", "b8e974f6-1a2a-4f56-8481-0ac781714f29", "1c1ac0c8-4d72-4314-a2ae-9fa54807e8e1" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45313, "Version": 7, "Guid": "7f8ca82e-da0c-4ce9-bc21-39e32c024deb", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Pipeline", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 45314, "Version": 1, "Guid": "0ad46a09-0682-4be7-be01-e6613ccf8953", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Data Query" }, "Notes": { "*": "

a prepared query which will provide data to this template - more

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45315, "Version": 1, "Guid": "3457bc4e-b88d-4ea0-bf65-61c79ded6629", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "DataPipeline" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": false }, "EnableDelete": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupSearch", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130461, "Version": 7, "Guid": "8070e0e6-f374-49a5-aaa5-2e9d7f74bd5a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Search Indexing Configuration" }, "Notes": { "en-us": "

If the platform like DNN has built-in search, it will find the data shown on this view point to the page this view is on. There are cases where you may want to customize this. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "fe973517-5145-4292-b275-226d6d3cff04", "06582961-f1e3-4a1c-b470-c72e883ba829" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130466, "Version": 6, "Guid": "5127665e-4048-4430-bd42-d28aa365e726", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarSearchIsDefault", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130486, "Version": 4, "Guid": "e4655b81-2b3c-4161-b38f-075658f811be", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "VarSearchIsDefault" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a71cb2c5-6724-44aa-95c1-f5d56e3b0dc6" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130487, "Version": 3, "Guid": "24133bc9-4f4f-41f0-a085-a9c1d5e76440", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Custom Search Indexing (configure yourself)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Default Search Indexing (all Module-Data is given to the Search Index)" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SearchIndexingDisabled", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130469, "Version": 4, "Guid": "3167240f-9739-41d9-84c5-884d0fcdb072", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "SearchIndexingDisabled" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "fc7fdefa-49b0-43d0-b0ea-e7065f8c7a3c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130470, "Version": 3, "Guid": "9e06473b-c10a-4470-a4b9-c642970d2679", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Enable Search Indexing (default)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Disable Search Index (will not give data to the search indexer)" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarCustomSearchStreams", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130473, "Version": 7, "Guid": "86036beb-68a5-4222-8621-740ea47507c5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "VarCustomSearchStreams" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8f0eb938-3077-40d4-a09d-d2bb240f216c", "e9388505-2517-4d00-8cbe-1574371b53a5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130474, "Version": 6, "Guid": "bcdc7191-29d0-45ea-959b-026b7ab1751d", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Pass all Query-Streams to the Search Index (default)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Restrict which Streams in the Query are passed to the Search Index" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SearchIndexingStreams", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 130472, "Version": 5, "Guid": "02969b50-b35e-44bd-9897-754214a18c05", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Query Streams to Use in the Search Index" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "60332050-45b6-434a-b982-eeb2dee9db0a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130475, "Version": 3, "Guid": "56b069d8-c4dc-4760-9a7b-bdbb93c023bb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130476, "Version": 3, "Guid": "e9b79aee-b5f4-4d78-b45b-2b43d57736fe", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.QueryInfo" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "QueryName=[Pipeline]&StreamName=Default" }, "Value": { "*": "Name" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarCustomViewController", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130490, "Version": 4, "Guid": "6415e564-b7d3-4c73-a5af-e74a300e4d69", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "VarCustomViewController" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "79b8d7f1-9f3b-441b-be61-633dee1526dd" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130491, "Version": 3, "Guid": "3be8ba4e-5be1-4cf5-931a-dcc2c15e970f", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Index Data As-Is / Unmodified (default)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Use Code to Customize how Data is Modified" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ViewController", "Type": "String", "InputType": "string-template-picker", "IsTitle": false, "Metadata": [ { "Id": 130462, "Version": 7, "Guid": "3ed13e96-d26a-4829-b97b-b5ef2999bc3c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-template-picker" }, "Name": { "*": "Controller for Search Results" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9fe6801b-3bc1-4aea-86b9-a6ef180f5324", "567a2811-c819-4ce5-bc50-3f757628dace" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130463, "Version": 6, "Guid": "de1a75b7-3abc-4f1c-95a2-43bb08cfb5f6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130464, "Version": 1, "Guid": "3ab7e362-9b8f-471f-a9cf-21ee6c6e2171", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" }, { "Id": 183990, "Version": 1, "Guid": "ee0d0e18-2dac-4efc-96b4-4eda019dd270", "Type": { "Id": "7775df1b-9c6d-4344-8f64-f6683b324615", "Name": "FieldSettingsGeneric" }, "Attributes": { "String": { "SettingsGeneric": { "en-us": "{\r\n \"FileType\": \"C# Search\"\r\n}" }, "Title": { "en-us": "View Configuration - ViewController (Search) - Provide Settings for Type/Location Masks" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupEnd3", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 130245, "Version": 1, "Guid": "bfd42a5d-aab0-4073-aad8-1d064dbfa6be", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupEnd3" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarShowAdvanced", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130198, "Version": 8, "Guid": "b180997f-ecf6-49ea-b1fc-f135ad2cf252", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "VarShowAdvancedNew" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "b4f42c20-54fc-431b-8794-3fd3439615a7", "761e8fb2-c185-4707-a318-0ecee18944d4" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130199, "Version": 6, "Guid": "e3627a2d-a26e-4bd0-8b18-8c0bb26dd9d1", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide Advanced Settings" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Show Advanced Settings" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPublishData", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 45316, "Version": 6, "Guid": "c1b72ab2-f2fa-4eb4-99b2-1b4b2276234b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced Data Publishing Settings (Old, Deprecated, Avoid using)" }, "Notes": { "en-us": "

This is a deprecated feature. If you need something similar or are migrating away, check out the guide on https://r.2sxc.org/brc-13-id 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "d4c5db00-2209-44fe-8a29-d1ad03c6b5df" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "EnableExperimental": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45317, "Version": 6, "Guid": "6daab442-85d8-45dd-bab0-fa7becc228a7", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PublishData", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 45318, "Version": 3, "Guid": "9a20e57f-04b8-4795-b3b8-b9de9341fa06", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "en-us": "Enable Data-Publishing" }, "Notes": { "en-us": "

enables instances of this view to provide the data it would render on the server as JSON - more about templates and more about publishing JSON data

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45319, "Version": 2, "Guid": "275066db-6f5c-43a4-b26b-4299fca22128", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "StreamsToPublish", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45320, "Version": 2, "Guid": "b8aa0d08-e2f4-4ebb-ab19-bddd3b4605d4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Published Streams" }, "Notes": { "en-us": "

if you choose to publish data, you must specify which streams you will publish for security reasons - more

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45321, "Version": 2, "Guid": "554d4efe-fb8b-41cb-9afe-527cf79563b3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45322, "Version": 2, "Guid": "450cd512-c24d-4d23-ae8c-3e87729ee228", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupResources", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130400, "Version": 9, "Guid": "a0af2b48-e3e0-43ca-b754-b7e5e46211a6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "View Settings and Resources" }, "Notes": { "en-us": "

Settings allow your Razor templates to be configured at View-level, or you can also use the Identifier for this. Resources are for multi-language labels and logos. See View docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "0c93c5e3-43d7-46e8-a8fc-6e5b04814277", "04e7161e-5867-4108-8a6b-aab2bd1778f2" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130404, "Version": 8, "Guid": "20938536-6f9e-4a9d-a5b1-e93b2c030efe", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarCustomIdentifier", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130448, "Version": 5, "Guid": "8a1939a7-903c-4a09-b5b0-4a78d1e6f0a3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Use a Custom Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a58024ab-bcca-4e5a-a288-82d3ab36e668" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130450, "Version": 4, "Guid": "b0d4853a-ce5f-4b87-814a-10d65484c0c3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Don't use a Custom Identifier (default)" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Use a Custom Identifier for this View" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Identifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130447, "Version": 4, "Guid": "ac8c6055-851f-44c5-bd2f-e259842eb49b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Custom Identifier" }, "Notes": { "*": "

This is a unique ID for the view, which your code may access on CmsContext.View.Identifier to change it's behaviour based on this identifier. Usually you will either use this OR use the settings. 

" }, "Placeholder": { "*": "Templates can change their behavior based on this Identifier" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7ed0691d-067d-41f3-8398-cfe75d21e77c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130454, "Version": 3, "Guid": "42ebbe7f-626c-4081-995a-4de81870d868", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130455, "Version": 3, "Guid": "b060d9e9-957a-4dcb-a8dd-e8f4b34745b6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarSettingsType", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 130417, "Version": 6, "Guid": "83697f0b-73f0-4db2-84c0-d324c3b041f6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Settings Content-Type" }, "Notes": { "*": "" }, "Placeholder": { "*": "Types in the Configuration Scope" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8f95c620-6b88-4212-b1cf-4f5a7b66ef46" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130428, "Version": 5, "Guid": "2d334fbb-2221-4bd5-a32e-88f15ea8fe43", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130429, "Version": 5, "Guid": "70dc81b7-0f04-45dd-960e-d82221ddf9af", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]&scope=System.Configuration" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Settings", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130402, "Version": 5, "Guid": "9b25bb9d-17c5-43b9-821a-9dc1edd2f833", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Settings Item" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "87dd3509-3510-49d8-8534-4a6f7136f34c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130431, "Version": 4, "Guid": "9729b0fa-a0b2-4daf-86e6-70c0ffe109e4", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[VarSettingsType]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarResourcesType", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 130416, "Version": 11, "Guid": "22b3093b-4af0-469f-83ba-2ba8e22b8834", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Resources Content-Type" }, "Notes": { "*": "" }, "Placeholder": { "*": "Types in the Configuration Scope" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6cac1021-b78b-4164-9736-dd66397e7432" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130418, "Version": 10, "Guid": "42f4603e-aad1-4a49-ac2a-f2c61e5d7610", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130419, "Version": 10, "Guid": "906010c9-8e14-4c9b-9d1e-f6f2252ff04b", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "appid=[App:AppId]&scope=System.Configuration" }, "Value": { "*": "StaticName" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Resources", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130401, "Version": 7, "Guid": "d7090d73-c986-4cc0-9063-fabcd899ad08", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Resources Item" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7ec071ef-228d-4c9b-a86d-49d5724bc7ba" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130430, "Version": 6, "Guid": "ffbcad72-19e7-4bfa-ba23-8c010bc0f8e0", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "[VarResourcesType]" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130201, "Version": 3, "Guid": "204e815f-a0e6-4820-abf5-43851e0b9831", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide till name is added" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130249, "Version": 17, "Guid": "1d80d0b3-9ffe-4496-90f1-9ae1027e6d16", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) {\n var path = data.Path ? data.Path : '';\n var icon = data.Icon ? '\uD83D\uDDBC️' : '';\n var preIcon = data.Location.toLowerCase() == 'global' ? '\uD83E\uDD1D ' : '';\n var add = path + (path || icon ? ' ' : '') + icon;\n if(add) add = ' (' + add + ')';\n return data.default + preIcon + add;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: with path" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130250, "Version": 23, "Guid": "a40d7865-f0d4-41c4-a30f-c4ba8bbe2953", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return !!data.Path;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Collapsed" }, "Title": { "*": "Setting Collapsed: on initial load" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130178, "Version": 8, "Guid": "37302ae7-4aa9-4c45-a99d-efe5ff9be05d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VarShowAdvanced; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show only if show-advanced" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130179, "Version": 5, "Guid": "bbe01933-12da-4052-975e-795733012b74", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VarShowAdvanced; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show only if ShowAdvanced" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130456, "Version": 1, "Guid": "137d7d82-69dc-4216-8b16-7b28ce01f324", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n\n if(data.value == 'Portal File System') return 'Site';\n if(data.value == 'Host File System') return 'Global';\n return data.value;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: Convert from old names to new automatically" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130194, "Version": 5, "Guid": "58a965e4-844e-42e7-86eb-272a5518c4f1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name && data.VarViewDataModel.indexOf('c') > -1; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if Type \"C\" and Name ready" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130501, "Version": 1, "Guid": "c0459a50-fec5-44af-a9ec-178c11cc0066", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return !!data.ContentTypeStaticName;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Collapsed" }, "Title": { "*": "Setting Collapsed: on load if already set" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130504, "Version": 3, "Guid": "aa42949c-b740-4132-91f7-b32bb4b13cac", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n var typeOk = (data.ContentTypeStaticName ? ' ✅' : '');\n var demoOk = (data.ContentDemoEntity.length ? '✅' : '➖');\n var indicator = typeOk + (typeOk ? '/' + demoOk : '');\n return data.default + indicator;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Show if configured" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130397, "Version": 2, "Guid": "76f2bae3-c5db-4eb7-ab3f-492c0b423f96", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.ContentTypeStaticName || !!data.ContentDemoEntity.length; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130171, "Version": 5, "Guid": "a233ee52-fe97-4725-98ba-8db297d2bfdd", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VarPresentation; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if not VarPresentation" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134246, "Version": 2, "Guid": "c3b896f8-40ce-4c5a-8c93-71d29da61e2a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return data.PresentationDemoEntity.length > 0;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Collapsed" }, "Title": { "en-us": "Setting Collapsed" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134247, "Version": 3, "Guid": "bb822c03-2199-4358-a206-a7fd0e80bc8f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n var typeOk = (data.PresentationTypeStaticName ? ' ✅' : '');\n var demoOk = (data.PresentationDemoEntity.length ? '✅' : '➖');\n var indicator = typeOk + (typeOk ? '/' + demoOk : '');\n return data.default + indicator;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130398, "Version": 1, "Guid": "3d21c563-c7f4-4b62-9326-d9362124f2eb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.PresentationTypeStaticName || !!data.PresentationDemoEntity.length; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130193, "Version": 5, "Guid": "4773a195-22b5-4bd6-b26e-e2d4ca3e4d37", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name && data.VarViewDataModel.indexOf('l') > -1; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if ViewDataModel has L and name ready" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130399, "Version": 1, "Guid": "3ecf8c26-2961-4e78-ad7a-008baa1fdd7e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.ListContentTypeStaticName || !!data.ListContentDemoEntity.length; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130172, "Version": 5, "Guid": "da75905d-4dd7-4153-9956-a449af20b0c1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VarPresentation; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show based on VarPresentation" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130173, "Version": 8, "Guid": "9d39e5f7-e53e-4c1d-84be-f7347688a77d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { \n return data.VarPresentation\n && (!!data.ListPresentationTypeStaticName || !!data.ListPresentationDemoEntity.length);\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show based on VarPresentation" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130192, "Version": 9, "Guid": "8adcdefa-88e1-46d4-9874-c6a541774b6b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name && data.VarViewDataModel.indexOf('q') > -1; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if Q is set and name ready" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130502, "Version": 1, "Guid": "b8e974f6-1a2a-4f56-8481-0ac781714f29", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return !!data.Pipeline;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Collapsed" }, "Title": { "*": "Setting Collapsed: onload if already has value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130503, "Version": 3, "Guid": "1c1ac0c8-4d72-4314-a2ae-9fa54807e8e1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n return data.default + (data.Pipeline.length ? ' (✅)' : '');\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Show value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130177, "Version": 6, "Guid": "d4c5db00-2209-44fe-8a29-d1ad03c6b5df", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.PublishData || context.debug; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show only if show-advanced" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130188, "Version": 13, "Guid": "07958470-13f6-4e7d-b2a2-901517058e2a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // skip if already set\n if(context.cache.notFirstRun) {\n // set useList if it contains an 'l', but is not 'clq' which is show all\n const value = data.value[0];\n const useList = value != 'clq' && value.indexOf('l') != -1;\n // console.log('VarViewModel - debug value', data.value, useList);\n return {\n value: data.value,\n fields: [\n { name: 'UseForList', value: useList },\n ]\n };\n }\n\n // First-Run Scenario\n context.cache.notFirstRun = true;\n\n // new without name - set empty so it's still required\n if(!data.Name)\n return '';\n\n const hasQuery = data.Pipeline.length == 1;\n const hasList = data.UseForList;\n const hasContent = data.ContentTypeStaticName != '';\n const key = (hasContent || hasList ? 'c' : '') + (hasList ? 'l' : '') + (hasQuery ? 'q':'');\n if(key == '')\n return '-'; // default to No-Content if not set\n return key;\n});" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value: Initialize based on state" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130238, "Version": 4, "Guid": "d259040a-daca-473b-8fbe-7d8aacf8fa5e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name && !!data.Path; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide till name && template" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130197, "Version": 6, "Guid": "7ef8345b-d7dd-45d6-b786-025a839f9e50", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.notFirstRun) return data.value || false;\n context.cache.notFirstRun = true;\n\n // skip once it's been set; so only run this set-value on initial set\n // if(data.value != null) return data.value;\n\n if(data.PresentationTypeStaticName || data.ListPresentationTypeStaticName) return true;\n\n return false;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: Set inital state" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130240, "Version": 4, "Guid": "fb171277-ef31-4a9b-957d-97f19ab3d7eb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name && data.VarViewDataModel.indexOf('c') > -1; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Req. Name & content" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130200, "Version": 9, "Guid": "b4f42c20-54fc-431b-8794-3fd3439615a7", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n// console.log('var show advanced', data, context);\n if(context.cache.notFirstRun) return data.value || false;\n context.cache.notFirstRun = true;\n\n // Init with true if advanced stuff is set\n if(data.Type != 'C# Razor') return true;\n // check for both old/new value, as the value-init may not have run already\n if(data.Location != 'Site' && data.Location != 'Portal File System') return true;\n if(data.PublishData == true) return true;\n\n // don't init otherwise\n return false;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: Initialize if already using advanced stuff" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130237, "Version": 3, "Guid": "761e8fb2-c185-4707-a318-0ecee18944d4", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Name; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide till name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130403, "Version": 3, "Guid": "0c93c5e3-43d7-46e8-a8fc-6e5b04814277", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.Path; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Hide till window.beta = true" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130499, "Version": 4, "Guid": "04e7161e-5867-4108-8a6b-aab2bd1778f2", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n var resSuffix = data.Resources.length ? 'Resources: ✅' : '';\n var setSuffix = data.Settings.length ? 'Settings: ✅' : '';\n var setIdent = data.Identifier ? 'Ident: ' + data.Identifier : '';\n var suffix = resSuffix + (resSuffix && setSuffix ? ', ' : '') + setSuffix;\n suffix = suffix + (suffix && setIdent ? ', ' : '') + setIdent;\n if(suffix) suffix = ' (' + suffix + ')';\n return data.default + suffix;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Show if we have values" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130554, "Version": 2, "Guid": "7ec071ef-228d-4c9b-a86d-49d5724bc7ba", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!(data.Resources.length || data.VarResourcesType); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Hide if empty and no type selected" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130555, "Version": 1, "Guid": "87dd3509-3510-49d8-8534-4a6f7136f34c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!(data.Settings.length || data.VarSettingsType); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: hide if empty and no settings-type" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130434, "Version": 2, "Guid": "6cac1021-b78b-4164-9736-dd66397e7432", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n // After second run, once visible, keep visible. \n if(context.cache.secondRun && data.value) return true;\n\n context.cache.secondRun = true;\n return data.Resources.length == 0;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Show if needed" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130435, "Version": 1, "Guid": "8f95c620-6b88-4212-b1cf-4f5a7b66ef46", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n // After second run, once visible, keep visible. \n if(context.cache.secondRun && data.value) return true;\n\n context.cache.secondRun = true;\n return data.Settings.length == 0;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Show if needed" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130488, "Version": 4, "Guid": "a71cb2c5-6724-44aa-95c1-f5d56e3b0dc6", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n var result =\n !data.SearchIndexingDisabled\n && data.SearchIndexingStreams.length == 0\n && data.ViewController == ''; \n return result;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130492, "Version": 3, "Guid": "79b8d7f1-9f3b-441b-be61-633dee1526dd", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { \n var result = !data.ViewController \n && !data.VarSearchIsDefault \n && !data.SearchIndexingDisabled; \n return result;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130216, "Version": 4, "Guid": "295c8af6-cb9e-4394-9fcc-1f957907e94c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Path; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show when template is set" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130252, "Version": 3, "Guid": "50d9926b-bdc0-4e6e-a837-046fa1e59eee", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.default + (data.IsHidden ? ' ⛔': '') + (data.ViewNameInUrl ? ' \uD83D\uDD17': ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130458, "Version": 3, "Guid": "09cfe676-91a0-4f5f-8a20-a8b0d0fd420f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.Path && !data.Icon; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: once path is known and no icon added yet" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 163996, "Version": 2, "Guid": "4c014396-a4b7-4b2c-897e-b383d6f23021", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n const icon = data.Icon.toLowerCase();\n if (icon.indexOf('[app:path]/') == 0)\n return data.default + ' \uD83D\uDC4D\uD83C\uDFFD [App:Path]/... is the best option';\n if (icon.indexOf('file:') == 0)\n return data.default + \" ⚠️ using 'file:...' is not ideal, see docs link in description below\";\n return data.default;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130451, "Version": 1, "Guid": "d14a0d46-518d-4dc9-b8a4-05444b70f97b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.VarCustomIcon || !!data.Icon; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130453, "Version": 1, "Guid": "7ed0691d-067d-41f3-8398-cfe75d21e77c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.VarCustomIdentifier || !!data.Identifier; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130500, "Version": 2, "Guid": "a58024ab-bcca-4e5a-a288-82d3ab36e668", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !data.Identifier; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Hide if set" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130467, "Version": 5, "Guid": "fe973517-5145-4292-b275-226d6d3cff04", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) {\n // always show if there is search-configuration active\n if(!data.VarSearchIsDefault) return true;\n var result = !!data.Name \n && !!data.VarViewDataModel \n && data.VarViewDataModel.indexOf('-') == -1;\n return result;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130468, "Version": 7, "Guid": "06582961-f1e3-4a1c-b470-c72e883ba829", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n var hint = data.SearchIndexingDisabled \n ? 'disabled'\n : (data.ViewController ? '⚙️ ' + data.ViewController : 'use default behavior');\n\n if(data.SearchIndexingStreams.length > 0)\n hint += '; filter Query-Streams';\n return data.default + ' (' + hint + ')'; \n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name: show checkbox if used" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130465, "Version": 2, "Guid": "9fe6801b-3bc1-4aea-86b9-a6ef180f5324", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return 'C# Search'; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.FileType" }, "Title": { "*": "Setting FileType: set to 'C# Search'" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130471, "Version": 4, "Guid": "567a2811-c819-4ce5-bc50-3f757628dace", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { \n return !data.VarSearchIsDefault // hide if default\n && !data.SearchIndexingDisabled // hide if disabled\n // show if has content or toggle is on\n && (!!data.ViewController || data.VarCustomViewController);\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130489, "Version": 1, "Guid": "fc7fdefa-49b0-43d0-b0ea-e7065f8c7a3c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !data.VarSearchIsDefault; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130478, "Version": 2, "Guid": "60332050-45b6-434a-b982-eeb2dee9db0a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.SearchIndexingStreams || data.VarCustomSearchStreams; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130477, "Version": 3, "Guid": "8f0eb938-3077-40d4-a09d-d2bb240f216c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.Pipeline.length == 1 && !data.VarSearchIsDefault && !data.SearchIndexingDisabled; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: Show if query and not disabled" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130479, "Version": 2, "Guid": "e9388505-2517-4d00-8cbe-1574371b53a5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n\n return !!data.SearchIndexingStreams;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: Initial true if already set" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "3937fa17-ef2d-40a7-b089-64164eb10bab", "Name": "2sxcPolymorphismConfiguration", "Scope": "System.Cms", "Metadata": [ { "Id": 72639, "Version": 1, "Guid": "b45790f7-5a84-47a5-b1fa-72925948f4da", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "EditInstructions": { "*": "

Based on this configuration, 2sxc will use other template files if it can find them. To understand this and discover more, read about polymorphism.

" }, "Label": { "*": "View Polymorphism Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "3937fa17-ef2d-40a7-b089-64164eb10bab" } } ], "Attributes": [ { "Name": "Mode", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 72636, "Version": 4, "Guid": "376830b7-1f8e-4865-9feb-df6805c01485", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Mode" }, "Notes": { "*": "

The mode determines how Polymorphism should auto-detect other editions.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 72637, "Version": 3, "Guid": "3f7eb00b-4c08-4357-9242-2fd89f2aec39", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 72638, "Version": 3, "Guid": "0c9042ac-395d-43d0-ad97-0cbe6bb6499a", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "None:\nKoi CSS Framework:Koi?cssFramework\nHost user staging/live:Permissions?IsSuperUser" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "UsersWhoMaySwitchEditions", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183779, "Version": 5, "Guid": "61b2da59-8201-49ba-b33f-e5f14f580a5f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Users Who May Switch Editions" }, "Notes": { "en-us": "

...in addition to the SuperUser

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "afa379c8-d1a2-4a7b-bfef-8217a3bde6bb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183780, "Version": 3, "Guid": "e8e7c3d9-b590-4888-b101-161f26fa7592", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "4bd91a3d-ea09-4ae5-b984-42d934f072ae" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183783, "Version": 1, "Guid": "afa379c8-d1a2-4a7b-bfef-8217a3bde6bb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // if selection is Permissions, also show the who-may-switch\n return data.Mode.includes('Permissions?');\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183781, "Version": 1, "Guid": "4bd91a3d-ea09-4ae5-b984-42d934f072ae", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "[Item:Name] ([Item:UserName])" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Users" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Get all Users" }, "Value": { "en-us": "Id" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "1f1c8118-8ea5-4db5-8e3d-f5ef2131050b", "Name": "OpenGraph", "Scope": "System.Cms", "Metadata": [ { "Id": 150900, "Version": 2, "Guid": "9f68aa8a-4d9d-463b-a9f8-77eba12050f9", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

BETA / EXPERIMENTAL - Configure Open-Graph Data for this Page/Object

\n

As of right now it can only specify the type and title. In future, we'll add a lot of fields and also add merging OpenGraph values with other OpenGraph values added by content. 

" }, "Label": { "en-us": "Open Graph Metadata" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1f1c8118-8ea5-4db5-8e3d-f5ef2131050b" } }, { "Id": 150901, "Version": 4, "Guid": "ddf58645-a30a-4486-b5f7-e63529709fb5", "Type": { "Id": "acc185a7-f300-4468-bce8-d6a64038989d", "Name": "ToolbarButtonDecorator" }, "Attributes": { "String": { "Command": { "en-us": "metadata" }, "Ui": { "en-us": "" }, "UiColor": { "en-us": "759BC5" }, "UiIcon": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1f1c8118-8ea5-4db5-8e3d-f5ef2131050b" } } ], "Attributes": [ { "Name": "OgTitle", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 150896, "Version": 1, "Guid": "40652b36-3a53-4f4b-930a-fdcf3ed12897", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Title" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "OgType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 150895, "Version": 5, "Guid": "f3d9bd90-0361-492f-9311-1b5a3a7a2744", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "website" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Open Graph Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150898, "Version": 3, "Guid": "916d769b-3023-4e50-9b1d-d75176982315", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 150899, "Version": 3, "Guid": "9e8a4598-cc0a-4313-822e-acc79292af09", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "article\nbook\nmusic.song\nmusic.album\nmusic.playlist\nmusic.radio_station\nprofile\nvideo.movie\nvideo.episode\nvideo.tv_show\nvideo.other\nwebsite" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "b535b6aa-d0a1-40c1-b996-b7e8461efc0c", "Name": "\uD83E\uDD77PolymorphismPreviewSettings", "Scope": "System.Cms", "Metadata": [ { "Id": 184171, "Version": 3, "Guid": "3019e511-9198-47df-9d7e-28e3e93f9703", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Polymorphism Preview Settings" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "b535b6aa-d0a1-40c1-b996-b7e8461efc0c" } } ], "Attributes": [ { "Name": "Background", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184180, "Version": 3, "Guid": "3ee5e316-5935-431c-b736-9682d93c8b9b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Background Info Regarding Polymorphism" }, "Notes": { "en-us": "

What is this Polymorphism thing?

\n

Apps can have multiple editions of the code which generates the output. This is called Polymorphism.

\n

Some apps use polymorphism to detect the bootstrap version and show the appropriate output. Others use it so developers can create a staging edition of the code, while the editors and the general public see the live edition. 

\n

But in some situations - such as a \"preview before release\" or if a developer needs to see what the general public sees, it's important to quickly switch editions - which is what this is for. 

\n

How does it work?

\n

If you select a specific edition, it will set a cookie specific to this App which will tell the backend to prefer the edition you have selected here. 

\n

Note that if that edition does not exist, it will still default to the standard edition, as is configured in each view. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184182, "Version": 2, "Guid": "dfd04c70-ab0c-4222-9372-ddab8788e7f0", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "BackgroundInfoEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 184181, "Version": 1, "Guid": "b41c241a-7ea1-4a87-b88f-9c9a2f61880d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "BackgroundInfoEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "CurrentValues", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 184173, "Version": 7, "Guid": "46ed2ab3-27a3-4f55-b6aa-e88f25bc0cde", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Current Values" }, "Notes": { "en-us": "

You are currently making preview settings for:

\n
    \n
  • App: [AppId]
  • \n
  • Cookie Name: [CookieId]
  • \n
  • Edition in the cookie: [Edition]
  • \n
\n

If a view does not exist in this edition, it will load the view from the default location.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "450a2dbf-1dbf-45ad-afa3-19b7bb552fbe" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" } ] }, { "Name": "Edition", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 184174, "Version": 5, "Guid": "d19efb20-028e-4893-b766-70496aa775e6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Edition" }, "Notes": { "en-us": "

Pick any value - or use free text entry to specify another edition

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "55572d4e-a204-4a49-b460-193400a3e2e9" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184175, "Version": 3, "Guid": "ee3bd6e3-e14b-45bf-87db-3e5dbf159a08", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184176, "Version": 3, "Guid": "5370bad1-c4d7-4bc0-be64-bfb022aeb631", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Not configured (empty - usually recomended)\nlive:live edition\nstaging:staging edition\nbs5:bs5 edition (Bootstrap5)\nbs4:b4 edition (Bootstrap4)\nbs3:bs3 edition (Bootstrap3)\n" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 184177, "Version": 5, "Guid": "450a2dbf-1dbf-45ad-afa3-19b7bb552fbe", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // Helper from https://stackoverflow.com/a/25490531/5044294\n const getCookieValue = (name) => (\n document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || ''\n )\n const appId = context.app.appId;\n const cookieId = `app-${appId}-edition`;\n const editionFromCookie = getCookieValue(cookieId);\n const result = data.default\n .replace('[AppId]', appId)\n .replace('[ZoneId]', context.app.zoneId)\n .replace('[CookieId]', cookieId)\n .replace('[Edition]', editionFromCookie || '(empty - use default)');\n return result;\n});" }, "Target": { "en-us": "Field.Settings.Notes" }, "Title": { "en-us": "Field.Settings.Notes" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184178, "Version": 5, "Guid": "55572d4e-a204-4a49-b460-193400a3e2e9", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // Helper from https://stackoverflow.com/a/25490531/5044294\n const getCookieValue = (name) => (\n document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || ''\n )\n const cookieName = `app-${context.app.appId}-edition`;\n\n if (!context.cache.alreadyRun) {\n context.cache.alreadyRun = true;\n return {\n value: getCookieValue(cookieName) ?? \"\"\n };\n }\n\n const edition = data.value;\n\n // Empty: flush cookie\n if (data.value == '') {\n console.log(`Will unset cookie ${cookieName}`);\n document.cookie = `${cookieName}=flush; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n }\n else {\n console.log(`Will set cookie ${cookieName}=${edition}`)\n document.cookie = `${cookieName}=${edition}; path=/;`;\n }\n // don't return anything, as we won't change the value\n // return data.value;\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-copyright.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "077835ec-889e-433f-8acf-a4715acb3503", "Name": "CopyrightDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 182602, "Version": 2, "Guid": "3103d5f8-04da-480b-8747-5603cbd311a7", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Copyright Metadata \uD83C\uDFF7️" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "

Add Copyright Information to anything (decorator)

" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00MDAtMzIwaDE2MHExNyAwIDI4LjUtMTEuNVQ2MDAtMzYwdi04MGgtODB2NDBoLTgwdi0xNjBoODB2NDBoODB2LTgwcTAtMTctMTEuNS0yOC41VDU2MC02NDBINDAwcS0xNyAwLTI4LjUgMTEuNVQzNjAtNjAwdjI0MHEwIDE3IDExLjUgMjguNVQ0MDAtMzIwWm04MCAyNDBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "077835ec-889e-433f-8acf-a4715acb3503" } }, { "Id": 182603, "Version": 1, "Guid": "53450d95-11ec-42c4-b65a-55d245e6dc5e", "Type": { "Id": "acc185a7-f300-4468-bce8-d6a64038989d", "Name": "ToolbarButtonDecorator" }, "Attributes": { "String": { "Command": { "en-us": "metadata" }, "Ui": { "en-us": "classes=single-field" }, "UiColor": { "en-us": "" }, "UiIcon": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "077835ec-889e-433f-8acf-a4715acb3503" } } ], "Attributes": [ { "Name": "CopyrightInfoType", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 182592, "Version": 6, "Guid": "0feaad4c-aa5a-42f7-a60f-b11ff8ac26ec", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Copyright Information Type", "de-de": "Copyright Typ" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182595, "Version": 5, "Guid": "7455795f-cd85-48e1-81bb-c72610683deb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182596, "Version": 5, "Guid": "2d8f2653-f6bd-49a3-9411-69f251e022de", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Not specified / unknown\nsimple:Simple Copyright Information\nadvanced:Advanced Copyright (reusable definitions)", "de-de": ":Unbekannt / nicht angegeben\nsimple:Einfache Angaben\nadvanced:Erweiterte Angaben (mehrfach verwendbar)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CopyrightMessage", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182593, "Version": 3, "Guid": "eff0239b-2d2c-458d-8f37-366d731935fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Copyright Message", "de-de": "Copyright Mitteilung" }, "Notes": { "en-us": "

Simple message/text to describe the copyright. eg. \"by John Doe 2023, use only with permission\"

", "de-de": "

Einfacher Text um das Copyright zu beschreiben, bsp. \"von Erich Muster 2023\"

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ba8bd5b8-4585-4761-b329-2f97ed812602" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182597, "Version": 1, "Guid": "11cbf1f0-2644-4d7e-8e7e-1d504eed8669", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182598, "Version": 1, "Guid": "906783ed-0d81-4a36-a21b-77702824f1a5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Copyrights", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 182626, "Version": 3, "Guid": "f0c30664-514b-48d8-89cb-8b35026be2d9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Copyrights" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "2994546c-d5b8-4d7e-9240-ee852cb9ad24" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182627, "Version": 1, "Guid": "67623a6f-fc13-414a-a357-2cc7791337e1", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "\uD83D\uDDBACopyright" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 182631, "Version": 2, "Guid": "2994546c-d5b8-4d7e-9240-ee852cb9ad24", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.CopyrightInfoType == 'advanced'; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182601, "Version": 3, "Guid": "ba8bd5b8-4585-4761-b329-2f97ed812602", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.CopyrightInfoType == 'simple'; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "ac3df5f0-c637-45e7-a52b-b323d50e52ac", "Name": "\uD83D\uDDBACopyright", "Scope": "System.Cms", "Metadata": [ { "Id": 182610, "Version": 1, "Guid": "3ae81de2-7065-4beb-b00b-97a0c0e0ff82", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Copyright Information" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "ac3df5f0-c637-45e7-a52b-b323d50e52ac" } } ], "Attributes": [ { "Name": "CopyrightMessage", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182606, "Version": 3, "Guid": "302389b4-d3fa-44a1-b9a1-b37468518700", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Copyright Title / Message", "de-de": "Urheberrechts-Titel / Beschreibung" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "example: John Doe 2023", "de-de": "Beispiel: Erich Muster 2023" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182615, "Version": 2, "Guid": "fdda7148-bcef-4ef1-8d3b-f725c308620e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182616, "Version": 2, "Guid": "4c96f7ad-ef82-43ba-9177-83d70445a204", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CopyrightType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 182605, "Version": 7, "Guid": "2d8f0d8f-5de4-4a7b-a136-c7dc95597139", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "copyright" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Copyright Type", "de-de": "Urheberrechts-Typ" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182611, "Version": 6, "Guid": "217706a2-dd13-4298-9db1-920718254926", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182612, "Version": 6, "Guid": "74028df4-2e51-4be2-a98a-db5ca19ec7a9", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":unknown / not defined\nnone:none / no copyright\ncopyright:Copyright (without specific details)\nCC0:CC0 - Creative Commons - CC0 (no restrictions, like public domain)\nCC BY:CC BY - Creative Commons Attribution\nCC BY-SA:CC BY-SA Creative Commons Attribution-ShareAlike\nCC BY-NC:CC BY-SA-NC Creat. Com. Attribution-NonCommercial\nCC BY-NC-SA:CC BY-NC-SA Creat. Com. Attribution-NonCommercial-ShareAlike\nCC BY-ND:CC BY-ND Creat. Com. Attribution-NonDerivative\nCC BY-NC-ND:CC BY-NC-ND Creat. Com. Attribution-NonCommercial-NonDerivative\nPD:Public Domain (free to use without any restrictions)\nAGPLv3:Software AGPL (open-source, copy-left)\nBSD:Software BSD\nApache:Software Apache (open-source)\nGPLv3:Software GPLv3 (open-source, copy-left)\nLGPLv3:Software LGPLv3\nMIT:Software MIT (open source)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CopyrightYear", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 182607, "Version": 4, "Guid": "12a39577-5ba7-48e4-8e07-209b43cea942", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Year", "de-de": "Jahr" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "acd75358-5ea3-4578-bd65-a2138c5a3e37" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182617, "Version": 2, "Guid": "879d7307-0589-488f-bc2b-c661a763333e", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CopyrightOwner", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182608, "Version": 4, "Guid": "6cbb8323-2854-47ff-90ad-07efe1bba113", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Owner", "de-de": "Eigentümer" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7fa739ca-b340-4157-94a8-52ece8599442" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182618, "Version": 2, "Guid": "a8e7759f-ae9a-44da-a747-85e4253d0f7a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182619, "Version": 2, "Guid": "a06dc7a0-9950-4978-942d-1e3478f2ed57", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CopyrightLink", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182609, "Version": 4, "Guid": "8c71d6f6-d04d-4dfd-a48c-ad1fd9736070", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Link" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "90ddd50e-1b48-43da-9207-1bf808476035" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182620, "Version": 2, "Guid": "ffa020f3-661f-48c3-88c2-ffb01771a14e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182621, "Version": 2, "Guid": "8f15982a-dbed-42c5-bb0b-77f009657b68", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 182622, "Version": 3, "Guid": "acd75358-5ea3-4578-bd65-a2138c5a3e37", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// v2((data) => { var ct = data.CopyrightType; return ct != '' && ct != 'none'; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182623, "Version": 2, "Guid": "7fa739ca-b340-4157-94a8-52ece8599442", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// v2((data) => { var ct = data.CopyrightType; return ct != '' && ct != 'none'; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182624, "Version": 3, "Guid": "90ddd50e-1b48-43da-9207-1bf808476035", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// v2((data) => { var ct = data.CopyrightType; return ct != '' && ct != 'none'; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-datasources.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "5c84cd3f-f853-40b3-81cf-dee6a07dc411", "Name": "DsSerializationConfiguration", "Scope": "System.DataSources", "Metadata": [ { "Id": 129147, "Version": 3, "Guid": "e6cda735-769c-46a3-9c9a-abe756e64bc6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "EditInstructions": { "*": "

You can configure what system properties (ID/Guid etc.) will be included in serialized data. This allows you to harden the APIs and not include any data you don't want to. Read about it in the docs.

\n

This doesn't prevent code or data-sources from accessing the properties, but ensures that it won't be included in the JSON when serialized for WebApi.

\n

This should usually be your last step in a Query, as other processing after this may prevent the configuration from reaching the serializer. 

" }, "Label": { "*": "Serialization Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "

Configures how to serialize data coming through this DataSource.

" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5c84cd3f-f853-40b3-81cf-dee6a07dc411" } }, { "Id": 137442, "Version": 1, "Guid": "6f1e6f06-a273-4141-a6a8-e6b02e3a60c8", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5c84cd3f-f853-40b3-81cf-dee6a07dc411" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 129144, "Version": 2, "Guid": "a94de776-35ed-47f1-af0f-25cffa11ac83", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Serialization Configuration" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a title for you to identify this data.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129161, "Version": 1, "Guid": "19780bed-87b8-4510-9b79-24ac7ca8ba73", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129162, "Version": 1, "Guid": "514a1037-9e7f-40f8-b07d-fb6f06aa366b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 129145, "Version": 3, "Guid": "cc20498e-239c-497b-b416-7b144cfbc6c8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

Notes for your own use, to document why you did this.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 129159, "Version": 2, "Guid": "90172cab-8948-4ae1-b1a5-06682d736069", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129160, "Version": 2, "Guid": "09bf74c7-6425-4baf-ab69-cd0ab8ae4b79", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSystemProperties", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129114, "Version": 4, "Guid": "c17ebb79-d707-4ce4-8ce0-10556d811f38", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "System Properties" }, "Notes": { "*": "

This is about general system properties like ID, Guid and internal dates etc.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129115, "Version": 4, "Guid": "35c9aa01-f3bc-45ab-8a95-cd03d656d54a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129116, "Version": 2, "Guid": "9251a6fb-c953-445a-80a0-d842efc6bf31", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Id" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129117, "Version": 2, "Guid": "9afd84d4-c1ad-4a7e-9996-a91567d9a337", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129118, "Version": 2, "Guid": "81d352a9-528b-42b4-93da-046d7c799fdf", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeGuid", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129119, "Version": 4, "Guid": "5ee0ac4c-be6f-4cf5-8220-32a967f3b705", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Guid" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129120, "Version": 3, "Guid": "56357812-54f1-433a-9389-bed89c5aa1b1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129121, "Version": 3, "Guid": "05151ecd-87ec-4a10-8451-c4de15beaa7c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (include for editors, don't for viewers):\nDon't include:false\nInclude:true" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeTitle", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129122, "Version": 3, "Guid": "4cc2648e-74e8-48c6-befd-12ccfc83c4f6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Title" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129123, "Version": 2, "Guid": "7debff63-f3c6-41e5-8d12-1cb9b3c0d19a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129124, "Version": 2, "Guid": "344a28b5-3321-4b8b-a418-699e7b0f205e", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (include):\nDon't include:false\nInclude:true" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeCreated", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129125, "Version": 3, "Guid": "a1c36ca1-35f3-44ff-9b18-fb0696582c3b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Created Date" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129126, "Version": 2, "Guid": "3d4f16b4-7b7e-43b6-b4b8-a99762e2a63e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129127, "Version": 2, "Guid": "f82133a7-7c60-41fb-ab15-b09790d218f6", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (include):\nDon't include:false\nInclude:true" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeModified", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129128, "Version": 3, "Guid": "5e6076d4-38c9-4777-af80-74941d411aa0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Modified Date" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129129, "Version": 2, "Guid": "f27ca86d-c33c-4561-b755-0b2cb3acb819", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129130, "Version": 2, "Guid": "43bc2390-67d7-45a0-b82c-61012ae70e75", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (include):\nDon't include:false\nInclude:true" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeAppId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 166530, "Version": 3, "Guid": "ffb5d0e0-e734-45bd-99b1-c796ae9196cf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include AppId" }, "Notes": { "en-us": "

Normally not needed, but in rare cases where we load from multiple Apps it helps the UI to not offer edit-buttons.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166531, "Version": 2, "Guid": "b388a2df-53c6-45b4-839b-44591a1d43eb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 166532, "Version": 2, "Guid": "f1aa2183-af92-4cea-8bac-7b378a09c076", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupTypeProperties", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184106, "Version": 3, "Guid": "932b2a02-089f-44d3-af98-f74c931072ca", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Content Type Properties" }, "Notes": { "en-us": "

Include information about the Content Type

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184112, "Version": 2, "Guid": "a9ece415-15da-4b3c-9232-585b83f7d42d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeTypeAs", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184107, "Version": 3, "Guid": "0d013f78-1bfc-4711-806e-42ed15a077bf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Type Information" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184113, "Version": 1, "Guid": "4fe64341-20e4-47ad-a86d-b7fa81f5178b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184114, "Version": 1, "Guid": "3ae13b22-4cf8-422e-8599-a3ae81a9eed4", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Explicitly Don't include\nobject:Include as an object structure\nflat:Include as flat properties" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeTypeId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184110, "Version": 3, "Guid": "3fb4baa9-380d-4bd1-b312-ed98d4496ebd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Type Id" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184115, "Version": 1, "Guid": "3a0f8c69-bd35-4e74-8f91-769e7c979edf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184116, "Version": 1, "Guid": "674c6242-a59c-4b33-8409-06de312d0540", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeTypeName", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184111, "Version": 3, "Guid": "ee1d684b-b592-4cab-a121-d3dd4ef1c840", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Type Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184117, "Version": 1, "Guid": "bba116c0-4304-46e5-9d83-239ce111d329", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184118, "Version": 1, "Guid": "276f3efa-7bc4-40ee-9e35-8dc3d601a81c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TypePropertyNames", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184108, "Version": 3, "Guid": "cdde0c93-93f1-4ade-9b95-2dcf02aebf49", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Type" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Type Property Name(s)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184119, "Version": 1, "Guid": "e389c19c-3780-4d98-85e2-eb0e47d0d17b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184120, "Version": 1, "Guid": "b8a2be59-a245-4d6c-8ac8-9e43160a4004", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (Type)\nType\nContentType\n" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupRelationshipProperties", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129134, "Version": 4, "Guid": "04139ddc-10a5-4ace-9bd7-ce055dadd534", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Relationships" }, "Notes": { "*": "

This determines how information about related items / entities are included in the JSON.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129146, "Version": 3, "Guid": "77b79718-f61b-4923-9017-fdff5846f091", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeRelationships", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129178, "Version": 3, "Guid": "b94ea98a-30d1-4345-97d8-05a153364604", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Relationships" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129179, "Version": 2, "Guid": "1bec5f1c-3d34-4adb-a84d-b4b856d214fd", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129180, "Version": 2, "Guid": "fabc9c19-4d57-4c6f-8f16-4008f1b3c604", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeRelationshipsAsCsv", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167693, "Version": 4, "Guid": "ef4f7188-f0d3-4062-ba18-1024b558da9e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Relationships As CSV" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "34febfa2-fb09-43d7-880d-9103e4d6f52a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167694, "Version": 2, "Guid": "9838782c-a2fc-45a6-8cac-d0842491675b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167695, "Version": 2, "Guid": "1b8107ad-fa98-4df7-b5f6-5aff653579b9", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (return an object)\nfalse:Return object\ntrue:Return comma separated list of IDs as a string\narray:Return a real array [..., ...] - especially for JSON" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeRelationshipId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129135, "Version": 3, "Guid": "c18e9209-7a9f-49e5-86ae-3ca839b00252", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Relationship Id" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129136, "Version": 3, "Guid": "239e1ccf-1b95-4628-bac4-585f5d22c655", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129137, "Version": 3, "Guid": "0c65b2b0-606e-45e1-b56c-7b12588e2d05", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeRelationshipGuid", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129138, "Version": 3, "Guid": "19ab21c4-a01a-4d0e-9de5-e9199e8472d8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Relationship Guid" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129139, "Version": 3, "Guid": "9029512e-080c-4144-8ca6-ceb6369f569e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129140, "Version": 3, "Guid": "7f4dbc5f-8f95-40f3-b6cf-e08453793d1b", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeRelationshipTitle", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129141, "Version": 5, "Guid": "bf72b2eb-b165-48e1-9fc0-3ec583f51814", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Relationship Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7813fc65-c96c-4a2e-a101-2018d3041d6f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129142, "Version": 5, "Guid": "8feb67b0-2a4c-4c4d-b044-8107fdff60e9", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129143, "Version": 5, "Guid": "b8c22f77-9f56-43bf-a095-bae2c4f2a7dd", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupMetadata", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129165, "Version": 3, "Guid": "d9332400-888a-4972-95f3-c282b33c36fb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Metadata" }, "Notes": { "*": "

In case you're new to Metadata, read the docs.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129181, "Version": 2, "Guid": "07ab6152-b6c4-4d9c-bc17-e5d788989dec", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadata", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129169, "Version": 5, "Guid": "8d176fb0-f52a-489e-b1c3-d7b8b5971cbd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Metadata" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129170, "Version": 3, "Guid": "fa838c83-210e-4d06-a88c-79b003d190ae", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129171, "Version": 1, "Guid": "ad69c663-5ca5-40dc-859a-fc6f39fe47b9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" }, { "Id": 129182, "Version": 2, "Guid": "ba7eea6f-e077-4791-89c6-a27af84f8d11", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129166, "Version": 5, "Guid": "3ea1478a-e04a-481d-b838-680c26c260a8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata Id" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "48274f4d-b0ce-434c-9c73-83bb91b9f2c6" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129172, "Version": 4, "Guid": "c007f56e-76c6-4b93-b751-ccc4d9a553c8", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129173, "Version": 4, "Guid": "6eb95953-f224-4542-8a4f-b0ce2f145317", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataGuid", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129167, "Version": 5, "Guid": "453ec67b-d12a-4622-b9f8-2405d01e4574", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata Guid" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "d8270ac1-8933-4883-a1a4-28911a31106c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129174, "Version": 4, "Guid": "4afe2533-f277-44b2-9a06-5b66d256e34f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129175, "Version": 4, "Guid": "fe629d77-e876-4d40-876b-4ec9f5ea6ff0", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataTitle", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129168, "Version": 6, "Guid": "19d60555-7c29-4711-8015-05a62c3271b3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6ee62e9e-2671-4e97-83a7-89731c1705e8" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129176, "Version": 5, "Guid": "87a255b6-fb39-4574-9467-acd03aabaa6a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129177, "Version": 5, "Guid": "d84062b3-c483-4e56-a966-6dc3c7110130", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupMetadataFor", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 134192, "Version": 3, "Guid": "9553bbcd-b348-4b32-abeb-a4236e423be9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Metadata For" }, "Notes": { "en-us": "

If an entity is metadata for something else, this would include the target information. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134194, "Version": 2, "Guid": "b76c3631-617e-4ce5-95bd-587b22953e96", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataFor", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129131, "Version": 3, "Guid": "5a8d5bdf-a9e3-46fb-91ac-181fe62555b3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata-For information" }, "Notes": { "en-us": "

If you need to know more, read about metadata.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129132, "Version": 3, "Guid": "37f994eb-bb4a-45f8-bef3-85021d4a0e8b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129133, "Version": 3, "Guid": "68e745a0-3194-4faf-93d5-5180e2c308f6", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (include for editors, don't for viewers)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataForId", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134193, "Version": 6, "Guid": "ef390c31-6230-4cf1-942c-65934d9a4c2e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata-For Id / Key" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9f210b50-38c1-4dae-8a57-b792c8246899" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134200, "Version": 5, "Guid": "b6f0bb60-6f6d-48b7-a80b-10495b4876ed", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134201, "Version": 5, "Guid": "32acde7a-5edb-4397-b84d-ab307694ee7d", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeMetadataForType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134202, "Version": 5, "Guid": "3a9b4430-b202-47f1-a0ee-a74ef6acbeda", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Metadata-For Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "13578018-6550-406b-a9c8-4e1410891a33" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134204, "Version": 4, "Guid": "57f0a2bd-3e47-480b-abf7-898095c81b11", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134205, "Version": 4, "Guid": "e755f4a1-99e8-4398-84c4-c580c1732621", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't include)\nfalse:Don't include\ntrue:Include" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupOptimizations", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 134206, "Version": 3, "Guid": "87a15405-bb2f-4316-837f-07d6fb592809", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Optimizations" }, "Notes": { "en-us": "

These settings should make the JSON smaller, for example by not transporting null values. This is still experimental. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134208, "Version": 2, "Guid": "d05935d1-ff55-430f-a693-d93e86cb021a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RemoveNullValues", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134207, "Version": 8, "Guid": "0074e7af-5dbf-4c2f-8b30-6f55e3a8a0fe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Remove Null Values" }, "Notes": { "en-us": "

Will make the JSON smaller by omiting null values (usually null-strings).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134209, "Version": 7, "Guid": "96ab992f-6693-40c7-83b7-1d787bcf8966", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134210, "Version": 7, "Guid": "ad354109-5995-47cb-baa3-8626c05df80c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't remove)\nfalse:Don't remove null values\ntrue:Remove null values" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RemoveZeroValues", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134211, "Version": 5, "Guid": "ab98e5ec-38ca-4d48-83ce-9494980f46e2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Remove Zero Values" }, "Notes": { "en-us": "

Will make the JSON smaller by omitting zero values (usually numbers).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134213, "Version": 4, "Guid": "ffd42bbb-e9f1-45bb-8878-f497442940dd", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134214, "Version": 4, "Guid": "3150b52a-a864-4ec6-b13f-46b3cf856a56", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't remove)\nfalse:Don't remove zero values\ntrue:Remove zero values" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RemoveEmptyStringValues", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134212, "Version": 3, "Guid": "30129d49-6c0c-4b02-88fa-fec4f8318f29", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Remove Empty Strings" }, "Notes": { "en-us": "

Will make the JSON smaller by omitting empty strings.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134215, "Version": 2, "Guid": "b2daee8c-8d76-46b5-b881-742de2ec8440", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134216, "Version": 2, "Guid": "eb3113a7-33a6-41ed-9410-0af638e0f5dd", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't remove)\nfalse:Don't remove empty strings\ntrue:Remove empty strings" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RemoveFalseValues", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 134240, "Version": 5, "Guid": "0bfafa12-3374-41de-b24d-e34067d4a85f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Remove Boolean False Values" }, "Notes": { "en-us": "

Will make the JSON smaller by omitting false booleans.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134241, "Version": 4, "Guid": "ea66f1a9-ee00-4617-918e-407c8c558f2e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134242, "Version": 4, "Guid": "cd8312fa-907b-42b3-b3ca-9eef6319392d", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":System Default (don't drop/remove)\nfalse:Don't drop/remove false booleans\ntrue:Drop / Remove false booleans" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 167696, "Version": 2, "Guid": "7813fc65-c96c-4a2e-a101-2018d3041d6f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeRelationshipsAsCsv == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134195, "Version": 2, "Guid": "48274f4d-b0ce-434c-9c73-83bb91b9f2c6", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeMetadata == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134197, "Version": 2, "Guid": "d8270ac1-8933-4883-a1a4-28911a31106c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeMetadata == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134198, "Version": 2, "Guid": "6ee62e9e-2671-4e97-83a7-89731c1705e8", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeMetadata == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134199, "Version": 2, "Guid": "9f210b50-38c1-4dae-8a57-b792c8246899", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeMetadataFor == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134203, "Version": 2, "Guid": "13578018-6550-406b-a9c8-4e1410891a33", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.IncludeMetadataFor == 'true'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167697, "Version": 2, "Guid": "34febfa2-fb09-43d7-880d-9103e4d6f52a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.IncludeRelationshipsAsCsv == 'true'\n ? 'CSV like \"27,42,999\"'\n : 'object like { id: 27, guid: \"guid-guid-guidguid\" }';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Notes" }, "Title": { "en-us": "Setting Notes" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.App", "Name": "ToSic.Eav.DataSources.App", "Scope": "System.DataSources", "Metadata": [ { "Id": 43017, "Version": 2, "Guid": "588a0fe7-d1ea-430c-873e-761660a358d9", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "used to configure an App DataSource" }, "EditInstructions": { "*": "

Learn more about the App data source in the wiki.

" }, "Label": { "*": "App Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.App" } }, { "Id": 137425, "Version": 1, "Guid": "870138c6-0506-4b70-b632-f30969a4ea45", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.App" } } ], "Attributes": [ { "Name": "ZoneSwitch", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 40469, "Version": 6, "Guid": "0d595197-1a7b-4ad8-b37a-c5963e1c8c5f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 46340, "Version": 3, "Guid": "e1993559-5fc5-467e-ba1b-cac641fbff64", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1.0 } } }, "Owner": "dnn:userid=1" }, { "Id": 43015, "Version": 3, "Guid": "01efbdf4-d530-4ee6-a7b5-aead2bd98f19", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "TenantName" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Zones" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137119, "Version": 4, "Guid": "a4535811-8482-4ce8-9504-d8b408dcb025", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "ZoneSwitch" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AppSwitch", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 40464, "Version": 6, "Guid": "4a0853f9-35e7-475d-be14-48de7d4c4e20", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "App Switch" }, "Notes": { "en-us": "

Leave blank by default (to get data from current app). If you give this an App number then the data provided by this source will come from that app. Learn more in help.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40466, "Version": 1, "Guid": "75bd688c-08e5-405e-8dc6-d62d3ef8bd92", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43016, "Version": 4, "Guid": "f92bfa04-f390-45fc-a1e2-210c168490ea", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Apps" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "ZoneId=[ZoneSwitch]" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137120, "Version": 2, "Guid": "18d0050b-ece2-4a2b-b8f4-c2bfbe293f31", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupExperimental", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 169164, "Version": 3, "Guid": "5e9091d7-356c-451c-9a14-6797f4a150ab", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Experimental (v15)" }, "Notes": { "en-us": "

These are very experimental settings, you should not use them yet. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "622e3024-b35e-4b9e-aaa5-ea6265148b0b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169169, "Version": 1, "Guid": "e00d498b-10d2-48c3-86b2-6fddc2decc47", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "WithAncestors", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 169165, "Version": 2, "Guid": "44312377-408c-4a54-84ca-0a44d989add3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "With Ancestors" }, "Notes": { "en-us": "

This is a super advanced setting, you should normally not use this.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169166, "Version": 1, "Guid": "9c020580-4fd7-4368-8346-2898270dca75", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169167, "Version": 1, "Guid": "765665ca-eda1-43ba-9a37-6f532fae8ec7", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Not set (default) - without ancestors\ntrue:With ancestors\nfalse:Without ancestors" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 169168, "Version": 2, "Guid": "622e3024-b35e-4b9e-aaa5-ea6265148b0b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return context.debug; });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "c5918cb8-d35a-48c7-9380-a437edde66d2", "Name": "AttributeRename", "Scope": "System.DataSources", "Metadata": [ { "Id": 70893, "Version": 1, "Guid": "22bb9fea-e354-4fbe-8271-c74c917840b8", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "EditInstructions": { "*": "

Modify how attributes are renamed. For more information, check out the AttributeRename docs.

" }, "Label": { "*": "Attribute Rename Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "c5918cb8-d35a-48c7-9380-a437edde66d2" } }, { "Id": 137426, "Version": 1, "Guid": "dfdf5d12-296c-495d-be58-ba04a2925c47", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c5918cb8-d35a-48c7-9380-a437edde66d2" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 70894, "Version": 3, "Guid": "52bc209f-9df6-46ee-a9c8-c5f897e99d3a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Attribute Rename Configuration" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a title so you know what this configuration is for.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 70898, "Version": 2, "Guid": "bf55f28a-6fba-4aa9-9b45-b207b0bd9c26", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 70899, "Version": 2, "Guid": "1f1bfb85-2d7c-4ae6-ab12-34d924f3c1e5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "AttributeMap", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 70895, "Version": 5, "Guid": "c7aa1cc5-d686-48a6-8ba9-9f87a378e98a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "NewField1=OldField1\nNewField2=OldField2" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Attribute Map" }, "Notes": { "en-us": "

The renaming map for the attributes. This is multi-line, one rename per line. The syntax:

\n

NewFieldName=OldFieldName
NewField2=OldFieldName2

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 70900, "Version": 4, "Guid": "42591d43-2d82-4752-aa28-9a10896472ab", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 70901, "Version": 4, "Guid": "51271a1a-8379-4ba8-88f4-eaf26bbc8c0f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 10.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 70904, "Version": 2, "Guid": "ac272821-e90e-4975-9e1b-af467f4c5990", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Advanced" }, "Notes": { "*": "

Advanced settings - we recommend to leave the default settings.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 70905, "Version": 1, "Guid": "f2ad7355-6248-453b-9cc0-154d8f6339be", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "KeepOtherAttributes", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 70896, "Version": 4, "Guid": "3cfeeb1c-05df-4869-949b-e14f5ad0a707", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Keep Other Attributes" }, "Notes": { "en-us": "

If true, the attributes / fields / properties which have not been renamed are preserved. If false, your new Entity only contains the renamed fields. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137121, "Version": 2, "Guid": "013606cb-d80b-43e0-8c46-5f46ffd375b9", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TypeName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 70897, "Version": 4, "Guid": "5c1cb2e2-b63b-471b-92e2-c40eaf6b039d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Type Name" }, "Notes": { "en-us": "

Leave empty to keep the previous type name. If you add something here, the modified entities will have this new type name. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 70902, "Version": 3, "Guid": "6d8b647c-ded6-4009-934e-c7bedc017b00", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 70903, "Version": 3, "Guid": "23e8f194-185e-45e4-85dd-5f3b01bef27d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.AttributeFilter", "Name": "ToSic.Eav.DataSources.AttributeFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 45082, "Version": 7, "Guid": "066dcac5-c6fc-4c9e-85ad-f584b49a22cf", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Used to configure an AttributeFilter DataSource" }, "EditInstructions": { "*": "

Filter out attributes/properties you don't want to pass on. This is usually to keep the output smaller, or to hide fields which you don't want to be published on the wire. Read about it in the docs.

" }, "Label": { "*": "Attribute/Property Filter" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.AttributeFilter" } }, { "Id": 137427, "Version": 1, "Guid": "de16f715-85e5-43b8-9f7a-92a5eaa13614", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.AttributeFilter" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 129151, "Version": 2, "Guid": "f6a58a4d-947f-4e05-b8ae-c6b2760c056e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Attribute Filter" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a title to help you identify this data.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129155, "Version": 1, "Guid": "474e8123-1cb1-4930-bd4a-7132ec13334e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129156, "Version": 1, "Guid": "57d6d96b-b3ea-432b-b104-edaeabb96fe0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 129152, "Version": 3, "Guid": "314458e9-e426-43a2-a354-defe78fe55b2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

Notes for your own use, to document why you did this.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 129157, "Version": 2, "Guid": "d481e590-2a91-424a-bacf-afe6a44dcaed", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129158, "Version": 2, "Guid": "4430ce6a-a601-4e70-8053-0adb8557e39f", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupConfiguration", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129153, "Version": 3, "Guid": "adc0f72a-f5b4-413c-b2bb-de7b44aaa0e4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Configuration" }, "Notes": { "*": "

Put one property name on each line.

\n

You can also leave the list empty if to keep all or remove all.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129154, "Version": 2, "Guid": "3e770bc9-9a0b-4079-acce-9ddb7ae3a474", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Mode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129148, "Version": 5, "Guid": "5ba338a4-3744-456a-beac-bd62fb07bd5a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "+" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Filter Mode" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129149, "Version": 4, "Guid": "1e833b16-cdc5-4682-8122-45d9b6ff5deb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129150, "Version": 4, "Guid": "c3e73a09-15c2-48d2-9a74-e4aa54fe9edf", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Keep only attributes/properties listed below (default):+\nRemove only attributes/properties listed below:-" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AttributeNames", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40470, "Version": 6, "Guid": "27decc65-4c58-455f-8963-7db3c102aa08", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Attribute Names" }, "Notes": { "en-us": "

Write the attributes you want to keep in here. All others won't be passed on and won't be available upstream. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129074, "Version": 3, "Guid": "33759d00-3a14-4757-b688-949cd370b852", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129075, "Version": 3, "Guid": "550b762d-03ff-4896-bade-b00a05096eab", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 10.0 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.Caches.CacheAllStreams", "Name": "ToSic.Eav.DataSources.Caches.CacheAllStreams", "Scope": "System.DataSources", "Metadata": [ { "Id": 74252, "Version": 2, "Guid": "df93578a-f967-469c-844b-6ce5849fb338", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configuration for CacheAllStreams data source" }, "EditInstructions": { "*": "" }, "Label": { "*": "Cache All Streams" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.Caches.CacheAllStreams" } }, { "Id": 137428, "Version": 1, "Guid": "67aeb808-3fc7-445f-9252-cae78cf5e202", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.Caches.CacheAllStreams" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40472, "Version": 2, "Guid": "5552490c-89b9-466f-8960-85fda043ace6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "Cache All Streams Data Source" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a nice title so you know what this cache-component should do for you. Learn more about the CacheAllStreams data source.

" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "RefreshOnSourceRefresh", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40473, "Version": 5, "Guid": "8da8b556-7441-4292-81f3-f36d444f5df9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "True" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Refresh On Source Refresh" }, "Notes": { "en-us": "

This is to cache things where the up-stream is already cached - for example when caching a filtered list of 2sxc-content-items. When this is set, the cache will check if the up-stream has been reloaded and if it has, then it will rebuild this cache as well. Learn more and check out best practices in help.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43025, "Version": 3, "Guid": "58533ee6-81da-42df-ac36-a8dc10d8846b", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "true\nfalse" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137122, "Version": 2, "Guid": "7ae46ea2-dd27-4874-af24-b4c6a3bf87ea", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CacheDurationInSeconds", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40474, "Version": 5, "Guid": "2ffc0160-7ac0-4534-b7ad-492a581c9cf3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "86400" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Cache Duration In Seconds" }, "Notes": { "en-us": "

How long the cache will be kept / when it will be refreshed automatically. Common numbers are 86400 (1 day) or 3600 (1 hour). Learn more in help.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43026, "Version": 3, "Guid": "8a187244-d25a-4019-82a2-0d0a507b859e", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "10 seconds:10\n1 minute:60\n1 hour:3600\n1 day:86400" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137123, "Version": 2, "Guid": "b7419403-16a9-4c04-9aa9-1aa8de0fa2dc", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CacheErrorDurationInSeconds", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184154, "Version": 2, "Guid": "afcb4644-b6c3-4897-9f09-9fe5fad1456d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "CacheErrorDurationInSeconds" }, "Notes": { "en-us": "

Determine how long streams should be cached which contain errors.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184155, "Version": 1, "Guid": "93169d80-1521-4c87-8df1-6ea4d980db5f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184156, "Version": 1, "Guid": "24f8267e-81bf-4b01-8707-e8c5be0424e8", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "0:0 = Cache for 3 times as-long-as-it-takes to generate source data (delay retry on slow source)\n-1:-1 = don't cache at all and retry immediately\n15:15 seconds\n60:60 seconds\n300:5 minutes" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "832cd470-49f2-4909-a08a-77644457713e", "Name": "ChildrenDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 135454, "Version": 5, "Guid": "b52b5cfd-0424-4e68-9ec0-d8479e588cfb", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

The Children Data Source will get you the children relationships of all the items in the Default In-Stream. Note that if you need parent relationships, use the Parents DataSource.

\n

You only need the Default In-Stream, because the items themselves already know about their relationships. The resulting stream will contain all the children matching the criteria provided. 

" }, "Label": { "en-us": "Children DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "832cd470-49f2-4909-a08a-77644457713e" } }, { "Id": 137429, "Version": 1, "Guid": "aa4e478f-26ed-4113-8016-d5f7ee4b1181", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "832cd470-49f2-4909-a08a-77644457713e" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 135455, "Version": 3, "Guid": "933ca063-522c-47e0-baa4-c50e016367f5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Get Children Items" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135479, "Version": 2, "Guid": "3fef31d4-20f7-4812-889f-f8e5e99e47ce", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135480, "Version": 2, "Guid": "36a7a438-862b-4abc-9056-6a2d8209e17e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FilterDuplicates", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 135507, "Version": 5, "Guid": "b2a736a3-9242-4e5d-b2b5-0a918280ead8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Filter Duplicates (Distinct)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135508, "Version": 4, "Guid": "6759fc38-a910-42c9-a231-7b263b42f0fb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135509, "Version": 4, "Guid": "d56499dd-36a1-4552-85cd-c6d93a6a6046", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "true:True - filter duplicates, return each entity once even if referenced many times\nfalse:False - don't filter, return each related entity even if it's referenced many times" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FieldName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 135456, "Version": 6, "Guid": "03a15bbf-e250-4aef-bc3b-ad02eb2faea8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Field Name of Relationships" }, "Notes": { "en-us": "

The field which contains the related items/entities. If you leave this empty, it will get you all the childen of the incoming items, on every relationship field. 

" }, "Placeholder": { "en-us": "Type field name if you only want the relationships of a specific field" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135477, "Version": 5, "Guid": "4314289a-8972-4d0f-81e2-c76aef2273c1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135478, "Version": 5, "Guid": "71e001c6-e667-4974-bca5-b68b0168a263", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarSetContentTypeName", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 135458, "Version": 5, "Guid": "dcbef482-f33e-49a1-b35c-ea89aae1499e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "VarSetContentTypeName" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "df9b7729-3e28-46be-af3a-940475bcb702", "4b8ae79c-6414-45c3-be57-78e0983e7d03" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135462, "Version": 4, "Guid": "f5c16c6a-339a-48aa-bf32-8a71db8802c3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Only filter by Relationship Field (recommended)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Also filter by Type of the Related Item" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageContentTypeName", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 135459, "Version": 4, "Guid": "8c22ec13-95bf-406e-a472-f690915d73e4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "ContentType - Important" }, "Notes": { "en-us": "

Setting the ContentType is rarely needed, which is why the settings is hidden by default. 

\n

Make sure you really need to set this - otherwise best leave as is. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "76a493c7-6e78-4cb2-bc5f-ba1b4a39a752" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 135457, "Version": 5, "Guid": "e9d4ecde-9d6b-4285-8a30-c1f57361bf09", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "ContentType Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "92754f97-369d-4d09-959f-411fd5aaebdb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135465, "Version": 4, "Guid": "6021e650-bbd8-43bd-993e-33cf0ad936ca", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135466, "Version": 5, "Guid": "b935d46d-69b4-4f8e-986b-ecf95d96b67c", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 135464, "Version": 3, "Guid": "92754f97-369d-4d09-959f-411fd5aaebdb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.VarSetContentTypeName; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135460, "Version": 2, "Guid": "df9b7729-3e28-46be-af3a-940475bcb702", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return data.ContentTypeName.length > 0;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135461, "Version": 1, "Guid": "4b8ae79c-6414-45c3-be57-78e0983e7d03", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.value; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135463, "Version": 2, "Guid": "76a493c7-6e78-4cb2-bc5f-ba1b4a39a752", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.VarSetContentTypeName; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "7c2b2bc2-68c6-4bc3-ba18-6e6b5176ba02", "Name": "ToSic.SexyContent.DataSources.ModuleDataSource", "Scope": "System.DataSources", "Metadata": [ { "Id": 41472, "Version": 6, "Guid": "731fdd95-4e2a-4317-bf90-dd48d7e7d1f6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Module DataSource with Data of a specific module" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This will return the items of a Module Instance, in two streams Content and Header. By default, it takes the module-id from the current context, but you can specify a specific module if you need it. Read more in the docs about the CmsBlock DataSource.

" }, "Label": { "en-us": "CMS Block (Module)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "7c2b2bc2-68c6-4bc3-ba18-6e6b5176ba02" } }, { "Id": 137430, "Version": 1, "Guid": "579af211-1044-44aa-98d8-8884ab45edf2", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7c2b2bc2-68c6-4bc3-ba18-6e6b5176ba02" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41473, "Version": 2, "Guid": "97948f14-12db-4d93-8c97-91746eeea501", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

just a title for your own use - not important

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41476, "Version": 1, "Guid": "a8c092fb-45f3-4df5-aecd-b7cc73805b75", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41474, "Version": 3, "Guid": "da05a42f-079e-4bfc-ad99-311156702318", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

general notes so you know what this is for - like \"this is the module where the editor configures xyz-settings\"

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=1" }, { "Id": 41477, "Version": 2, "Guid": "90a282e3-be70-4f91-be7c-b15f555d15d8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 3.0 } } }, "Owner": "dnn:userid=1" }, { "Id": 144346, "Version": 1, "Guid": "71fcc862-d82e-4326-8248-63d9a174df69", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "InstanceId", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41475, "Version": 6, "Guid": "f02ca527-c77b-42c2-8c41-01a812d7394d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "[Module:Id]" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "InstanceId / ModuleId" }, "Notes": { "en-us": "

The moduleID or a token giving you the module. By default it's [Module:Id]

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41478, "Version": 5, "Guid": "211222c2-2d30-45a8-910e-e11915f0083d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1.0 } } }, "Owner": "dnn:userid=1" }, { "Id": 133317, "Version": 4, "Guid": "e871b431-6a8d-4d72-8f8a-93b6a9772d47", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.CsvDataSource", "Name": "ToSic.Eav.DataSources.CsvDataSource", "Scope": "System.DataSources", "Metadata": [ { "Id": 74253, "Version": 4, "Guid": "f331b3c3-145f-4b71-96a6-5eb9265b8170", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure the CSV data source." }, "EditInstructions": { "*": "

This DataSource will read CSV files and provide them as Data Entities. Best read the docs.

" }, "Label": { "*": "CSV DataSource" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.CsvDataSource" } }, { "Id": 137431, "Version": 1, "Guid": "eabdcf88-67f7-4bea-9e7b-e4d3fc47db8f", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.CsvDataSource" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40475, "Version": 4, "Guid": "ffee6fe6-bd48-4da4-87fb-8645af408cbb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Csv Data Source" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a title to help you know what this is for.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129236, "Version": 2, "Guid": "c2dd27b2-3d4c-44c2-8d89-f3c60f69dea9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" }, { "Id": 129246, "Version": 1, "Guid": "1df3550d-3920-40c9-8046-679521bf71c4", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 129247, "Version": 3, "Guid": "8cdd9119-6282-44b4-81eb-ae759585b6f3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

Notes to help you remember why you configured stuff :)

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 129249, "Version": 2, "Guid": "acde2607-5af1-41ed-9f84-89f0a552d96c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129250, "Version": 2, "Guid": "e0edabca-6de6-437a-a452-86cdc567f0db", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSettings", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129248, "Version": 2, "Guid": "72027819-2f78-4716-a98f-91a02f0eb42b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129251, "Version": 1, "Guid": "c4d8f725-d722-48e6-8151-95275aae85bc", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FilePath", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40476, "Version": 5, "Guid": "d67d3b2e-e929-4aec-bbb2-133a42b535a7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "File Path" }, "Notes": { "en-us": "

File path relative to the web root, for example '/Portals/0/Data/MyMeasurements.csv' or '[App:Path]/demo.csv'. Read the online help for more.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129238, "Version": 3, "Guid": "c4d309c3-4f7d-4167-9b1c-834141c81b43", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137124, "Version": 2, "Guid": "bc957612-77ef-4c56-bdb6-cb9ac60c932e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Delimiter", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40477, "Version": 8, "Guid": "070d8dd9-9f77-4477-86ae-c5fba15fcafa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": ";" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Value Delimiter" }, "Notes": { "en-us": "

Delimiter of values in the rows, for example the ';', ',' or tab. Leave blank for default (i.e. the tab). Read the online help for more incl. how to add special characters like tab.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43024, "Version": 5, "Guid": "abc35e60-4770-4c1c-924c-c6a01a9c6446", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ",\n;" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 137125, "Version": 2, "Guid": "8d294ff1-694d-442e-a87d-7a7738b4c2a0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentType", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40478, "Version": 5, "Guid": "9df5c027-d058-4fa5-bbcc-0130d60afd57", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Csv Data" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Content Type Name" }, "Notes": { "en-us": "

The content type of the entities passed to the output stream. This can be an arbitrary name. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129241, "Version": 3, "Guid": "c4824c6b-6c3e-4259-a4a3-291a5d4a5b70", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137126, "Version": 2, "Guid": "9b3c5cf2-09b7-4898-b562-ed62b84532ec", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IdColumnName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40479, "Version": 5, "Guid": "d65dbbdc-a54a-4969-bd25-9cdc52ee520b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Id Column Name" }, "Notes": { "en-us": "

The case sensitive name of the column that should be used for the entity IDs. If no name is specified, the row numbers will be used for the IDs. See the online help for more.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129243, "Version": 3, "Guid": "653c862e-2d58-4ba7-bf84-115d6737f27a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137127, "Version": 2, "Guid": "2a05d383-b81b-41c3-8316-50ca9dcf1b4a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TitleColumnName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40480, "Version": 5, "Guid": "73f64afd-362a-4735-8983-2d4617d2a7df", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title Column Name" }, "Notes": { "en-us": "

The case sensitive name of the column used for the entity titles. Leave blank to automatically take the first column. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 129245, "Version": 3, "Guid": "8d875e74-5a53-467a-83f5-bb9aa586e2d0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137128, "Version": 2, "Guid": "7b376c55-2ec1-4fa1-a850-85f6c4a7913c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.EntityIdFilter", "Name": "ToSic.Eav.DataSources.EntityIdFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 45083, "Version": 2, "Guid": "12886273-383d-448f-a55a-804cd01aafa7", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "used to configure an EntityIdFilter DataSource" }, "EditInstructions": { "*": "

Use the Item-Id Filter to keep only one or a few items - of which you know the ID. The ID can also come from a URL or something, when used in details-pages. Read about it in the docs.

" }, "Label": { "*": "Entity ID Filter" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.EntityIdFilter" } }, { "Id": 137432, "Version": 1, "Guid": "145ae44d-ac93-4b6e-8ec1-1ee65e9aaff8", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.EntityIdFilter" } } ], "Attributes": [ { "Name": "EntityIds", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40481, "Version": 1, "Guid": "f5417b6e-d4e9-4438-9d41-7b2a05e9e9f7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "Name": { "*": "EntityIds" }, "Notes": { "*": "Comma separated list of Entity IDs, like 503,522,5066,32" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.EntityTypeFilter", "Name": "ToSic.Eav.DataSources.EntityTypeFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 43019, "Version": 2, "Guid": "a7d07d42-32ad-4ad6-ae9f-3e5c7aa006c2", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "used to configure an EntityTypeFilter DataSource" }, "EditInstructions": { "*": "

Learn more about the content-type / Entity-type filter in the wiki.

" }, "Label": { "*": "Entity Type Filter" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.EntityTypeFilter" } }, { "Id": 137433, "Version": 1, "Guid": "c1553b86-a79c-4d3a-8549-1a66cb9d938c", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.EntityTypeFilter" } } ], "Attributes": [ { "Name": "TypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 40483, "Version": 3, "Guid": "21ab2b50-e283-4fe1-bea1-524e4466e4fb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Content Type" }, "Notes": { "*": "

The name of the content type

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43018, "Version": 2, "Guid": "11cd2452-30c6-4aff-871b-a9e7bd542ec5", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "7b4fce73-9c29-4517-af14-0a704da5b958", "Name": "LanguageModelerDSConfiguration", "Scope": "System.DataSources", "Metadata": [ { "Id": 129464, "Version": 2, "Guid": "1b87d76b-d158-4eca-95ba-4b5f0abe5fc6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Change tabular language data into Entities." }, "EditInstructions": { "*": "

This helps you turn tabular language data into multi-language properties the way 2sxc uses it. 

" }, "Label": { "*": "Language Modeler" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7b4fce73-9c29-4517-af14-0a704da5b958" } }, { "Id": 137434, "Version": 1, "Guid": "9a560261-cdfa-40b8-9f44-bcecd6f3d144", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7b4fce73-9c29-4517-af14-0a704da5b958" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 129454, "Version": 2, "Guid": "fa7c5378-05d7-4851-b817-21b04f1e92f5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Language Modeler Configuration" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "Just a title for you to give this configuration a name." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129455, "Version": 2, "Guid": "00a0c1af-7782-4aa0-8c9c-100f0bdecf91", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129456, "Version": 2, "Guid": "3b106041-ff3b-4b5e-af38-62089b073e10", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 129457, "Version": 3, "Guid": "6716e4c2-3d27-474e-91ad-0605c95109bf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "just notes for yourself to better understand what this is for" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 129458, "Version": 2, "Guid": "98133cff-2e55-431d-bd49-120fe078ef58", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129459, "Version": 1, "Guid": "5eb259f1-5061-4ffc-bfca-a641c06ba30b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3.0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144347, "Version": 1, "Guid": "fd6e5b68-5d64-4461-8f6e-2a69d13a8026", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FieldMap", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 129460, "Version": 4, "Guid": "0e52c404-8088-4119-add1-f8c147493163", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "ChangeTo:ValueFrom\nName:en-us=NameEn,de-de=NameDe" }, "InputType": { "*": "string-default" }, "Name": { "*": "FieldMap" }, "Notes": { "*": "

Enter one mapping each line. Example: Target:Source will change the attribute name of 'Source' field to 'Target'. For multi-language mappings, use commas to separate languages and = to separate language and source field. Example: Value:en-us=ValueEn,de-de=ValueDe will map ValueEn and ValueDe to a new field Value which contains both values as multi-language entity.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129461, "Version": 4, "Guid": "283857a2-291e-4be1-9734-639f118d6fd3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129462, "Version": 4, "Guid": "aa1664ef-6341-45ab-8b12-7bdf2b657b78", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 10.0 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "d7858b36-1ef1-4c3d-b15c-c567b0d7bdd4", "Name": "MetadataDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 135531, "Version": 5, "Guid": "b914fbaf-fcbb-412e-8ba2-d2d945274fd2", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This will retrieve Metadata of the items in the default stream. In most cases you don't really want to configure much here. See Metadata docs.

" }, "Label": { "en-us": "Metadata DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "https://r.2sxc.org/DsMetadata" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "d7858b36-1ef1-4c3d-b15c-c567b0d7bdd4" } }, { "Id": 137435, "Version": 1, "Guid": "a22bb631-4c0d-4232-b8ca-0f32990aea54", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "d7858b36-1ef1-4c3d-b15c-c567b0d7bdd4" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 135532, "Version": 2, "Guid": "e44177d1-7756-4a74-aab3-d1a389985e95", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Get Metadata" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135534, "Version": 1, "Guid": "51fd248f-cc49-4659-bcd3-b4ca75662e73", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135535, "Version": 1, "Guid": "6f5e3858-2cae-4dfe-a14d-e18d8e012900", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1.0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupContentType", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 135538, "Version": 4, "Guid": "dfa17e38-9ad9-4587-a6f8-36247aaa96de", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "*": "empty-message" }, "Name": { "en-us": "Advanced (Content-Type)" }, "Notes": { "en-us": "

In most cases you will just want to get all the metadata of an item, no matter what type the metadata has. But in very complex situation an item could have a lot of metadata, so you may only want to retrieve specific types you care about. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135539, "Version": 2, "Guid": "6b39e6b4-ab79-4fa1-87fe-43143d73757e", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 135533, "Version": 4, "Guid": "389f5c99-c5cd-4659-8775-2f853b1a4cfb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Content Type Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135536, "Version": 2, "Guid": "53efabfe-b718-422f-8e92-4d9ef480289d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135537, "Version": 4, "Guid": "3561aa76-6924-4aa1-b892-9dacafbc8628", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "7dcd26eb-a70c-4a4f-bb3b-5bd5da304232", "Name": "MetadataTargetDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 135540, "Version": 2, "Guid": "187244ec-9262-40d5-a006-6efcec465733", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This will get you the targets of metadata - so if an item is metadata, it will get you the items which this metadata describes. See Metadata Targets docs.

\n

Important: it can only get you Entity targets. So if your metadata describes something else, it will not be included here. 

" }, "Label": { "en-us": "Metadata Target Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "https://r.2sxc.org/DsMetadataTargets" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7dcd26eb-a70c-4a4f-bb3b-5bd5da304232" } }, { "Id": 137436, "Version": 1, "Guid": "19bf5535-ca31-4908-ab28-d6bea91a314b", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7dcd26eb-a70c-4a4f-bb3b-5bd5da304232" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 135541, "Version": 3, "Guid": "0d133a5b-b17a-4730-8fcd-981131452a73", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Get Metadata Targets" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135544, "Version": 2, "Guid": "e61001fa-023f-4d07-aa6a-c6139660e539", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135545, "Version": 2, "Guid": "87e3393f-c0d1-41ed-932a-14f691a867e2", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1.0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 135542, "Version": 3, "Guid": "09ae423c-b0f1-4702-8d38-a29a891991a7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Content Type Name (optional)" }, "Notes": { "en-us": "

Limit the returned items to such that have the specified content type. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135546, "Version": 2, "Guid": "7651ece2-bf3a-4c9a-9fba-b618d4399bcf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135547, "Version": 3, "Guid": "0195ce7d-feed-40b7-8c8f-ef8ec7abacbd", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FilterDuplicates", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 135543, "Version": 2, "Guid": "7f99273e-e09c-4719-a6f0-db4b7ba6ed03", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Filter Duplicates" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135548, "Version": 1, "Guid": "0622cff0-6984-4e97-bf20-5ff67b139ae4", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Don't filter duplicates (return them as often as they are used)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Filter duplicates (return them only once - default)" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.OwnerFilter", "Name": "ToSic.Eav.DataSources.OwnerFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 45081, "Version": 2, "Guid": "4c5f7f1a-237c-430f-ae36-8b35b9a518ef", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "to configure the owner-filter" }, "EditInstructions": { "*": "

Used to show only items which were created / owned by a specific owner. Read the docs for more. 

" }, "Label": { "*": "Owner Filter" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.OwnerFilter" } }, { "Id": 137437, "Version": 1, "Guid": "dccd09e0-2fc7-40ca-957e-de9a9a02f064", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.OwnerFilter" } } ], "Attributes": [ { "Name": "IdentityCode", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40485, "Version": 1, "Guid": "a87a030b-a735-4462-ae6c-1b9050ea392e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "dnn:userid=[User:UserId]" }, "InputType": { "*": "string-default" }, "Name": { "*": "Identity Code" }, "Notes": { "*": "

The identifier of the user - in DNN it could be the sequence 'dnn:userid=[User:UserId]'. Learn more on 2sxc.org/help?tag=datasource-filter-owner

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40486, "Version": 1, "Guid": "39f7ea07-edc5-4e0f-8a8b-71d89be993b4", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.Paging", "Name": "ToSic.Eav.DataSources.Paging", "Scope": "System.DataSources", "Metadata": [ { "Id": 74254, "Version": 1, "Guid": "e1e6a24e-58bb-4f8a-84ed-022b2df2025f", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configuration of Paging DataSources" }, "EditInstructions": { "*": "

Read the docs.

" }, "Label": { "*": "Paging" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.Paging" } }, { "Id": 137438, "Version": 1, "Guid": "e906daf8-7c61-44ff-9bdb-8772acf14ca3", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.Paging" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40487, "Version": 1, "Guid": "41bbb177-0bff-4421-8034-556c082199cd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "Paging data source" }, "Name": { "*": "Title" }, "Notes": { "*": "

Any title you want - for your convenience to name this. If you need any help, check out 2sxc.org/help?tag=ds-paging

" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PageSize", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40488, "Version": 5, "Guid": "7ef12a73-934b-4ce4-a83e-eaf3eb1ffa66", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "10" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "PageSize" }, "Notes": { "*": "

Amount of items per page. By default this is 10. Also set this to the amount you want if you're using this to just get a short-list of 5 items or something - then set to 5. You could also use parameters like [QueryString:ItemsPerPage] but in general you'll probably want a number or something. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43020, "Version": 3, "Guid": "a73b5bf7-e580-4e0e-a55b-7c5ad42ac7c2", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "10\n25\n50\n100\nget count from url:[QueryString:Count]\nget pagesize from url:[QueryString:PageSize]" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PageNumber", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40489, "Version": 4, "Guid": "ea6ec57d-28f7-4584-a9c6-b7dd70a034fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "1" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "PageNumber" }, "Notes": { "*": "

The page we're on, by default it's 1. If you only want to use the first page (like get the top 5 of something) then set 1. Otherwise use a url parameter or something - so you would use [QueryString:Page] or similar. Check out 2sxc.org/help?tag=ds-paging for more help. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43021, "Version": 2, "Guid": "e843f374-dfce-4385-a214-35b1f1314f67", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "1\nget page from url:[QueryString:Page]\nget p from url:[QueryString:P]\nget PageNum from url:[QueryString:PageNum]" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "a72cb2f4-52bb-41e6-9281-10e69aeb0310", "Name": "ParentsDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 135467, "Version": 4, "Guid": "59b4538c-2ff7-4d3f-bc17-ad91ebc3d32e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Use the Parents DataSource to retrieve items/entities which point to the items/entities in the Default In-Stream. Note that if you need children relationships use the Children DataSource.

\n

You only need the Default In-Stream, because the items themselves already know about their relationships. The resulting stream will contain all the parents matching the criteria provided. 

" }, "Label": { "en-us": "Parents DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "a72cb2f4-52bb-41e6-9281-10e69aeb0310" } }, { "Id": 137439, "Version": 1, "Guid": "9269ff50-4cf9-45e9-b90a-76d0b1fe9891", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "a72cb2f4-52bb-41e6-9281-10e69aeb0310" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 135468, "Version": 4, "Guid": "d62ab183-9d7a-43b4-9ca5-dd33b13f6b37", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Get Parent Items" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135471, "Version": 3, "Guid": "f633aa4e-9c32-4ac5-8d04-d4ec476314e0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135472, "Version": 3, "Guid": "9749a228-dcd8-481b-8ad7-1ce1cdbf5eb9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FilterDuplicates", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 135510, "Version": 2, "Guid": "dda895e8-64ed-4501-a2b0-733f397ac586", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Filter Duplicates (Distinct)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135511, "Version": 1, "Guid": "c654bc67-3f5d-47b0-89c2-7e68e4d059ff", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135512, "Version": 1, "Guid": "3aff6978-264e-49fc-878c-eaf1018ab3a5", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "true:True - filter duplicates, return each entity once even if referenced many times\nfalse:False - don't filter, return each related entity even if it's referenced many times" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 135469, "Version": 4, "Guid": "ed3b80a1-0ff4-4068-b20e-08fc6724a493", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "ContentType Name" }, "Notes": { "en-us": "

Type of the parents to retrieve. If left empty, will retrieve all parents, no matter what type they are. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135473, "Version": 3, "Guid": "2fab0989-9c18-4dae-adbd-dcf27170cc23", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135474, "Version": 4, "Guid": "131e7817-bdc1-4b52-9444-05df5614852c", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FieldName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 135470, "Version": 3, "Guid": "eba82386-9f91-418d-b78a-10bbc1800411", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Field Name containing the Relationship" }, "Notes": { "en-us": "

Field on the parent which points to this item. Use this if parents can have multiple fields (like Author and Illustrator) referencing this item, and you only need one of them. 

\n

If you leave this empty, it will get all the relationships, no matter what fields refer to them. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135475, "Version": 2, "Guid": "f0768fdb-0864-4662-9036-43595308640c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135476, "Version": 3, "Guid": "bb9ffe47-e7cb-4984-b6db-0382e3181dd4", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Attributes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "ContentTypeName=[ContentTypeName]" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "78d25ea6-66cc-44a2-b45d-77749cd9420a", "Name": "QueryRunConfiguration", "Scope": "System.DataSources", "Metadata": [ { "Id": 63446, "Version": 2, "Guid": "99b8323b-3634-4545-a4d9-df083a48d718", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Run another query" }, "EditInstructions": { "*": "

Request data from another query. See docs.

" }, "Label": { "*": "Query Configuration" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "78d25ea6-66cc-44a2-b45d-77749cd9420a" } }, { "Id": 137440, "Version": 1, "Guid": "02a3551f-bad9-4a1e-ae05-d5ca5aab3938", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "78d25ea6-66cc-44a2-b45d-77749cd9420a" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 63431, "Version": 2, "Guid": "a72e9ca2-5747-48b2-923c-09f90fb253c7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

just a title so you know what it's about

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63437, "Version": 1, "Guid": "136f2a7d-101b-4005-b99e-7abeed161b36", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63438, "Version": 1, "Guid": "d3c8425f-9f16-484a-b26c-5d3f7498d1c4", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 63432, "Version": 2, "Guid": "5f6e3673-fcce-48e0-a7a1-e3c17740e4bf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=1" }, { "Id": 144348, "Version": 1, "Guid": "73e91497-c39a-4b86-aef4-aa05ea287a48", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144349, "Version": 1, "Guid": "9c7e59b0-1bdd-4348-84fa-c82268c25c62", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "QueryGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 63440, "Version": 2, "Guid": "b239c96f-e27b-4a43-aca1-599e4dfc7e52", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Query Configuration" }, "Notes": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63442, "Version": 1, "Guid": "5d1edc11-7802-4e34-87cb-d573922185d3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Query", "Type": "Entity", "InputType": "entity-query", "IsTitle": false, "Metadata": [ { "Id": 63433, "Version": 2, "Guid": "6ee1a0ff-6b07-48c3-a8ec-9b27e4068df9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-query" }, "Name": { "*": "Query" }, "Notes": { "*": "

Pick the query you want to run.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63443, "Version": 1, "Guid": "e5bdaf0f-2b20-484c-b8c5-02d721a5d7ce", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": false }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63444, "Version": 2, "Guid": "c42b372a-dc99-4d36-bb46-84d5597c495c", "Type": { "Id": "@entity-query", "Name": "@entity-query" }, "Attributes": { "String": { "Query": { "en-us": "System.Queries" }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Params", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 63434, "Version": 3, "Guid": "22c2e0cb-5f54-4e7e-8c6f-131db4a3f330", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Params" }, "Notes": { "*": "

List of params - one per line. Format key=value. Can be tokenised like key=[QueryString:Id].

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63435, "Version": 2, "Guid": "4b4b655c-28de-44a8-acd0-727f56ddd929", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63436, "Version": 2, "Guid": "82f76193-b431-4283-b75c-ec8a4d3a25d0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 10.0 } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.RelationshipFilter", "Name": "ToSic.Eav.DataSources.RelationshipFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 40510, "Version": 4, "Guid": "db398e88-fc4e-4062-918e-b731ab2bae6f", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "used to configure a RelationshipFilter DataSource" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This will filter the items and only return those with the relationship-requirements as configured. See also Relationship Filter docs.

\n

Important: If you only want to get all the children or parents of an entity, use the Children or Parents DataSource instead. 

" }, "Label": { "en-us": "Relationship Filter" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.RelationshipFilter" } }, { "Id": 137441, "Version": 1, "Guid": "e15d5806-0434-46e4-8d07-210c833d048c", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.RelationshipFilter" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40511, "Version": 3, "Guid": "0d03c0c9-f8ef-457d-9399-4bbb00b6e376", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Relationship Filter" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

just a title so you know what it's about

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40514, "Version": 2, "Guid": "f3ffdd61-6a10-4721-9d68-aea5e4fe2987", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 40512, "Version": 4, "Guid": "803afd9b-f945-4ede-9cba-93dbe6a9c9e1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

your notes about this filter, to help you remember what you were thinking...

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=1" }, { "Id": 40515, "Version": 1, "Guid": "57bbf159-cda6-499c-8884-be64b470e050", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" }, { "Id": 144350, "Version": 1, "Guid": "c72fea0d-b9cf-44a7-8c9b-1622170ba811", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144351, "Version": 1, "Guid": "988500ee-9148-4ee5-aa5c-e1ff89b475ac", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "BasicsGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 40522, "Version": 2, "Guid": "b9c9ad66-f587-4969-91cb-aa69ead3d21b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Basics" }, "Notes": { "*": "

Here you can specify what relationship you are comparing for, and what value you expect in the related items. If the list contains Book items and you want to keep only those with the Author being Daniel Mettler, then you would type Author in the relationship-field and Daniel Mettler in the filter-value field.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40524, "Version": 1, "Guid": "fc2ddbe7-b52d-447d-b0d7-f195c746bd28", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Relationship", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40490, "Version": 3, "Guid": "5dd119a2-79e1-4d6f-b29c-31cf6b89beef", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Relationship Field" }, "Notes": { "*": "

The property we're comparing. So if this is a list of books, and we want to check which ones have an Author called \"Daniel\", then the relationship-field is Author

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Filter", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40492, "Version": 8, "Guid": "b2cf2638-4914-4987-8526-d94e5c0563d6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Filter (on the related items)" }, "Notes": { "*": "

the value we want in the related data - if you're on a book-list and only want those with the Author \"Daniel\", then this is where you would write Daniel. Remember that you can also use tokens, like [QueryString:Author]

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40516, "Version": 3, "Guid": "60832427-0db9-45c3-8566-60ba0ed82b6d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AdvancedGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 40523, "Version": 2, "Guid": "8335b7a4-609e-4d57-a0b5-ddd7c86f826d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Advanced Settings" }, "Notes": { "*": "

Sometimes you want to use much more advanced comparisons or compare on another field than just the title. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40525, "Version": 1, "Guid": "35612763-eb87-4eab-92db-039f8675c85d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AttributeOnRelationship", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40513, "Version": 2, "Guid": "e4254d87-c48d-400f-8637-81f3aeee0678", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "EntityTitle" }, "InputType": { "*": "string-default" }, "Name": { "*": "Relationship Attribute" }, "Notes": { "*": "

The field of the related items we're checking for. By default it's the title (EntityTitle), but you could also check for the ID (EntityId) or for other properties. For example, if you have a list of books and you only want to keep those of Authors who are from Switzerland, then here you would not write EntityTitle, but instead Country.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40517, "Version": 1, "Guid": "af83298d-2955-4471-be4e-caf1b6be042a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Comparison", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40518, "Version": 9, "Guid": "882c82bc-25d8-4fad-9af0-5cfd19b5524f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Operation / Comparison" }, "Notes": { "*": "

This determines how we will compare. The following operations exist in 2sxc 9.9+:

\n
    \n
  1. the (blank) default is the same as contains - we will check if the related items contains such an item, so if in a list of tags, one has all the mentioned tag(s)
  2. \n
  3. with a not-contains the related items may not contain all of the tags 
  4. \n
  5. if you use containsany, it will return all items where the related-items has any one of the filter criterias
  6. \n
  7. with a not-containsany, it will return those which don't have any of the items you listed in filter
  8. \n
  9. in case of a first the first item in the relationships must be what we want - this is typical for lists where the first item is like the primary category. If you specify multiple items in filter, the first will be valid if it matches any of those.
  10. \n
  11. in case of a not-first the first item may not match this
  12. \n
  13. use any it will ignore the filter-value and simply keep all items having any relationships 
  14. \n
  15. with not-any it will return all items not having any relationships
  16. \n
  17. with count it will keep all items having exactly the desired amount of related-items, the amount is specified in the filter-field
  18. \n
  19. if not-count it will keep all items having a different amount than the desired amount
  20. \n
" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42341, "Version": 4, "Guid": "03f819e8-8e60-439a-81cb-fa19e2ec79e8", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "(default = contains):\ncontains - keep these that have all of these:contains\nnot-contains - keep these that don't have all:not-contains\ncontainsany - keep these that have any of these:containsany\nnot-containsany - keep these that have none of these:not-containsany\nfirst - keep these where the first item is one of these:first\nnot-first - keep these where the first item is none of these:not-first\nany - keep these that have relationships:any\nnot-any - keep these that have no relationships:not-any\ncount - keep these with the exact child-amount in filter:count\nnot-count - keep these with a different child amount than in filter:not-count" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Separator", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40520, "Version": 8, "Guid": "0ae70c4f-40fd-45b2-89db-5eef37b5076b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Separator Character" }, "Notes": { "*": "

if you want to check for multiple relationships (like having multiple tags), then the filter-value will contain a string with multiple values. By default the separator is blank - so the filter-value will not be separated. Usually you would use a comma, so that you can write \"online,2017,seo\", but there are cases where your strings may themselves contain commas - so this is why you can specify your own separation character.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42342, "Version": 3, "Guid": "901e562b-fdd6-4f68-afdc-5e7fbbdaa6e1", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "(none):\ncomma ,:,\nbar / pipe |:|" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "1b9fd9d1-dde0-40ad-bb66-5cd7f30de18d", "Name": "RolesDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 160758, "Version": 3, "Guid": "c557999e-cd4b-4f9c-b60d-661a69083293", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure which roles will be returned by this data source. See docs.

" }, "Label": { "en-us": "Roles DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1b9fd9d1-dde0-40ad-bb66-5cd7f30de18d" } } ], "Attributes": [ { "Name": "RoleIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 160744, "Version": 7, "Guid": "02e9725f-7c53-40bd-a2b8-6141b1520be3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Roles (only show these Roles)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160752, "Version": 6, "Guid": "ae599e62-0c3c-48f6-bf68-70200a0c7c29", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160753, "Version": 7, "Guid": "f7563905-dd8c-4d21-8ae4-26979fb5c78d", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Roles" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ExcludeRoleIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 160745, "Version": 6, "Guid": "fb39ec12-5f5d-4f26-a734-44398f640658", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Exclude (remove from result)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160754, "Version": 5, "Guid": "e56e4c26-b81f-4d12-a93e-0849d8bf8f64", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160755, "Version": 6, "Guid": "fc9cd5bc-accb-45c2-8324-0089a1766dc0", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Roles" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "38e7822b-1049-4539-bb3f-f99949b1b1d1", "Name": "ToSic.Eav.DataSources.Shuffle", "Scope": "System.DataSources", "Metadata": [ { "Id": 38968, "Version": 2, "Guid": "46b356e4-6a13-4f25-8620-f8652221d2af", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure a shuffling data-source" }, "EditInstructions": { "*": "

Use this to configure how shuffling should work. Basically just specify how many items should be returned in the end. Learn more about this in the 2sxc docs on the Shuffle DataSource page.

" }, "Label": { "*": "Shuffle DataSource" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "38e7822b-1049-4539-bb3f-f99949b1b1d1" } }, { "Id": 137443, "Version": 1, "Guid": "94681d1d-b258-4e3c-ac4f-6b6dbeb1b76b", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "38e7822b-1049-4539-bb3f-f99949b1b1d1" } } ], "Attributes": [ { "Name": "Take", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 38967, "Version": 1, "Guid": "f93f5287-9a90-49fb-b13a-cbd3acad2fea", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Take" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "c76901b5-0345-4866-9fa3-6208de7f8543", "Name": "ToSic.Eav.DataSources.SqlDataSource", "Scope": "System.DataSources", "Metadata": [ { "Id": 38700, "Version": 2, "Guid": "4ac0f5b5-4b65-4563-a85f-3ad3a0466e2b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Config type for the Sql DataSource" }, "EditInstructions": { "*": "

Use the SQL DataSource to get SQL data. Just write a SELECT ... FROM ... and you're good to go. 

\n

If this is the first time you're using this, you may want some help to get started. You can find more help in the 2sxc docs (see SqlDataSource) or in the general 2sxc help about data sources

" }, "Label": { "*": "SQL DataSource" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "c76901b5-0345-4866-9fa3-6208de7f8543" } }, { "Id": 137444, "Version": 1, "Guid": "b4ebc4eb-d9cc-403e-b57b-3f28a634d198", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c76901b5-0345-4866-9fa3-6208de7f8543" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 38682, "Version": 2, "Guid": "956328b0-7686-4f9d-b84e-4cfce2a21558", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Sql Query" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

just a nice name so you remember what it's for

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38692, "Version": 1, "Guid": "dc220921-410e-44ff-98d8-5fddf4e252f8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38710, "Version": 4, "Guid": "f75fb66b-914b-4805-9f7f-8ad6c988ad2c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

just add some notes for yourself, so you know what the query is for and what special things you did to make it work

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=1" }, { "Id": 38711, "Version": 3, "Guid": "f0b52662-e210-4ca8-9237-44edd53fdb03", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 3.0 } } }, "Owner": "dnn:userid=1" }, { "Id": 144352, "Version": 1, "Guid": "3839279a-3614-430d-ab62-aa9a8b882a89", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ConnectionGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 38683, "Version": 3, "Guid": "bda43aac-7f3e-4c4d-b244-c78a17ad8ee1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Connection Information" }, "Notes": { "*": "

How to connect to the DB

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38691, "Version": 2, "Guid": "fbf51a2d-0744-439d-9a0d-997febfc5c26", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ConnectionStringName", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 38684, "Version": 11, "Guid": "a8d5dcc6-5a4e-41d7-84f4-491a71ab3914", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "(default)" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Connection Name (preferred)" }, "Notes": { "en-us": "

Use connection names from web.config / appsettings.json. To enter another Manual Connection Name use the TT button to the right.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e4d42e3d-4de7-453a-a68f-e9e015ac46c3" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38693, "Version": 1, "Guid": "c5e4826f-c5d2-4ac9-86df-cb165ebd7478", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 163991, "Version": 7, "Guid": "15a37632-244f-4c6d-89fa-4b4e3c9b7a04", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 163992, "Version": 7, "Guid": "a6e8e9cb-b14e-4c62-a24d-fdce6c1d4e0c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "(default):Default Database (Dnn/Oqtane)\nSiteSqlServer:SiteSqlServer (DNN)\nDefaultConnection:DefaultConnection (Oqtane)\n:Manual Connection String" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ConnectionString", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38685, "Version": 3, "Guid": "a0434f14-b0b9-4a41-9ac1-3ec63dd8b708", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Connection String (alternative)" }, "Notes": { "*": "

alternative: write the connection string instead of the connection name

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ab0b768e-4af4-4cfb-b93c-efd349b5ec68", null ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38694, "Version": 1, "Guid": "45c99f5d-6bdb-40d8-9d8b-f69338a2477a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "QueryGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 38686, "Version": 2, "Guid": "b102202f-097a-47e1-ba11-947ca40ffadd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Query" }, "Notes": { "*": "

What do you want to query, and how to treat the result

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38695, "Version": 1, "Guid": "3ce28b0b-7d4b-4958-bc68-537302609968", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "SelectCommand", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38687, "Version": 3, "Guid": "4c39ad49-3845-4c5c-b335-399c414b9357", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "-- Demo SQL - select top 10 table names\n\nSELECT Top(10) *\nFROM SYSOBJECTS\nWHERE xtype = 'U'" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SQL" }, "Notes": { "en-us": "

SQL select statement

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38696, "Version": 2, "Guid": "04180b43-3f81-4cb8-971d-39a8cf37c019", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=1" }, { "Id": 163995, "Version": 1, "Guid": "e25a5e21-8a9c-48ed-bb53-5dc0d0a28c2c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentType", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38688, "Version": 2, "Guid": "11897030-b94a-4322-bd62-c089391d0bde", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "SqlData" }, "InputType": { "*": "string-default" }, "Name": { "*": "Content Type Name" }, "Notes": { "*": "

Name of the content-type in result

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38697, "Version": 1, "Guid": "c665c68e-bf51-4c0d-8748-5d0e01bf733b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EntityIdField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38689, "Version": 3, "Guid": "260d9cf5-58e1-4d3b-8379-258f1af0cfa6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Id Field" }, "Notes": { "*": "

name of the ID field, if blank, defaults to EntityId

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38698, "Version": 2, "Guid": "e6e8742f-6a19-411f-b3cd-08845ce77ea6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EntityTitleField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 38690, "Version": 2, "Guid": "5820ec5c-cc1d-4043-b701-95513355e949", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title Field" }, "Notes": { "*": "

name of the title field, if blank, defaults to EntityTitle

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 38699, "Version": 1, "Guid": "58e806ad-3bff-4350-ae14-704c19685b42", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 163989, "Version": 2, "Guid": "e4d42e3d-4de7-453a-a68f-e9e015ac46c3", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.ConnectionString === ''; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 163990, "Version": 2, "Guid": "ab0b768e-4af4-4cfb-b93c-efd349b5ec68", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.ConnectionStringName === ''; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "67b19864-df6d-400b-9f37-f41f1dd69c4a", "Name": "StreamPick", "Scope": "System.DataSources", "Metadata": [ { "Id": 66897, "Version": 1, "Guid": "994aa260-2b0e-4a32-9452-7bef1ff43634", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure a Stream-Pick Data Source" }, "EditInstructions": { "*": "

Pick a stream to be passed on. Usually you will use some kind of parameter, like [Params:Stream]

" }, "Label": { "*": "Stream Pick" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "67b19864-df6d-400b-9f37-f41f1dd69c4a" } }, { "Id": 137445, "Version": 1, "Guid": "0a83fd37-4a49-4b6f-9772-2509fe3ee225", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "67b19864-df6d-400b-9f37-f41f1dd69c4a" } } ], "Attributes": [ { "Name": "StreamName", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 66898, "Version": 2, "Guid": "12e1ef4e-9ef9-47ba-8504-6c444a27fc42", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Default" }, "InputType": { "*": "string-default" }, "Name": { "*": "Stream Name" }, "Notes": { "*": "

Name of the stream to be provided.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 66899, "Version": 1, "Guid": "52c9a309-42f5-4597-a4be-8114a476bcc3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 66900, "Version": 1, "Guid": "49aee364-192f-4c0a-8068-fa284b24eb49", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "fabc849e-b426-42ea-8e1c-c04e69facd9b", "Name": "ToSic.Eav.DataSources.Apps", "Scope": "System.DataSources", "Metadata": [ { "Id": 43007, "Version": 4, "Guid": "91efe9e2-82e9-4c62-9a29-a6c206c88cb9", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "config of Apps" }, "EditInstructions": { "*": "

Get a list of apps - either of the current zone (default / empty) or of a selected zone. For more help, read the docs.

" }, "Label": { "*": "System - Get Apps" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "fabc849e-b426-42ea-8e1c-c04e69facd9b" } }, { "Id": 137446, "Version": 1, "Guid": "d873acc8-18e7-411a-b6de-96638a0d932d", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "fabc849e-b426-42ea-8e1c-c04e69facd9b" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 42588, "Version": 4, "Guid": "bec36365-c1bc-4d7c-bf70-f62cdec771fe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Notes" }, "Notes": { "*": "

just notes for yourself to better understand what this is for

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42591, "Version": 3, "Guid": "aa39a58b-11e0-469f-a1c1-1f9eb7c7f679", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ZoneId", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42590, "Version": 10, "Guid": "4a35b2dc-d8ad-4452-bb6c-fd500be23d69", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Zone Number" }, "Notes": { "*": "

The number of the zone of which you want to get the apps. If blank, it won't return any apps. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42593, "Version": 1, "Guid": "f399a17b-2189-4d1c-9b76-42736e13b501", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 46341, "Version": 1, "Guid": "bea6c649-3b8d-4405-af3e-c074e26caeca", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } }, "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 42914, "Version": 8, "Guid": "c78c45c6-6f45-4b05-9ddf-ce0a80931389", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "TenantName" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Zones" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "5461d34d-7dc6-4d38-9250-a0729cc8ead3", "Name": "ToSic.Eav.DataSources.Attributes", "Scope": "System.DataSources", "Metadata": [ { "Id": 43008, "Version": 4, "Guid": "8b39334c-c025-418c-9262-5039401ed8c2", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "EditInstructions": { "*": "

Get the attributes of a content-type. For more help, read the docs.

" }, "Label": { "*": "System - Get Attributes" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "5461d34d-7dc6-4d38-9250-a0729cc8ead3" } }, { "Id": 137447, "Version": 1, "Guid": "3519d75f-2ed9-44e5-8f06-076d8d6db3bb", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5461d34d-7dc6-4d38-9250-a0729cc8ead3" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 42594, "Version": 2, "Guid": "69bae27c-019d-4375-bd9a-8ab02615a17f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Notes" }, "Notes": { "*": "

just notes for yourself to better understand what this is for

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42975, "Version": 1, "Guid": "24458b38-9a60-40a7-86d7-b03d55970db9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ContentTypeName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42596, "Version": 4, "Guid": "4d2cb677-caa4-4cc2-92a9-d8a9106497fa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Content Type" }, "Notes": { "*": "

Choose the content-type of which you want to see the attributes

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 43005, "Version": 3, "Guid": "3b31ea46-619e-4cd9-9f9f-b02e84406d3c", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "37b25044-29bb-4c78-85e4-7b89f0abaa2c", "Name": "ToSic.Eav.DataSources.ContentTypes", "Scope": "System.DataSources", "Metadata": [ { "Id": 43010, "Version": 2, "Guid": "6906e6b4-35df-4c2d-8884-9cc0c520ffc4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "config of content-types" }, "EditInstructions": { "*": "

Query what content-types you want. If left blank, will use current app. Read more about this in the wiki.

" }, "Label": { "*": "System - Get ContentTypes" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "37b25044-29bb-4c78-85e4-7b89f0abaa2c" } }, { "Id": 137448, "Version": 1, "Guid": "e80b737b-25f7-44f0-bc3a-47d2360b3c8d", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "37b25044-29bb-4c78-85e4-7b89f0abaa2c" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 42958, "Version": 3, "Guid": "0e30efed-8008-417a-b547-3cf9113f08db", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Notes" }, "Notes": { "*": "

just notes for yourself to better understand what this is for

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42962, "Version": 2, "Guid": "86e02488-8844-410c-9046-36633463c29e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AppId", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42960, "Version": 5, "Guid": "3c2a0596-9eb5-4c44-8f81-9aa64d90d899", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "App Id" }, "Notes": { "*": "

The ID of an app or a token which delivers it. Will use current app if left empty. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42964, "Version": 1, "Guid": "be8920b5-02fc-49dd-95b3-a0cb604308f5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43009, "Version": 3, "Guid": "219fe6a9-fde9-45ee-b971-5df7acb2916e", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Apps" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Scope", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 42961, "Version": 3, "Guid": "4aba770d-073d-4dd0-aa6a-de19ac88f701", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Default" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Scope" }, "Notes": { "*": "

The scope for which to get the content-types - by default it's always Default

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42965, "Version": 1, "Guid": "4d4ea6d4-c7e4-4ab1-aae4-ecaabf25bd8c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Default" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "4638668f-d506-4f5c-ae37-aa7fdbbb5540", "Name": "ToSic.Eav.DataSources.QueryInfo", "Scope": "System.DataSources", "Metadata": [ { "Id": 43013, "Version": 2, "Guid": "eba9974c-1736-4d53-b0ed-333dd0277c99", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Query-Info configuration" }, "EditInstructions": { "*": "

Use this to configure a query-info datasource. This is a very advanced topic, read more about it in the docs.

" }, "Label": { "*": "System - Get QueryInfo" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "4638668f-d506-4f5c-ae37-aa7fdbbb5540" } }, { "Id": 137449, "Version": 1, "Guid": "b8f3e036-7898-4ad0-b4cf-b8f4ff547fe1", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "4638668f-d506-4f5c-ae37-aa7fdbbb5540" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 42939, "Version": 2, "Guid": "32170df5-e83b-47e6-8bbc-585bd1dd9f7d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Notes" }, "Notes": { "*": "

just notes for yourself to better understand what this is for

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42974, "Version": 1, "Guid": "f83febe0-9b72-48e1-8563-65312d09c495", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "QueryName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42941, "Version": 5, "Guid": "0703a10a-2111-45a2-ac7d-76503c792c23", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Query" }, "Notes": { "*": "

Select a query...

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42955, "Version": 1, "Guid": "32f83a2e-0b0a-47d0-b263-6ba7eca4916d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 43011, "Version": 3, "Guid": "20d1d9d7-1bdf-4466-acb1-9081cc0023c3", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Queries" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "StreamName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42953, "Version": 5, "Guid": "c56f8ca3-404c-42da-9316-0a3faa31d196", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Stream" }, "Notes": { "*": "

Select a stream of the query you choose.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42956, "Version": 2, "Guid": "e04180b5-d9a4-49e6-b683-9a3f62d52e32", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 43012, "Version": 2, "Guid": "0e3c3805-59b7-4d48-918d-7f7ba7111264", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "d167054a-fe0f-4e98-b1f1-0a9990873e86", "Name": "RelationshipModelerDsConfiguration", "Scope": "System.DataSources", "Metadata": [ { "Id": 129463, "Version": 2, "Guid": "c16d7030-d953-425a-b33a-181d2afc46c4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Convert flat data into 2sxc relationships" }, "EditInstructions": { "*": "

Use this to connect records which are tabular but would represent a hierarchy / tree-structure. Data passing through this data source will then have Children / and or Parent-relationships. 

\n

Note that the purpose of this is really to build a tree structure, so it assumes that each child can only have one parent / folder. 

" }, "Label": { "*": "Tree Relationship Modeler" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "d167054a-fe0f-4e98-b1f1-0a9990873e86" } }, { "Id": 137450, "Version": 1, "Guid": "14b5c6ad-aca9-4bc4-939f-8c42bd7ac1ae", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "d167054a-fe0f-4e98-b1f1-0a9990873e86" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 129431, "Version": 3, "Guid": "4e9058b6-6e7c-4fb7-9f61-a79de33f2e0e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Tree Relationship Modeler Configuration" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "Just a title for you to give this configuration a name." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129432, "Version": 3, "Guid": "e1ddc413-37b7-45e9-8c45-958200124ed5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129433, "Version": 3, "Guid": "301c07d5-c52e-4882-a24b-01bee8487780", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 129434, "Version": 3, "Guid": "b96f16be-0543-4197-9f42-f8cd79ba5ff6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "just notes for yourself to better understand what this is for" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 129435, "Version": 2, "Guid": "92e98745-acca-4f18-8323-cd73c869605a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129436, "Version": 1, "Guid": "1cf4f282-469c-48da-bfad-e729e1da9501", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3.0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144353, "Version": 1, "Guid": "e6b5d4ea-07dc-421c-a8b0-d3d0862b6381", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "OriginalIDsToMatch", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129437, "Version": 2, "Guid": "52a141a7-ad3e-4076-b3f9-c7895dac67bc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Original IDs to match" }, "Notes": { "*": "

We need two things

\n
    \n
  1. References on the Children to Parents
  2. \n
  3. Ways to find the Parent / Folder etc.
  4. \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129438, "Version": 2, "Guid": "39eb3544-08d0-41cd-8cfa-5b3c74fe6af4", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ChildParentAttribute", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 129439, "Version": 3, "Guid": "0783bfbf-c4a1-47e5-a2c1-5382623a3bd9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "ParentGuid" }, "InputType": { "*": "string-default" }, "Name": { "*": "Field pointing to the Parent or Folder ID" }, "Notes": { "*": "

The property on the Child with points to the parent. It should contain a GUID or a number.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129440, "Version": 3, "Guid": "7c305bce-306d-4c99-920d-7e264a1fa377", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129441, "Version": 3, "Guid": "20a55f82-7bea-4035-90b9-aa0b3123b76f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "ParentIdentifierAttribute", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 129442, "Version": 1, "Guid": "cfdc65cc-6c86-486e-8cb9-7bad574c2f8b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" }, { "Id": 129443, "Version": 3, "Guid": "430778f5-a6bf-403b-a858-8be36629a1e2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "EntityGuid" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Identifier of the Parent / Folder (Parent ID)" }, "Notes": { "*": "

Enter the attribute which should be used to identify entities. The datasource will look for entities in the 'Children' stream with a 'Child Parent Attribute' that matches the 'Parent Identifier Attribute' in the 'Default' stream.
Currently this datasource only supports EntityGuid and EntityId.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129444, "Version": 3, "Guid": "7c6d4a24-806c-4c5b-8577-b30b97828e5c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129445, "Version": 3, "Guid": "22ee83e0-af7a-4f9c-9580-de92642292d6", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "EntityGuid\nEntityId" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "NewFieldsContainingRelationships", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129446, "Version": 2, "Guid": "80eac42f-ad79-4272-9bcb-9032673b01a9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "New fields containing relationships" }, "Notes": { "*": "Configure the fields which will contain the relationships." }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129447, "Version": 1, "Guid": "c228385e-7e6b-4caa-9bbe-f81b545a39bc", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetChildrenAttribute", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 129448, "Version": 4, "Guid": "bbc491d2-d5b0-4e7d-bd13-d8473a8e83cb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Children" }, "InputType": { "*": "string-default" }, "Name": { "*": "Property of Parent to Access Children" }, "Notes": { "*": "

Property where the child relationships are mapped. If you enter Children you can access the child entities with item.Children.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129449, "Version": 4, "Guid": "1123add6-1f2a-4906-b417-7a84c833521a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129450, "Version": 4, "Guid": "5932119c-9658-4ba4-adf5-e2b5b5431454", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetParentAttribute", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 129451, "Version": 3, "Guid": "dedac772-47a9-4a78-a590-c3eafa419b59", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Parent" }, "InputType": { "*": "string-default" }, "Name": { "*": "Property of Child to Access Parent" }, "Notes": { "*": "

Property where the parent relationship is added. If you enter Folder  you can access the parent Entity with item.Folder.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129452, "Version": 3, "Guid": "a4a292b5-97de-40ff-8df5-bc4a079966d2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129453, "Version": 3, "Guid": "f7db7485-7d96-43c5-b707-3987745d3a39", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "ac11fae7-1916-4d2d-8583-09872e1e6966", "Name": "UsersDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 160779, "Version": 2, "Guid": "910bb098-0184-4134-8ea4-f121a30acafe", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure which users to show.

\n

It will return users and roles entities.

" }, "Label": { "en-us": "Users DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "ac11fae7-1916-4d2d-8583-09872e1e6966" } }, { "Id": 166589, "Version": 1, "Guid": "8da53d14-f2e4-446c-aae6-1692eb0b959d", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "ac11fae7-1916-4d2d-8583-09872e1e6966" } } ], "Attributes": [ { "Name": "GroupFilters", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 167704, "Version": 2, "Guid": "06a447e9-6fa5-4185-9f9c-a51859f1b55d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Optional Filters" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167705, "Version": 1, "Guid": "9f138f55-7f73-40b0-91f9-ad9399c87eaa", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UserIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 160763, "Version": 3, "Guid": "c8bcc1a1-d859-4760-8d6c-f566e9ae37e5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Users (only show specific users)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160774, "Version": 2, "Guid": "eeb07d0d-4527-4658-b5fe-1376abda0d96", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160775, "Version": 3, "Guid": "d0ff2328-ecbc-4176-bd1a-ac2075429325", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Users" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ExcludeUserIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 160764, "Version": 2, "Guid": "2778d533-89aa-4fcd-b8a5-d2762e9d6ddb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Exclude Users" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160776, "Version": 1, "Guid": "4c4384ec-0f86-4722-b022-775c9cfdd140", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160777, "Version": 2, "Guid": "9d7780de-f4b6-43a3-ab78-22b98fcd51e8", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Users" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RoleIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 160765, "Version": 3, "Guid": "aa5f7b67-f918-4191-b49e-37f8be7e6700", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Roles (only users in these Roles)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160768, "Version": 2, "Guid": "315f386a-c8e8-46e1-9c78-e0ea2b9d4941", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160769, "Version": 3, "Guid": "98b88c37-9ca3-4343-8109-dffb00b27777", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Roles" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ExcludeRoleIds", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 160766, "Version": 2, "Guid": "f274894e-62ae-4f12-9ac7-71a70b9b9118", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Exclude Roles" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160770, "Version": 1, "Guid": "a176d70f-cf42-4c6e-b9bc-36cfebb66988", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160771, "Version": 2, "Guid": "131caffa-31b2-4799-8b8c-723dc4f5fbce", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Roles" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Id" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeSystemAdmins", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 160767, "Version": 3, "Guid": "2f465b34-6a19-4ce0-9641-60ba2f494e1d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include System Admins" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160772, "Version": 2, "Guid": "3ff21448-631a-4e4d-9a8b-57495bf13f57", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 160773, "Version": 2, "Guid": "cef3abfb-d416-44be-aeae-1773cbbbfecc", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:Don't include System Admins\ntrue:Include System Admins\nrequired:Include ONLY System Admins" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAddMoreFields", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 167685, "Version": 3, "Guid": "46bf25aa-c72d-46d2-9d5e-1485662e8791", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Add Special Fields" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167688, "Version": 2, "Guid": "0f6e0ddc-ce96-4e3b-813d-f793d0b0692f", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AddRoles", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167686, "Version": 4, "Guid": "8c12c87d-3e52-499d-b7b4-86af98c91d7b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Add \"Roles\"" }, "Notes": { "en-us": "

Include the Field Roles referencing the roles each user is in.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167689, "Version": 3, "Guid": "f02973a1-24e6-4a4a-9b90-4cc130d2cb86", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167690, "Version": 3, "Guid": "0adfbeef-3580-4758-a61c-0694dfbc66e9", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (add)\nfalse:Do not add Roles\ntrue:Add Roles" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.ValueFilter", "Name": "ToSic.Eav.DataSources.ValueFilter", "Scope": "System.DataSources", "Metadata": [ { "Id": 74255, "Version": 1, "Guid": "19f4cd25-effb-40b4-aafa-f2a0c0bf44e2", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "used to configure a ValueFilter DataSource" }, "EditInstructions": { "*": "

Check out the docs.

" }, "Label": { "*": "Value Filter" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.ValueFilter" } }, { "Id": 137451, "Version": 1, "Guid": "fc784f3f-3958-4e80-941f-492115ee5d4a", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.ValueFilter" } } ], "Attributes": [ { "Name": "Attribute", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 40494, "Version": 1, "Guid": "7436af3b-2aef-40aa-9534-58c1cf9bfbeb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "UrlId" }, "InputType": { "*": "string-default" }, "Name": { "*": "Attribute" }, "Notes": { "*": "

The object attribute (property) we will filter on, like \"FirstName\" or similar. Find more help about this filter here.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40496, "Version": 1, "Guid": "db64e023-a504-449d-b519-4fd74f5a7bcc", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Operator", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40500, "Version": 12, "Guid": "b6f685cc-4903-4c89-8377-3be3748623dd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "==" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Operator" }, "Notes": { "en-us": "

This determines how things will be compared, so if it's a \"field = value\" or \"field contains value\" etc. There are many operators and which one you use depends a bit on what data-type you are comparing. For example, a number can be \"between 17 and 25\" or a text can \"!contain daniel\". Read more about the possible operators in help.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40502, "Version": 1, "Guid": "417cdfe0-8f36-4a5f-96fe-89a6546e7673", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 137474, "Version": 2, "Guid": "0182a293-b3c9-4ef2-a9e7-17e9a2c745b8", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137475, "Version": 2, "Guid": "897ac000-27e3-4eef-8c85-ca8fa8f6aca9", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "== equals (case insensitive, numbers, etc.):==\n=== case-sensitive, exact equals:===\n!= not equal, case insensitive:!=\nbegins means it begins with this:begins\ncontains means it contains this:contains\n!contains doesn't contain:!contains\n> for numbers:>\n< for numbers:<\n>= for numbers:>=\n<= for numbers:<=\nbetween for numbers - in filter use '7 and 10':between\n!between for numbers - use '7 and 10:!between\nbetween for dates - use '2016-01-01 and 2017-01-01':between\n!between for dates - use '2016-01-01 and 2017-01-01':!between\nget Operator from url:[QueryString:Operator]" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Value", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 40497, "Version": 1, "Guid": "7c3adf68-41ae-4bc0-8aa7-5c94e4991b04", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "[QueryString:Id]" }, "InputType": { "*": "string-default" }, "Name": { "*": "Value" }, "Notes": { "*": "

The information we want to use to filter - like \"John\" or \"[QueryString:Name]\". There are many things you can do with this, so always check more information in help.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40499, "Version": 1, "Guid": "f7b3632a-af0d-427f-a786-94dcbcd59d36", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Take", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 40503, "Version": 4, "Guid": "906caad5-c07d-4f7a-bcb1-da6b3b946350", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Take / Stop after so many" }, "Notes": { "*": "

Get only 1 or whatever amount you need. This improves performance if you have many thousand items, and only need a few. Leave blank to take all.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 40505, "Version": 1, "Guid": "f92ce3b1-daf5-43d7-aa4d-419cd758c73f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43023, "Version": 2, "Guid": "6db381e4-68ed-45ef-9e22-ec7777f43865", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "all (leave blank):\n10\n25\n50\n100\n[QueryString:max]" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Languages", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 125116, "Version": 6, "Guid": "b154dde1-7239-4d67-a7c3-cf0c28907aa0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Language to filter on" }, "Notes": { "*": "

Choose which language this filter is applied to.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 125117, "Version": 5, "Guid": "d7c77256-da4a-4576-867b-cde8e8b7316c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 125118, "Version": 5, "Guid": "0730cfe9-5f71-4a47-9402-b825c9d40716", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (only primary language):\nOnly primary language:default\nFirst try current language (otherwise fall back to primary):current\nEnglish US (for other language, switch to type-mode and enter it there):en-US\nUse language from url-param language:[QueryString:language]" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "|Config ToSic.Eav.DataSources.ValueSort", "Name": "ToSic.Eav.DataSources.ValueSort", "Scope": "System.DataSources", "Metadata": [ { "Id": 46948, "Version": 2, "Guid": "c763f5fc-eca2-481d-b0d2-2f4d68767e5d", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "used to configure a ValueSort DataSource" }, "EditInstructions": { "*": "

Read more about this in the docs

" }, "Label": { "*": "Value Sort" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.ValueSort" } }, { "Id": 137452, "Version": 1, "Guid": "cff1d7aa-c10b-476f-bce4-48f4af7fdbbc", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "|Config ToSic.Eav.DataSources.ValueSort" } } ], "Attributes": [ { "Name": "Attributes", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 46926, "Version": 3, "Guid": "18af5723-92ab-409b-95f7-4cfe2095d271", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Attributes" }, "Notes": { "*": "Names of attributes (fields), sepparated by a comma" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46927, "Version": 2, "Guid": "d66107ee-31a0-47c5-9fe7-a8c302e47fe4", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46931, "Version": 1, "Guid": "21e4dfb1-18ff-4dc4-84e0-4fb0e243b84a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Directions", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 46928, "Version": 4, "Guid": "a17987aa-53da-4dd8-aa0b-69be7cf14f7f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Directions (see notes for multiple sorts)" }, "Notes": { "*": "if you have multiple fields to sort by, switch to manual entry in the field" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46929, "Version": 3, "Guid": "a701f39c-b0e9-4d70-ba28-240d833fcb8c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46930, "Version": 2, "Guid": "a5434cfe-95f5-4957-b66a-ede966b22976", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "asc\ndesc\n1\n0" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Languages", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 125120, "Version": 3, "Guid": "0d36d037-0149-4886-9c12-4257272822fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Language to Sort By" }, "Notes": { "*": "

Choose which language this sort is applied to.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 125121, "Version": 2, "Guid": "aad4c300-4466-4a98-b962-8047a418ef29", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 125122, "Version": 2, "Guid": "0475169e-8f28-4595-b63d-48e7e2501c86", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "System Default (only primary language):\nOnly primary language:default\nFirst try current language (otherwise fall back to primary):current\nEnglish US (for other language, switch to type-mode and enter it there):en-US\nUse language from url-param language:[QueryString:language]" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "3d970d2b-32cb-4ecb-aeaf-c49fbcc678a5", "Name": "PagesDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 167673, "Version": 2, "Guid": "4dc0c5ab-5cdf-4832-b13b-71753584bdb1", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure settings for the Pages DataSource.

\n

It will return pages entities.

" }, "Label": { "en-us": "PagesDataSourceConfig" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "3d970d2b-32cb-4ecb-aeaf-c49fbcc678a5" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 167656, "Version": 2, "Guid": "c3222f5d-aee9-40e1-9779-ef57e2447aa2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Pages Configuration" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167657, "Version": 1, "Guid": "7db3f426-8a4d-41a8-88c0-5658b2db6488", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167658, "Version": 1, "Guid": "97bcdcd0-9c82-4e4d-a5f1-16130280577e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupTypes", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 167675, "Version": 2, "Guid": "f9763ce6-d095-42ce-a313-0e456975e7b0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Special Page Types to Get" }, "Notes": { "en-us": "

By default, most special page types are not returned.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167676, "Version": 1, "Guid": "de420b09-3400-45db-9ece-89c4e13d8c9e", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeLinks", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167653, "Version": 5, "Guid": "13fa408e-ebc4-4dee-b3ac-477164b47113", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Links-Only Items from the Navigation" }, "Notes": { "en-us": "

These are virtual pages which actually just point to some URL.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167667, "Version": 4, "Guid": "da6bd79c-3a2e-47e7-b402-1691cbe3ae25", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167668, "Version": 4, "Guid": "11975ebd-cd70-4179-81be-83724c5b7b78", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeHidden", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167649, "Version": 5, "Guid": "7063e10b-beae-4115-b211-3deafdce55e2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Hidden Pages" }, "Notes": { "en-us": "

These are pages which are configured to not show in the menu.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167659, "Version": 4, "Guid": "27555baa-9572-4162-beef-82dba7e76631", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167660, "Version": 4, "Guid": "5ff3189c-6135-4a6f-8235-bcb4eff08e20", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeDeleted", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167650, "Version": 5, "Guid": "b73641a3-08f8-49e1-9efd-38f49270489c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Deleted Pages" }, "Notes": { "en-us": "

These are pages which are deleted and still in the recycle bin.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167661, "Version": 4, "Guid": "6565b7a2-caed-4ce4-909c-cd84d7efcb36", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167662, "Version": 4, "Guid": "2a3e60cf-ff1b-425f-984e-36ef195a5724", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeAdmin", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167651, "Version": 5, "Guid": "a729819e-931e-4df9-b784-dcffe19127bf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include Admin Pages" }, "Notes": { "en-us": "

These are pages to admin the current site, such as file manager. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167663, "Version": 4, "Guid": "aaee7dbc-e6fd-4119-9f7f-30e8223479f5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167664, "Version": 4, "Guid": "f3254a72-971a-49fa-99fc-97ae0ec06bb5", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IncludeSystem", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167652, "Version": 4, "Guid": "864527a4-8d63-475e-b2b7-61c4dce3dc9e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Include System Pages" }, "Notes": { "en-us": "

These are pages to admin the current system, such as modules management. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167665, "Version": 3, "Guid": "55c805f6-b579-47a8-8214-d28958e6dee1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167666, "Version": 3, "Guid": "8ca618b4-1ae5-4cd7-8c8d-6f51834a4c5f", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPermissions", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 167674, "Version": 2, "Guid": "a33aa4a3-dcf4-4028-b3ff-0901cdb968f1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Permissions the Current User Must Have" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167677, "Version": 1, "Guid": "b6f52a1e-f495-4551-8610-acc850d1b24c", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RequireViewPermissions", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167654, "Version": 3, "Guid": "23c6a97f-b7a3-4c8a-b892-3b8a875aca4d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Only Include Pages to Which the User has View Permissions" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167669, "Version": 2, "Guid": "af8f905f-b4ca-460f-8ff5-9d28c34907e2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167670, "Version": 2, "Guid": "00532880-110e-4c31-b888-fd7702dda9f8", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RequireEditPermissions", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 167655, "Version": 4, "Guid": "c1f088e0-d0fb-4a17-bb4b-e72f3f4c70a2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Only Include Pages to Which the User has Edit Permissions" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167671, "Version": 3, "Guid": "69539405-654b-4711-a989-fcbe54924b62", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 167672, "Version": 3, "Guid": "013c2eaa-ec44-4a33-b825-059fa7dff145", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "false:\uD83D\uDEAB False\ntrue:✅ True" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "f9aca0f0-1b1b-4414-b42e-b337de124124", "Name": "SystemStackConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 169107, "Version": 1, "Guid": "75371e3d-fe95-4cb3-bd1f-f8ad05f2f548", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure what the SystemStack DataSource should return.

" }, "Label": { "en-us": "System Stack Configuration (Settings/Resources)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "f9aca0f0-1b1b-4414-b42e-b337de124124" } } ], "Attributes": [ { "Name": "StackNames", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 169104, "Version": 5, "Guid": "64b78479-890b-41ac-a56c-5f813a3f4076", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Stack Name" }, "Notes": { "en-us": "

Which stack you want.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169109, "Version": 4, "Guid": "e0270815-3d9f-4e62-be67-4a7d895385a3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169110, "Version": 4, "Guid": "bc0836f6-b6c0-4434-85f8-de9c99be90d8", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Settings:Settings\nResources:Resources" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Keys", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 169105, "Version": 2, "Guid": "6da2bd43-f156-445a-ad35-b9f3f8f0e179", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Key" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169113, "Version": 1, "Guid": "221c51f7-b774-4fab-af92-d0cd723d48fa", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169114, "Version": 2, "Guid": "932c04ce-73c7-4027-912b-036138ae833e", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Settings" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Title" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AddValues", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 169106, "Version": 2, "Guid": "438a8bae-f345-4691-a28e-f6fd71d78c03", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Add Values in Result" }, "Notes": { "en-us": "

Determine if you also want the values of settings. If no you'll just get the keys.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169111, "Version": 1, "Guid": "d521e078-d931-4706-bf4d-2fff26503b14", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169112, "Version": 1, "Guid": "e78000a1-3d59-46cc-9c6d-3317926d52da", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default - add values\ntrue:Add Values\nfalse:Do not add values" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "477d5de4-5ffa-43ef-8553-37354cb27660", "Name": "AppFilesDataSourceConfig", "Scope": "System.DataSources", "Metadata": [ { "Id": 184019, "Version": 2, "Guid": "0136ff45-c55a-4e3e-9b59-2c59ddf2b914", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Specify how to get lists of files and/or folders from the App.

\n

It will return file and folder asset entities.

" }, "Label": { "en-us": "App Files DataSource Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "477d5de4-5ffa-43ef-8553-37354cb27660" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 184007, "Version": 2, "Guid": "cd91967a-8d75-4fa0-8e30-ced96d27475b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "App Files" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

Just a title so you can remember what this does.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184010, "Version": 1, "Guid": "3c1a7e07-edd8-495e-9c1a-26ad68d6fc9e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184011, "Version": 1, "Guid": "652430c0-e23c-4a61-b7eb-620b10d7023f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RootFolder", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184008, "Version": 2, "Guid": "942a2cab-1149-4cb3-ac42-f195c9b18c84", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "/" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Root Folder" }, "Notes": { "en-us": "

The starting folder in the app, where retrieving files should start. Must begin with a \"/\"

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184012, "Version": 1, "Guid": "670c495b-e2de-4821-af63-c16fa45d3f21", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184013, "Version": 1, "Guid": "fa3ff680-eab4-4a25-b529-1af7dda424a6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FileFilter", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184009, "Version": 2, "Guid": "036fb1e9-9303-454e-aa1a-9ec7c26ad7ad", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "*.*" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "File Filter" }, "Notes": { "en-us": "

Which files to retrieve.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184014, "Version": 1, "Guid": "5fad3202-a5ee-4b44-8333-ad8c05f93811", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184015, "Version": 1, "Guid": "64870e4f-4377-47e1-b96d-11f661443016", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SearchSubfolders", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184016, "Version": 3, "Guid": "36de8534-4269-4036-bd54-59498f4bacf0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Search Subfolders" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184018, "Version": 2, "Guid": "9184dc3d-96d4-4c00-aad5-8dc39fddb460", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "radio" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "7d4c2dd7-b23a-4c70-a3c3-8f5a53a88ae0" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 184017, "Version": 1, "Guid": "7d4c2dd7-b23a-4c70-a3c3-8f5a53a88ae0", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title\nfalse,\"Do not search subfolders (default)\"\ntrue,\"Search Subfolders\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "PreviewValue": { "en-us": "" }, "Title": { "en-us": "AppFilesDataSourceConfig - SearchSubfolders" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-decorators.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "4f6d1484-4672-43d5-9c48-94ff3ec11069", "Name": "EditUiConfigurationDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 144360, "Version": 4, "Guid": "ede19b00-8396-47b1-b6db-e0f572b7014e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configure modified behavior in the Edit-UI" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This adjusts some features of the edit UI. It is still beta, so anything you do here may change in future. 

" }, "Label": { "en-us": "Edit Configuration (Decorator for Content-Types)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OCAwLS4zNC0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMDktLjE2LS4yNi0uMjUtLjQ0LS4yNS0uMDYgMC0uMTIuMDEtLjE3LjAzbC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4wNi0uMDItLjEyLS4wMy0uMTgtLjAzLS4xNyAwLS4zNC4wOS0uNDMuMjVsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4IDAgLjMzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMDkuMTYuMjYuMjUuNDQuMjUuMDYgMCAuMTItLjAxLjE3LS4wM2wyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4wNi4wMi4xMi4wMy4xOC4wMy4xNyAwIC4zNC0uMDkuNDMtLjI1bDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6bS0xLjk4LTEuNzFjLjA0LjMxLjA1LjUyLjA1LjczIDAgLjIxLS4wMi40My0uMDUuNzNsLS4xNCAxLjEzLjg5LjcgMS4wOC44NC0uNyAxLjIxLTEuMjctLjUxLTEuMDQtLjQyLS45LjY4Yy0uNDMuMzItLjg0LjU2LTEuMjUuNzNsLTEuMDYuNDMtLjE2IDEuMTMtLjIgMS4zNWgtMS40bC0uMTktMS4zNS0uMTYtMS4xMy0xLjA2LS40M2MtLjQzLS4xOC0uODMtLjQxLTEuMjMtLjcxbC0uOTEtLjctMS4wNi40My0xLjI3LjUxLS43LTEuMjEgMS4wOC0uODQuODktLjctLjE0LTEuMTNjLS4wMy0uMzEtLjA1LS41NC0uMDUtLjc0cy4wMi0uNDMuMDUtLjczbC4xNC0xLjEzLS44OS0uNy0xLjA4LS44NC43LTEuMjEgMS4yNy41MSAxLjA0LjQyLjktLjY4Yy40My0uMzIuODQtLjU2IDEuMjUtLjczbDEuMDYtLjQzLjE2LTEuMTMuMi0xLjM1aDEuMzlsLjE5IDEuMzUuMTYgMS4xMyAxLjA2LjQzYy40My4xOC44My40MSAxLjIzLjcxbC45MS43IDEuMDYtLjQzIDEuMjctLjUxLjcgMS4yMS0xLjA3Ljg1LS44OS43LjE0IDEuMTN6TTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "4f6d1484-4672-43d5-9c48-94ff3ec11069" } }, { "Id": 144361, "Version": 1, "Guid": "60fb7885-7356-4183-9794-b933b7d5d39c", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content-Type" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "4f6d1484-4672-43d5-9c48-94ff3ec11069" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 144363, "Version": 1, "Guid": "9fc5956a-762d-4709-9acc-ae6fc7649219", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Title" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Features", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 144362, "Version": 2, "Guid": "b974d450-1e1c-4fe9-adbf-02b350e50881", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Features" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144364, "Version": 1, "Guid": "f519e76b-8313-4109-9b30-ed813562b73b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144365, "Version": 1, "Guid": "cd0fe453-e2af-4905-97ca-02291c50e99a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 165963, "Version": 3, "Guid": "f7a6d76d-ce9d-479d-9cb8-6b7d325ecace", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content Types" } }, "Number": { "Amount": { "en-us": 100 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "32698880-1c2e-41ab-bcfc-420091d3263f" } }, { "Id": 165964, "Version": 4, "Guid": "8eb1bb44-b148-43aa-a758-537a5f0fc2d1", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "*" }, "Title": { "en-us": "Metadata for all Entities" } }, "Number": { "Amount": { "en-us": 100 }, "TargetType": { "en-us": 4 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "32698880-1c2e-41ab-bcfc-420091d3263f" } }, { "Id": 165965, "Version": 3, "Guid": "0408571a-dbc0-4081-9b66-d1fc7251974f", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Export Decorator" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "

Mark something in the system to be part of an export set. 

" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHdpZHRoPSIyNCI+PHBhdGggZD0iTTEwLjk3NSAyMS45NXEtMS45LS4yLTMuNTM3LTEuMDYzUTUuOCAyMC4wMjUgNC42IDE4LjY4OHEtMS4yLTEuMzM4LTEuODg3LTMuMDYzLS42ODgtMS43MjUtLjY4OC0zLjY1IDAtMy44NzUgMi41NjMtNi43MTNRNy4xNSAyLjQyNSAxMSAydjJxLTMuMDI1LjQyNS01IDIuNjg3LTEuOTc1IDIuMjYzLTEuOTc1IDUuMjg4UTQuMDI1IDE1IDYgMTcuMjYycTEuOTc1IDIuMjYzIDQuOTc1IDIuNjg4Wm0xLTQuOTVMNi45NSAxMS45NWwxLjQyNS0xLjQyNSAyLjYgMi42VjdoMnY2LjEyNWwyLjU3NS0yLjU3NUwxNi45NzUgMTJabTEgNC45NXYtMnExLjA3NS0uMTUgMi4wNjMtLjU3NS45ODctLjQyNSAxLjgzNy0xLjA3NWwxLjQ1IDEuNDVxLTEuMTc1LjkyNS0yLjUyNSAxLjQ4OC0xLjM1LjU2Mi0yLjgyNS43MTJabTMuOTUtMTYuM1ExNi4wNSA1IDE1LjA2MiA0LjU3NSAxNC4wNzUgNC4xNSAxMyA0VjJxMS40NzUuMTUgMi44MjUuNzEyIDEuMzUuNTYzIDIuNSAxLjQ4OFptMi44IDEyLjY1LTEuNC0xLjQyNXEuNjUtLjg1IDEuMDUtMS44MzguNC0uOTg3LjU1LTIuMDYyaDIuMDVxLS4yIDEuNDc1LS43NSAyLjgzNy0uNTUgMS4zNjMtMS41IDIuNDg4Wm0uMi03LjMyNXEtLjE1LTEuMDc1LS41NS0yLjA2My0uNC0uOTg3LTEuMDUtMS44MzdsMS40LTEuNDI1cS45NSAxLjEyNSAxLjUyNSAyLjQ4Ny41NzUgMS4zNjMuNzI1IDIuODM4WiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "32698880-1c2e-41ab-bcfc-420091d3263f" } }, { "Id": 166418, "Version": 1, "Guid": "0ec49108-e863-412f-9f8a-05f492be4d54", "Type": { "Id": "19655377-6626-4986-aea0-ec3c187186ad", "Name": "RequirementDecorator" }, "Attributes": { "String": { "Feature": { "en-us": "DataExportImportBundles" }, "License": { "en-us": "" }, "Platform": { "en-us": "" }, "RequirementType": { "en-us": "feature" }, "Title": { "en-us": "Requires feature DataExportImportBundles" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "32698880-1c2e-41ab-bcfc-420091d3263f" } } ], "Attributes": [ { "Name": "Configuration", "Type": "Entity", "InputType": "entity-default", "IsTitle": true, "Metadata": [ { "Id": 165962, "Version": 4, "Guid": "364f9a97-c3f8-4edc-8303-80dcb246a7f9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Configuration" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 165966, "Version": 3, "Guid": "ab13ffb3-bd08-441a-946b-3f0b113522fd", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "d7f2e4fa-5306-41bb-a3cd-d9529c838879" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "cb27a0f2-f921-48d0-a3bc-37c0e77b1d0c", "Name": "ImageDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 144405, "Version": 5, "Guid": "0808ea36-2012-4c8e-9c81-9388ad6aaf91", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "", "de-de": "" }, "Label": { "en-us": "Image Details and Configuration", "de-de": "Bild-Beschreibung und -Konfiguration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "cb27a0f2-f921-48d0-a3bc-37c0e77b1d0c" } }, { "Id": 158792, "Version": 1, "Guid": "9c99a32e-dbfa-47d5-aea2-2e0c0e21115a", "Type": { "Id": "acc185a7-f300-4468-bce8-d6a64038989d", "Name": "ToolbarButtonDecorator" }, "Attributes": { "String": { "Command": { "en-us": "metadata" }, "Ui": { "en-us": "classes=single-field" }, "UiColor": { "en-us": "" }, "UiIcon": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "cb27a0f2-f921-48d0-a3bc-37c0e77b1d0c" } } ], "Attributes": [ { "Name": "WarningGlobalFile", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 176327, "Version": 6, "Guid": "c1f8cd4a-c057-4e98-8bd6-75aaea8dd8eb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "WarningGlobalFile" }, "Notes": { "en-us": "

 ⚠️ Warning: This is a Shared File

\n

Normally you would add settings to images which belong to a specific thing, like images which belong to a blog-post. This file is shared, so it could be used in many places. The settings you edit here will apply everywhere this file used. See docs.

", "de-de": "

 ⚠️Warnung: Gemeinsam genutzte Datei

\n

Normalerweise setzt man Einstellungen bei Bildern, die zu einem bestimmten Ding gehören, beispielsweise Bilder eines Blog-Beitrags. Diese Datei ist global und kann an vielen Orten verwendet werden. Diese Einstellungen gelten auch, wenn diese Datei anderswo eingesetzt wird.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1aef80c1-fb18-493a-90b9-e5f8c702965e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "InfoPresets", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 183849, "Version": 3, "Guid": "4d01de7e-b3bc-4b38-a894-03029196f693", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "InfoPresets" }, "Notes": { "en-us": "

Configure Presets on a Field, like the default Resize and Lightbox behavior on

\n
    \n
  • WYSIWYG fields
  • \n
  • Image fields
  • \n
  • Image Library fields
  • \n
\n

These presets will be picked up automatically by the API such as ImageService.Img(...) and ImageService.Picture(...) as well as the .Html(...) method.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f350e7cb-829a-407a-b442-bd481ddc02bb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 177517, "Version": 4, "Guid": "b309674f-e06c-4657-9b07-30a32df2e762", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Title & Description", "de-de": "Titel & Beschreibung" }, "Notes": { "en-us": "

Describe your image for screen readers and SEO.

", "de-de": "

Beschreibe dein Bild für Menschen mit Behinderungen und Google / SEO.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "b0948915-0f4a-4843-9b4f-eb1604321457" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 177518, "Version": 2, "Guid": "7eaa2ece-4ce6-4307-8253-cc521404bbee", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 144396, "Version": 3, "Guid": "91e1a644-6a08-4eea-8b5f-69befa7e38f7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Image Description", "de-de": "Bildbeschreibung" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f8e9b585-f00f-4f25-9679-500024209d98" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144403, "Version": 1, "Guid": "50d521e5-5071-415d-917b-8b02b3cbd4e4", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144404, "Version": 1, "Guid": "e74260b4-d2d3-45f9-b0a6-8776cfe01dd1", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SkipFallbackTitle", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 176316, "Version": 3, "Guid": "cec3a006-939e-4189-9068-4b44e527ac05", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "SkipFallbackTitle" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "2ab4855c-9699-4f33-8a8c-b17ef8f86bed" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176317, "Version": 1, "Guid": "66eca87d-f9c3-4536-8a3f-9271db0b9916", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Use a default title (as none is specified here)", "de-de": "Verwende Standardbeschriftung (da hier keine angegeben wurde)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Leave title empty", "de-de": "Keine Beschriftung verwenden" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DescriptionExtended", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 176320, "Version": 7, "Guid": "e2bd110b-f7d5-4644-b264-ed904ed7ce94", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Extended Description", "de-de": "Erweiterte Beschreibung" }, "Notes": { "en-us": "

This is only shown in special scenarios like when used in galleries.

", "de-de": "

Dies wird nur in speziellen Fällen angezeigt, beispielsweise in Galerien.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6bcded21-014b-430a-b968-b095bc627776" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176324, "Version": 5, "Guid": "2d814147-6cc9-46eb-b567-ac1af1ee338f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 176325, "Version": 5, "Guid": "b4b62531-015b-445e-91dd-7b1e3c18b136", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "false" }, "ButtonSource": { "en-us": "false" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" }, "WysiwygConfiguration": { "en-us": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AddDescriptionDetailed", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 176319, "Version": 6, "Guid": "bd63a2ef-22fa-4566-892f-5e07683a99ca", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Add Detailed / Extended Description", "de-de": "Erweiterte Beschreibung hinzufügen" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7d4c5b6f-9831-4a72-bbaa-5b82c4564851" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "IsEphemeral": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176321, "Version": 4, "Guid": "969bca03-8a22-48f5-8acc-2eb02123eeaf", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "without detailed description", "de-de": "ohne erweiterte Beschreibung" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "with detailed description", "de-de": "mit erweiterter Beschreibung" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupCrop", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 177515, "Version": 3, "Guid": "32bf5ace-2134-46f3-bb9c-4cf841127bf4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Image Cropping", "de-de": "Bild zuschneiden" }, "Notes": { "en-us": "

Specify how the image should be cropped if it is automatically resized.

", "de-de": "

Gib an wie das Bild zugeschnitten werden soll, wenn es automatisch angepasst wird. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 177516, "Version": 2, "Guid": "7536e75b-9ffd-4ae6-b84c-f9f4603a4ae3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CropBehavior", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144395, "Version": 5, "Guid": "c505bdcc-24de-48a8-9492-4945caf59570", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Crop Behavior", "de-de": "Zuschnitt-Verhalten" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144397, "Version": 4, "Guid": "ff64899a-b9f2-4eab-bc54-4c9e38c8de05", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144398, "Version": 4, "Guid": "fb106616-3e50-46bf-b204-567e06e26675", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default Crop - Use image as the template expects it, usually crop to center\nnone:Don't Crop - the entire image should be visible\nto:Corner or Side Crop - the most important part is in a corner or on a side" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CropTo", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144399, "Version": 6, "Guid": "d6923ea6-f842-456f-ba8e-75200f411231", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Crop Focus / Crop To", "de-de": "Zuschnitt - Fokus" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e448061e-6587-4833-9071-143ded271a76" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144401, "Version": 5, "Guid": "c88bde06-956b-48cc-98bb-2ff68edc7a34", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144402, "Version": 5, "Guid": "fe5255fe-e806-426e-b433-61119f6507df", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":\uD83C\uDFAF Default - Center\ntl:↖️ Top Left\ntc:⬆️ Top Center\ntr:↗️ Top Right\nml:⬅️ Middle Left\nmc:\uD83C\uDFAF Middle Center\nmr:➡️ Middle Right\nbl:↙️ Bottom Left\nbc:⬇️ Bottom Center\nbr:↘️ Bottom Right" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ResizeSettings", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183831, "Version": 8, "Guid": "67110684-0e52-4c18-9599-8c254dd684f3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Resize Settings" }, "Notes": { "en-us": "

Override the resize settings on this image.

", "de-de": "

Verwende eigene Einstellungen für die Anzeigegrösse dieses Bildes.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c4185f6f-ef3e-4718-bdc9-2ca262fa4437" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183832, "Version": 1, "Guid": "d44c8aa9-2ba7-4f8a-aa26-78308821ea5f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183833, "Version": 1, "Guid": "5f0a75f7-90be-41c5-a543-0531becaaa79", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183838, "Version": 4, "Guid": "4e6de09a-9ed0-4bff-8c49-0fc18065ab7e", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "29e24872-6359-4c9e-9c0c-c5a9e68a4a7d" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageCropRequirements", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 163986, "Version": 5, "Guid": "11587585-b4e1-48e4-8f4b-51d4f3bba01f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MessageCropRequirements" }, "Notes": { "en-us": "

Tip: Crop settings will only take effect if the template creating the HTML interprets the settings. If it seems like the settings don't work, please contact your web developer. 

", "de-de": "

Tipp: Die Einstellungen wirken nur, wenn das Template (der Teil, welches HTML generiert) diese berücksichtigt. Sollten die Einstellungen nicht wirken, dann frag deinen Webdesigner.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6e1d7fe2-f790-4a16-9ca9-4d93210c5c34" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupLightbox", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183822, "Version": 3, "Guid": "dcc4368d-49f3-4907-ab25-b1e245547365", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Lightbox / PopUp Settings", "de-de": "Lightbox / PopUp Einstellungen" }, "Notes": { "en-us": "

For help, see docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183825, "Version": 2, "Guid": "4e3ec7ee-5211-41de-b921-6f520f1f8d2c", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LightboxIsEnabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 183823, "Version": 3, "Guid": "7c5e13b3-758d-4fa2-9285-b919a3d3497f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "LightboxIsEnabled" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183826, "Version": 2, "Guid": "6387d26a-87d5-4c6e-93a7-ac1b894c68b8", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Lightbox / PopUp", "de-de": "Keine Lightbox / kein PopUp" }, "TitleIndeterminate": { "en-us": "Lightbox / PopUp not configured (use defaults)", "de-de": "LightBox / PopUp nicht konfiguriert (nutze Standardeinstellungen)" }, "TitleTrue": { "en-us": "Use Lightbox / PopUp", "de-de": "Lightbox / PopUp aktiviert" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LightboxGroup", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 183824, "Version": 3, "Guid": "18d661da-a45c-4876-a898-9adb14f32050", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Lightbox Group", "de-de": "Lightbox Gruppe" }, "Notes": { "en-us": "

Images in the same lightbox group will work together like an album.

", "de-de": "

Bilder in der selben Lightbox-Gruppe funktionieren gemeinsam wie ein Album.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8737cc85-67ee-457f-9221-7337ae006d4b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183827, "Version": 1, "Guid": "2137373f-3bed-4f39-ac84-d96396990a8d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183828, "Version": 1, "Guid": "c1e30ff2-5cbd-40a0-bdce-04bcaac1dd4c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":No Group - this image will open stand alone\ndefault:Default Group - all images in this group will be in an album together", "de-de": ":Keine Gruppe - dieses Bild öffnet alleine\ndefault:Standard Gruppe - alle Bilder in dieser Gruppe sind wie ein Album" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 176328, "Version": 3, "Guid": "1aef80c1-fb18-493a-90b9-e5f8c702965e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !!data.parameters?.showWarningGlobalFile; });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183852, "Version": 1, "Guid": "f350e7cb-829a-407a-b442-bd481ddc02bb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const forAttribute = context.target.entity.for.targetType == 2;\n return { value: forAttribute, stop: true };\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183850, "Version": 1, "Guid": "b0948915-0f4a-4843-9b4f-eb1604321457", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const forAttribute = context.target.entity.for.targetType == 2;\n return { value: !forAttribute, stop: true };\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183851, "Version": 1, "Guid": "f8e9b585-f00f-4f25-9679-500024209d98", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const forAttribute = context.target.entity.for.targetType == 2;\n return forAttribute\n ? { value: 'Image Render Presets', stop: true }\n : { value: data.value, stop: true };\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176318, "Version": 3, "Guid": "2ab4855c-9699-4f33-8a8c-b17ef8f86bed", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// Only show if the description is not null/whitespace etc.\n// https://stackoverflow.com/questions/10232366\nv2((data) => {\n const str = data.Description;\n return str === null || (/^\\s*$/).test(str);\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176323, "Version": 4, "Guid": "6bcded21-014b-430a-b968-b095bc627776", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const detailsBlank = data.DescriptionExtended == '';\n return !detailsBlank || data.AddDescriptionDetailed;\n});" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 176322, "Version": 4, "Guid": "7d4c5b6f-9831-4a72-bbaa-5b82c4564851", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// Only show if the description is not null/whitespace AND data.DescriptionExtended is empty\nv2((data) => {\n const detailsBlank = data.DescriptionExtended == '';\n const title = data.Description;\n const titleBlank = title == null || (/^\\s*$/).test(title);\n return detailsBlank && !titleBlank;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144400, "Version": 3, "Guid": "e448061e-6587-4833-9071-143ded271a76", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.CropBehavior == 'to'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183834, "Version": 2, "Guid": "c4185f6f-ef3e-4718-bdc9-2ca262fa4437", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // show when crop-to is available, or if it's not empty\n return data.CropBehavior == 'to' || !!data.ResizeSettings;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183837, "Version": 6, "Guid": "29e24872-6359-4c9e-9c0c-c5a9e68a4a7d", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Description]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SettingsEntities" }, "QueryParameters": { "en-us": "ContentType=⚙️Image" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Settings - Image Resizes" }, "Value": { "en-us": "Title" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 163987, "Version": 2, "Guid": "6e1d7fe2-f790-4a16-9ca9-4d93210c5c34", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.CropBehavior !== ''; }" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183829, "Version": 1, "Guid": "8737cc85-67ee-457f-9221-7337ae006d4b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return !!data.LightboxIsEnabled;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 136476, "Version": 6, "Guid": "ecfce611-9af3-4075-8422-924cec7a3eb0", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark something as the Default (like a preferred View)" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This marks something as being the default. There are no properties to edit. 

" }, "Label": { "en-us": "Is-Default (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvZz48Zz48cGF0aCBkPSJNMTIgMTcuMjcgMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjd6Ii8+PC9nPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e" } }, { "Id": 136483, "Version": 1, "Guid": "00d5d915-0783-4511-9af5-0d6f0d0740a7", "Type": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e" } }, { "Id": 137093, "Version": 3, "Guid": "53a8c895-cb55-46fc-bbde-fa9ca0e99b21", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "2SexyContent-Template" }, "Title": { "en-us": "Metadata for Views" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 4 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e" } }, { "Id": 137094, "Version": 2, "Guid": "3ef76165-8963-443a-9889-c411e0eebd6a", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content-Type" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "852fe15e-bf23-44e6-a856-0a130203496c", "Name": "IsObsoleteDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 135940, "Version": 7, "Guid": "13d2799b-85ac-4620-8a32-6e577c40f900", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark something as obsolete/deprecated" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This marks things which should be seen as obsolete in the UI. For example obsolete input-types. 

" }, "Label": { "en-us": "Is-Obsolete (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04IDAtMS44NS42My0zLjU1IDEuNjktNC45TDE2LjkgMTguMzFDMTUuNTUgMTkuMzcgMTMuODUgMjAgMTIgMjB6bTYuMzEtMy4xTDcuMSA1LjY5QzguNDUgNC42MyAxMC4xNSA0IDEyIDRjNC40MiAwIDggMy41OCA4IDggMCAxLjg1LS42MyAzLjU1LTEuNjkgNC45eiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "852fe15e-bf23-44e6-a856-0a130203496c" } } ], "Attributes": [ { "Name": "Message", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 135941, "Version": 2, "Guid": "c3abca6c-00c4-4d78-90d8-7f29df0a99cc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Message" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136474, "Version": 1, "Guid": "4f4bed7d-c41f-4861-8cec-1aa18067008b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136475, "Version": 1, "Guid": "a3550cc5-8581-41e3-8163-e5760ec01a60", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 136477, "Version": 5, "Guid": "894d67fc-b92a-460f-b56b-8647859e86a9", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark things as recommended (for example input-types)" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Mark an item as recommended.

" }, "Label": { "en-us": "Is-Recommended (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6bTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMjFoOWMuODMgMCAxLjU0LS41IDEuODQtMS4yMmwzLjAyLTcuMDVjLjA5LS4yMy4xNC0uNDcuMTQtLjczdi0yYzAtMS4xLS45LTItMi0yaC02LjMxbC45NS00LjU3LjAzLS4zMmMwLS40MS0uMTctLjc5LS40NC0xLjA2TDE0LjE3IDEgNy41OCA3LjU5QzcuMjIgNy45NSA3IDguNDUgNyA5djEwYzAgMS4xLjkgMiAyIDJ6TTkgOWw0LjM0LTQuMzRMMTIgMTBoOXYybC0zIDdIOVY5ek0xIDloNHYxMkgxeiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c740085a-d548-41f3-8d06-0a48b8692345" } }, { "Id": 137096, "Version": 2, "Guid": "0d0cc58d-09b2-4217-86b1-1420f4fadfbe", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content-Types (to use on Input-Types)" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c740085a-d548-41f3-8d06-0a48b8692345" } } ], "Attributes": [ { "Name": "Message", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 136468, "Version": 1, "Guid": "e6056049-836b-4ff8-81b2-4b12af337d95", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Message" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "18d2b1db-e1ed-45bc-8746-cd8885651063", "Name": "IsSharedDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 139093, "Version": 4, "Guid": "517f4730-5564-4061-9c1e-4994da7bd839", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark Apps as being shared / global" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Is-Shared (Decorator) - for Apps" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiMwMDAwMDAiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xOSwxMmgzTDEyLDNMMiwxMmgzdjNIM3YyaDJ2M2gydi0zaDR2M2gydi0zaDR2M2gydi0zaDJ2LTJoLTJWMTJ6IE03LDE1di00LjgxbDQtMy42VjE1SDd6IE0xMywxNVY2LjU5bDQsMy42VjE1SDEzeiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "18d2b1db-e1ed-45bc-8746-cd8885651063" } }, { "Id": 139094, "Version": 3, "Guid": "dc2fdeed-e789-4b8c-b817-6c711d2927e7", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "

If you remove this, the App will not be shared any more. This would break any app which inherits this.

" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for App" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 3 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "18d2b1db-e1ed-45bc-8746-cd8885651063" } }, { "Id": 139095, "Version": 3, "Guid": "ff32388b-9431-43c0-aeda-91b478ffb1ee", "Type": { "Id": "19655377-6626-4986-aea0-ec3c187186ad", "Name": "RequirementDecorator" }, "Attributes": { "String": { "Feature": { "en-us": "bb6656ef-fb81-4943-bf88-297e516d2616" }, "License": { "en-us": "" }, "Platform": { "en-us": "" }, "RequirementType": { "en-us": "feature" }, "Title": { "en-us": "Requires Feature Shared-App" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "18d2b1db-e1ed-45bc-8746-cd8885651063" } }, { "Id": 139097, "Version": 1, "Guid": "22c65c23-ec7d-4f38-88a6-18ce22b42b69", "Type": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "18d2b1db-e1ed-45bc-8746-cd8885651063" } }, { "Id": 142970, "Version": 2, "Guid": "1f83e841-4d74-453d-93a7-05fee8bcc2b2", "Type": { "Id": "19655377-6626-4986-aea0-ec3c187186ad", "Name": "RequirementDecorator" }, "Attributes": { "String": { "Feature": { "en-us": "" }, "License": { "en-us": "da7274c1-b893-4edb-8acb-ae2995a07321" }, "Platform": { "en-us": "" }, "RequirementType": { "en-us": "license" }, "Title": { "en-us": "Requires License EnterpriseCms" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "18d2b1db-e1ed-45bc-8746-cd8885651063" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 137417, "Version": 3, "Guid": "ad99d7b5-7557-43a7-83f1-29b9edf4527e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This configures a Content-Type to have custom languages / translation settings

" }, "Label": { "en-us": "Language and Translation Settings (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyLjg3IDE1LjA3bC0yLjU0LTIuNTEuMDMtLjAzYzEuNzQtMS45NCAyLjk4LTQuMTcgMy43MS02LjUzSDE3VjRoLTdWMkg4djJIMXYxLjk5aDExLjE3QzExLjUgNy45MiAxMC40NCA5Ljc1IDkgMTEuMzUgOC4wNyAxMC4zMiA3LjMgOS4xOSA2LjY5IDhoLTJjLjczIDEuNjMgMS43MyAzLjE3IDIuOTggNC41NmwtNS4wOSA1LjAyTDQgMTlsNS01IDMuMTEgMy4xMS43Ni0yLjA0ek0xOC41IDEwaC0yTDEyIDIyaDJsMS4xMi0zaDQuNzVMMjEgMjJoMmwtNC41LTEyem0tMi42MiA3bDEuNjItNC4zM0wxOS4xMiAxN2gtMy4yNHoiLz48L3N2Zz4=" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c" } }, { "Id": 137423, "Version": 1, "Guid": "a212e85e-190d-417b-ac4b-cc54c04ccd06", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for ContentTypes" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c" } }, { "Id": 137424, "Version": 1, "Guid": "0d565ac3-c3fb-4b55-a114-574fb997f247", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Languages / Translation Settings" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 137418, "Version": 2, "Guid": "e1a556da-bcf9-41f5-8c39-d4e8dda53d5e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Languages / Translation Settings" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137420, "Version": 1, "Guid": "8df5f0b8-4acf-4a5a-8c48-259150163ddf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137421, "Version": 1, "Guid": "0eaec010-4f8b-43d6-86a3-ee6354615689", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Enabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 137419, "Version": 2, "Guid": "5145fbe8-e744-464b-a3cd-4f90553d0046", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Enabled" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137422, "Version": 1, "Guid": "53583b42-c59c-4d6e-9a11-df5349ae5a6f", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Translation Disabled (items of this type can only be edited in the primary language)" }, "TitleIndeterminate": { "en-us": "Default = Enabled (items of this type can be translated)" }, "TitleTrue": { "en-us": "Translation Enabled (items of this type can be translated)" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "be34f64b-7d1f-4ad0-b488-dabbbb01a186", "Name": "LightSpeedOutputDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 144418, "Version": 6, "Guid": "f95dcbca-0080-460c-9190-eb72be7a7225", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configure LightSpeed Output Caching" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

\"\"

\n

This is an extremely powerful system to optimize performance. Read the docs.

" }, "Label": { "en-us": "LightSpeed Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "be34f64b-7d1f-4ad0-b488-dabbbb01a186" } }, { "Id": 144419, "Version": 1, "Guid": "1ce0744c-eab6-4c1d-82c0-75cbe472fef5", "Type": { "Id": "19655377-6626-4986-aea0-ec3c187186ad", "Name": "RequirementDecorator" }, "Attributes": { "String": { "Feature": { "en-us": "LightSpeedOutputCache" }, "License": { "en-us": "" }, "Platform": { "en-us": "" }, "RequirementType": { "en-us": "feature" }, "Title": { "en-us": "Requirement to use this" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "be34f64b-7d1f-4ad0-b488-dabbbb01a186" } }, { "Id": 144420, "Version": 1, "Guid": "8e4db30f-a9c8-42b5-afb0-9fca9fe36a68", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for App" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 3 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "be34f64b-7d1f-4ad0-b488-dabbbb01a186" } } ], "Attributes": [ { "Name": "MsgWarningNotEnabled", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144457, "Version": 3, "Guid": "a4190965-e0b2-4af6-841f-89f2a954f733", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Warning: LightSpeed Cache is not Enabled" }, "Notes": { "en-us": "

Warning ⚠️

\n

You are editing configuration for LightSpeed Cache, but LightSpeed Cache is not enabled

\n

The settings you change here will therefor not have an effect.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "21f878f4-f822-45cf-a840-8d7d581e8f0d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 144444, "Version": 4, "Guid": "dfe4df36-8c2b-4481-b3e7-c5bf335dbfe6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "48dfbe23-bdad-4fd3-a216-3e28dd072d39" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 144446, "Version": 2, "Guid": "b88d4c56-fdf6-4d5d-9642-adba4e599a85", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144447, "Version": 2, "Guid": "6969706e-0629-4663-bb88-c6a7594d4b22", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsEnabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 144417, "Version": 4, "Guid": "0405bb5f-3249-42cd-b93e-6908f1f120c8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "IsEnabled" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144427, "Version": 2, "Guid": "081f7c25-5c5b-42de-83b3-61c8af08e954", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Disabled" }, "TitleIndeterminate": { "en-us": "System Default (disabled if not enabled elsewhere)" }, "TitleTrue": { "en-us": "Enabled" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDurations", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183798, "Version": 3, "Guid": "45d8cb18-ff0c-4b6b-8bc7-b8bb26836cbd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Caching Durations" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3cdbdd23-27c8-4fbd-8b56-43501a9606bb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183800, "Version": 1, "Guid": "3e4a521b-dd33-4bc2-a869-81d98cdd8bdd", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Duration", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144424, "Version": 6, "Guid": "74fc20e0-384c-4409-aa8a-0cb17b5432bc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "-1" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "Duration" }, "Notes": { "en-us": "

value is stored as as seconds

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144425, "Version": 5, "Guid": "a57e4184-93b0-417b-9aaf-d26b20c6f75a", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144426, "Version": 5, "Guid": "b7669760-128f-447c-a9e3-e4f74d8767e9", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Empty / no value\n-1:Disabled\n10:10 Seconds\n30:30 Seconds\n60:60 Seconds\n300:5 Minutes\n3600:1 hour\n14400:4 hours\n86400:1 day" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DurationUsers", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144428, "Version": 6, "Guid": "4dd37997-a627-4de0-be37-5fc96fb1a113", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "-1" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "Duration for Logged In Users (but not editors)" }, "Notes": { "en-us": "

The cache will be kept separate for each user. If you have many users, this could require a lot of memory, so we recommend to disable this. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144431, "Version": 5, "Guid": "d687f779-d3ab-4e89-9961-fedcdcff8da5", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144432, "Version": 5, "Guid": "ac9c54ca-8ab0-4291-979c-e1a54b5ffc12", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Empty / no value\n-1:Disabled\n10:10 Seconds\n30:30 Seconds\n60:60 Seconds\n300:5 Minutes\n3600:1 hour\n14400:4 hours\n86400:1 day" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DurationEditors", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144429, "Version": 6, "Guid": "7e79b272-211a-49de-832c-42b00e55649d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "300" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "Duration for Editors" }, "Notes": { "en-us": "

Editors spend a lot of time on the site, so some caching will improve the experience. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144433, "Version": 5, "Guid": "2b930e33-0c02-4bd2-882b-36006ed117e1", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144434, "Version": 5, "Guid": "81849c1b-a597-4410-9026-a7a8e2b1b1fa", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Empty / no value\n-1:Disabled\n10:10 Seconds\n30:30 Seconds\n60:60 Seconds\n300:5 Minutes\n3600:1 hour\n14400:4 hours\n86400:1 day" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DurationSystemAdmin", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 144436, "Version": 4, "Guid": "cf8667cd-801a-4ec7-9ae9-367ce1f59527", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "60" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "Duration System Admins" }, "Notes": { "en-us": "

This is for super-users / host-users.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144437, "Version": 3, "Guid": "335e40c0-04aa-4aab-895a-313cc27d33e5", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 144438, "Version": 3, "Guid": "8ae02ba2-e3b0-46ad-b11b-caa9bb3f07b5", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Empty / no value\n-1:Disabled\n10:10 Seconds\n30:30 Seconds\n60:60 Seconds\n300:5 Minutes\n3600:1 hour\n14400:4 hours\n86400:1 day" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDurationsEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 183816, "Version": 1, "Guid": "13feffb6-e9fe-49e1-b44a-c7c9c69cf143", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupDurationsEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ViewConfigurationMessage", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 183815, "Version": 5, "Guid": "e596ea80-ac99-4da4-9967-00c7eaae0b9a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "ViewConfigurationMessage" }, "Notes": { "en-us": "

The View-Configuration is only for configuring URL parameters. 

\n

As of now, it doesn't support configuring alternate durations.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "46b375ba-3a11-4f04-8faf-33ef4ef5b29a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 183818, "Version": 1, "Guid": "f302a03d-5982-4a84-a9b3-204ae77b83f6", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupVaryByUrl", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183799, "Version": 4, "Guid": "f9ae6ce9-32c1-4fc2-bba6-12172fd23a7f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Vary Cache by URL Parameters" }, "Notes": { "en-us": "

Your code may return different results based on URL parameters. If this is the case, then you want to vary by URL parameters. 

\n

⚠️ Warning: Be careful with this configuration. If you don't specify which url parameters are allowed, you can easily build up tens of thousands of cache entries which may slow down your system. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "11e753a0-2e69-46dc-b67e-c5b0bec47ac0" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183801, "Version": 2, "Guid": "ac85e0c8-1078-4281-b115-bb8764d6fb7e", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ByUrlParameters", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 144430, "Version": 2, "Guid": "7181ed82-78fa-4189-85a0-ee90d1901d4d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Cache By Url Parameters (for blogs etc. which have different pages)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144435, "Version": 1, "Guid": "1cfa77c9-8073-4f33-a8be-a9d7f0153e65", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Use same cache even if URL parameters change" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Use new cache if URL parameter changes" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UrlParametersCaseSensitive", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 144439, "Version": 2, "Guid": "8817375d-2d0f-4b62-a83e-32ba102f8821", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "UrlParameterCaseSensitive" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144440, "Version": 1, "Guid": "bf17846b-4129-4bc1-868f-7848cab5489a", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Url parameters are NOT case-sensitive: A=a, É=é (recommended)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Url parameters are case sensitive: A≠a & É≠é" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UrlParameterNames", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183808, "Version": 5, "Guid": "9b6c8a4a-9070-490c-8f89-3f7058d6133b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "URL Parameter Names (one on each line)" }, "Notes": { "en-us": "

Put each url parameter on an own line. Optionally with // comment behind it. * means all url parameters - not recommended ⚠️.

" }, "Placeholder": { "en-us": "example // vary the cache by the url parameter example=abcd" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183810, "Version": 4, "Guid": "1399c3ca-ba76-4bfc-ab4c-092dbf91895c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183811, "Version": 4, "Guid": "f12a5eee-4758-4ee4-bc62-acadca65ff50", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 5 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UrlParametersOthersDisableCache", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 183809, "Version": 3, "Guid": "6fbc03a7-8e66-4cfa-a537-54f2db77adf3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "UrlParametersOthersDisableCache" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183812, "Version": 2, "Guid": "2935f7d2-ab1b-4a9c-81d5-ea30193a9780", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "If other url parameters are used, cache as if they don't matter" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "If other url parameters are used, don't cache" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Advanced", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 144441, "Version": 3, "Guid": "c635552d-9e99-422e-b16e-d5b36e529e05", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Advanced" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "46e32523-21b2-4485-8e10-ae846009e305" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144442, "Version": 1, "Guid": "47e29f52-7437-4d60-982f-59e300644a19", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144443, "Version": 1, "Guid": "297753ad-bdc8-4e18-8014-9c7fe8c74ccd", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "none" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "" } }, "Number": { "Rows": { "en-us": 25 } }, "Boolean": { "JsonCommentsAllowed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupVaryByUrlEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 183817, "Version": 1, "Guid": "95634d5d-f5ef-4b17-93bf-ef42cbe88f1a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupVaryByUrlEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarShowDuration", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 183802, "Version": 4, "Guid": "da781d7a-95c7-45e5-b9ac-9220065d38d8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "VarShowDuration" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3d006350-3b3c-4294-8b1a-ad6e4f12857d", "a247ff46-76f7-45d2-bbc2-a20e4a3a4a98" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "IsEphemeral": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183803, "Version": 1, "Guid": "0d57e6d1-2f94-4df6-bad4-b59b502a8bc8", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 144458, "Version": 4, "Guid": "21f878f4-f822-45cf-a840-8d7d581e8f0d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if (context.cache.alreadyRun) return data.value;\n context.cache.alreadyRun = true;\n const enabled = context.features.isEnabled('LightSpeedOutputCache');\n // console.log(\"enabled\", enabled);\n return !enabled;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144445, "Version": 4, "Guid": "48dfbe23-bdad-4fd3-a216-3e28dd072d39", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n var partMsg = function(target, value) {\n if (value == -1) return target + ' \uD83D\uDEAB';\n return target + ' ' + value + 's';\n }\n var msg = '';\n if (!data.IsEnabled)\n return '\uD83D\uDEAB';\n msg = '✅ - ';\n msg += partMsg('Users', data.Duration);\n msg += ', ' + partMsg('Reg', data.DurationUsers);\n msg += ', ' + partMsg('Editors', data.DurationEditors);\n msg += ', ' + partMsg('SysAdmins', data.DurationSystemAdmin);\n return msg;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183804, "Version": 2, "Guid": "3cdbdd23-27c8-4fbd-8b56-43501a9606bb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.VarShowDuration && data.IsEnabled != false;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183819, "Version": 4, "Guid": "46b375ba-3a11-4f04-8faf-33ef4ef5b29a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// if parameters has a forView then take that, otherwise default to false\nv2((data, context) => {\n return { \n value: data.parameters.forView == 'true', // defaults to false\n stop: true,\n }\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183805, "Version": 1, "Guid": "11e753a0-2e69-46dc-b67e-c5b0bec47ac0", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.IsEnabled != false;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144523, "Version": 2, "Guid": "46e32523-21b2-4485-8e10-ae846009e305", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return context.debug;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183814, "Version": 2, "Guid": "3d006350-3b3c-4294-8b1a-ad6e4f12857d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "// if parameters has a showDuration then take that, otherwise default to true\nv2((data, context) => {\n return { \n value: data.parameters.showDuration != 'false', // defaults to true\n stop: true,\n }\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183813, "Version": 1, "Guid": "a247ff46-76f7-45d2-bbc2-a20e4a3a4a98", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return context.debug;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 136761, "Version": 6, "Guid": "4449b427-9239-4cd4-9939-ac5d8cdffd86", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configure what Metadata is expected on something" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This configures what Metadata is expected on this kind of item. It's mainly used to help create toolbars automatically. 

\n

Important: This wil not prevent other metadata, but simply make work easier. 

" }, "Label": { "en-us": "Metadata-Expected (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4czEuMDUtLjIyIDEuNDEtLjU5bDctN2MuMzctLjM2LjU5LS44Ni41OS0xLjQxcy0uMjMtMS4wNi0uNTktMS40MnpNMTMgMjAuMDFMNCAxMVY0aDd2LS4wMWw5IDktNyA3LjAyeiIvPjxjaXJjbGUgY3g9IjYuNSIgY3k9IjYuNSIgcj0iMS41Ii8+PC9zdmc+" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c490b369-9cd2-4298-af74-19c1e438cdfc" } }, { "Id": 137095, "Version": 2, "Guid": "0a653153-99a8-4794-bafc-acfeac3d5461", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Mark a Content-Type to expect a specific Metadata" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "c490b369-9cd2-4298-af74-19c1e438cdfc" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 136755, "Version": 2, "Guid": "e8a15273-661b-46d7-ac5d-b9d1da220ffa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Metadata which this item expects" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136757, "Version": 1, "Guid": "e8c3ea9d-1212-4984-97c3-bb9d5a6e7125", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136758, "Version": 1, "Guid": "539be49a-b460-492f-9506-8a9fa09116cf", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetType", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 142967, "Version": 4, "Guid": "90881082-be21-4807-b6f3-4d7ccc20c37d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "TargetType" }, "Notes": { "en-us": "

Determines what exactly expects this target. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142968, "Version": 3, "Guid": "d6c17084-1b87-4b84-83b3-128374e279b1", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 142969, "Version": 3, "Guid": "669a22d2-28ce-4983-bb2d-1c5f5ec0bbc9", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "0:Not set\n4:Entity (Item)\n5:Content Type\n2:Content Type Attribute (Field / Property)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MetadataTypes", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 136756, "Version": 4, "Guid": "c8b86d5c-b0f7-438b-bcfc-e1eb0022562f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "MetadataTypes" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136759, "Version": 3, "Guid": "9ff2bae8-dfbe-4673-9bdc-80a0d0af1e5b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136760, "Version": 3, "Guid": "4bef723e-f1a2-48e0-b4fe-1a79d92d5848", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "StaticName" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Amount", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 137110, "Version": 2, "Guid": "07cb5d7b-0402-4c43-8024-246d22504b4b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "1" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Amount" }, "Notes": { "en-us": "

How many of these are expected, typically 1. Use a large number like 100 to indicated lots. 0 means it shouldn't be used, so the UI can show a warning. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137112, "Version": 1, "Guid": "6c39a2a0-9d2d-48bd-b918-d3b311ed2f8c", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DeleteWarning", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 137111, "Version": 3, "Guid": "b9a102e1-bcfe-461f-a5e5-9f1e99917298", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "DeleteWarning" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142663, "Version": 1, "Guid": "dea8bcd3-6d41-4955-bd5c-00730391f452", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 142664, "Version": 1, "Guid": "0813f099-fe73-4b9e-b036-a56eb85751be", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "1" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 136807, "Version": 2, "Guid": "e308627d-c9cf-4a78-b030-956cf60e2cae", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content Types" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "4c88d78f-5f3e-4b66-95f2-6d63b7858847" } }, { "Id": 136808, "Version": 5, "Guid": "fada7228-9712-4ce2-a0f9-4dce2098c734", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark a Content-Type as being Metadata for a specific target type (App, Content-Type etc.)" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Used to decorate Content-Types to tell them what they usually describe. 

" }, "Label": { "en-us": "Metadata-For (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4czEuMDUtLjIyIDEuNDEtLjU5bDctN2MuMzctLjM2LjU5LS44Ni41OS0xLjQxcy0uMjMtMS4wNi0uNTktMS40MnpNMTMgMjAuMDFMNCAxMVY0aDd2LS4wMWw5IDktNyA3LjAyeiIvPjxjaXJjbGUgY3g9IjYuNSIgY3k9IjYuNSIgcj0iMS41Ii8+PHBhdGggZD0iTTguOSAxMi41NWMwIC41Ny4yMyAxLjA3LjYgMS40NWwzLjUgMy41IDMuNS0zLjVjLjM3LS4zNy42LS44OS42LTEuNDUgMC0xLjEzLS45Mi0yLjA1LTIuMDUtMi4wNS0uNTcgMC0xLjA4LjIzLTEuNDUuNmwtLjYuNi0uNi0uNTljLS4zNy0uMzgtLjg5LS42MS0xLjQ1LS42MS0xLjEzIDAtMi4wNS45Mi0yLjA1IDIuMDV6Ii8+PC9zdmc+" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "4c88d78f-5f3e-4b66-95f2-6d63b7858847" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 136797, "Version": 2, "Guid": "805c7157-cefd-479e-969c-508ef3298ac3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Metadata for ..." }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136805, "Version": 1, "Guid": "a89b269c-875e-42e8-a8e5-bd929c57b8bf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136806, "Version": 1, "Guid": "0d850d53-ed8b-4f46-b31b-3f0590da889e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetType", "Type": "Number", "InputType": "number-picker", "IsTitle": false, "Metadata": [ { "Id": 136798, "Version": 7, "Guid": "5c6419d5-7b4f-4c3d-8e94-da7cee04204e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "0" }, "InputType": { "en-us": "number-picker" }, "Name": { "en-us": "Target Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136801, "Version": 4, "Guid": "f8cd9db8-2fe3-4449-b797-185dfc74b5b9", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "0:Not set\n2:Field Definition (Attribute) - not supported yet\n3:App\n4:Entity (Item)\n5:Content Type\n6:Zone - not supported yet\n10:CmsItem - not supported yet" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 185418, "Version": 1, "Guid": "4ec32f7e-7c45-4721-85b5-45760ae9d135", "Type": { "Id": "2421dded-3aeb-47d2-ab9d-e2b72a2d821d", "Name": "@number-picker" }, "Attributes": { "String": { "PickerDisplayMode": { "en-us": "list" } }, "Entity": { "DataSources": { "*": [ "6e3f3520-77b9-4cb9-80ea-2d507bea197d" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 136799, "Version": 2, "Guid": "ab51d6df-9697-426d-82e4-3e8b56e406d9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Target Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9df378c7-c7f5-4171-99c7-521505c6126f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 136803, "Version": 1, "Guid": "272f1363-a416-4765-8e42-60ead7af5649", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136804, "Version": 1, "Guid": "91f17d7e-aa91-4284-b06f-d3b0fa3776dc", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Amount", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 137105, "Version": 2, "Guid": "1abf2c57-fc68-4747-ba3a-ac0119310dc8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "1" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Amount" }, "Notes": { "en-us": "

How many of these are expected, typically 1. Use a large number like 100 to indicated lots. 0 means it shouldn't be used, so the UI can show a warning. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137107, "Version": 1, "Guid": "186c70b3-4814-4114-a552-19f5af1809e9", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DeleteWarning", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 137106, "Version": 4, "Guid": "fa840bb5-dec5-46b1-a148-edea4425bafa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Delete Warning" }, "Notes": { "en-us": "

Special warning to show when deleting. Use this for primary-metadata like content-type description. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137108, "Version": 2, "Guid": "c8b216f7-0b35-4742-8a7e-c0c6914ad5c5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137109, "Version": 1, "Guid": "a5895b98-a6e2-4d7a-b931-b5c8b67f54bd", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 142662, "Version": 1, "Guid": "782934d3-b8de-433f-b62a-34bd484ad495", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "1" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 185417, "Version": 3, "Guid": "6e3f3520-77b9-4cb9-80ea-2d507bea197d", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:NameId]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "NameId" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.MetadataTargetTypes" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: SysData MetadataTargetType" }, "Value": { "en-us": "Id" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 136802, "Version": 2, "Guid": "9df378c7-c7f5-4171-99c7-521505c6126f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n const t = data.TargetType;\n return t == 2 || t == 4 || t == 10;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 142650, "Version": 3, "Guid": "293bc9e7-e6e2-4f35-866f-5ccfbde667ae", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Allows adding notes to something." }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Note" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiMwMDAwMDAiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xOSw1djlsLTUsMGwwLDVINVY1SDE5IE0xOSwzSDVDMy45LDMsMywzLjksMyw1djE0YzAsMS4xLDAuOSwyLDIsMmgxMGw2LTZWNUMyMSwzLjksMjAuMSwzLDE5LDN6IE0xMiwxNEg3di0yaDVWMTR6IE0xNywxMEg3VjhoMTBWMTB6Ii8+PC9zdmc+" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5e958dc6-2922-4d68-835c-7b9711538b12" } }, { "Id": 142661, "Version": 1, "Guid": "76df3695-a4fb-4c41-81df-26595db24679", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for any Entity" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 4 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5e958dc6-2922-4d68-835c-7b9711538b12" } }, { "Id": 144366, "Version": 2, "Guid": "1b333b13-8aa5-465b-8046-c0cb238a5b78", "Type": { "Id": "4f6d1484-4672-43d5-9c48-94ff3ec11069", "Name": "EditUiConfigurationDecorator" }, "Attributes": { "String": { "Features": { "en-us": "EditUiShowNotes=false\nEditUiShowMetadataFor=false" }, "Title": { "en-us": "Disable Notes and Metadata Display" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5e958dc6-2922-4d68-835c-7b9711538b12" } }, { "Id": 150892, "Version": 2, "Guid": "7ad912e0-632f-4d1c-8c5f-ac131572df87", "Type": { "Id": "acc185a7-f300-4468-bce8-d6a64038989d", "Name": "ToolbarButtonDecorator" }, "Attributes": { "String": { "Command": { "en-us": "metadata" }, "Ui": { "en-us": "" }, "UiColor": { "en-us": "D9CA1F" }, "UiIcon": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5e958dc6-2922-4d68-835c-7b9711538b12" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 143979, "Version": 5, "Guid": "7e5d91bb-dc27-4a9d-9b59-392a7542929d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

The title is auto-generated from the note. It removes HTML etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7faf0496-dc03-4e45-a1ae-e43629965344" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 143980, "Version": 3, "Guid": "46ebd741-8f64-4474-a141-8e032b61feeb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 143981, "Version": 3, "Guid": "8dbb1592-0b7a-41b9-9cc7-1d686bd76b21", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Note", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 142651, "Version": 1, "Guid": "e6ced411-a0fe-40de-8e35-13b339ffd246", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "Note" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ShowAdvanced", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 142657, "Version": 5, "Guid": "a5f6e2bb-af9b-4bd1-8e30-4ab0853a3040", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Advanced", "de-de": "Erweitert" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ea487371-6b1f-4718-a751-62bf389739a6" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "IsEphemeral": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142658, "Version": 4, "Guid": "8fb889ae-4146-45a9-8124-f9d202240e97", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "NoteType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 142652, "Version": 9, "Guid": "b2937760-6aa4-414d-a820-79224ad9f889", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "note" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Type", "de-de": "Typ" }, "Notes": { "en-us": "

Optional, only set this for special notes which have another function. 

", "de-de": "

Optional, bitte nur setzen wenn die Notiz wirklich eine andere Funktion hat. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "dc7e8c8d-6633-4a09-ad2c-afb0f4727ef0" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142653, "Version": 8, "Guid": "2531413d-6057-42fa-8c1e-6308c3c8c1bc", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 142654, "Version": 8, "Guid": "25583753-85ba-4d65-81f5-ea4f1ed9a59b", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "note:Note\nwarning:Warning", "de-de": "note:Notiz\nwarning:Warnung" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 143982, "Version": 3, "Guid": "7faf0496-dc03-4e45-a1ae-e43629965344", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n const empty = 'empty';\n const len = 30;\n // Remove HTML in note\n const noHtml = data.Note.replace(/<\\/?[^>]+(>|$)/g, ' ');\n if (!noHtml || noHtml == ' ') return empty;\n\n // remove html things like  \n const converterTextArea = context.cache.converter \n || document.createElement(\"textarea\");\n converterTextArea.innerHTML = noHtml;\n const cleanText = converterTextArea.value;\n\n // Trim multiple spaces, created by multiple tags\n var final = cleanText.replace(/\\s+/g, ' ').trim();\n\n if (!final) return empty;\n\n if (final.length > len) final = final.substring(0, len) + \"...\"\n return final || empty;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142660, "Version": 2, "Guid": "ea487371-6b1f-4718-a751-62bf389739a6", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return !data.ShowAdvanced; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142659, "Version": 2, "Guid": "dc7e8c8d-6633-4a09-ad2c-afb0f4727ef0", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.ShowAdvanced; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "19655377-6626-4986-aea0-ec3c187186ad", "Name": "RequirementDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 139092, "Version": 3, "Guid": "b9fc0ebf-33e9-4be6-9091-27459f8399c5", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Sets restrictions to use something." }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Requirement (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zy8+PGc+PHBhdGggZD0iTTEyLDFMMyw1djZjMCw1LjU1LDMuODQsMTAuNzQsOSwxMmM1LjE2LTEuMjYsOS02LjQ1LDktMTJWNUwxMiwxeiBNMTksMTFjMCwxLjg1LTAuNTEsMy42NS0xLjM4LDUuMjFsLTEuNDUtMS40NSBjMS4yOS0xLjk0LDEuMDctNC41OC0wLjY0LTYuMjljLTEuOTUtMS45NS01LjEyLTEuOTUtNy4wNywwYy0xLjk1LDEuOTUtMS45NSw1LjEyLDAsNy4wN2MxLjcxLDEuNzEsNC4zNSwxLjkyLDYuMjksMC42NCBsMS43MiwxLjcyYy0xLjE5LDEuNDItMi43MywyLjUxLTQuNDcsMy4wNEM3Ljk4LDE5LjY5LDUsMTUuNTIsNSwxMVY2LjNsNy0zLjExbDcsMy4xMVYxMXogTTEyLDE1Yy0xLjY2LDAtMy0xLjM0LTMtM3MxLjM0LTMsMy0zIHMzLDEuMzQsMywzUzEzLjY2LDE1LDEyLDE1eiIvPjwvZz48L2c+PC9zdmc+" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "19655377-6626-4986-aea0-ec3c187186ad" } }, { "Id": 182589, "Version": 2, "Guid": "ee57b531-b480-4687-bb6d-3a482ad062aa", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Requirement Metadata for Apps" } }, "Number": { "Amount": { "en-us": 100 }, "TargetType": { "en-us": 3 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "19655377-6626-4986-aea0-ec3c187186ad" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 139074, "Version": 2, "Guid": "4cdf080b-a3e5-476c-bc09-03b934b60410", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Requirement to use this" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139090, "Version": 1, "Guid": "535dfe53-b605-4751-bfee-cf1e0e88cb02", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139091, "Version": 1, "Guid": "50d6493e-2d80-4b53-9b7c-3b285d08134a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RequirementType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 139075, "Version": 5, "Guid": "ffdb77e4-6925-4c6e-8e05-b7e3cf351abb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139078, "Version": 4, "Guid": "7ef09298-209d-41a8-ad79-ecc5f7bc0e82", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139079, "Version": 4, "Guid": "ba08d423-e7c2-444d-aab5-a12086870109", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "feature:Requires a specific Feature to be active\nlicense:Requires a specific License\nplatform:Requires a specific Platform" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Feature", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 139076, "Version": 4, "Guid": "21a8da00-9e2c-4515-95f6-1868f3d4cce0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Required Feature (NameId)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "Please enter feature NameId" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c32b4384-1d19-4e09-8904-c5c2d12ec159" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139082, "Version": 2, "Guid": "4ea73284-29c7-40b2-a0fb-28c9ab20b184", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139083, "Version": 1, "Guid": "cbf05c87-65ea-4852-b964-263b9d727842", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" }, { "Id": 182590, "Version": 1, "Guid": "be9144ac-5539-48a1-8b12-c09227f5640f", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Features" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "NameId" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "License", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 139077, "Version": 3, "Guid": "f82f513e-37bd-42b2-9cc6-10fa97dd87e5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Required License" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "2e0e113a-d53b-49c8-9f79-6136d2322dad" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 139084, "Version": 2, "Guid": "7251969d-76ef-4b57-b05e-0ffd78651886", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139085, "Version": 2, "Guid": "7b360ef1-3475-4962-9a35-b324ca165970", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Platform", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 139080, "Version": 2, "Guid": "e7d9ffc9-0449-47bc-9718-c01d92b668b6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "RequiredPlatform" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "0c4515dd-4257-479e-8b8f-923c68667e33" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139087, "Version": 1, "Guid": "09b1ddb4-8477-46c8-b0a9-b545e62e09f3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139088, "Version": 1, "Guid": "6ce256c8-1e39-4024-bb5f-72bc0d6230d8", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Any platform\ndnn:Dnn (DotNetNuke)\noqt:Oqtane" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 139081, "Version": 2, "Guid": "c32b4384-1d19-4e09-8904-c5c2d12ec159", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.RequirementType == 'feature'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139096, "Version": 3, "Guid": "2e0e113a-d53b-49c8-9f79-6136d2322dad", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.RequirementType == 'license'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139086, "Version": 2, "Guid": "0c4515dd-4257-479e-8b8f-923c68667e33", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.RequirementType == 'platform'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 136480, "Version": 5, "Guid": "900fd1ee-6cb4-48a7-a8f2-6d7a22e3a3c1", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Mark a Content-Type to allow empty-items to be saved." }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

By default, content-types without fields would result in empty items, and they would not be saved. 

\n

Use this decorator to mark a content-type which should save items even if they are completely empty. 

" }, "Label": { "en-us": "Save-Empty (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiLz48L3N2Zz4=" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "8c78dabf-e0ad-4c26-b750-48138ecb8a39" } }, { "Id": 136482, "Version": 1, "Guid": "fc928cf4-c692-4ecb-a662-b71388273a57", "Type": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "8c78dabf-e0ad-4c26-b750-48138ecb8a39" } }, { "Id": 139098, "Version": 1, "Guid": "bd5293a6-e674-471e-9888-329ca01822a5", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for SaveEmpty - Target Content-Type" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "8c78dabf-e0ad-4c26-b750-48138ecb8a39" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "acc185a7-f300-4468-bce8-d6a64038989d", "Name": "ToolbarButtonDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 150890, "Version": 1, "Guid": "f98bd75d-b516-4f43-b45e-28322eba8101", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

WARNING - EXPERIMENTAL

" }, "Label": { "en-us": "Toolbar Button Configuration (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "acc185a7-f300-4468-bce8-d6a64038989d" } }, { "Id": 150891, "Version": 1, "Guid": "f68ce262-6b8a-4498-a7c0-7bb91a72a87f", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for content types" } }, "Number": { "Amount": { "en-us": 10 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "acc185a7-f300-4468-bce8-d6a64038989d" } } ], "Attributes": [ { "Name": "Command", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 150878, "Version": 5, "Guid": "3bcbb4da-0920-4584-8b73-f0a8d6cf8345", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "metadata" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Command" }, "Notes": { "en-us": "

The command / button this config is for.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150882, "Version": 1, "Guid": "dce4d52e-4be4-4662-ae61-0595fb89c53a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185424, "Version": 1, "Guid": "7afa9fdf-5c7a-4815-8fcc-bacefde345cf", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "SysDataSource=System.ToolbarButtonActions" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Ui", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 150879, "Version": 2, "Guid": "68542f68-48a6-4458-a1e9-db057358936b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Ui" }, "Notes": { "en-us": "

Any UI parameters which should be applied to the button.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150884, "Version": 1, "Guid": "cade50c7-5332-43c2-a44d-12041b23cf24", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 150885, "Version": 1, "Guid": "56727ffd-d81d-4bfc-b3ad-8380b213cad8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 5 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UiColor", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 150880, "Version": 3, "Guid": "5bca2223-ee75-4cdc-a988-e7ca8d60d680", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "UI Color (Button Background)" }, "Notes": { "en-us": "

The color parameter of the UI

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150886, "Version": 2, "Guid": "8c3fe0be-822e-42ed-b359-f6399b41b79d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 150887, "Version": 2, "Guid": "f83c66f6-f7f5-4207-91ca-c1797d3944d6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UiIcon", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 150881, "Version": 3, "Guid": "fe8a5ae8-9330-4dea-baaf-f86f606beb87", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "UI Icon (SVG)" }, "Notes": { "en-us": "

An SVG (as plain text) to use.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150888, "Version": 2, "Guid": "2e047acf-a3c2-4ff3-b089-b9efae3b998a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 150889, "Version": 2, "Guid": "13fb5912-56fb-4fbc-9e4d-a9900345faed", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 5 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "UiData", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 150893, "Version": 2, "Guid": "e04f2af2-5eee-4daa-8028-44b07231d43e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Ui - include Data" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 150894, "Version": 1, "Guid": "e3736f0e-f9ec-4e42-b146-549961603e95", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Don't include data" }, "TitleIndeterminate": { "en-us": "Default - don't include data" }, "TitleTrue": { "en-us": "Include Data for UI" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "5efb0bc2-03c3-45e0-a20b-dabf71b8cfd1", "Name": "IsTemplateDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 183772, "Version": 1, "Guid": "1b1c9808-6145-42d2-ab44-92389bba2db4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "Mark Apps as being templates, so when installing, you must set the name" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Is Template (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5efb0bc2-03c3-45e0-a20b-dabf71b8cfd1" } }, { "Id": 183773, "Version": 1, "Guid": "264cdcc6-6f95-4ba4-910b-1111bd41f5cd", "Type": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5efb0bc2-03c3-45e0-a20b-dabf71b8cfd1" } }, { "Id": 183775, "Version": 1, "Guid": "10fd7b99-8178-47b5-9307-317096877d4e", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for App" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 3 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5efb0bc2-03c3-45e0-a20b-dabf71b8cfd1" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 183919, "Version": 3, "Guid": "03d0bc06-f18e-49b5-a4f7-eee4b3e1abdd", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This marks content types which are picker sources.

\n

There are no properties to edit.

" }, "Label": { "en-us": "Is Picker Source (Decorator)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "base64:PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyNHB4IiBmaWxsPSIjZThlYWVkIj48cGF0aCBkPSJNMzIwLTI4MHExNyAwIDI4LjUtMTEuNVQzNjAtMzIwcTAtMTctMTEuNS0yOC41VDMyMC0zNjBxLTE3IDAtMjguNSAxMS41VDI4MC0zMjBxMCAxNyAxMS41IDI4LjVUMzIwLTI4MFptMC0xNjBxMTcgMCAyOC41LTExLjVUMzYwLTQ4MHEwLTE3LTExLjUtMjguNVQzMjAtNTIwcS0xNyAwLTI4LjUgMTEuNVQyODAtNDgwcTAgMTcgMTEuNSAyOC41VDMyMC00NDBabTAtMTYwcTE3IDAgMjguNS0xMS41VDM2MC02NDBxMC0xNy0xMS41LTI4LjVUMzIwLTY4MHEtMTcgMC0yOC41IDExLjVUMjgwLTY0MHEwIDE3IDExLjUgMjguNVQzMjAtNjAwWm0xMjAgMzIwaDI0MHYtODBINDQwdjgwWm0wLTE2MGgyNDB2LTgwSDQ0MHY4MFptMC0xNjBoMjQwdi04MEg0NDB2ODBaTTIwMC0xMjBxLTMzIDAtNTYuNS0yMy41VDEyMC0yMDB2LTU2MHEwLTMzIDIzLjUtNTYuNVQyMDAtODQwaDU2MHEzMyAwIDU2LjUgMjMuNVQ4NDAtNzYwdjU2MHEwIDMzLTIzLjUgNTYuNVQ3NjAtMTIwSDIwMFptMC04MGg1NjB2LTU2MEgyMDB2NTYwWm0wLTU2MHY1NjAtNTYwWiIvPjwvc3ZnPg==" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "bcce96be-a439-4f22-9d1e-a10487544fa5" } }, { "Id": 183921, "Version": 1, "Guid": "f4a28d83-923e-4809-8776-e3f462fbbd0b", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Content Types can be Picker Source Configurations" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "bcce96be-a439-4f22-9d1e-a10487544fa5" } }, { "Id": 183923, "Version": 1, "Guid": "977cb2e5-4480-4522-83ad-c0e9c1b33d99", "Type": { "Id": "8c78dabf-e0ad-4c26-b750-48138ecb8a39", "Name": "SaveEmptyDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "bcce96be-a439-4f22-9d1e-a10487544fa5" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "7775df1b-9c6d-4344-8f64-f6683b324615", "Name": "FieldSettingsGeneric", "Scope": "System.Decorators", "Metadata": [ { "Id": 183983, "Version": 1, "Guid": "5c4445aa-e14e-4cd2-abca-011dfa4a2023", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This is for development / internal features only.

\n

Goal is to be able to quickly add some generic settings to an input field, which affect the field without having to first create a content-type for these. 

" }, "Label": { "en-us": "Field Settings - Generic (Development only)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7775df1b-9c6d-4344-8f64-f6683b324615" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 183985, "Version": 2, "Guid": "3664805a-7ed8-407f-ab44-bbf3caa3ca54", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

Title so you know why this was added.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183987, "Version": 1, "Guid": "91194b53-491d-4cff-9f7e-9d4335f16174", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183988, "Version": 1, "Guid": "6f22c773-321f-4e1b-bcd7-7fe37d12d25b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SettingsGeneric", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 183986, "Version": 2, "Guid": "957ec393-6088-406f-850c-d672fd030b57", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Settings - Generic" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183991, "Version": 1, "Guid": "f2084a14-006b-4b7b-9d78-f8b2b5ece02a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183992, "Version": 1, "Guid": "65d4e5d2-2ce4-46db-82e9-29e4936e1197", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "none" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "" } }, "Number": { "Rows": { "en-us": 10 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "9db5de57-7c16-4370-8d16-a8bf4cfe8e5b", "Name": "DataStorageDecorator", "Scope": "System.Decorators", "Metadata": [ { "Id": 184358, "Version": 2, "Guid": "da8be7d4-a851-401b-a102-538f833a2c7b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Data Storage Decorator (for Content-Type) BETA" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "9db5de57-7c16-4370-8d16-a8bf4cfe8e5b" } }, { "Id": 185416, "Version": 1, "Guid": "505d7505-2836-40d8-a43d-6616c09bd33d", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for Content Types" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "9db5de57-7c16-4370-8d16-a8bf4cfe8e5b" } } ], "Attributes": [ { "Name": "GroupSave", "Type": "Empty", "InputType": "empty-default", "IsTitle": true, "Metadata": [ { "Id": 184346, "Version": 1, "Guid": "30766961-07f7-4eb8-9606-bbc155a09a83", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Data Save / Store Settings BETA" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184351, "Version": 1, "Guid": "3964022d-fdcd-4f94-ae5a-3c0599fca5ea", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "StoreType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 184347, "Version": 1, "Guid": "efde2481-56d4-4ae3-bc92-dcb82309ef95", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Store Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184352, "Version": 1, "Guid": "33165ed1-ca4f-4d35-bf64-97c48d65087e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184353, "Version": 1, "Guid": "dd4ea4b3-438c-4718-932d-50d89c96220a", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":EAV (default)\neav:EAV\nsql:SQL (beta)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SaveIsDisabled", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184348, "Version": 1, "Guid": "d4c0ffa5-eabb-45c9-b831-82263b97e35f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Never Save" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184354, "Version": 1, "Guid": "cdc0d72b-f7db-479f-b24d-56f87383ecda", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Enable Save" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Never Save" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemsMax", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 184349, "Version": 1, "Guid": "353bef96-cd53-4006-8d9b-2275c8d1b6f7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Max Items" }, "Notes": { "en-us": "

Specify maximum amount of items expected. Default is -1 (infinite)

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184355, "Version": 1, "Guid": "337d489a-7370-4648-845c-d6f1f5e297ea", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 }, "Max": { "en-us": 99999999 }, "Min": { "en-us": -1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DataProcessingHandler", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184350, "Version": 5, "Guid": "252d083c-1c30-448f-84ac-22917b76c1fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Data Processing Handler" }, "Notes": { "en-us": "

.net class responsible for any special data processing before save, after save, etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184356, "Version": 1, "Guid": "42268f9b-4e3f-4f1f-aeac-9eafae0108b3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184357, "Version": 1, "Guid": "00ab0a0f-8100-4916-835e-df4aa06968b3", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185413, "Version": 3, "Guid": "6e22bac0-63b6-49f5-9bbd-2592683361db", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "a148a07e-7bd0-41ae-9911-a00583215ae5" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 185412, "Version": 4, "Guid": "a148a07e-7bd0-41ae-9911-a00583215ae5", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:AssemblyQualifiedName]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "FullName" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.DataProcessors" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: SysData DataProcessors" }, "Value": { "en-us": "FullName" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ], "Entities": [ { "Id": 182559, "Version": 5, "Guid": "5f49cf41-62b9-4d99-8642-59eece7ecdc2", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "

Get All System Capabilities - WIP, probably not used...

" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Default" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SystemCapabilities" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "System Capabilities" }, "Value": { "en-us": "NameId" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 182560, "Version": 1, "Guid": "6a7bcfb7-49c9-4567-83ce-304476de0437", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "9cf17242-8ad5-4a92-b93c-2e1bdde9ead9" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "5f49cf41-62b9-4d99-8642-59eece7ecdc2" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-fields-helpers.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula", "Scope": "System.Fields", "Metadata": [ { "Id": 120074, "Version": 13, "Guid": "ba7533db-4b2d-48fa-bbd1-56405b2f42a6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "Formula for a UI element" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

\n

Use Formulas to calculate values or settings like visibility of fields. See documentation.

\n

⚠️ Important: Do not edit the formulas here! ⚠️

\n

The formulas are stored here as simple data, but it's not the right place to edit them, unless you have to fix a formula that breaks your form. The right place to edit formulas is directly in the Edit Form.

" }, "Label": { "en-us": "UI Formula Σ" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "772dfff1-b236-4aa9-8359-5f53c08ff7bf" } } ], "Attributes": [ { "Name": "VarOverride", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 167710, "Version": 3, "Guid": "5996894a-ce5f-4ed7-94c8-e2486b44b5eb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "VarOverride" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "IsEphemeral": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167711, "Version": 2, "Guid": "c36ae328-ccdd-42a9-bfdc-aa6e02359b5c", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Keep fields locked, as you shouldn't edit it here" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "I need to make some manual changes" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageDontDoThisHere", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 183791, "Version": 4, "Guid": "a45cd222-800b-4dc0-ba4e-9c7929b38a15", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Don't edit this here" }, "Notes": { "en-us": "

⚠️ No seriously - you should not edit formulas here! ⚠️

\n

Please read the instructions above. It's much easier to edit formulas directly in the Edit UI.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3ec13b90-fcb4-489e-b94d-b22f644f3330" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 120063, "Version": 7, "Guid": "a5aca5c0-4e4f-41ff-b6f6-61d74d73c2ed", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

The title is auto-generated, but you can add more text if you need to

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "d04909fa-1c34-4b2f-93cc-b680a3a2b756", "a17611a7-e0d7-4340-a73c-7e0fee146ded" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 130243, "Version": 5, "Guid": "543dea87-6ebc-4bf4-9623-b801bf41ec1b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130244, "Version": 5, "Guid": "f158d3d7-d401-4e63-be40-0cfd25feeae6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "Target", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 120064, "Version": 16, "Guid": "6e0db16d-261c-43d7-a9af-9801d11ccbc0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Field.Value" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Target" }, "Notes": { "en-us": "

The target is what will be updated. Choose a value or type your own key in advanced cases. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "eee175b1-cd81-4e85-a813-5be709ac612a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 120067, "Version": 15, "Guid": "1d4a41de-2b2d-4dd3-8c90-10c12d6b76e6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 120068, "Version": 15, "Guid": "c3a1471f-4c34-4cad-baf1-325b04f91287", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Field.Value:Field Value\nField.Settings.Name:Name (Title) of the Field\nField.Settings.Notes:Notes / Help of the Field\nField.Settings.Visible:Visible (show the Field)\nField.Settings.Required:Required (must be filled in)\nField.Settings.Disabled:Disabled (blocked, can't be edited)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Formula", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 120065, "Version": 16, "Guid": "377a1d4e-5131-4ce4-904c-07ac0801fcf2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "v1(data, context) { return data.value; }" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Formula" }, "Notes": { "en-us": "

The formula - starting with v1(data, context) {...}.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1c6def89-b2bc-42bb-a63f-53d0e5658b39" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 120069, "Version": 15, "Guid": "17f5e665-ac5a-45d5-bb13-b2633302ef58", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 120070, "Version": 15, "Guid": "aef05229-76ff-4ae6-955b-4c5adaec58cb", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Enabled", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130126, "Version": 4, "Guid": "afe6ca1e-d1f8-4b2f-8c15-cbfa14fa7da8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Enabled" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130127, "Version": 3, "Guid": "72946d4a-7cdc-45c7-8038-627ed4af792b", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Disable Formula" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Enable Formula" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "VarShowNotes", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130129, "Version": 7, "Guid": "134a5c7d-a1bb-4c7f-a519-53d1b0dbf64d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show Notes" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "b1f61471-c6aa-4b7d-86a4-ca0d7eb3d526", "fc41eb73-7f0f-4507-8830-b487bc56c202" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "EnableExperimental": { "*": true }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130130, "Version": 5, "Guid": "27f21419-c0a3-4ca5-a9f9-000de0dc2554", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide notes" }, "TitleIndeterminate": { "*": "Show notes if it has any" }, "TitleTrue": { "*": "Show notes" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 120066, "Version": 7, "Guid": "db877d55-b910-415c-bfda-a474178c3727", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

Do not use this any more, please use notes instead. This will be removed ca. 2023.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9cffa304-1340-4531-83e5-ae01622ba0bb" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "EnableExperimental": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 120071, "Version": 6, "Guid": "6f952f1c-289e-4aba-afa8-30cdfd0ff756", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 120072, "Version": 6, "Guid": "1c339a04-2e98-4a54-b259-2c5ade275979", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" }, "WysiwygConfiguration": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 167712, "Version": 1, "Guid": "d04909fa-1c34-4b2f-93cc-b680a3a2b756", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\n return !data.VarOverride;\n});" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Field.Settings.Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130242, "Version": 12, "Guid": "a17611a7-e0d7-4340-a73c-7e0fee146ded", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) {\n const value = data.value;\n const separator = ':';\n const prefix = data.Target.replace('Field.Settings.', 'Setting ').replace('Field.Value', 'Value');\n const prefixLight = prefix + separator;\n const prefixFull = prefixLight + ' ';\n\n // Case 1: Empty or Whitespace only, use prefix\n if(value == '' || !/\\S/.test(value)) return prefix;\n\n // Case 2: Already contains prefix, possibly with separator, no additional text\n if(value == prefix || value == prefixLight || value == prefixFull) return prefix;\n\n // Case 3: Start with prefix and has more\n if(value.startsWith(prefixFull)) return value; \n\n // case 4: Start with prefix but separator is incomplete\n if(value.startsWith(prefixLight)) return value.replace(prefixLight, prefixFull);\n if(value.startsWith(prefix)) return value.replace(prefix, prefixFull); \n\n // case 5: No prefix yet, either missing or from previous setting\n const separatorPos = value.indexOf(separator);\n if(separatorPos == -1) return prefix;\n\n return prefix + value.substring(separatorPos); \n}" }, "Notes": { "*": "

This looks complicated, but it just ensures that the title is automatically set to better ensure people use the right target. 

" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: based on target" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130128, "Version": 6, "Guid": "eee175b1-cd81-4e85-a813-5be709ac612a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\r\n const enabled = data.Enabled && data.VarOverride;\r\n return !enabled;\r\n});" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Disabled" }, "Title": { "*": "Setting Disabled: Disable if not enabled" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130132, "Version": 7, "Guid": "1c6def89-b2bc-42bb-a63f-53d0e5658b39", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\r\n const enabled = data.Enabled && data.VarOverride;\r\n return !enabled;\r\n});" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Disabled" }, "Title": { "*": "Setting Disabled: Disable if formula is not enabled" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130131, "Version": 8, "Guid": "9cffa304-1340-4531-83e5-ae01622ba0bb", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) {\n return data.VarShowNotes;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if set to show or has content" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130247, "Version": 3, "Guid": "b1f61471-c6aa-4b7d-86a4-ca0d7eb3d526", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n\n // Init like this\n return data.Notes.length > 7; // min with p-tag\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: if wysiwyg has contents" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130248, "Version": 3, "Guid": "fc41eb73-7f0f-4507-8830-b487bc56c202", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !data.VarShowNotes; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: hide if true" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183792, "Version": 1, "Guid": "3ec13b90-fcb4-489e-b94d-b22f644f3330", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\n return data.VarOverride;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "ContentType-InputType", "Name": "ContentType-InputType", "Scope": "System.Fields", "Metadata": [ { "Id": 53701, "Version": 3, "Guid": "787d547a-85c0-485f-9f69-00570397e928", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Input type definition for a content-type" }, "EditInstructions": { "*": "

These objects must be attached to the content type to have an affect - so create them as metadata for a content type so they will be exported together with the content-type definition. 

\n

You only need to create this object for content-types which need extra configuration, so you won't find an input type in this list for every type which exists. 

" }, "Label": { "*": "Custom InputType Configuration" }, "ListInstructions": { "*": "

These objects must be attached to the content type to have an affect - so create them as metadata for a content type so they will be exported together with the content-type definition. 

\n

Note that the primary list for input-types is all global types with @ in front of the name, so you only need to create this object (as metadata) for content-types which need extra configuration. You won't find an input type in this list for every type which exists. 

" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "ContentType-InputType" } } ], "Attributes": [ { "Name": "Type", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45115, "Version": 1, "Guid": "49c736a3-4103-4556-a0f1-588b613f1ce2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Type" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Label", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45116, "Version": 1, "Guid": "55a65d8e-7978-4fdc-8394-405a2b006f97", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Label" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45117, "Version": 1, "Guid": "b106e124-b054-4c76-bd14-ab0e57d83a2a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Description" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AngularGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 53675, "Version": 2, "Guid": "3e4556ef-b52d-4080-a0ba-06a313320fd7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Angular Form Configuration" }, "Notes": { "*": "

These are settings which apply to 2sxc 10

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53677, "Version": 1, "Guid": "c5b45f7c-3e12-4b38-846e-ecaa097f9540", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "DisableI18n", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 52202, "Version": 3, "Guid": "11a0e6e2-c856-4a3d-86dd-572f477311b7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "false" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Disable Internationalization" }, "Notes": { "*": "

Don't allow this information to be translated - for example when the user presses translate-all

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 52203, "Version": 2, "Guid": "b669c659-8956-4fcc-a23e-f4b385994ca1", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AngularAssets", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 53676, "Version": 3, "Guid": "69d1698b-e8c5-4a80-b59a-a7dde42412dc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Assets" }, "Notes": { "*": "

These assets are only for the new Angular form in 2sxc 10.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53678, "Version": 2, "Guid": "9da27e0d-a5c5-49a8-9a65-cd12569939dc", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53679, "Version": 2, "Guid": "902ad7b8-de5d-465f-b1f9-836201aefa81", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 5 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "UseAdam", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 53686, "Version": 2, "Guid": "b9a18505-0bac-4579-8e17-7466a8882176", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "false" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Use ADAM" }, "Notes": { "*": "

When enabled, the various wrappers are ensured which provide ADAM functionality.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53687, "Version": 1, "Guid": "6dcf4ef3-3228-4f65-bd76-b475dc9d230a", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupSpecialConfig", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182568, "Version": 4, "Guid": "b9ecd6c9-4785-4c6a-9fda-0a0438c9b6b9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Custom Configuration of Input" }, "Notes": { "en-us": "

This will override the default behavior to determine which content-types are used to configure this input type (new v17).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182570, "Version": 3, "Guid": "f796d14c-996c-464b-b23c-984b8d90727d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ConfigTypes", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 182569, "Version": 5, "Guid": "6160ff26-0910-4649-860c-aae7dab1cd39", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Custom Configuration Types" }, "Notes": { "en-us": "

Select custom types to configure this input type.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182571, "Version": 4, "Guid": "995d4aef-97a3-4871-9b29-286fe701df17", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182572, "Version": 4, "Guid": "ec4933d4-2601-4642-a4f9-05a632a031b7", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "Scope=System.Fields" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "4a8eded3-727e-4990-b986-019d84b3d220", "Name": "RegExCheck", "Scope": "System.Fields", "Metadata": [ { "Id": 63410, "Version": 2, "Guid": "498f424b-db24-4a79-aab7-056ad5e410d6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Used to validate fields" }, "EditInstructions": { "*": "

Configur a regular expression check here. It will usually be used in JavaScript, so make sure your RegEx adheres to the JavaScript RegEx standard. You can develop/test your regex in online tools like the RegExr.

" }, "Label": { "*": "Regular Expression (BETA, not final)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "4a8eded3-727e-4990-b986-019d84b3d220" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 63407, "Version": 2, "Guid": "2e6fcfd2-9a79-4332-9c8b-e2722c6b63fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Test for ..." }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

Just a nice title for your convenience, so you know what this regex is for.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63411, "Version": 1, "Guid": "84e67299-b1cb-4713-935e-57e5d039df4c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63412, "Version": 1, "Guid": "ffc53071-f755-4296-ab7d-d596a926ec01", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "RegEx", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 63408, "Version": 3, "Guid": "c69b94bb-9421-425c-99be-806f03bc20ed", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "RegEx" }, "Notes": { "*": "

The Regular Expression in JS standard.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63413, "Version": 2, "Guid": "75d70f0e-9e16-4f18-bfff-971695cb6473", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63414, "Version": 2, "Guid": "957493e7-138b-43b7-8584-373b1054fedd", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 5 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Message", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 63409, "Version": 2, "Guid": "a1d9cc4f-ffb3-49af-8e1a-fb403984c7a9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Warning: field validation failed." }, "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "Message" }, "Notes": { "*": "

Message to show to the user if the expression fails.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63415, "Version": 1, "Guid": "3dd50a69-dc2b-4b7a-976e-aba713ff2ffa", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63416, "Version": 1, "Guid": "5720d287-635c-4297-86fd-de40f4f190df", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "*": "" }, "ButtonSource": { "*": "" }, "Dialog": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Invert", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 63417, "Version": 2, "Guid": "7bde51e5-b169-4da3-b09d-56d150f93a05", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Invert Result" }, "Notes": { "*": "

Normally an expression is ok, if the regex matches the value found. In some cases, you would rather say \"it shouldn't match the expression\" for blacklisting certain things. So if you want the expression to not match, then activate this toggle.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-fields-pickers.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "@number-dropdown", "Name": "@number-dropdown", "Scope": "System.Fields", "Metadata": [ { "Id": 131454, "Version": 3, "Guid": "bd087f79-838b-4bab-92fb-382bfd53113b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Dropdown-Number Input configuration" }, "DynamicChildrenField": { "*": "" }, "EditInstructions": { "*": "

Read about Number-Dropdown fields in the docs.

" }, "Label": { "*": "Dropdown (Number)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "https://docs.2sxc.org/basics/data/fields/number-dropdown.html" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@number-dropdown" } } ], "Attributes": [ { "Name": "DropdownValuesFormat", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 131460, "Version": 6, "Guid": "39a04bbe-ac2a-49e2-a3d6-c61b8308f5f1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "value-label" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Dropdown Values Format" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131461, "Version": 5, "Guid": "0b1b870d-be01-46df-929e-cb739d82f4a0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 131462, "Version": 5, "Guid": "c68320d9-3ff7-4bbe-a60f-0f71976cc5c4", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Old - first Labels, then Values:\nNew - first Values, then labels:value-label" }, "DropdownValuesFormat": { "*": "" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DropdownValues", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 131449, "Version": 2, "Guid": "5bd40264-ef9e-4eab-b093-b3b620e8ac63", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": ":Empty / no value\n42:The meaning of life and everything\n0.5625:Aspect ratio 16:9" }, "InputType": { "*": "string-default" }, "Name": { "*": "Values" }, "Notes": { "*": "

Type in the values, one per line and separate keys:values with a \":\".

\n

Example 1
\n(none):\n
\nLeft:l\n
\nRight:r\n
\nTop:t

\n

Example 2
\nMIT License:MIT
\nGUN Licnese:GNU
\nGPL-3 with mentioning of Author:GPL-3-BY

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131450, "Version": 2, "Guid": "ef9d3d36-afdd-4994-be14-701d42f175c3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 131451, "Version": 2, "Guid": "ad7b7c85-4eee-400e-beda-a30befb455e4", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } }, "Number": { "RowCount": { "*": 12 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableTextEntry", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 131452, "Version": 5, "Guid": "148087de-0e4a-4003-9909-ea4c548cfa74", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "false" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Enable Free Text" }, "Notes": { "*": "

Allow users to type other things than are in the drop-down. Two common situations for this:

\n
    \n
  • situations where the drop-down will suggest typical values, but others are also possible
  • \n
  • Situations where you need tokens like [Parameter:Category] which will later be resolved to a real value
  • \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131453, "Version": 4, "Guid": "8399706a-0a6c-4f58-b816-04a2272295f3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@Entity", "Name": "@Entity", "Scope": "System.Fields", "Metadata": [ { "Id": 52213, "Version": 1, "Guid": "80bb6bfa-7a46-4f2b-a453-27648807c9a9", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Entity UI Definitions" }, "EditInstructions": { "*": "

Entities / Relationships let the user pick other data. See wiki for more.

" }, "Label": { "*": "Entities or Relationships" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@Entity" } } ], "Attributes": [ { "Name": "EntityType", "Type": "String", "InputType": "string-picker", "IsTitle": true, "Metadata": [ { "Id": 41690, "Version": 10, "Guid": "e061de25-75e8-4408-bf19-397b72347fca", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Entity Type" }, "Notes": { "en-us": "

The type name of the entity to select. If empty, will return all entities (not usually a good idea).

If you are using a query, this can still be usefull if you want to enable the users to create new items, as this type would be used.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41696, "Version": 5, "Guid": "3f7376b2-03a6-42d0-bd21-7fc16c8e4d48", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41697, "Version": 1, "Guid": "5ba8c909-5716-45a0-8575-616f332655c5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 0 } } }, "Owner": "dnn:userid=1" }, { "Id": 45200, "Version": 4, "Guid": "8e5c63cb-aee2-4433-8139-e188ae15fa12", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.ContentTypes" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "" }, "Value": { "*": "Name" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 183980, "Version": 2, "Guid": "5348b0a9-0816-4e18-8512-f8a3bef47a5f", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "39620e8d-dce6-4d8b-90e8-4ac4ec4ddde1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupUiFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f786e83a-12b8-4c76-8593-cc84e385ff1b" } }, { "Name": "AllowMultiValue", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "faf06aa8-73cc-4cb0-baa5-da7a9e5d2203" } }, { "Name": "EnableEdit", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f09fbd6a-ba83-4023-a5b4-b82b6ef7e9ff" } }, { "Name": "EnableCreate", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "916b17c1-f15d-4414-80e5-6d53b27ff463" } }, { "Name": "EnableAddExisting", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0fc6d925-77df-4ccc-80dd-5d9ddaf003c9" } }, { "Name": "EnableRemove", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "9f51cb28-eab4-4eb6-9b44-6246b55a7a52" } }, { "Name": "EnableDelete", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "4274d627-fc80-412e-ad34-fa9ed21c6ba6" } }, { "Name": "GroupExperimental", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 128428, "Version": 5, "Guid": "487df46d-3ec2-4d53-87a7-c0e02a182340", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Experimental / Beta Features" }, "Notes": { "en-us": "

These features are not final, so you should only use them with caution and the way they are configured may still change. 

\n

We recommend that you use the entity-picker and that prefill instead. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "27ffdc8c-2054-4ec0-a4f6-14517d27b71c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 128429, "Version": 3, "Guid": "a1db0df3-753a-4d72-888a-a99c53105b48", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Prefill", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 128425, "Version": 3, "Guid": "fac91655-1777-4775-bdea-16b0c71e3ab6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Prefill (Beta)" }, "Notes": { "*": "

This is still a beta feature. Goal is that you can specify prefill-values for new entities generated through this. It's not documented, since it's still WIP and may change as we complete the implementation. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 128426, "Version": 2, "Guid": "56b5211c-7067-4da2-a4f3-f308ebcd0311", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 128427, "Version": 2, "Guid": "b649b222-9167-4b3a-961b-35b48c6d18c1", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 5 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183979, "Version": 2, "Guid": "39620e8d-dce6-4d8b-90e8-4ac4ec4ddde1", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "

Scope [Item:Scope] - internal ID ([Item:NameId]) 

" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Entities - Content Types" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184083, "Version": 2, "Guid": "27ffdc8c-2054-4ec0-a4f6-14517d27b71c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return context.debug;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@entity-default", "Name": "@entity-default", "Scope": "System.Fields", "Metadata": [ { "Id": 52207, "Version": 2, "Guid": "a71a80c1-1c62-40f7-a0d6-7dac593d9bb4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "to choose one or more content items preserving the sorting-order" }, "EditInstructions": { "*": "" }, "Label": { "*": "Item/Entity Picker (default)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-default" } }, { "Id": 52208, "Version": 2, "Guid": "b4c4b321-1611-40cf-a1d8-b818f0076c39", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "Description": { "en-us": "standard single/multiple entity/item picker" }, "Label": { "en-us": "Entity / Item picker" }, "Type": { "en-us": "entity-default" } }, "Boolean": { "DisableI18n": { "en-us": true }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-default" } }, { "Id": 136790, "Version": 1, "Guid": "c37e8485-69e6-4811-b6c6-6c93e91c8ca0", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-default" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@entity-query", "Name": "@entity-query", "Scope": "System.Fields", "Metadata": [ { "Id": 52212, "Version": 2, "Guid": "c17b1bb9-7715-4eae-a8a3-18e0d110ce61", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "entity-picker with query configuration" }, "EditInstructions": { "*": "

In addition to the primary type, you can also use a query. This allows you to use different criterias for pre-filtering the data you want to allow, or to provide data from other apps. You can read more about this in the wiki.

\n

Note that this is especially useful to select data from a query, where you want to save a relationship (like blog-post / tag, book/author, etc.). If you want to store a text-value, like a field-name, a value from SQL etc. you want to use the string-dropdown-query instead. 

" }, "Label": { "*": "Query based item-picker" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "https://github.com/2sic/2sxc/wiki/ui-field-entity-query" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-query" } }, { "Id": 52214, "Version": 3, "Guid": "099ad0ba-f521-410b-a072-525d1acf5241", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "Description": { "en-us": "Select items/relationships based on visual queries." }, "Label": { "en-us": "Query based entity/item-picker" }, "Type": { "en-us": "entity-query" } }, "Boolean": { "DisableI18n": { "en-us": true }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-query" } } ], "Attributes": [ { "Name": "Query", "Type": "String", "InputType": "string-picker", "IsTitle": true, "SysSettings": { "InheritMetadataOf": "1454db62-f29f-4471-b2a5-5bd82817580a" } }, { "Name": "GroupMore", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130150, "Version": 2, "Guid": "6ef796d0-8010-4920-9b9e-4421aba4c80d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "More Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8a7291bf-a93f-42be-be4d-eec4f53d4363" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130152, "Version": 1, "Guid": "580371d2-aa02-4a14-8f71-17e6c6e45297", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "StreamName", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "cb87841b-d687-43ab-be67-cdb810a69e3a" } }, { "Name": "UrlParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41705, "Version": 5, "Guid": "0981c811-b101-424e-a2af-fc3d89796810", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Parameters" }, "Notes": { "*": "

If your query needs additional parameters in the URL, you can specify them here, in the same syntax as a url. For advanced scenarios you can also use field-names of this content-item to use as a query parameter.

Examples

\n
    \n
  • Category=27
  • \n
  • Category=[Category]
  • \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41707, "Version": 4, "Guid": "cdc65456-1b61-4741-8bb7-6064ce1cff19", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41708, "Version": 4, "Guid": "3f8eb44f-334b-4d07-b11c-2530a76bcb8d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 130151, "Version": 3, "Guid": "8a7291bf-a93f-42be-be4d-eec4f53d4363", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.Query; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show once Query is selected" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@string-dropdown", "Name": "@string-dropdown", "Scope": "System.Fields", "Metadata": [ { "Id": 53709, "Version": 3, "Guid": "b0842c64-6260-4269-b891-0bc6e282b41e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Dropdown string-input configuration" }, "DynamicChildrenField": { "*": "" }, "EditInstructions": { "*": "

For more details about the dropdowns, see docs.

" }, "Label": { "*": "Dropdown (String/Text)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "https://docs.2sxc.org/basics/data/fields/string-dropdown.html" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-dropdown" } }, { "Id": 136472, "Version": 1, "Guid": "7ddb0beb-84de-45db-95c8-acd513d5bf50", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-dropdown" } } ], "Attributes": [ { "Name": "DropdownValuesFormat", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 131457, "Version": 7, "Guid": "b50acc96-b176-4fbf-a631-bf36050ff69d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Dropdown Values Format" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "60e5fb78-89eb-4b3e-9104-3c3050f98cd8" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131458, "Version": 6, "Guid": "8baaa324-e53d-4e13-b07c-11d52bfb8705", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 131459, "Version": 6, "Guid": "3b4c9db6-44d6-4a47-a814-60e339c448e0", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Old - first Labels, then Values\nvalue-label:New - first Values, then labels (recommended)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DropdownValues", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41667, "Version": 5, "Guid": "5bd40264-ef9e-4eab-b093-b3b620e8ac63", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Simple Value\nAnother Value\nl:Left (will store an l)\nr:Right (will store an r)\nc:Center (... c)\nm:Middle\nrandom:Random value\nMIT:MIT License" }, "InputType": { "*": "string-default" }, "Name": { "*": "Values" }, "Notes": { "*": "

Type in the values, one per line and separate values and labels with a \":\".- see docs.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41668, "Version": 5, "Guid": "ef9d3d36-afdd-4994-be14-701d42f175c3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41669, "Version": 5, "Guid": "ad7b7c85-4eee-400e-beda-a30befb455e4", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } }, "Number": { "RowCount": { "*": 12 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EnableTextEntry", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41679, "Version": 5, "Guid": "148087de-0e4a-4003-9909-ea4c548cfa74", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "false" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Enable Free Text" }, "Notes": { "*": "

Allow users to type other things than are in the drop-down. Two common situations for this:

\n
    \n
  • situations where the drop-down will suggest typical values, but others are also possible
  • \n
  • Situations where you need tokens like [Parameter:Category] which will later be resolved to a real value
  • \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41682, "Version": 4, "Guid": "8399706a-0a6c-4f58-b816-04a2272295f3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 131469, "Version": 2, "Guid": "60e5fb78-89eb-4b3e-9104-3c3050f98cd8", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n \n // on new entities - set it to the new mode\n if(context.target.entity.id == 0) return 'value-label';\n return data.value;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query", "Scope": "System.Fields", "Metadata": [ { "Id": 53710, "Version": 7, "Guid": "b9f7c48b-620f-40e3-9bb3-557e1b812d96", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Dropdown which receives data from a query" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure a dropdown which receives the options from a Visual Query.

\n

Since this is a string-field, it will store the resulting data as a string, not as a relationship.

\n

Note that this is especially useful to select data from a query, where you want to save a text-value (like a field-name, a value from SQL etc.). If you want to store a real relationship, you should use the entity-query field instead. 

" }, "Label": { "en-us": "Dropdown from Query" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-dropdown-query" } }, { "Id": 183695, "Version": 3, "Guid": "3c274d21-241c-4700-ad1a-97485aa191db", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "ConfigTypes": { "en-us": "@All,@string-dropdown-query" }, "Description": { "en-us": "" }, "Label": { "en-us": "String Dropdown from Query" }, "Type": { "en-us": "@string-dropdown-query" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-dropdown-query" } } ], "Attributes": [ { "Name": "Query", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": true, "Metadata": [ { "Id": 41724, "Version": 14, "Guid": "ef0df2c9-dd1f-4ac9-b8db-e5edd3edc3e3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Query" }, "Notes": { "*": "

Pick the query which would be used to prepare the items a user can select. For very advanced scenarios you can also manually enter a special query.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41725, "Version": 8, "Guid": "595aa647-1ee4-4c5e-a22c-0cb8de96b66a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41726, "Version": 1, "Guid": "eb69a6f3-ebe7-44c7-a3fd-662bf06bce52", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 42996, "Version": 7, "Guid": "bdae88ba-d326-4b1c-b372-a3ba4e3be98d", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.Queries" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "" }, "Value": { "*": "Name" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupMore", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130146, "Version": 3, "Guid": "d62db9a1-e313-451b-a4e2-e169b2307d0d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "More Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "d84e7112-a89e-42d9-b966-a42af0cc077d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130147, "Version": 2, "Guid": "148d7ed3-ebd6-4238-a2f0-788ff848f256", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "StreamName", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 42362, "Version": 5, "Guid": "83c25fc7-bf80-469f-8702-af1693158180", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Default" }, "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Stream Name" }, "Notes": { "*": "

The Out-stream name on the query, usually \"Default\"

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42363, "Version": 3, "Guid": "82b74d03-5fd8-42b1-8d38-e3a0ffb7a54c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 42364, "Version": 1, "Guid": "b7350212-ea1b-4c3a-adaa-9fc38d650265", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43002, "Version": 2, "Guid": "008cc69c-bd91-4143-911a-b6cd3811f74c", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "*": "Name" }, "Query": { "*": "System.QueryInfo" }, "Separator": { "*": "," }, "StreamName": { "*": "Default" }, "UrlParameters": { "*": "QueryName=[Query]&StreamName=Default" }, "Value": { "*": "Name" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableEdit": { "*": false }, "EnableRemove": { "*": true }, "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Value", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 41712, "Version": 20, "Guid": "d872b7c1-8902-4794-8bc1-65eb86855a20", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Value Field" }, "Notes": { "en-us": "

The field of the items which will be stored as a value.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41717, "Version": 15, "Guid": "18df3c8c-e0c3-4245-a21d-54282e4f4d0b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41718, "Version": 3, "Guid": "9066a099-8063-4b0c-b386-2be00c737a57", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43000, "Version": 13, "Guid": "a0b1a1dc-8878-49a6-b681-6505bfd3beb3", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Attributes" }, "UrlParameters": { "en-us": "QueryName=[Query]&StreamName=[StreamName]" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Label", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 41713, "Version": 16, "Guid": "5416a76a-99b7-4894-87c5-57e7b2834bc1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Label Field" }, "Notes": { "en-us": "The field which will be shown in the dropdown as the visible field for the user to select." }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41719, "Version": 14, "Guid": "6088d6bb-0e91-4c32-9fe0-3e17bf458e74", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41720, "Version": 4, "Guid": "3c39c80a-7d41-41c4-85c4-a622b546dbba", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43001, "Version": 10, "Guid": "e23af53c-5b93-4dff-be00-26679e7387d8", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "Query": { "en-us": "System.QueryInfo" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Attributes" }, "UrlParameters": { "en-us": "QueryName=[Query]&StreamName=[StreamName]" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "MoreFields", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 169126, "Version": 16, "Guid": "b021c034-f018-4709-9ec0-99ad2d576f4f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "More Fields to retrieve (beta 15.04)" }, "Notes": { "en-us": "

Additional fields can be used for tooltip, help or information.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "820ca909-c0d5-4905-9ba0-c0bc2ea8e506" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169127, "Version": 5, "Guid": "ee679ab9-5f1f-4d64-a6b8-83c7b6de9719", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169128, "Version": 5, "Guid": "e0fca792-aacc-47ef-8059-ad9f8536dee8", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "QueryName=[Query]&StreamName=[StreamName]" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 42570, "Version": 5, "Guid": "f5cf7114-8285-4f91-9ac3-528e1ecd1429", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Advanced settings" }, "Notes": { "*": "In this section you can configure fairly advanced settings - use with care :)" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "33ca2eb9-b63c-48b5-bd81-ff32572e1ce1", "69cfc215-79f1-44ce-9e73-4c4e0b3e9694" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42571, "Version": 4, "Guid": "44ebf48e-27af-4925-b870-685814c03f5b", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "UrlParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41711, "Version": 3, "Guid": "051c2733-e788-4abf-8b70-b2a4b3bc92a6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Parameters" }, "Notes": { "*": "

If your query needs additional parameters in the URL, you can specify them here, in the same syntax as a url. For advanced scenarios you can also use field-names of this content-item to use as a query parameter.

Examples

\n
    \n
  • Category=27
  • \n
  • Category=[Category]
  • \n
" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41715, "Version": 2, "Guid": "aa200ed5-1ae1-43a9-a27f-71795abe2095", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41716, "Version": 2, "Guid": "ba52761a-4821-4852-9d5d-a4a081c311d7", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EnableTextEntry", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "c5825717-9c58-46d8-bafb-2bd8b3c2ec11" } }, { "Name": "GroupUiFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 56931, "Version": 5, "Guid": "2688bd00-2751-4025-94bd-dd7f76f4f716", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "UI Features of the Entity Picker" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "d25b73e0-faeb-454a-88e4-d929ba4abbb0", "a30c6445-4f7a-4f3f-8602-be7cd690f9a7" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 56934, "Version": 4, "Guid": "24468710-9391-4210-9032-a7e5c3376cec", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EnableEdit", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f09fbd6a-ba83-4023-a5b4-b82b6ef7e9ff" } }, { "Name": "EnableRemove", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "9f51cb28-eab4-4eb6-9b44-6246b55a7a52" } }, { "Name": "GroupMultiSelect", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 42568, "Version": 5, "Guid": "9756cd4e-5078-4276-873d-b96d1a00ba2b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Multi-Select Options" }, "Notes": { "*": "Use these if you want to enable selecting multiple items" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3ee655c2-17ec-4c7c-99d9-17e265fb2a07", "5a5ab2d8-4b48-4b20-9323-fe2ac96d45a3" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42569, "Version": 4, "Guid": "32845684-2e3b-40a1-8140-fb2cc76b7613", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AllowMultiValue", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "faf06aa8-73cc-4cb0-baa5-da7a9e5d2203" } }, { "Name": "Separator", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 42562, "Version": 7, "Guid": "2671d0ea-9743-4503-920f-75470645dc9c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "," }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Separator" }, "Notes": { "en-us": "

If you want to support selecting multiple items, you'll need something to keep them separate. We recommend a comma, but maybe you want something different.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42563, "Version": 5, "Guid": "160b7a1c-33db-46f1-a1b3-ef9892d30ec2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 42564, "Version": 2, "Guid": "4a5500f2-d9ba-4ec6-9d8a-d7ccc0d67130", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 43003, "Version": 3, "Guid": "dcecf7b1-4dbe-487c-ba0d-386da72b81d1", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ",\n|\n-" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 130148, "Version": 3, "Guid": "d84e7112-a89e-42d9-b966-a42af0cc077d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.Query; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show once query is selected" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169144, "Version": 2, "Guid": "820ca909-c0d5-4905-9ba0-c0bc2ea8e506", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return context.debug; });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130140, "Version": 3, "Guid": "33ca2eb9-b63c-48b5-bd81-ff32572e1ce1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n return !!data.Query && !!data.StreamName;\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if query not set" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130425, "Version": 2, "Guid": "69cfc215-79f1-44ce-9e73-4c4e0b3e9694", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.default + (data.UrlParameters ? ' ✅ (' + data.UrlParameters + ')' : ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Show if something is configured" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130141, "Version": 4, "Guid": "d25b73e0-faeb-454a-88e4-d929ba4abbb0", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.Query && !!data.StreamName; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if query missing" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130427, "Version": 1, "Guid": "a30c6445-4f7a-4f3f-8602-be7cd690f9a7", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.default + (data.EnableEdit || data.EnableRemove ? ' ✅' : ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130142, "Version": 3, "Guid": "3ee655c2-17ec-4c7c-99d9-17e265fb2a07", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return !!data.Query && !!data.StreamName; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if query missing" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130426, "Version": 2, "Guid": "5a5ab2d8-4b48-4b20-9323-fe2ac96d45a3", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.default + (data.AllowMultiValue ? ' ✅' : ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: if enabled" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@string-font-icon-picker", "Name": "@string-font-icon-picker", "Scope": "System.Fields", "Metadata": [ { "Id": 53711, "Version": 1, "Guid": "1b956963-9c77-4c80-b525-60303138a108", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure a font-icon picker" }, "EditInstructions": { "*": "" }, "Label": { "*": "Font-Icon Picker" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-font-icon-picker" } } ], "Attributes": [ { "Name": "CssPrefix", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41670, "Version": 3, "Guid": "239d85c3-9d9c-43a5-963b-64188158b165", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": ".icon-sxc" }, "InputType": { "*": "string-default" }, "Name": { "*": "Css Prefix" }, "Notes": { "*": "

The beginning of the CSS-information used to identify an icon - is used to find all classes that start with this. Common examples are \".icon-something-\"). find out more on 2sxc.org/help?tag=font-icon

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41671, "Version": 3, "Guid": "24e3cb2c-7c34-4da8-9ce7-66af403df526", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 77268, "Version": 1, "Guid": "a2308d31-ad20-4a4c-b790-af298a4699a1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PreviewCss", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41672, "Version": 3, "Guid": "a530f53e-b6fb-4804-b486-7c09116d86ab", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Preview Css Classes" }, "Notes": { "*": "

Additional CSS classes to apply to the preview tags. Leave blank for modern solutions like fontello, add the appropriate additonal classes like \"fa\" for font-awesome or \"glyphicons\" for glyphicons. find out more on 2sxc.org/help?tag=font-icon

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41673, "Version": 3, "Guid": "facbd263-8640-43cf-8e2d-33883b6e2b8a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 77269, "Version": 1, "Guid": "8bf516fb-16c3-4d6e-9775-849ffaf5321d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Files", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41674, "Version": 5, "Guid": "c3d8fa4a-46d8-4df4-b7f6-7a14a4f0c029", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "[App:Path]/dist/custom-icons.css" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Files" }, "Notes": { "en-us": "

Files to load in this dialog - usually the list of CSS-files which would contain icon-definitions. You can also use the placeholder [App:Path] to inject the app, path, like [App:Path]/dist/custom-icons.css.

\n

Remember that these styles will also affect the styling of the entire form, so try to include files which only include the icon-definitions. You could also create separate icon-definition files just for this icon picker.  find out more on 2sxc.org/help?tag=font-icon

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41675, "Version": 5, "Guid": "df180d90-cb2b-49aa-99a3-ac05f2c14790", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": -1 } } }, "Owner": "dnn:userid=1" }, { "Id": 77270, "Version": 3, "Guid": "c8fcf7b4-e274-49a5-9296-f95a38c9d0a1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowPrefix", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 77271, "Version": 3, "Guid": "4d22a34d-58af-4773-bbb3-c435478f595d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Show Prefix" }, "Notes": { "*": "

Show or hide the prefix in the dropdown (like fa- in font-awesome)

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77272, "Version": 2, "Guid": "5746d2c1-cc44-4852-816e-5b3b38c4320b", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Icon prefix is hidden" }, "TitleIndeterminate": { "*": "Icon prefix is default (hidden)" }, "TitleTrue": { "*": "Icon prefix is visible" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "88d60bbc-cc2a-4ef8-b430-ed41e3012240", "Name": "UiPickerSourceCustomList", "Scope": "System.Fields", "Metadata": [ { "Id": 182278, "Version": 1, "Guid": "0a97d73c-3fa8-4536-8d9d-01a78f407622", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Create a custom list of values to pick from, optionally with a different label.

" }, "Label": { "en-us": "UI Picker Source - Custom List of Values" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "88d60bbc-cc2a-4ef8-b430-ed41e3012240" } }, { "Id": 183925, "Version": 1, "Guid": "93e2a4c2-d2df-4c99-97b9-591b15e21346", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "88d60bbc-cc2a-4ef8-b430-ed41e3012240" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182272, "Version": 2, "Guid": "4180a3c2-b1c1-45bd-b03f-b52c7035df8b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "List of Values for Picker" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

Just a name so you can identify this picker source if you ever want to re-use it.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182274, "Version": 1, "Guid": "ff99123e-0d78-49ef-a0c3-b702196e4322", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182275, "Version": 1, "Guid": "e6224e79-15ec-46dc-860e-ef7dd0c852a3", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupDescriptionEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ee7ba734-558a-4362-85a5-8ee9421b6118" } }, { "Name": "Values", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182273, "Version": 3, "Guid": "3e867069-68e0-4043-9297-0342592d5baa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Value without extra label\nl:Left (will store an l)\nr:Right (will store an r)\nc:Center (... c)\nm:Middle\n27:Twenty Seven\nrandom:Random value\nMIT:MIT License" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Values" }, "Notes": { "en-us": "

Type in the values, one per line and separate values and labels with a \":\".- see docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182276, "Version": 2, "Guid": "4a3a6cc6-a550-4828-acdd-cf9853838a21", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182277, "Version": 2, "Guid": "d66b7475-2391-4565-92ff-c9e065d3bb7f", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "MessageItemString", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 183854, "Version": 2, "Guid": "07155dba-0fb7-4bf6-8017-3fbdd3813049", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MessageItemString" }, "Notes": { "en-us": "

For custom lists such as this one, the placeholders you can use are limited to the following:

\n
    \n
  • [Item:Value]
  • \n
  • [Item:Title]
  • \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupHelpMessageUnlicensed", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "effab828-3273-497a-a7af-b93741fa25d5" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [] }, { "ContentType": { "Id": "f11f79a2-186b-49ec-89d6-be260698e371", "Name": "UiPickerSourceEntity", "Scope": "System.Fields", "Metadata": [ { "Id": 182309, "Version": 2, "Guid": "094a53b8-194c-4b6c-a076-89f883069af4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Pick entities of a specific type.

" }, "Label": { "en-us": "UI Picker Source - Entities" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "f11f79a2-186b-49ec-89d6-be260698e371" } }, { "Id": 183926, "Version": 1, "Guid": "c4758063-0042-4f86-a3b5-ceb81d2bdea7", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "f11f79a2-186b-49ec-89d6-be260698e371" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182310, "Version": 2, "Guid": "4c9d8eb7-248c-48e2-9bb7-c0e4860a0e04", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Picker Source - Entity" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

A title for you to identify this configuration in case you want to reuse it. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182311, "Version": 1, "Guid": "d59fddb3-2ab0-4701-bb54-46df0dd5dca7", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182312, "Version": 1, "Guid": "3a34dd00-ccc1-47d0-81e7-593f78d56b14", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupSettings", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183731, "Version": 3, "Guid": "6c2a9dcd-553d-4cda-a4e7-7d987ada542b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "111ec6b8-449d-4dcb-ba53-4ca19a3a71f2" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183732, "Version": 1, "Guid": "ce269ec9-6aec-4b1b-a3dd-07208d237dbc", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeNames", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 182565, "Version": 10, "Guid": "4bedd5b6-2746-481f-b87b-b5eab5bf8915", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Content Types" }, "Notes": { "en-us": "

One or more Content-Types to retrieve from the backend.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182566, "Version": 5, "Guid": "6a0fdee0-5cc0-45c4-8e69-aabffd833083", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182567, "Version": 5, "Guid": "a9dbc986-5ccd-453b-8f97-4d7ca812611c", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "NameId" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183981, "Version": 3, "Guid": "bb1f88da-de95-458d-934a-b186bcd3dec3", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "39620e8d-dce6-4d8b-90e8-4ac4ec4ddde1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Number": { "AllowMultiMin": { "en-us": 1 } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183741, "Version": 4, "Guid": "b35c7951-5585-4ee4-95da-3d52363f9f34", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1734005c-1a57-4fa5-9113-73b5543bf6f6" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183750, "Version": 2, "Guid": "ad93d564-782e-4c34-9cc4-18bbcec5c017", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CreateTypes", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "3329843f-be88-47d2-a2c1-3c16724081d7" } }, { "Name": "Value", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183742, "Version": 8, "Guid": "cbaca63b-3042-48ed-b775-e144a3e39b89", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Guid" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Value" }, "Notes": { "en-us": "

The field of the items which will be stored as a value.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183746, "Version": 6, "Guid": "ee24debb-8866-4141-9b2e-8d3ac5045b33", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "0ff39e34-cee6-4ac1-b188-d6fbc6f0952d" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Label", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183743, "Version": 5, "Guid": "44b2d850-5573-4fd3-8208-27e1b715c7c6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Title" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Label" }, "Notes": { "en-us": "

The field which will be shown in the dropdown as the visible field for the user to select.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183747, "Version": 3, "Guid": "cb82336a-0162-4418-a86c-a9eaf31afe3d", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "0ff39e34-cee6-4ac1-b188-d6fbc6f0952d" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MoreFields", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183692, "Version": 5, "Guid": "b3a09f61-9df3-4bae-a8e1-cef9cd07b89e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "More Fields" }, "Notes": { "en-us": "

Additional fields can be used for tooltip, help or information.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183693, "Version": 1, "Guid": "280a6f1f-5be9-4292-ab72-e2d819fc8279", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183748, "Version": 1, "Guid": "8d2ce3c6-21d6-4b29-9f41-b9f4eb425e48", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "0ff39e34-cee6-4ac1-b188-d6fbc6f0952d" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "GroupHelpMessageUnlicensed", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "effab828-3273-497a-a7af-b93741fa25d5" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [ { "Id": 183733, "Version": 3, "Guid": "111ec6b8-449d-4dcb-ba53-4ca19a3a71f2", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !!data.Title; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183749, "Version": 1, "Guid": "1734005c-1a57-4fa5-9113-73b5543bf6f6", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !!data.ContentTypeNames; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183744, "Version": 3, "Guid": "0ff39e34-cee6-4ac1-b188-d6fbc6f0952d", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "

Will get the attributes for an Entity Picker.

" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Attributes" }, "QueryParameters": { "en-us": "ContentTypeName=[ContentTypeNames]" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Attributes for EntityPicker" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "Scope": "System.Fields", "Metadata": [ { "Id": 182308, "Version": 1, "Guid": "67bd7eba-2ba9-4a8f-a505-58c0a2acb707", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure what query to use to get values to pick from.

" }, "Label": { "en-us": "UI Picker Source - Query" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5f8e3968-e02b-40d5-ab77-f60c2e73d244" } }, { "Id": 183927, "Version": 1, "Guid": "58e60d38-d414-4658-accb-7c9466f52112", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5f8e3968-e02b-40d5-ab77-f60c2e73d244" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182279, "Version": 2, "Guid": "2cf607d1-1da7-4bc7-9c7f-7f1fb4fa2846", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Data from Query" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

A title to identify this configuration, in case you want to reuse it.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182306, "Version": 1, "Guid": "239def94-12ac-4d8d-b2fb-a1f7ecdad607", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182307, "Version": 1, "Guid": "20e3cebd-da40-499f-91ef-917e90850877", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupDescriptionEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ee7ba734-558a-4362-85a5-8ee9421b6118" } }, { "Name": "Query", "Guid": "1454db62-f29f-4471-b2a5-5bd82817580a", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182280, "Version": 4, "Guid": "578596e0-a154-4f72-925a-017e46d20d16", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Query" }, "Notes": { "en-us": "

Pick the query which would be used to prepare the items a user can select. For very advanced scenarios you can also manually enter a special query.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182291, "Version": 1, "Guid": "dd93df45-8aff-4c02-ab4c-8114c9b2c78c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182292, "Version": 1, "Guid": "c37ee3ca-4986-457f-b7d4-b6efc6a185a9", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Queries" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183974, "Version": 1, "Guid": "d2aa9ceb-d0c6-4b90-b306-051cc4d26021", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "b96f7282-a854-4fa1-a091-9d18406bd2f9" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupMore", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182281, "Version": 3, "Guid": "6598c731-836d-4e84-a957-f1fc22bb8442", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "More Settings eg. Different Value or Label" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1a4863ce-fbb2-4c0b-a231-7ac719a619d8" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182293, "Version": 1, "Guid": "c554a575-5e05-4430-9838-ba7863256ae0", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "StreamName", "Guid": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182282, "Version": 6, "Guid": "6025db5b-75e4-491f-9045-55224f31c6e8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Default" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "StreamName" }, "Notes": { "en-us": "

The Out-stream name on the query, usually \"Default\"

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182294, "Version": 2, "Guid": "e1ac07ed-0396-4fa1-b99c-184efae2361b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182295, "Version": 3, "Guid": "9d2ac197-62c4-4204-9c1b-bf0b0640ab43", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "QueryName=[Query]&StreamName=Default" }, "Value": { "en-us": "Name" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183978, "Version": 1, "Guid": "ecebbf4b-456b-435b-a805-2b3d0af8bf0b", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "eeaf0098-2cf7-4201-bb1d-a405717e9752" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Value", "Guid": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182283, "Version": 8, "Guid": "02109e16-a6ae-485f-ac61-81ac334cf81c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Value Field" }, "Notes": { "en-us": "

The field of the items which will be stored as a value.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182296, "Version": 2, "Guid": "1f2555e7-4af1-45d9-8219-91e4ae469066", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183968, "Version": 1, "Guid": "d2f6e7f4-1ff9-44a0-babd-fee419272d5e", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "839f7aef-a5f2-4fa2-8065-30eb78e267ac" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Label", "Guid": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182284, "Version": 6, "Guid": "249b749f-ffe7-4448-b72e-5dca775fc828", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Label Field" }, "Notes": { "en-us": "

The field which will be shown in the dropdown as the visible field for the user to select.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182298, "Version": 2, "Guid": "7f0cd9b5-a673-444b-b203-6ec668be0048", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183969, "Version": 1, "Guid": "c101c26e-b759-4256-987b-c6a712b8106f", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "839f7aef-a5f2-4fa2-8065-30eb78e267ac" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MoreFields", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 182285, "Version": 8, "Guid": "903997e4-8cdd-4503-8f3d-89546aef391f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "*": "string-picker" }, "Name": { "en-us": "More Fields to retrieve" }, "Notes": { "en-us": "

Additional fields can be used for tooltip, help or information.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182300, "Version": 2, "Guid": "0b254a51-48b0-45ed-bf93-3a720d00b112", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183970, "Version": 1, "Guid": "dd1992f9-a98d-4e6d-9502-40466cc023b4", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "839f7aef-a5f2-4fa2-8065-30eb78e267ac" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182286, "Version": 4, "Guid": "a9b8afcd-5819-4c26-aeb4-34b91fcc73c1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "2c7c12f3-70a5-461b-b17d-b56211ec0dfc", "f8a03d2b-9396-4f89-8111-e845946bee22" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183738, "Version": 1, "Guid": "1f5c321b-39ae-47b6-9780-5f213c55f723", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "QueryParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182287, "Version": 1, "Guid": "3dbff41e-7b12-4ffb-a83f-2ec9a440d9db", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "QueryParameters" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CreateTypes", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "3329843f-be88-47d2-a2c1-3c16724081d7" } }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "GroupHelpMessageUnlicensed", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "effab828-3273-497a-a7af-b93741fa25d5" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [ { "Id": 183972, "Version": 1, "Guid": "b96f7282-a854-4fa1-a091-9d18406bd2f9", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "

[Item:Title]

" }, "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Queries" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query - Query Picker" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182304, "Version": 1, "Guid": "1a4863ce-fbb2-4c0b-a231-7ac719a619d8", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return !!data.Query; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183975, "Version": 5, "Guid": "eeaf0098-2cf7-4201-bb1d-a405717e9752", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "QueryParameters": { "en-us": "QueryName=[Query]&StreamName=Default&[QueryParameters]" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query - StreamName" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183964, "Version": 5, "Guid": "839f7aef-a5f2-4fa2-8065-30eb78e267ac", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "

[Item:Description]

" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "QueryParameters": { "en-us": "QueryName=[Query]&StreamName=[StreamName]&[QueryParameters]" }, "StreamName": { "en-us": "Attributes" }, "Title": { "en-us": "Attributes for System.Query using QueryInfo" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183976, "Version": 3, "Guid": "2c7c12f3-70a5-461b-b17d-b56211ec0dfc", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const params = data.QueryParameters;\n return data.default + (params ? ' ✅ (' + params + ')' : '');\n})" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182305, "Version": 2, "Guid": "f8a03d2b-9396-4f89-8111-e845946bee22", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !!data.Query && !!data.StreamName; });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "6fa7f390-7612-40c6-baff-2bcf6140a85f", "Name": "@entity-picker", "Scope": "System.Fields", "Metadata": [ { "Id": 182380, "Version": 10, "Guid": "cf832332-5f70-40af-ad1f-4399f294ac42", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure a Item (Entity) Picker. This is a new concept which is still in BETA ⚠️, so it may still change a bit. 

\n

The core idea is that you separate the UI (this configuration) from the Source Definition (see Source below). The Source can be reused in other pickers, and it allows many more features then were possible before. 

" }, "Label": { "en-us": "Data Picker for Entity Field" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "6fa7f390-7612-40c6-baff-2bcf6140a85f" } }, { "Id": 182665, "Version": 10, "Guid": "73bf2a9b-6d4c-4987-96d8-d421c586a888", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "ConfigTypes": { "en-us": "@All,@entity-picker" }, "Description": { "en-us": "Item Picker for Entities (new v19)" }, "Label": { "en-us": "Data Picker Entity (new v19)" }, "Type": { "en-us": "@entity-picker" } }, "Boolean": { "DisableI18n": { "en-us": true }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "6fa7f390-7612-40c6-baff-2bcf6140a85f" } }, { "Id": 184123, "Version": 1, "Guid": "fe3b9d97-1076-4860-ad7f-7c80008428e7", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "new v19" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "6fa7f390-7612-40c6-baff-2bcf6140a85f" } } ], "Attributes": [ { "Name": "DataSources", "Type": "Entity", "InputType": "entity-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "5f7a115f-d935-4c77-8fc1-69024dd3828a" } }, { "Name": "GroupUiFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": true, "SysSettings": { "InheritMetadataOf": "f786e83a-12b8-4c76-8593-cc84e385ff1b" } }, { "Name": "EnableEdit", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f09fbd6a-ba83-4023-a5b4-b82b6ef7e9ff" } }, { "Name": "EnableCreate", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "916b17c1-f15d-4414-80e5-6d53b27ff463" } }, { "Name": "EnableAddExisting", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0fc6d925-77df-4ccc-80dd-5d9ddaf003c9" } }, { "Name": "EnableRemove", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "9f51cb28-eab4-4eb6-9b44-6246b55a7a52" } }, { "Name": "EnableDelete", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "4274d627-fc80-412e-ad34-fa9ed21c6ba6" } }, { "Name": "GroupMultiValue", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "3dcbb74e-44bc-4bb3-83c0-ac8243190696" } }, { "Name": "AllowMultiValue", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "faf06aa8-73cc-4cb0-baa5-da7a9e5d2203" } }, { "Name": "EnableReselect", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "6bb3b9ac-0008-477e-825c-7ce8f57e910d" } }, { "Name": "AllowMultiMin", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "41f9d742-66fd-4729-8687-c9648d76d33a" } }, { "Name": "AllowMultiMax", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "65e8eeaa-4914-449e-816d-31185f54e406" } }, { "Name": "GroupDisplay", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "7c7c7fe3-57be-4d2f-9767-a0f3e3944bf1" } }, { "Name": "PickerDisplayMode", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "16057c04-0f49-4bd2-96e7-97d13bf3f8f5" } }, { "Name": "PickerDisplayConfiguration", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "879356b3-0579-4fa1-b973-95c1b543c9db" } }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "bc89498a-6a98-4d7c-994f-4c04b8930154" } }, { "Name": "CreatePrefill", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "594d3edf-5501-4ee5-8271-d216ceefac08" } }, { "Name": "CreateParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "c21252f1-6d64-4b59-91e0-5ce5a80c7bd4" } }, { "Name": "EditParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "46cb9c49-a1c8-4b5a-affe-32a7f6732dbd" } } ] }, "Entities": [] }, { "ContentType": { "Id": "2421dded-3aeb-47d2-ab9d-e2b72a2d821d", "Name": "@number-picker", "Scope": "System.Fields", "Metadata": [ { "Id": 182381, "Version": 8, "Guid": "df9485fb-10f6-4c1e-a19e-84b47b68955b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure a Number Picker. This is a new concept which is still in BETA ⚠️, so it may still change a bit. 

\n

The core idea is that you separate the UI (this configuration) from the Source Definition (see Source below). The Source can be reused in other pickers, and it allows many more features then were possible before. 

" }, "Label": { "en-us": "Data Picker for Number Field" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "2421dded-3aeb-47d2-ab9d-e2b72a2d821d" } }, { "Id": 183771, "Version": 3, "Guid": "65054dae-9f44-49cd-912f-4786bccabe04", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "ConfigTypes": { "en-us": "@All,@number-picker" }, "Description": { "en-us": "Data Picker Number (new v19)" }, "Label": { "en-us": "Data Picker Number (new v19)" }, "Type": { "en-us": "@number-picker" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "2421dded-3aeb-47d2-ab9d-e2b72a2d821d" } }, { "Id": 184124, "Version": 1, "Guid": "1bdf0ff1-be37-40e1-b9c3-f3b4d6c062d9", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "new v19" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "2421dded-3aeb-47d2-ab9d-e2b72a2d821d" } } ], "Attributes": [ { "Name": "DataSources", "Type": "Entity", "InputType": "entity-picker", "IsTitle": true, "SysSettings": { "InheritMetadataOf": "5f7a115f-d935-4c77-8fc1-69024dd3828a" } }, { "Name": "EnableTextEntry", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "c5825717-9c58-46d8-bafb-2bd8b3c2ec11" } }, { "Name": "GroupDisplay", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "7c7c7fe3-57be-4d2f-9767-a0f3e3944bf1" } }, { "Name": "PickerDisplayMode", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "16057c04-0f49-4bd2-96e7-97d13bf3f8f5" } }, { "Name": "PickerDisplayConfiguration", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "879356b3-0579-4fa1-b973-95c1b543c9db" } } ] }, "Entities": [] }, { "ContentType": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker", "Scope": "System.Fields", "Metadata": [ { "Id": 182382, "Version": 8, "Guid": "dba24477-2502-42c2-8437-4c16934b9f5e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure a String Picker. This is a new concept which is still in BETA ⚠️, so it may still change a bit. 

\n

The core idea is that you separate the UI (this configuration) from the Source Definition (see Source below). The Source can be reused in other pickers, and it allows many more features then were possible before. 

" }, "Label": { "en-us": "Data Picker for Text/String Field" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e64dd20e-0055-4410-87a1-1238fe44707f" } }, { "Id": 182573, "Version": 7, "Guid": "ba6ce128-0a51-4047-8a40-bfff27658476", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "ConfigTypes": { "en-us": "@All,@string-picker" }, "Description": { "en-us": "Data Picker for Text/String Field (new v19)" }, "Label": { "en-us": "Data Picker String (new v19)" }, "Type": { "en-us": "@string-picker" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e64dd20e-0055-4410-87a1-1238fe44707f" } }, { "Id": 184125, "Version": 1, "Guid": "dce429d6-5813-435d-b46c-fb6d2ca6902d", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "new v19" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e64dd20e-0055-4410-87a1-1238fe44707f" } } ], "Attributes": [ { "Name": "DataSources", "Type": "Entity", "InputType": "entity-picker", "IsTitle": true, "SysSettings": { "InheritMetadataOf": "5f7a115f-d935-4c77-8fc1-69024dd3828a" } }, { "Name": "GroupUiFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f786e83a-12b8-4c76-8593-cc84e385ff1b" } }, { "Name": "EnableEdit", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "f09fbd6a-ba83-4023-a5b4-b82b6ef7e9ff" } }, { "Name": "EnableCreate", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "916b17c1-f15d-4414-80e5-6d53b27ff463" } }, { "Name": "EnableAddExisting", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0fc6d925-77df-4ccc-80dd-5d9ddaf003c9" } }, { "Name": "EnableRemove", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "9f51cb28-eab4-4eb6-9b44-6246b55a7a52" } }, { "Name": "EnableTextEntry", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "c5825717-9c58-46d8-bafb-2bd8b3c2ec11" } }, { "Name": "GroupMultiSelect", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "3dcbb74e-44bc-4bb3-83c0-ac8243190696" } }, { "Name": "AllowMultiValue", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "faf06aa8-73cc-4cb0-baa5-da7a9e5d2203" } }, { "Name": "EnableReselect", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "6bb3b9ac-0008-477e-825c-7ce8f57e910d" } }, { "Name": "Separator", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "844c1c0b-09c7-46b3-8541-e9eef134cd69" } }, { "Name": "AllowMultiMin", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "41f9d742-66fd-4729-8687-c9648d76d33a" } }, { "Name": "AllowMultiMax", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "65e8eeaa-4914-449e-816d-31185f54e406" } }, { "Name": "GroupDisplay", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "7c7c7fe3-57be-4d2f-9767-a0f3e3944bf1" } }, { "Name": "PickerDisplayMode", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "16057c04-0f49-4bd2-96e7-97d13bf3f8f5" } }, { "Name": "PickerDisplayConfiguration", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "879356b3-0579-4fa1-b973-95c1b543c9db" } }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "bc89498a-6a98-4d7c-994f-4c04b8930154" } }, { "Name": "CreatePrefill", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "594d3edf-5501-4ee5-8271-d216ceefac08" } }, { "Name": "CreateParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "c21252f1-6d64-4b59-91e0-5ce5a80c7bd4" } }, { "Name": "EditParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "46cb9c49-a1c8-4b5a-affe-32a7f6732dbd" } } ] }, "Entities": [] }, { "ContentType": { "Id": "590d5961-c2d5-4f50-867a-5c609dd820c8", "Name": "UiPickerModeTree", "Scope": "System.Fields", "Metadata": [], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182383, "Version": 2, "Guid": "aed1fe52-d2f6-40c5-8bf4-6201190d61d4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Tree Picker Configuration" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

A title for this configuration, in case you want to reuse it.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182428, "Version": 1, "Guid": "3cefd25a-0f43-4f05-a74b-7bd30848cb07", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182429, "Version": 1, "Guid": "28f9ce11-a89e-4bb7-98d9-3b95790c76a3", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupRelationships", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182393, "Version": 1, "Guid": "eae9f1e9-828d-422b-ac84-499fb1f95762", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-default" }, "Name": { "*": "GroupRelationships" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeRelationship", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 182384, "Version": 2, "Guid": "e2541b5c-45d3-4667-972b-60e7081215f4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "child-parent" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "TreeRelationship" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182391, "Version": 1, "Guid": "7d609426-ef83-4e01-b6e8-5b23a8d9fd42", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182392, "Version": 1, "Guid": "35601351-aee0-4b67-aaf9-5099fb98c5b2", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "child-parent:Child has reference to Parent\nparent-child:Parent has references to Children" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeBranchesStream", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182397, "Version": 2, "Guid": "b765d306-2e2c-4217-a839-505e789e75eb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Default" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeBranchStream" }, "Notes": { "en-us": "

Which stream in the source should be used for branches / folders. Most sources only have a Default.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182399, "Version": 1, "Guid": "2a1880ed-ddfc-4f0d-913e-23dbdbcbbbda", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182400, "Version": 1, "Guid": "e48971da-addb-4731-a2ca-fe2f00836c7e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeLeavesStream", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182398, "Version": 3, "Guid": "1e202275-a3a1-4c43-b339-c4090a9f7605", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Default" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeLeavesStream" }, "Notes": { "en-us": "

Which stream in the source should be used for leaves / files / lost-levers. Most sources only have a Default.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182401, "Version": 2, "Guid": "cb33526c-69ff-416e-816f-6f7c66d5c23a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182402, "Version": 2, "Guid": "62e139ef-f766-4e06-b635-3b336cd8c205", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeParentIdField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182385, "Version": 3, "Guid": "d599da31-120a-4d4f-a444-db12a830ba85", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Id" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeParentIdField" }, "Notes": { "en-us": "

The field on the parent which identifies it. Typically Id.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182395, "Version": 2, "Guid": "55cd0993-3be4-4994-ba3c-d667046fb389", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182396, "Version": 2, "Guid": "58c71cbf-bed2-4318-931d-075c2e1de13e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeChildIdField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182386, "Version": 3, "Guid": "1472a482-192b-41e8-af8a-42463e131cf3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Id" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeChildIdField" }, "Notes": { "en-us": "

The field on the child which identifies it. Typically Id.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182403, "Version": 2, "Guid": "c1a7e876-06e2-4792-8ebe-9cddaa19c5e4", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182404, "Version": 2, "Guid": "00306083-c3fe-4da5-a87b-cd3786e5ec21", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeParentChildRefField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182387, "Version": 2, "Guid": "5f4af476-4b84-4db5-8b61-6b5720b7e7f9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Children" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeParentChildRefField" }, "Notes": { "en-us": "

The field on the parent, which would contain references to the children (when using Parent-Child relationships).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182405, "Version": 1, "Guid": "80c22d8d-89b7-4240-8180-988bc9566fe6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182406, "Version": 1, "Guid": "b17f1483-8931-4a10-bd1c-ac2f2d72f186", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeChildParentRefField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182388, "Version": 2, "Guid": "59a465be-901e-4f94-87fe-e9c6e49a4854", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Parent" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TreeChildParentRefField" }, "Notes": { "en-us": "

The field on the child, which would contain a reference to the parent (when using Child-Parent relationships).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182407, "Version": 1, "Guid": "f9a473f8-b3ba-4fbe-878a-cad189bca27c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182408, "Version": 1, "Guid": "d3a185e0-7ae5-4df5-9e3d-e9dba20c5582", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupShow", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182414, "Version": 1, "Guid": "cf3fbd9b-0757-4858-ae8c-ee057f3ccddd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-default" }, "Name": { "*": "GroupShow" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeShowRoot", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 182415, "Version": 2, "Guid": "0ce5bfc3-8b32-4c17-8317-b6caf5b10d02", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "TreeShowRoot" }, "Notes": { "en-us": "

If the root node(s) should be shown. Set to false, if you only have 1 root and it's not meant to be used. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182417, "Version": 1, "Guid": "d95d1b9c-84bb-4575-a879-a6005f63666e", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeDepthMax", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 182416, "Version": 2, "Guid": "7183e6df-76dd-4ade-9d94-f86655ee30b2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "10" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "TreeDepthMax" }, "Notes": { "en-us": "

Maximum Tree depth incl. root and leaves. This is to avoid infinite recursions etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182418, "Version": 1, "Guid": "fcc6cb35-9886-4310-900f-cb46f5f5ccaa", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 }, "Max": { "en-us": 25 }, "Min": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSelectability", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182394, "Version": 1, "Guid": "00d0ce6d-df29-4728-b6ad-bbee6eba1054", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-default" }, "Name": { "*": "GroupSelectability" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeAllowSelectRoot", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 182409, "Version": 2, "Guid": "8800ebf1-6810-456b-ac18-7246909bb397", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "TreeAllowSelectRoot" }, "Notes": { "en-us": "

Allow selecting the root node. You may want to disable this, if the root is always an object which you don't want selected. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182410, "Version": 1, "Guid": "6c1c8b64-62ca-4935-b0c1-4b92a31cb2c2", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeAllowSelectBranch", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 182389, "Version": 3, "Guid": "f4dd8687-6168-42d1-89ba-5d70c4707cb5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "TreeAllowSelectBranch" }, "Notes": { "en-us": "

Allow selecting any branch node. You may want to disable this, if you only want file-selects, but not folder-selects. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182411, "Version": 2, "Guid": "c716d313-848d-4e2a-8542-888e75885277", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TreeAllowSelectLeaf", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 182426, "Version": 2, "Guid": "a751e853-23fd-4e8e-9978-ca6429174550", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "TreeAllowSelectLeaf" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182427, "Version": 1, "Guid": "e763900b-b827-45e7-b808-5db2b4409ea0", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "318133c2-1df8-4a0a-99dc-08abaae0ed53", "Name": "SysPickerSharedFields", "Scope": "System.Fields", "Metadata": [], "Attributes": [ { "Name": "GroupDataSources", "Guid": "76843959-1a40-4b92-9ac7-e14ae5525d42", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182466, "Version": 1, "Guid": "6d6368c4-f3f6-4761-85be-2955ce52f7c4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-default" }, "Name": { "*": "GroupDataSources" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DataSources", "Guid": "5f7a115f-d935-4c77-8fc1-69024dd3828a", "Type": "Entity", "InputType": "entity-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182467, "Version": 20, "Guid": "6f08b256-40a8-4d12-8237-a76a2401f777", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-picker" }, "Name": { "en-us": "Data Source Configuration" }, "Notes": { "en-us": "

Configure / Select DataSources for this Picker to provide choices.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183691, "Version": 2, "Guid": "e35a3275-22bd-4306-a477-163fc6a4658f", "Type": { "Id": "6fa7f390-7612-40c6-baff-2bcf6140a85f", "Name": "@entity-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" } }, "Entity": { "DataSources": { "*": [ "a0a2db07-5d62-452c-b0a6-4708daee5380" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupUiFeatures", "Guid": "f786e83a-12b8-4c76-8593-cc84e385ff1b", "Type": "Empty", "InputType": "empty-default", "IsTitle": true, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182460, "Version": 7, "Guid": "4bff4743-575f-4221-947a-5baad25276b9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "UI Features (buttons etc.)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "67f10945-8f58-47d5-86fb-7359fa58342e", "72214326-370f-41e2-8e68-39718d895f81" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182473, "Version": 4, "Guid": "9a57c3ed-9c49-4670-8202-831e68253e58", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableEdit", "Guid": "f09fbd6a-ba83-4023-a5b4-b82b6ef7e9ff", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182461, "Version": 8, "Guid": "095ceb76-e05b-4655-ba6b-e60cf012f9c0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Enable Edit Items" }, "Notes": { "en-us": "

Allow user to edit the item in the list, usually by showing a pencil-icon.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182468, "Version": 6, "Guid": "f168db44-4c78-48d3-a6b3-95cc1b97de86", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "edit items disabled \uD83D\uDD0F" }, "TitleIndeterminate": { "en-us": "automatically detect if edit is enabled" }, "TitleTrue": { "en-us": "edit items enabled ✏️" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableCreate", "Guid": "916b17c1-f15d-4414-80e5-6d53b27ff463", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182462, "Version": 8, "Guid": "d5c87d5a-d241-49ba-9823-cfaf8d801051", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "EnableCreate" }, "Notes": { "en-us": "

Allow creating new items of the type(s) used in this list.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182469, "Version": 6, "Guid": "f10a3743-1f41-40a9-a68b-fdb6406fc50c", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "create items disabled \uD83D\uDD12" }, "TitleIndeterminate": { "en-us": "automatically detect if create new is possible" }, "TitleTrue": { "en-us": "create items enabled ⭐" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableAddExisting", "Guid": "0fc6d925-77df-4ccc-80dd-5d9ddaf003c9", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182463, "Version": 8, "Guid": "cba7c7df-977f-4b3f-ba7b-37ba8742a789", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "en-us": "EnableAddExisting" }, "Notes": { "en-us": "

Allow the user to select the same item multiple times.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182470, "Version": 5, "Guid": "68c54508-0af7-4499-b3a4-2bf969749ecd", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "add existing disabled \uD83D\uDD12" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "add existing enabled ➕" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableRemove", "Guid": "9f51cb28-eab4-4eb6-9b44-6246b55a7a52", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182464, "Version": 6, "Guid": "9420ea32-8570-403c-af05-1c8b7e183d7f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "EnableRemove" }, "Notes": { "en-us": "

Allow the user to remove an item in the list. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182471, "Version": 5, "Guid": "ee7fb6ce-5577-409d-9dfd-b956c6ed1087", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "remove items disabled \uD83D\uDD12" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "remove item enabled ➖" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableDelete", "Guid": "4274d627-fc80-412e-ad34-fa9ed21c6ba6", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182656, "Version": 8, "Guid": "f3153679-0e0b-4b97-9cba-044ff5d36620", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "EnableDelete" }, "Notes": { "en-us": "

Allow the user to fully delete an item shown in the list.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182660, "Version": 7, "Guid": "5c870c94-7c41-4590-97e9-e5fd024e2418", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "delete item disabled \uD83D\uDD12" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "delete item enabled \uD83D\uDDD1️" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableTextEntry", "Guid": "c5825717-9c58-46d8-bafb-2bd8b3c2ec11", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182465, "Version": 7, "Guid": "1d2c6ccd-7060-44f1-9740-7990e1689f9d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "EnableTextEntry" }, "Notes": { "en-us": "

Allow manually typing a value which may or may not be in the list. Two common situations for this:

\n
    \n
  • situations where the drop-down will suggest typical values, but others are also possible
  • \n
  • Situations where you need tokens like [Parameter:Category] which will later be resolved to a real value
  • \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182472, "Version": 6, "Guid": "fdb4f95b-73b0-4979-a3f0-2c34b209ef17", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "only allow values from list \uD83D\uDD22\uD83D\uDD12" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "enable free text entry by user ⌨️\uD83D\uDD13" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupMultiSelect", "Guid": "3dcbb74e-44bc-4bb3-83c0-ac8243190696", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182479, "Version": 6, "Guid": "7592ee8d-125d-4f48-aa8c-376662e4a731", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Select Multiple Values" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5f17d5e2-fc51-4c6a-acd4-41f6c8de27f1", "8a74630d-e961-4130-9c22-31a9015bb83d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182491, "Version": 3, "Guid": "b0d5b79d-9fc4-4124-8711-cb0daf98834d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AllowMultiValue", "Guid": "faf06aa8-73cc-4cb0-baa5-da7a9e5d2203", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182480, "Version": 5, "Guid": "9cd2974d-40f7-4279-810c-255b19e56878", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "AllowMultiValue" }, "Notes": { "en-us": "

Allow selecting multiple items (otherwise the user can only pick 1 item).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182485, "Version": 4, "Guid": "13ed6e7a-d6e2-4a1b-ba44-21827899e08b", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "only allow a single item 1️⃣" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "allow selecting multiple items ♾️" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableReselect", "Guid": "6bb3b9ac-0008-477e-825c-7ce8f57e910d", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182481, "Version": 5, "Guid": "8d91a38a-df11-49f8-b29c-33fdc13b6dc1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "EnableReselect" }, "Notes": { "en-us": "

*Enable the user to select the same item multiple times in the list.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "b4e7a0b5-4102-49a8-9f62-70236d097a90" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182486, "Version": 3, "Guid": "649364b0-fefd-4825-b034-bee8b9db2bb7", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "items can only be selected once 1️⃣ " }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "items can be selected again \uD83D\uDD01" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Separator", "Guid": "844c1c0b-09c7-46b3-8541-e9eef134cd69", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182482, "Version": 8, "Guid": "9a58bccc-650c-4926-a92b-69bf2c2a6479", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "," }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Separator" }, "Notes": { "en-us": "

If you want to support selecting multiple items, you'll need something to keep them separate. We recommend a comma or new-line, but maybe you want something different.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ec85406a-ecaa-4027-a63c-7a568566da07" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182487, "Version": 6, "Guid": "a570466a-0170-421c-aef0-f4673ee0d906", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182488, "Version": 6, "Guid": "5228cb37-4015-44f3-ba87-7836e059aacd", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "\\\\n:New Line / Enter (\\\\n)\n,:Comma \",\"\n|:Vertical Bar \"|\"\n-:Dash \"-\"\n;Semicolon \";\"" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AllowMultiMin", "Guid": "41f9d742-66fd-4729-8687-c9648d76d33a", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182483, "Version": 5, "Guid": "399cb29f-7635-4522-a6e2-57c90ef44bf7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Multi-Select Minimum Amount Required" }, "Notes": { "en-us": "

Define a minimum amount of item which must be picked.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a8f0a31b-6360-4897-a7e6-279b0ca48237" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182489, "Version": 3, "Guid": "ffaf539a-8012-4130-bbc9-718b68c15f5c", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AllowMultiMax", "Guid": "65e8eeaa-4914-449e-816d-31185f54e406", "Type": "Number", "InputType": "number-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182484, "Version": 5, "Guid": "1f5dc29f-190e-4227-b7df-b035ae64d5de", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Multi-Select Maximum Amount Allowed" }, "Notes": { "en-us": "

When allowing multiple, max amount to allow.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "69f58d43-2c6f-49bf-a25d-bb33caebf947" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182490, "Version": 3, "Guid": "383b2045-2b46-41bb-8777-22e2a0c83e87", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDisplay", "Guid": "7c7c7fe3-57be-4d2f-9767-a0f3e3944bf1", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182498, "Version": 4, "Guid": "30b66546-b066-43e0-bdca-3ca8c58aeb09", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Picker Display Configuration" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6593add5-09d8-4bda-8229-0e6fc7e9cc0c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182514, "Version": 2, "Guid": "4a3a35af-f216-4ec1-bb9a-5ad4e521c0ba", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PickerDisplayMode", "Guid": "16057c04-0f49-4bd2-96e7-97d13bf3f8f5", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182499, "Version": 7, "Guid": "6aa01f5c-ceae-44a7-80f3-85aa757a2271", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "list" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Picker Display Mode" }, "Notes": { "en-us": "

Choose how the picker should be presented.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "bfc2786d-c211-4d74-8b58-621105cf3b27" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182505, "Version": 3, "Guid": "4559dee6-0ff8-40c5-9718-303e77def461", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183895, "Version": 1, "Guid": "d30201cc-f302-42e5-85d4-0f2866469ce2", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "b09500f5-0a16-4347-97d4-505bac83d0fc" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PickerDisplayConfiguration", "Guid": "879356b3-0579-4fa1-b973-95c1b543c9db", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182500, "Version": 4, "Guid": "b0449d6f-b226-4e6c-a60f-27347eeee463", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Picker Display Configuration" }, "Notes": { "en-us": "

How the picker should be displayed, ATM only for special tree configurations.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182507, "Version": 3, "Guid": "39631857-9d1b-4f08-8e65-50d26de3b870", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "UiPickerModeTree" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PreviewType", "Guid": "2ca67f4b-7e68-4502-ac73-9c521fba2aaf", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183993, "Version": 6, "Guid": "2533cf19-7597-46ad-bdda-19d7c693b0db", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Preview" }, "Notes": { "en-us": "

If the selected data can be previewed (like an icon), specify how.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183995, "Version": 5, "Guid": "bce7becc-0db7-436f-a6c7-6694a45d9ef3", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "c37e1472-d258-4ce4-8733-d801a049f574" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupEditDialog", "Guid": "bc89498a-6a98-4d7c-994f-4c04b8930154", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182501, "Version": 4, "Guid": "a18c8bbe-6e2a-4453-896e-017c3b7e1ecf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Edit Items Configuration (Advanced)" }, "Notes": { "en-us": "

Configure advanced settings when creating / editing items in this list. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "21e2f373-fbef-4196-9d4c-d3c8267c03c5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182515, "Version": 2, "Guid": "4b50469f-d229-40c2-8e51-9b2056f72e2e", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CreatePrefill", "Guid": "594d3edf-5501-4ee5-8271-d216ceefac08", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182502, "Version": 4, "Guid": "e8e416b4-a594-46ae-ab72-efcff879b7ef", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Create Item Prefill" }, "Notes": { "en-us": "

Prefill URL Parameters when creating a new item.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182508, "Version": 3, "Guid": "97443bfd-5c19-4f2f-8be3-f520c0456e3d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182509, "Version": 3, "Guid": "98b435ce-cea1-4510-87bc-2da0a9d70bf7", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CreateParameters", "Guid": "c21252f1-6d64-4b59-91e0-5ce5a80c7bd4", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182503, "Version": 5, "Guid": "f2710e88-e9ce-4e52-aff1-c5b823d50325", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Create Item - Form Parameters" }, "Notes": { "en-us": "

Form URL Parameters when creating a new item. Not for prefill, but to affect formulas which expect these parameters. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182510, "Version": 4, "Guid": "ea046421-cf29-4efb-b500-9af6dedfae55", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182511, "Version": 4, "Guid": "a20b9841-d4af-428b-a4c2-e9c8cf7c5464", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EditParameters", "Guid": "46cb9c49-a1c8-4b5a-affe-32a7f6732dbd", "Type": "String", "InputType": "string-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182504, "Version": 4, "Guid": "c5ae0bc5-a476-432b-ac53-6ee638575b6a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Edit Item - Form Parameters" }, "Notes": { "en-us": "

Form URL Parameters when editing a new item. Not for prefill, but to affect formulas which expect these parameters. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182512, "Version": 3, "Guid": "c46bc50f-c950-4b67-820f-7a5b555bb50c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182513, "Version": 3, "Guid": "2398e456-0a07-4643-b8ba-129ff5d243c6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 182681, "Version": 29, "Guid": "a0a2db07-5d62-452c-b0a6-4708daee5380", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "UiPickerSourceEntity\nUiPickerSourceQuery\nUiPickerSourceCustomList\nUiPickerSourceCustomCsv\nUiPickerSourceCss\nUiPickerSourceAppAssets" }, "Description": { "en-us": "

Get all Data Sources for UI Pickers.

" }, "ItemInformation": { "en-us": "

[item:Description]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "[Item:Title] ([Item:Id])" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.UiPickers" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "System.UiPickers Data Source" }, "Value": { "en-us": "Guid" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182476, "Version": 1, "Guid": "67f10945-8f58-47d5-86fb-7359fa58342e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\n return data.default + \n (data.EnableEdit ? \"✒️ \" : \"\uD83D\uDD0F \") +\n (data.EnableRemove ? '➖ ' : '\uD83D\uDD12 ') + \n (data.EnableCreate ? '⭐' : '\uD83D\uDD12');\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182475, "Version": 3, "Guid": "72214326-370f-41e2-8e68-39718d895f81", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => {\r\n // In normal picker setup, the field which must contain something is DataSources\r\n // Since this group is also used in old Entity-Pickers, it would need to check the EntityType\r\n if (!!data.DataSources && data.DataSources.length > 0)\r\n return true;\r\n if (!!data.EntityType)\r\n return true;\r\n return false;\r\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182493, "Version": 1, "Guid": "5f17d5e2-fc51-4c6a-acd4-41f6c8de27f1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.default + ' ' +\n (data.AllowMultiValue\n ? ('✅ ' + '\"' + data.Separator + '\"')\n : '1️⃣');\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182492, "Version": 1, "Guid": "8a74630d-e961-4130-9c22-31a9015bb83d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return !!data.DataSources && data.DataSources.length > 0; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182494, "Version": 1, "Guid": "b4e7a0b5-4102-49a8-9f62-70236d097a90", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.AllowMultiValue; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182495, "Version": 1, "Guid": "ec85406a-ecaa-4027-a63c-7a568566da07", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.AllowMultiValue; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182496, "Version": 1, "Guid": "a8f0a31b-6360-4897-a7e6-279b0ca48237", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.AllowMultiValue; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182497, "Version": 1, "Guid": "69f58d43-2c6f-49bf-a25d-bb33caebf947", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.AllowMultiValue; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182516, "Version": 1, "Guid": "6593add5-09d8-4bda-8229-0e6fc7e9cc0c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return !!data.DataSources && data.DataSources.length > 0; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183903, "Version": 15, "Guid": "bfc2786d-c211-4d74-8b58-621105cf3b27", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n let temp = 0;\n const options = data.optionsRaw.map(o => ({\n ...o,\n noSelect: o.data?.Disabled ?? false,\n // conditions: (++temp % 2) ? `warn=feature:PickerUiRadio` : null,\n }))\n console.log(options);\n return {\n options: options,\n };\n});" }, "Target": { "en-us": "Field.Options" }, "Title": { "en-us": "Field.Options" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183894, "Version": 16, "Guid": "b09500f5-0a16-4347-97d4-505bac83d0fc", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info,Disabled,Rules\nlist,\"Default\",\"Dropdown with search. Opens dialog when more need to be selected.\",false\n\nauto-inline,\"Auto Radio/Checkbox\",\"Inline - automatically showing checkboxes or radio buttons, depending on the amount of items you can select\",false,\"warn-req=feature:PickerUiRadio;warn-req=feature:PickerUiCheckbox\"\nradio,\"Inline Radio Buttons\",\"Inline radio button selection for single-item choices\",false,\"warn-req=feature:PickerUiRadio\"\ncheckbox,\"Inline Checkboxes\",\"Inline checkbox list for multiple item selection\",false,\"warn-req=feature:PickerUiCheckbox\"\n\ntree,\"Tree structure (BETA)\",\"Requires more configuration (BETA, doesn't work yet)\",true" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "" }, "PreviewType": { "en-us": "" }, "PreviewValue": { "en-us": "" }, "Title": { "en-us": "Picker Shared - DisplayMode" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183994, "Version": 6, "Guid": "c37e1472-d258-4ce4-8733-d801a049f574", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Not configured (default)\",\"No special preview, or use the preview-setting from the source - this is the default for normal values\"\nicon-css,\"Icon from Font in CSS\",\"Show the value as an icon from an icon-font such as fontawesome, which is specified in the CSS - usually applied as a class.\"\nicon-material,\"Icon Material (using font-symbols)\",\"Symbol icons use a text-name to specify that they should show\"\nsvg,\"SVG preview\",\"Show an SVG file - typically an icon\"\ntext-css,\"Text formatted by CSS\",\"Show some text to see how the text-formatting changes\"\nimage,\"Image\",\"Show an image like png/jpg etc. which is specified by the data\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "" }, "PreviewType": { "en-us": "" }, "PreviewValue": { "en-us": "" }, "Title": { "en-us": "Picker Shared - Preview Type" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182517, "Version": 1, "Guid": "21e2f373-fbef-4196-9d4c-d3c8267c03c5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return !!data.DataSources && data.DataSources.length > 0; });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "bee47d31-c425-421a-8520-292b11571179", "Name": "SysPickerSourceSharedFields", "Scope": "System.Fields", "Metadata": [], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182666, "Version": 1, "Guid": "36164d59-bddb-450e-b78b-f30db8e17147", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Title" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Guid": "0046b3fd-b3ee-47ee-be29-1f0df071069a", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183727, "Version": 4, "Guid": "178bfb2b-1123-4699-ad4b-c60d5a309b02", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Detailed Description" }, "Notes": { "en-us": "

Since this Data Source can be reused, it's helpful to provide a detailed description of what it does. This is optional. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "294f8671-40aa-4af3-a111-c53d00cb53be" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183728, "Version": 3, "Guid": "6134ef41-2170-4c60-919d-ff77f8ddcbba", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Description", "Guid": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183719, "Version": 4, "Guid": "26f199b0-89a9-4cde-992e-f9660a40b97e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Description to help pick the right Data Source" }, "Notes": { "en-us": "

This will be shown on the info-button when picking data-sources, to better find this one.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183720, "Version": 3, "Guid": "8ce7f15d-f797-40a2-8d7a-4815b00cfd74", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183721, "Version": 3, "Guid": "8552b803-f493-43f4-a5ab-d96a66231f13", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "1" }, "WysiwygConfiguration": { "en-us": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescriptionEnd", "Guid": "ee7ba734-558a-4362-85a5-8ee9421b6118", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183735, "Version": 1, "Guid": "0fb3bd85-97b1-40f7-b738-425b71c40a09", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupDescriptionEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupMore", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182667, "Version": 2, "Guid": "cf55fc8f-9bfa-498b-973c-70e34d56a56c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "More Settings ✌️" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182670, "Version": 1, "Guid": "10ff8d85-4aaa-4b22-973e-42bdab4059a3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Label", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 182668, "Version": 1, "Guid": "d545e28c-5da2-45c2-83d6-6e0233f986bc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "Label" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MoreFields", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 182669, "Version": 1, "Guid": "c445fae3-8975-4918-8f6a-ef5a2ce8ee7c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-dropdown-query" }, "Name": { "*": "MoreFields" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 182675, "Version": 1, "Guid": "25fe04b5-a414-4c16-8e0f-9d9ba4dc3b36", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-default" }, "Name": { "*": "GroupAdvanced" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CreateTypes", "Guid": "3329843f-be88-47d2-a2c1-3c16724081d7", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 182674, "Version": 7, "Guid": "d444dc7d-15ac-4f46-b78a-6c9aca3fbc3f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Create Entity Types (for create new)" }, "Notes": { "en-us": "

Specify one or more types - so the user can create new items.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182676, "Version": 5, "Guid": "87b55ea6-abc3-458d-b967-4df2e2dd33bc", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "c6732c81-bfeb-4675-9a9d-611ad0289de2" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupItemHelp", "Guid": "ea9c3f94-578f-4c5f-b721-767f38fea57d", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183696, "Version": 4, "Guid": "2df2f3c0-f491-4c97-b658-aced8302db15", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Help on each Item" }, "Notes": { "en-us": "

Provide additional information to guide / help the user.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e457872b-90e7-4041-a8de-07bb88ddd43e", "5a7bf19c-2be2-4310-b706-b888c89b8394" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183700, "Version": 3, "Guid": "32653e1b-9a1f-4a10-86c5-d5b88e75a130", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupHelpMessageUnlicensed", "Guid": "effab828-3273-497a-a7af-b93741fa25d5", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183910, "Version": 5, "Guid": "a0b43b4f-6e3a-42ce-8fda-bb064665482c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "GroupHelpMessageUnlicensed" }, "Notes": { "en-us": "

Important: The feature PickerUiMoreInfo is not enabled. You have filled in either the Info, Tooltip or Link, which require these features. 

\n

For you as a developer this feature will work, so you can develop it. Just remember that the end user will only benefit from this information if the feature is enabled on their system.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1910fa85-fdb5-468d-a7cc-32f2a3a6695d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemTooltip", "Guid": "49d939a6-b45c-405b-98e9-b7ee38a9c68a", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183697, "Version": 3, "Guid": "8d00a27b-2fcf-4fb8-b650-5674cffc8117", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Item Tooltip" }, "Notes": { "en-us": "

Show a rich tooltip on each item. You can use placeholders like [Item:FieldName].

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183701, "Version": 2, "Guid": "fc1a712b-03fc-40ec-a8c5-580581bd7de3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183702, "Version": 2, "Guid": "f0cd0c75-cb55-49b1-be75-29a283605a27", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "1" }, "WysiwygConfiguration": { "en-us": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemInformation", "Guid": "2cd90609-840f-4ccf-aed6-8c6e39ea067e", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183698, "Version": 3, "Guid": "3d356c88-e262-43e8-9737-a4bf4df6472e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Item Information Button" }, "Notes": { "en-us": "

Show information behind an ℹ️ icon on each item. You can use placeholders like [Item:FieldName].

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183703, "Version": 2, "Guid": "05fbef7e-1393-4ddd-8642-584be2562175", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183704, "Version": 2, "Guid": "a0417be5-9554-4dd5-9a6c-55a8874bf992", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "1" }, "WysiwygConfiguration": { "en-us": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemLink", "Guid": "8a7dcb9e-f47b-4518-9519-f66db95f195e", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 183699, "Version": 3, "Guid": "5dd99048-1e39-4759-9f63-f3bd8a3d2808", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Item Link" }, "Notes": { "en-us": "

Show a link to another page on each item. You can use placeholders like [Item:FieldName].

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183705, "Version": 2, "Guid": "9a9c885b-e439-430f-8b6c-e76160f7c7da", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPreview", "Guid": "809f9514-13eb-4182-8a03-a010b93beaf7", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "Share": true }, "Metadata": [ { "Id": 184000, "Version": 3, "Guid": "731b5bbf-2f59-424f-9987-4c31d094f521", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Preview Settings" }, "Notes": { "en-us": "

The following settings can adjust how the selected value is previewed.

\n

For example, you can specify how a file such as an image/SVG is previewed, or how an icon-font will be displayed. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184001, "Version": 2, "Guid": "2ddfec52-9e8a-4363-9efa-cbedc1fdef9d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183740, "Version": 1, "Guid": "294f8671-40aa-4af3-a111-c53d00cb53be", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data) => { return data.default + (!!data.Info ? '✅' : ''); });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name: Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182677, "Version": 2, "Guid": "c6732c81-bfeb-4675-9a9d-611ad0289de2", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "

Find all Content-Types

" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "ContentTypes (all)" }, "Value": { "en-us": "NameId" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183718, "Version": 6, "Guid": "e457872b-90e7-4041-a8de-07bb88ddd43e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const typeName = context.target.entity.type.name;\n // For custom list, it can always be visible\n if (typeName == 'UiPickerSourceCustomList'\n || typeName == 'UiPickerSourceCustomCsv'\n || typeName == 'UiPickerSourceAppAssets'\n ) {\n return true;\n }\n\n // For Entity Picker\n if (typeName == \"UiPickerSourceEntity\") {\n return data.ContentTypeNames.length > 0;\n }\n\n if (typeName == \"UiPickerSourceQuery\") {\n return data.Query.length > 0;\n }\n\n // Warn on unknown type, as it can't determine how to set visibility\n console.warn('formula for GroupItemHelp is running on an unexpected type, so it is not clear when to show/hide: ' + typeName);\n // console.log('2dm data', data, context);\n return data.value;\n});" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible: Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183739, "Version": 1, "Guid": "5a7bf19c-2be2-4310-b706-b888c89b8394", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const icons = [];\n if (!!data.ItemTooltip) icons.push('\uD83D\uDCA1');\n if (!!data.ItemInformation) icons.push('ℹ️');\n if (!!data.ItemHelpLink) icons.push('\uD83D\uDD17');\n const addOn = icons.length ? ' (' + icons.join(' ') + ')' : '';\n return data.default + addOn;\n});" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name: Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183912, "Version": 3, "Guid": "1910fa85-fdb5-468d-a7cc-32f2a3a6695d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const hasAny = !!data.ItemTooltip || !!data.ItemInformation || !!data.ItemLink;\n if (!hasAny) return hasAny;\n const enabled = context.features.isEnabled('PickerUiMoreInfo');\n return !enabled;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv", "Scope": "System.Fields", "Metadata": [ { "Id": 183868, "Version": 1, "Guid": "7953fd0e-61e8-4c07-a0c5-6998c908860a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "UI Picker Source - Custom CSV" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "3a96ad21-027d-4679-8372-c39406ad1d11" } }, { "Id": 183924, "Version": 1, "Guid": "72626777-5df3-4c13-b422-d14c4cb57d78", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "3a96ad21-027d-4679-8372-c39406ad1d11" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 183855, "Version": 3, "Guid": "84d21ca2-8dfb-4c25-941f-207975e43940", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "CSV Data Source" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

A simple name so you can identify this source when you re-use it.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183863, "Version": 2, "Guid": "29181a04-8d2c-4e6a-8715-1f4b79a265e3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183864, "Version": 2, "Guid": "7cb7ba37-131c-426e-a30e-72cf02cbea05", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PickerSourceCsvNotEnabledWarning", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 183878, "Version": 6, "Guid": "71fb0597-88bf-470c-9611-13058681c8ff", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "PickerSourceCsv FeatureNotEnabledWarning" }, "Notes": { "en-us": "

Warning: You are configuring an new CSV source. It appears that this feature is not enabled. See Picker Source CSV Source feature.

\n

✅ You can still use this source and everything will work, but it will show a warning that you're using an unlicensed feature.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "4250edc0-640c-47da-81d6-f947a691c3d4" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupCsvValues", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183870, "Version": 5, "Guid": "93582c68-a89a-4134-8f3c-2cf0c199baea", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Comma Separated Values (BETA)" }, "Notes": { "en-us": "

Create a mini-table with CSV. Note that as of now, the configuration is as follows:

\n
    \n
  1. the first row must contain the column names, and must contain a Value. The Title is not required, but recommended. 
  2. \n
  3. spaces will be trimmed, so <Value,Title> and <Value, Title> are the same
  4. \n
  5. empty lines will be skipped
  6. \n
  7. delimiter will be guessed, we suggest you use a comma \",\"
  8. \n
  9. if you have text containing the delimiter, best put it in quotes eg \"I think, therefore I am\"
  10. \n
  11. numbers are not parsed, so make sure you use the neutral \".\" format like 42.27
  12. \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183871, "Version": 4, "Guid": "3952f26e-670c-46d3-90f4-f5d06863151d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Csv", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183865, "Version": 7, "Guid": "c085bf57-68cf-489b-9b1b-15ef8315dcb6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Value,Title,Info,Link\n2sxc,2sxc CMS,the best plugin for Dnn and Oqtane,https://2sxc.org\n2sic,2sic - makers of 2sxc,the creators of 2sxc,https://2sic.com\nDescartes,René Descartes,\"I think, therefore I am\",\"https://en.wikipedia.org/wiki/Cogito,_ergo_sum\"" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "CSV - Comma Separated Values" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183866, "Version": 6, "Guid": "632f2213-7ee1-41bb-add4-79cb21e391e2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183867, "Version": 6, "Guid": "630ad0d7-8bbd-489e-9c89-607af64ef6b9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "pre" } }, "Number": { "RowCount": { "en-us": 20 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPreview", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "809f9514-13eb-4182-8a03-a010b93beaf7" } }, { "Name": "PreviewValue", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183999, "Version": 1, "Guid": "2668c20e-aef8-40ce-9f6e-26b48f445189", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "ValuePreview" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PreviewType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2ca67f4b-7e68-4502-ac73-9c521fba2aaf" } }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "GroupHelpMessageUnlicensed", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "effab828-3273-497a-a7af-b93741fa25d5" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [ { "Id": 183879, "Version": 1, "Guid": "4250edc0-640c-47da-81d6-f947a691c3d4", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !context.features.isEnabled('PickerSourceCsv'); });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "78451625-053f-4e23-b4e8-e95c3fcf3320", "Name": "UiPickerSourceCss", "Scope": "System.Fields", "Metadata": [ { "Id": 183928, "Version": 3, "Guid": "703be1a9-518b-4bdf-a98b-7a60ba3699cb", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "UI Picker Source - Css (for selecting icons or classes) BETA⚠️" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "78451625-053f-4e23-b4e8-e95c3fcf3320" } }, { "Id": 183952, "Version": 1, "Guid": "01c78465-f078-4978-9eee-ec5d88599660", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "78451625-053f-4e23-b4e8-e95c3fcf3320" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 183929, "Version": 2, "Guid": "063d39d6-20ab-4426-bcb7-15fdd6fb9c1e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "CSS Data Source for Icons" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

A simple name so you can identify this source when you re-use it.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183930, "Version": 1, "Guid": "9727cb6b-d6bd-4c1d-9f7c-ebee06b84731", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183931, "Version": 1, "Guid": "9a273123-7ba7-419d-9a6f-701403f989a7", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupCssConfiguration", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 183938, "Version": 2, "Guid": "89044b7e-d98d-4d28-9b11-9066b0083b84", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Css Configuration" }, "Notes": { "en-us": "

Configure which CSS file to load, and what classes to select from it.

\n

Note that the CSS file must come from the same domain, otherwise the browser will block access to the internal inspection, which must find the class names.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183941, "Version": 1, "Guid": "1e24fbd7-e533-4303-87bf-9dbb6a99d568", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CssSourceFile", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 183939, "Version": 5, "Guid": "9c9cd7f9-16b9-4699-86cb-ce91ca4c4b8f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "[App:Path]/icons/fontawesome-nobrands.min.css" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "CSS Source File" }, "Notes": { "en-us": "

File to load in this dialog - usually the CSS-file which would contain icon-definitions. You can also use the placeholder [App:Path] to inject the app, path, like

\n
    \n
  • [App:Path]/dist/custom-icons.css.
  • \n
\n

Remember that these styles will also affect the styling of the entire UI, so try to include files which only include the icon-definitions. You could also create separate icon-definition files just for this icon picker.

\n

If you want to select icons and want a nice preview, make sure that the css file also loads the font you are using.

\n

Find out more on 2sxc.org/help?tag=font-icon

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183942, "Version": 4, "Guid": "42470026-2c2c-40fa-9a82-2e227af1ce6c", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CssSelectorFilter", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183940, "Version": 4, "Guid": "f7e752fe-b96d-4549-8cff-738ff77d740f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": ".fa-" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Css Selector Filter" }, "Notes": { "en-us": "

The CSS could contain more rules (selectors) than you want, so to be sure we only show the desired ones, you can specify filters to limit what is used. You have 2 options:

\n
    \n
  1. just use a string such as \".fa-\" (the typical prefix for FontAwesome) - this will filter/search for all selectors which start with this prefix
  2. \n
  3. use a regular expression such as \"(\\.fa-|\\.fas-)\". Regular expressions must always be wrapped inside brackets (...) so that the search can tell the difference to normal string-start-with searches.
  4. \n
" }, "Placeholder": { "en-us": "A prefix or regular expression to select what CSS rules to use." }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183943, "Version": 3, "Guid": "9d531a28-df89-44ba-ab8e-c7c2e32aeb8e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183944, "Version": 3, "Guid": "1f5f925f-07ed-44d8-b472-fc986962d786", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Value", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183945, "Version": 2, "Guid": "255db97a-79ca-481b-9258-007672fec2c8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Value (optional)" }, "Notes": { "en-us": "

The value to store. If not specified, will just use the found selector without preceding dot, so \".address\" would become \"address\". Placeholders:

\n
    \n
  1. [Item:Value] - the selector without leading \".\"
  2. \n
  3. [Item:ValueRaw] - the selector with leading \".\"
  4. \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183947, "Version": 1, "Guid": "fa1a13a3-3658-4648-afea-b60714122861", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183948, "Version": 1, "Guid": "2115f588-34ae-4d1d-a190-53ce1016b9f8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPreview", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "809f9514-13eb-4182-8a03-a010b93beaf7" } }, { "Name": "PreviewType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184005, "Version": 3, "Guid": "43f37c22-b262-4933-beed-a2d0d14068a3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "icon-css" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Preview Type" }, "Notes": { "en-us": "

If the selected data can be previewed (like an icon), specify how.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184006, "Version": 2, "Guid": "f821a003-0b0d-44ee-9ece-6cb4f8692b51", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "radio" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "c37e1472-d258-4ce4-8733-d801a049f574" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PreviewValue", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183946, "Version": 4, "Guid": "93e77f98-91ae-42ec-8e49-b890f2c375df", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "fas [Item:Value]" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Preview Value" }, "Notes": { "en-us": "

CSS rule to use for the preview. Allows you to specify things such as prefixes (required for Font-Awesom, but not for newer If not specified, will just use the found selector with dot, so \".address\". Placeholders:

\n
    \n
  1. [Item:Value] - the selector without leading \".\"
  2. \n
  3. [Item:ValueRaw] - the selector with leading \".\"
  4. \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183949, "Version": 3, "Guid": "061e6f38-7e70-4420-8d93-e832f83d267e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183950, "Version": 3, "Guid": "aca91517-1845-49e9-8b5e-056801366af5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [] }, { "ContentType": { "Id": "5d139b94-70cd-45dd-97dd-0ea73d191791", "Name": "UiPickerSourceAppAssets", "Scope": "System.Fields", "Metadata": [ { "Id": 184045, "Version": 3, "Guid": "41643a23-8a35-42a2-89a4-b1ad208a8abe", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "UI Picker Source - App Assets (Files/Folders)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5d139b94-70cd-45dd-97dd-0ea73d191791" } }, { "Id": 184055, "Version": 1, "Guid": "39456cc3-4416-4dab-89ed-7ad46164caf3", "Type": { "Id": "bcce96be-a439-4f22-9d1e-a10487544fa5", "Name": "IsPickerSourceDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5d139b94-70cd-45dd-97dd-0ea73d191791" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 184024, "Version": 2, "Guid": "66cd66c1-e31f-43a3-8319-5c0e01104031", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Get App Files" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184043, "Version": 1, "Guid": "992ee634-0e3a-4bd6-8b88-ae8d245e6b70", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184044, "Version": 1, "Guid": "a5d42585-1668-444b-acd1-d37c6380a15e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PickerSourceAppFilesNotEnabledWarning", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 184025, "Version": 4, "Guid": "1f58aa88-4949-4478-a5d1-b5e815ed7c41", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "PickerSourceAppFilesNotEnabledWarning" }, "Notes": { "en-us": "

Warning: You are configuring an new App Assets source. It appears that this feature is not enabled. See Picker Source App Assets feature.

\n

✅ You can still use this source and everything will work, but it will show a warning that you're using an unlicensed feature.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "2576a1bb-76cc-464a-a7eb-d0e1eec4c373" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "0046b3fd-b3ee-47ee-be29-1f0df071069a" } }, { "Name": "Description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "970d9f99-9fc7-4ebb-b5c3-8ce1518a0bce" } }, { "Name": "GroupAppFiles", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184037, "Version": 2, "Guid": "90d4b3a7-bf74-4e5b-b24f-eb56b99afa10", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "App Files" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184068, "Version": 1, "Guid": "a5a9496b-9d92-470e-9a2d-82d7e0effa26", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AssetsRootFolder", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184026, "Version": 4, "Guid": "aef9d6ca-4c86-488d-9b28-20716083b5e8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Root Folder" }, "Notes": { "en-us": "

Only retrieve things below this folder.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184039, "Version": 3, "Guid": "c140bc7f-7958-442c-a0da-13dcfdcac4fa", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "e13e0514-2606-48ae-b77c-fd5ed9b9a602" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AssetsType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184049, "Version": 3, "Guid": "e6e65889-3e45-4a00-ade0-9afc5adbe134", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "files" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "What to Retrieve" }, "Notes": { "en-us": "

Should the user be able to select files, folders or both?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184051, "Version": 2, "Guid": "cf5c7971-4209-4727-835c-adf26a9ce01a", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "radio" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "d8c9fc1c-7d81-4520-b6e9-8958f0b5429e" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AssetsFileFilter", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184027, "Version": 4, "Guid": "3225f228-c9ac-4962-88f6-e4d9e26d7917", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "*.*" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "File Filter" }, "Notes": { "en-us": "

Only retrieve files matching this pattern.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184041, "Version": 3, "Guid": "afd55f0c-6281-41e3-a837-ec326693cdd7", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "e5b1e2b4-a491-49d1-89da-3bbd91c087de" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupPreview", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "809f9514-13eb-4182-8a03-a010b93beaf7" } }, { "Name": "Value", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184069, "Version": 7, "Guid": "43fb0166-362c-4df0-86f6-9f4e7c9ec2c5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "FullName" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Value Field" }, "Notes": { "en-us": "

The field of the items which will be stored as a value - typically the name with extension.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184071, "Version": 6, "Guid": "57872556-a3d4-47e4-b2e5-a0c37e70b64e", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "a617f624-315d-41dc-b433-faf7924f64f1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Label", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184072, "Version": 3, "Guid": "37f09e7f-933e-4940-8995-0f1f8a27c94b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "FullName" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Label Field" }, "Notes": { "en-us": "

The field which will be shown in the dropdown as the visible field for the user to select.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184073, "Version": 2, "Guid": "09aeafab-7083-4851-b2d8-9fe596d32309", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "a617f624-315d-41dc-b433-faf7924f64f1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PreviewType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2ca67f4b-7e68-4502-ac73-9c521fba2aaf" } }, { "Name": "PreviewValue", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184056, "Version": 6, "Guid": "abaf5be4-e2f4-4b62-876b-700db812ac6b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Url" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Preview Value (to be used in the special preview)" }, "Notes": { "en-us": "

We recommend the Url as it's the most likely option to work, but you can also use placeholders to create your own path to the preview. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "bd20b0d9-f99a-4fab-9af0-0fa431754383" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184074, "Version": 4, "Guid": "764e0dd4-13fb-4044-9b67-15ae07758dc4", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "a617f624-315d-41dc-b433-faf7924f64f1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupItemHelp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "ea9c3f94-578f-4c5f-b721-767f38fea57d" } }, { "Name": "GroupHelpMessageUnlicensed", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "effab828-3273-497a-a7af-b93741fa25d5" } }, { "Name": "ItemTooltip", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "49d939a6-b45c-405b-98e9-b7ee38a9c68a" } }, { "Name": "ItemInformation", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "2cd90609-840f-4ccf-aed6-8c6e39ea067e" } }, { "Name": "ItemLink", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "SysSettings": { "InheritMetadataOf": "8a7dcb9e-f47b-4518-9519-f66db95f195e" } } ] }, "Entities": [ { "Id": 184048, "Version": 1, "Guid": "2576a1bb-76cc-464a-a7eb-d0e1eec4c373", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !context.features.isEnabled('PickerSourceAppAssets'); });" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184038, "Version": 5, "Guid": "e13e0514-2606-48ae-b77c-fd5ed9b9a602", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Path" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.AppAssets" }, "QueryParameters": { "en-us": "" }, "StreamName": { "en-us": "Folders" }, "Title": { "en-us": "AppAssets - App Folders" }, "Value": { "en-us": "Path" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184050, "Version": 4, "Guid": "d8c9fc1c-7d81-4520-b6e9-8958f0b5429e", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Icon\n\"files\",\"Files\",file_copy\n\"folders\",\"Folders\",folder_copy\n\"all\",\"Files and Folders\",snippet_folder" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "PreviewType": { "en-us": "icon-material" }, "PreviewValue": { "en-us": "[Item:Icon]" }, "Title": { "en-us": "App Assets - Asset Types" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184040, "Version": 3, "Guid": "e5b1e2b4-a491-49d1-89da-3bbd91c087de", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n\"*.*\",\"All Files\",\"Get all files\"\n\"*.svg\",\"SVG Files\",\"Get all SVGs\"\n\"*.txt\",\"TXT files\",\"Get all text files\"\n\"todo\",\"Find all image files (not implemented!)\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "PreviewType": { "en-us": "" }, "PreviewValue": { "en-us": "[Item:Title] ([Item:Value])" }, "Title": { "en-us": "App Assets - File Filters" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184070, "Version": 4, "Guid": "a617f624-315d-41dc-b433-faf7924f64f1", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Description]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.QueryInfo" }, "QueryParameters": { "en-us": "QueryName=System.AppAssets&StreamName=Default" }, "StreamName": { "en-us": "Attributes" }, "Title": { "en-us": "AppAssets - Fields of Query" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184075, "Version": 1, "Guid": "bd20b0d9-f99a-4fab-9af0-0fa431754383", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return !!data.PreviewType;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-fields.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "@Boolean", "Name": "@Boolean", "Scope": "System.Fields", "Metadata": [ { "Id": 136785, "Version": 1, "Guid": "7d4a01de-e2e0-46cf-a6f4-b6b31dfaaa3d", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@Boolean" } }, { "Id": 137473, "Version": 1, "Guid": "64e7dd21-ad14-4378-ac5a-e7a145f3a92c", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Boolean UI Definitions" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Boolean (Yes/No)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@Boolean" } } ], "Attributes": [ { "Name": "TitleTrue", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 75059, "Version": 5, "Guid": "0e69e4e5-1229-4ac2-a954-2e173d19479b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title when True" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75061, "Version": 4, "Guid": "d0dfae35-7a3d-4400-8ed6-d3b4879224a0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 75062, "Version": 4, "Guid": "46095a91-2c58-43b4-a4d3-d9ac5cf15eb8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "TitleFalse", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 75060, "Version": 6, "Guid": "bbc06875-6163-4fd6-9d02-4a4ee933e26d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title when False" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75063, "Version": 5, "Guid": "33bf0ebe-6081-47dc-960d-4c250ea48145", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 75064, "Version": 5, "Guid": "13c6e203-fd2f-4321-a753-eaa093f8836e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "TitleIndeterminate", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 75066, "Version": 5, "Guid": "337f220b-5b35-4899-9916-767f722a83e4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title when Indeterminate" }, "Notes": { "*": "

This is shown when the field has no value - so it's only relevant for boolean input fields which have 3 states. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ae75440d-d7d7-46c9-b405-9508603322ea" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75067, "Version": 4, "Guid": "43472eaa-d4b6-41a7-8d9a-d4cb5b490407", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 75068, "Version": 4, "Guid": "eb953a6e-f9e6-47c3-ad07-7903846bc9c6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ReverseToggle", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130138, "Version": 7, "Guid": "116195e5-3f33-4bf3-adbd-155bea2ea818", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Reverse Toggle" }, "Notes": { "en-us": "

Sometimes you're storing a negative-named-value like Disable. But you want to show the user Enabled when the value is false, showing an active toggle. This reverses what the toggle visual shows. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130139, "Version": 6, "Guid": "59b42099-e4b2-44ce-845a-53f175bd005e", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Normal Toggle: true shows the active toggle" }, "TitleIndeterminate": { "en-us": "Default Toggle: true shows the active toggle" }, "TitleTrue": { "en-us": "Reverse Toggle: false shows the active toggle" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130495, "Version": 5, "Guid": "ae75440d-d7d7-46c9-b405-9508603322ea", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n var isTristate = context.entities.getOfType('@boolean-tristate');\n return !!isTristate;\n})" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible: Tristate only" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@boolean-tristate", "Name": "@boolean-tristate", "Scope": "System.Fields", "Metadata": [ { "Id": 74296, "Version": 1, "Guid": "297aa555-3867-4a32-b820-946d34315230", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Boolean that also has a null" }, "EditInstructions": { "*": "" }, "Label": { "*": "Tristate" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@boolean-tristate" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@boolean-default", "Name": "@boolean-default", "Scope": "System.Fields", "Metadata": [ { "Id": 131475, "Version": 2, "Guid": "dd4579e4-ef8a-49bd-b3c9-e1a147f89e9a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "for yes/no values (actually true/false) - shows a slider in the UI" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

The boolean-default field has no settings.

" }, "Label": { "en-us": "Boolean (yes/no slider)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@boolean-default" } }, { "Id": 136788, "Version": 1, "Guid": "a7c0eac2-f6fb-4452-a50b-0cadb2a289d1", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@boolean-default" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@All", "Name": "@All", "Scope": "System.Fields", "Metadata": [ { "Id": 84733, "Version": 2, "Guid": "0bab4be8-e795-4d9f-b50e-f7ec161ed8cb", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "the fields used on all input types" }, "EditInstructions": { "*": "" }, "Label": { "*": "General Field Settings" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@All" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41572, "Version": 5, "Guid": "7a234b4b-7ede-4f84-a6e1-6e79783842e0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Name" }, "Notes": { "*": "" }, "Placeholder": { "*": "The field label as shown in the edit form" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 56937, "Version": 3, "Guid": "5c46175d-2b00-459f-8c2f-a904871e391b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 56938, "Version": 3, "Guid": "289310e5-adc1-4493-8f90-ddfaeb1da0f5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "InputType", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41583, "Version": 6, "Guid": "e3449540-fdc5-49ab-ab67-aa5a86eb3ffe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Input Type" }, "Notes": { "*": "

Hidden field which tells the UI what input-type to use in a dynamic form

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 42575, "Version": 4, "Guid": "aca2720d-2df6-4028-a716-8378f12036f2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 42576, "Version": 4, "Guid": "c7481400-af83-43ea-a186-933d68aee54e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "DefaultValue", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41580, "Version": 6, "Guid": "a7fd8fdb-676d-45e9-85b3-19b7b0eb1215", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Default Value" }, "Notes": { "*": "

Note that you can also set the default value of a drop-down, just remember to use the Key of the drop-down, not the displayed text.

" }, "Placeholder": { "*": "Default value for this field - used when this field is first filled in" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41683, "Version": 4, "Guid": "b0b97f60-a550-48eb-98a0-bb6dfd1aa100", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 41684, "Version": 4, "Guid": "eaa1a860-527f-4ecb-92c0-dbeaf4aa096a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 2 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "HelpGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 75071, "Version": 4, "Guid": "0ec1f933-c721-4506-b3eb-397c48ee1910", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Help / Instructions" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75072, "Version": 3, "Guid": "449e6709-2a66-4327-ba32-51a33f95074a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Placeholder", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 75073, "Version": 3, "Guid": "0a01881f-4fe4-4a29-8a99-ee9764c0b827", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Placeholder" }, "Notes": { "*": "

We recommend to use this for quick hints, as it's only visible when the field is empty and will not clutter as the form is filled up.

" }, "Placeholder": { "*": "This text will appear in the background of empty fields" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75074, "Version": 2, "Guid": "d6a0d467-f4a0-4117-854a-9ea35d55b318", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 75075, "Version": 2, "Guid": "ab642d12-39a8-48f5-8d1d-f113e5c009bd", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 41574, "Version": 7, "Guid": "57004e54-c530-4777-ba86-f0eb0eafe729", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Notes" }, "Notes": { "en-us": "

Add notes / helpful comments to aid the editor in adding his information. Note that you have a WYSIWYG for this field, but be careful to KISS.

\n

You can also add helpful links like www.2sxc.org.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 56935, "Version": 4, "Guid": "22b951f5-4029-4f21-990c-99e809baaffd", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 56936, "Version": 4, "Guid": "c1885242-dc2a-4fb5-8793-5c4ed776e85e", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "inline" }, "InlineInitialHeight": { "en-us": "" }, "WysiwygConfiguration": { "en-us": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "UiGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 63427, "Version": 5, "Guid": "04019772-2133-4513-8f0f-408082b70534", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "User Interface (UI) Settings" }, "Notes": { "*": "

Configure how this field behaves in the input form. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "859a787b-f9d4-4069-89de-4e51d2a21bd2" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63428, "Version": 4, "Guid": "c4519a06-85f3-4661-bc76-292c9721083a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "VisibleInEditUI", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41576, "Version": 5, "Guid": "750f4dfc-c243-4076-bb03-c0733dae7758", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Visible In Edit UI" }, "Notes": { "*": "

If true (the common value) this input field is visible.

\n

There are only a few cases, where an invisible field makes sense, but we won't tell you about these yet. It's for a future feature :).

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 42579, "Version": 3, "Guid": "dd45ee54-6b30-4808-9022-46cc31ec5b86", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Invisible" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Visible" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Disabled", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41581, "Version": 7, "Guid": "0b34ba0a-ff14-4dca-91ba-a65519dc824f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "False" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Disabled" }, "Notes": { "*": "

Will permanently disable a field in the UI - so the user can see the value but not change it. You'll be able to change it using code or by prefilling it.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "44719726-8365-49b1-96f3-4b97ae608b2a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77283, "Version": 5, "Guid": "d5c8dbdb-acfd-4d6d-8193-89c62cd30016", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Enabled so user can edit" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Disabled so user cannot edit" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Required", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41578, "Version": 7, "Guid": "24c5a584-6344-42f4-b794-9e8e91fa2d78", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Required" }, "Notes": { "*": "

If this field is required. The Edit-UI won't allow saving if a required field is blank.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1eb95148-7cd6-4e1a-b32e-ce748891dfb1" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77282, "Version": 5, "Guid": "4c5d739e-ec96-42ac-844a-2cf8e634eb22", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Optional" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Required" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "DisableTranslation", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 75058, "Version": 5, "Guid": "3883142a-c7f1-4ce2-b724-06fa52579cbc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "false" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Disable Translation" }, "Notes": { "*": "

If enabled, will only be editable in the primary language. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "32921231-379e-4819-8977-351a4e2d098b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77284, "Version": 3, "Guid": "e6061a08-85bb-4f96-bfd9-57d88369f421", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Translatable" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Not translatable" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "DisableAutoTranslation", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 166025, "Version": 8, "Guid": "9a9658f0-6226-48af-8985-0832f96efede", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "DisableAutoTranslation" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f76bfadf-be8a-4703-a94e-66b25a3f37f4" ] }, "Warnings": { "*": [] } }, "Boolean": { "DisableAutoTranslation": { "en-us": false }, "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166026, "Version": 5, "Guid": "ab38e5e8-eae7-40b2-898f-8879509bb87d", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Auto-Translate will try to translate this and unlock the field for editing" }, "TitleIndeterminate": { "en-us": "Auto-Translate Default (most text fields are auto-translated, other fields not)" }, "TitleTrue": { "en-us": "Auto-Translate will skip this (recommended for name fields etc.)" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsEphemeral", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130160, "Version": 8, "Guid": "7ea452dc-12f0-4e85-9320-99cb98e57dfa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Ephemeral / Temporary" }, "Notes": { "*": "

See docs for ephemeral / variable / temporary fields

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130161, "Version": 7, "Guid": "bc488257-42aa-40dc-b066-ea9ff01b4cab", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Save Values" }, "TitleIndeterminate": { "*": "Save Values (default)" }, "TitleTrue": { "*": "Don't save value (ephemeral) - will treat this as a temporary variable in the UI" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ValidationGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 63418, "Version": 7, "Guid": "69cf3253-e0d6-4394-9fb3-eb8945392cb8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Field Validations" }, "Notes": { "*": "

Configure validation settings here to ensure that the field is ok to save or show warnings only. Read more about Field Validation in the docs.

\n

Note that these are work-in-progress and not final yet.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63419, "Version": 6, "Guid": "1c78d23c-098c-4692-b078-32f9c7c42da5", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Errors", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 63423, "Version": 3, "Guid": "69f44c1b-bb08-416c-8b68-41388d6ba734", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Errors" }, "Notes": { "*": "

These regular expressions will be used to check if the field is ok. If not valid, will prevent the form from saving. Read more about Field Validation in the docs.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "58739790-70e1-4df3-a98a-0cc69a260e68" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63426, "Version": 2, "Guid": "b452fa04-e347-4ab7-ba4c-e9ab53ab9e8c", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "RegExCheck" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": false }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Warnings", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 63420, "Version": 5, "Guid": "7ec70497-a426-448a-a730-ce79f35dd47b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Warnings" }, "Notes": { "*": "

These regular expressions will be used to check if the field is ok, but only show warnings if they fail. So the user can still store the data, but he'll be notified that something might be wrong. Read more about Field Validation in the docs.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e9def33a-148f-4dd1-975c-9422baf6bc94" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63421, "Version": 4, "Guid": "39f71721-57b4-4a69-9a3b-261f4b694961", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "RegExCheck" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": false }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ValidationRegExJavaScript", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41585, "Version": 4, "Guid": "fd6326de-4ffe-4f77-8580-436ec502ae4c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Validation RegEx JavaScript" }, "Notes": { "*": "

OLD feature: Help text: regular expression to validate the input - the UI will not allow saving if this condition is not met - see help with tag validation for more infos. We're working on a new improved feature. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63424, "Version": 2, "Guid": "890ee484-9888-4ed6-9c03-0ee03bea1617", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63425, "Version": 2, "Guid": "4530d30b-db0e-4541-8cab-08363eb03fe6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "CustomJavaScript", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41587, "Version": 3, "Guid": "53550e09-cf1b-48bc-a78a-93c98d546bdb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Custom JavaScript" }, "Notes": { "*": "

Execute custom javascript in the edit-form. Use with extreme caution. Read more on 2sxc.org/en/help?tag=edit-form-development

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 42577, "Version": 2, "Guid": "d4325442-173f-4b41-8c79-5af13b51d41c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 42578, "Version": 2, "Guid": "2b3ee05b-91c5-4b79-8d75-211ec1445a39", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 12 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupFormulas", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 120060, "Version": 16, "Guid": "ed7aea66-7a76-4c72-9f5f-23a1f1c882c0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Formulas Σ" }, "Notes": { "en-us": "

Formulas can change value, visibility etc. You should edit them in the edit UI using the developer mode. Use this section to manually delete or fix formulas in emergencies. See Formulas Documentation.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "92c9f03c-31da-4288-91ed-780503438983" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "EnableExperimental": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 120062, "Version": 15, "Guid": "6cc95e17-0baf-46db-a20c-9031135cc53a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Formulas", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 120061, "Version": 4, "Guid": "822c72d5-d864-4e2c-ba28-63117973a1d5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Formulas / Calculations" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 120073, "Version": 3, "Guid": "0e862ce8-c341-4c5a-937f-09e37a5f5677", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "UiFormula" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": false }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 130246, "Version": 1, "Guid": "8fe736ac-91b2-416e-a5f2-0ca4e7979138", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "GroupEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EnableExperimental", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130155, "Version": 4, "Guid": "94277a9d-d94c-46f4-abed-eb3276321f57", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Enable Experimental Features" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130156, "Version": 3, "Guid": "ef92527f-ec0e-4e09-af98-103b41881912", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide experimental settings" }, "TitleIndeterminate": { "*": "Don't show experimental settings (default)" }, "TitleTrue": { "*": "Show experimental settings" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130494, "Version": 4, "Guid": "859a787b-f9d4-4069-89de-4e51d2a21bd2", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n var hints = [];\n if(!data.VisibleInEditUI) hints.push('\uD83E\uDD77\uD83C\uDFFD');\n if(data.Disabled) hints.push('\uD83D\uDD12');\n if(data.Required) hints.push('✅');\n if(data.DisableTranslation) hints.push('no \uD83C\uDF10');\n if(data.DisableAutoTranslation === false) hints.push('auto-\uD83C\uDF10');\n if(data.DisableAutoTranslation === true) hints.push('no auto-\uD83C\uDF10');\n if(data.IsEphemeral) hints.push('no \uD83D\uDCBE');\n var hint = hints.length ? ' (' + hints.join(', ') + ')' : '';\n return data.default + hint; \n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130135, "Version": 3, "Guid": "44719726-8365-49b1-96f3-4b97ae608b2a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VisibleInEditUI; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide option if it's not visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130125, "Version": 6, "Guid": "1eb95148-7cd6-4e1a-b32e-ce748891dfb1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VisibleInEditUI && !data.Disabled; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if not visible or not enabled" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130137, "Version": 3, "Guid": "32921231-379e-4819-8977-351a4e2d098b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.VisibleInEditUI && !data.Disabled; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Hide if not visible in UI" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166032, "Version": 2, "Guid": "f76bfadf-be8a-4703-a94e-66b25a3f37f4", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return !data.DisableTranslation; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130157, "Version": 3, "Guid": "58739790-70e1-4df3-a98a-0cc69a260e68", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.EnableExperimental; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if experimental" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130158, "Version": 3, "Guid": "e9def33a-148f-4dd1-975c-9422baf6bc94", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return !!data.EnableExperimental; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show if experimental" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130254, "Version": 2, "Guid": "92c9f03c-31da-4288-91ed-780503438983", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.default + (data.Formulas.length ? ' (' + data.Formulas.length + ')' : ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@Number", "Name": "@Number", "Scope": "System.Fields", "Metadata": [ { "Id": 53707, "Version": 1, "Guid": "1e8276d5-efa9-4093-9ab1-f64a3e12de40", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configuration for a number field" }, "EditInstructions": { "*": "" }, "Label": { "*": "Number" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@Number" } } ], "Attributes": [ { "Name": "Decimals", "Type": "Number", "InputType": "number-default", "IsTitle": true, "Metadata": [ { "Id": 41638, "Version": 3, "Guid": "b0a8094d-e970-4bdb-9b52-de2c36b5e08b", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0 } } }, "Owner": "dnn:userid=1" }, { "Id": 41639, "Version": 2, "Guid": "159215ba-de96-474c-80dd-5235457dbb02", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "0" }, "InputType": { "*": "" }, "Name": { "*": "Number of Decimals" }, "Notes": { "*": "

Typically 0 (then only integers ergo whole numbers allowed)

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Min", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 41640, "Version": 2, "Guid": "cf6bd802-5692-4c8b-9530-220f4ce93c72", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 41641, "Version": 1, "Guid": "13cab28e-d270-4e41-ba08-35dad6842c64", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "Name": { "*": "Minimum" }, "Notes": { "*": "Minimum value. Used if you want to ensure that a number is between two values. Leave blank if not needed." } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Max", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 41642, "Version": 1, "Guid": "16b2f6b6-4136-4e83-9560-f7a3e4862f0d", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 41643, "Version": 1, "Guid": "b2f14ccc-80df-42a9-848e-4f54fedb31fc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "Name": { "*": "Maximum" }, "Notes": { "*": "Maximum value. Used if you want to ensure that a number is between two values. Leave blank if not needed." } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@number-default", "Name": "@number-default", "Scope": "System.Fields", "Metadata": [ { "Id": 131474, "Version": 4, "Guid": "bf1ee3eb-5878-4f5e-94ad-b5b6d4d2d3fe", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "standard number input field with 0 or more decimals" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

The number-default field has no settings.

" }, "Label": { "en-us": "Basic Number Input" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@number-default" } }, { "Id": 136792, "Version": 1, "Guid": "e2410590-f90f-44f8-a951-4274bc807891", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@number-default" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@DateTime", "Name": "@DateTime", "Scope": "System.Fields", "Metadata": [ { "Id": 53705, "Version": 1, "Guid": "dac48bd5-7c9b-4e7a-b438-4718f70e4636", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "DateTime UI Definitions" }, "EditInstructions": { "*": "" }, "Label": { "*": "Date and Time" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@DateTime" } } ], "Attributes": [ { "Name": "UseTimePicker", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": true, "Metadata": [ { "Id": 41598, "Version": 2, "Guid": "802ca6c7-3dee-4105-8e6d-47621ac3683e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "" }, "Name": { "*": "Use Time-Picker" }, "Notes": { "*": "

If activated, the picker also enables a time-choice.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77273, "Version": 1, "Guid": "ae3dc872-f0b4-401e-a779-7c1365a9202e", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@datetime-default", "Name": "@datetime-default", "Scope": "System.Fields", "Metadata": [ { "Id": 131473, "Version": 3, "Guid": "4a073785-b7fb-4b37-81bf-19fdbe40a010", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "for normal date / time selections" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

The datetime-default field has no settings.

" }, "Label": { "en-us": "Date/time picker" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@datetime-default" } }, { "Id": 136787, "Version": 1, "Guid": "5188fb5d-b8f0-4a6a-88f8-5ae8b2c6d545", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@datetime-default" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@entity-content-blocks", "Name": "@entity-content-blocks", "Scope": "System.Fields", "Metadata": [ { "Id": 52210, "Version": 1, "Guid": "942f090c-9daf-44de-8539-4f8d604cf78d", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Container for inner-content references" }, "EditInstructions": { "*": "" }, "Label": { "*": "Content-Blocks Container" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-content-blocks" } }, { "Id": 52211, "Version": 2, "Guid": "c546fe23-367e-4ea3-99e6-90e53c2ef570", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "Description": { "en-us": "Use this to manage inner content-blocks - discover more on 2sxc.org/help?tag=content-blocks" }, "Label": { "en-us": "Inner Content Items" }, "Type": { "en-us": "entity-content-blocks" } }, "Boolean": { "DisableI18n": { "en-us": true }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@entity-content-blocks" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@hyperlink-default", "Name": "@hyperlink-default", "Scope": "System.Fields", "Metadata": [ { "Id": 53715, "Version": 2, "Guid": "dbb9a27b-210c-4f82-88cc-66742b607188", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "Description": { "en-us": "use to refer to a page, image, document, whatever" }, "Label": { "en-us": "Link to Url, File or Page " }, "Type": { "en-us": "hyperlink-default" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": true } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-default" } }, { "Id": 131476, "Version": 1, "Guid": "fca9b122-b3b2-4c46-8840-7f0ef2380dd0", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "use to refer to a page, image, document, whatever" }, "DynamicChildrenField": { "*": "" }, "EditInstructions": { "*": "

The hyperlink-default field has no settings.

" }, "Label": { "*": "default (link, page, file, ...)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-default" } }, { "Id": 136791, "Version": 1, "Guid": "2734ffe4-8992-45d4-a593-095571bab6c3", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-default" } }, { "Id": 183847, "Version": 1, "Guid": "1b115da0-7fce-49a2-ad45-71ae62348765", "Type": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "MetadataTypes": { "en-us": "ImageDecorator" }, "Title": { "en-us": "Links / Images expect Image Decorator Metadata" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 2 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-default" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@hyperlink-library", "Name": "@hyperlink-library", "Scope": "System.Fields", "Metadata": [ { "Id": 52206, "Version": 2, "Guid": "baf97dd4-5f6e-466a-b7b2-b2ed0cda2ac6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure a file-library field containing folders, files and more." }, "EditInstructions": { "*": "

Many files, optionally in folders - just for this field. Ideal for galeries and more. Each file and folder can also have additional metadata if configured. 

" }, "Label": { "*": "File Library" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-library" } }, { "Id": 52209, "Version": 2, "Guid": "2dc2667a-4eb8-4f27-bc41-2730d92f7987", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "*": "" }, "Description": { "*": "Library of files, optionally with folders and file/folder metadata" }, "Label": { "*": "Library of files" }, "Type": { "*": "hyperlink-library" } }, "Boolean": { "DisableI18n": { "*": true }, "UseAdam": { "*": true } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-library" } }, { "Id": 183848, "Version": 1, "Guid": "576d2631-c274-4acb-b42b-c7dd40913be3", "Type": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "MetadataTypes": { "en-us": "ImageDecorator" }, "Title": { "en-us": "Link Libraries / Albums expect ImageDecorator Metadata" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 2 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@hyperlink-library" } } ], "Attributes": [ { "Name": "FolderDepth", "Type": "Number", "InputType": "number-default", "IsTitle": true, "Metadata": [ { "Id": 41631, "Version": 2, "Guid": "6f3a3dcf-f69c-4660-88f8-ce2e1438c9fa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "2" }, "InputType": { "*": "number-default" }, "Name": { "*": "Folder Depth" }, "Notes": { "*": "

If sub folders are allowed and how deply they may be nested. Use 0 for no sub folders, 1 for 1 level only, 2 for 2 levels (like /gallery/subgallery) etc. Use a large number like 100 for practically unlimited sub folders, but not recommended for realistic use cases.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77276, "Version": 1, "Guid": "9dc62cf8-db94-46a3-b309-98c58b19f552", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AllowAssetsInRoot", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41633, "Version": 2, "Guid": "8f991906-39b3-437e-9bf5-09730b47dfe2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Allow Assets In Root Folder" }, "Notes": { "*": "

Specifies if files may be placed in the core / root container, or if the user is required to create sub folders. This would be the case if you expect multiple groups of files, but never a top-level list. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41634, "Version": 2, "Guid": "d42769f3-a31f-4f5b-95d0-6100314a082b", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "MetadataContentTypes", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41635, "Version": 4, "Guid": "050e4c5a-24b8-4fec-b064-2c536f5cbb54", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Metadata Content Types" }, "Notes": { "*": "

The content-type (or types) to be used for assets in this library. To use this, first create a content-type (like DownloadMetadata or MugshotMetadata) and type the name of the content type into this field. Advanced configuration is possible, discover on 2sxc.org/help?tag=adam

\n

 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46370, "Version": 3, "Guid": "a0b102c2-c358-44a7-91e1-d5e0e781b704", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46371, "Version": 3, "Guid": "4269904d-d80f-4ea7-b0c3-5815911d9e08", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 5 } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@Hyperlink", "Name": "@Hyperlink", "Scope": "System.Fields", "Metadata": [ { "Id": 53706, "Version": 1, "Guid": "386c8195-d911-4dd9-9ce2-f90c9f48e6c4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "File UI Definitions" }, "EditInstructions": { "*": "" }, "Label": { "*": "Hyperlink (link or file)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@Hyperlink" } } ], "Attributes": [ { "Name": "FileFilter", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41611, "Version": 5, "Guid": "f3c22555-bb82-4bb5-93a8-0cdfbb392f50", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Custom File Extensions" }, "Notes": { "*": "

Enter the allowed file extensions, comma-separated. Example: \"*.jpg,*.bmp,*.png,*.gif\" or you can also do \"jpg,png,doc\" or use regex like \"[0-9]{2}.*\\.(jpg|png)\"

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46393, "Version": 3, "Guid": "d3597846-0b56-480b-a61a-0c95cc156d0e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46394, "Version": 3, "Guid": "17f774d8-fdbb-4624-9cac-5ba196b1c559", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupButtons", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130226, "Version": 2, "Guid": "15b0b2c7-da26-4947-8ff3-0f75096de205", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Buttons to the Side of the Input Field" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130227, "Version": 1, "Guid": "f6f8afa5-8ec7-465b-84d6-bf4b226cf4bf", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Buttons", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41628, "Version": 6, "Guid": "78c9cad8-4882-42af-a7a7-6dcc9efaa76d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "adam,more" }, "InputType": { "*": "string-default" }, "Name": { "*": "Buttons" }, "Notes": { "*": "

Buttons to show directly at the input-field. Use combinations of adam, page and more. More help here.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53737, "Version": 4, "Guid": "e1c2e9c2-d823-4fa2-a8ed-61e6ceb67eef", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 53738, "Version": 4, "Guid": "88b19925-1986-43cf-b506-9dba9e3c0ab0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupButtonsEllipsis", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 46389, "Version": 4, "Guid": "14ceb15b-8890-4d30-bd93-bdefe6c536b2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Buttons in the Dialog Ellipsis" }, "Notes": { "*": "

These are the buttons you can show in the large dialog, in the more \"…\" button.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46392, "Version": 3, "Guid": "61ea8550-b7f8-4a78-9b66-27bebda96789", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "DefaultDialog", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 41618, "Version": 5, "Guid": "67fa4342-dd9b-4a04-ac66-071330f1ac0b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Default Dialog" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 46368, "Version": 3, "Guid": "c09560e6-8c8a-4140-b4fc-b70c6d1e176e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46369, "Version": 3, "Guid": "117dd404-d80b-42b2-9a38-aa5132ef4568", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "None:None\nAutomatic Data Asset Manager (ADAM):Adam\nPage Picker:PagePicker\nImage Manager:ImageManager\nFile Manager:FileManager" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowPagePicker", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41620, "Version": 9, "Guid": "be42e432-084c-43a8-861e-bfec222f041a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show Page Picker" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41621, "Version": 9, "Guid": "a88187b4-af71-423c-8348-f565271e20fc", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide Page Picker" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Show Page Picker in Menu" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowImageManager", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41622, "Version": 8, "Guid": "95ae3c5e-aa0c-4720-9683-9ff596432c82", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show Image Manager" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41623, "Version": 8, "Guid": "e2ca89fd-ffc2-48a9-9878-ba08f284a144", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide Site Images in Menu" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Show Site Images in Menu" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowFileManager", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41624, "Version": 5, "Guid": "1569a887-2d5d-4584-ac97-deee187647c8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show File Manager" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41625, "Version": 5, "Guid": "3ff12832-e891-45f7-b788-bd7e8fb27c46", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide Site Files Picker" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Site Site Files Picker in Menu" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "ShowAdam", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41626, "Version": 4, "Guid": "ae19ed2d-27ac-4f9f-a0cb-d91715e7dbf1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Show Adam" }, "Notes": { "*": "

Shows the Automatic Digital Asset Manager in the menu

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41627, "Version": 4, "Guid": "6996d7d8-bda3-48ce-a1e2-84db0e426949", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Hide ADAM in the Menu" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Show ADAM in the Menu" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "EnableImageConfiguration", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 144407, "Version": 7, "Guid": "51690ebc-e20f-4a4c-9c13-eefb465a20d5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Enable Image Config \uD83C\uDFAF" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144408, "Version": 6, "Guid": "16e1571f-6f80-40d5-8546-a78ec480e541", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Disable image configuration" }, "TitleIndeterminate": { "en-us": "Enable image configuration (default)" }, "TitleTrue": { "en-us": "Enable image configuration if the file is an image \uD83C\uDFAF" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AdvancedGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 46390, "Version": 2, "Guid": "c1bb7cbb-c698-4b58-a7f1-edd9c4dbaee4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Advanced Settings" }, "Notes": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46391, "Version": 1, "Guid": "a1167733-9f5d-4135-b6ba-5f769ba5708d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Paths", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41614, "Version": 4, "Guid": "bbb7180b-1389-46c0-a3f6-c18aa88bd749", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Paths" }, "Notes": { "*": "

This is only needed if you use the old file pickers (not ADAM). Specify an existing folder and that will be the root for the file pickers. If you're unsure, best to leave it empty. More help here.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8616c87b-9fc2-4f72-9e6e-71ebe1f8d563" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77277, "Version": 2, "Guid": "f9b3a532-0330-4881-be16-5c30fc224c79", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 77278, "Version": 2, "Guid": "a6e1725a-e3a4-4f7c-9f1d-bf5d7e239f5b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "ServerResourceMapping", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 46386, "Version": 3, "Guid": "6965dd64-29a0-4e65-ab75-70a14bd4e0dc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Server Resource References" }, "Notes": { "*": "

determine how server resources should be references - the default mode will create links like file:17, the other mode will use /path/file.name

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46387, "Version": 2, "Guid": "de32521f-e3a1-410d-9c5c-37245532b9b8", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46388, "Version": 2, "Guid": "1e3b8c8f-a5e1-4bb8-b419-8b88bbf67fc0", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Default (let server manage):\nLet server manage the link and just use ID:id\nLink directly and use url:url" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 130145, "Version": 3, "Guid": "8616c87b-9fc2-4f72-9e6e-71ebe1f8d563", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) {\n return !!(data.ShowFileManager || data.ShowImageManager);\n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible: InEditUI: Show only if site files are used" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@empty-end", "Name": "@empty-end", "Scope": "System.Fields", "Metadata": [ { "Id": 130231, "Version": 2, "Guid": "d25ca4ed-ed46-4447-a9f4-9c5bcd83d1e5", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Close a field group" }, "EditInstructions": { "*": "

This closes a field-group and doesn't have any settings. 

" }, "Label": { "*": "Field-Group End" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@empty-end" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@empty-default", "Name": "@empty-default", "Scope": "System.Fields", "Metadata": [ { "Id": 52204, "Version": 4, "Guid": "12297a3a-1e70-4a76-bd70-f9cca8fc185d", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "" }, "Description": { "en-us": "An empty field (will not store data) for Headings/Groups" }, "Label": { "en-us": "Field Group Header" }, "Type": { "en-us": "empty-default" } }, "Boolean": { "DisableI18n": { "en-us": true }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@empty-default" } }, { "Id": 52205, "Version": 6, "Guid": "d7df774a-6a29-4db9-8352-d44e25266916", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configuration of the Field-Groups" }, "EditInstructions": { "*": "

Empty fields don't get saved but are used to structure the input form. 

" }, "Label": { "*": "Groups, Titles and Instructions" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@empty-default" } }, { "Id": 136789, "Version": 1, "Guid": "51dd473d-e3fd-4c1c-b4e6-d47247a6a66d", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@empty-default" } } ], "Attributes": [ { "Name": "DefaultCollapsed", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": true, "Metadata": [ { "Id": 41599, "Version": 4, "Guid": "b1686959-5bd6-41f4-81a8-0fcc91962e59", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Collapsed by default" }, "Notes": { "*": "

If set to true, then the field group is collapsed by default.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41600, "Version": 4, "Guid": "7fae583e-963b-42a3-8b71-cf7628b518a9", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Open when dialog loads" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "Collapsed when the dialog loads" } }, "Boolean": { "ReverseToggle": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@empty-message", "Name": "@empty-message", "Scope": "System.Fields", "Metadata": [ { "Id": 131463, "Version": 3, "Guid": "0ec288b3-3ce3-41c6-be6f-02f06e08f45a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Just show a message" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This will just show a message in the edit form. 

" }, "Label": { "en-us": "Message" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@empty-message" } } ], "Attributes": [] }, "Entities": [] }, { "ContentType": { "Id": "@string-json", "Name": "@string-json", "Scope": "System.Fields", "Metadata": [ { "Id": 135589, "Version": 1, "Guid": "73ebb249-2c4e-4234-bf91-3b056742f23e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configuration for a json-editor field" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "JSON editor" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-json" } } ], "Attributes": [ { "Name": "Rows", "Type": "Number", "InputType": "number-default", "IsTitle": true, "Metadata": [ { "Id": 135569, "Version": 3, "Guid": "095e1da5-4597-41b9-a15c-0f8619dba10c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "10" }, "InputType": { "*": "number-default" }, "Name": { "*": "Rows" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135570, "Version": 2, "Guid": "ade6d28c-64ea-41eb-89eb-2f1be6ac4c18", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0.0 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonValidation", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 135571, "Version": 5, "Guid": "4dc0536d-f22b-431b-b39d-5a771501b750", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "strict" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "JSON Validation" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135572, "Version": 3, "Guid": "0444cf6c-0779-4e97-b057-7dced86a3a98", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183877, "Version": 3, "Guid": "f74b1720-bb48-4ede-91ce-b74e91f7e885", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "f57b953e-9caf-4bf8-bbf8-51d2479835f5" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaMode", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 135574, "Version": 10, "Guid": "c0c26653-22ee-4ccf-80b9-61c68466725b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "none" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "JSON Schema Mode" }, "Notes": { "en-us": "

JSONs can validate using a schema

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135575, "Version": 4, "Guid": "0b972173-a209-435b-aa98-6e1d5ad7116c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183882, "Version": 8, "Guid": "3a7d4165-b25e-40d2-ab8c-953de56532e8", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "a4800b93-f69b-419c-bfa9-7eadbf1a9bfc" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaSource", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 135577, "Version": 5, "Guid": "7c8e0a6d-4665-4d19-ada6-a37acb28b325", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "link" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Schema Source" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c00d685b-568a-45dc-b43a-92a32ed40b36" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135578, "Version": 2, "Guid": "4af56eba-bdbb-44c4-813e-a16d39568d21", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183884, "Version": 2, "Guid": "b30d51f3-2a2a-4aba-b8ed-cacff7bdc848", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "2705cd61-c736-41f6-8d85-f717597924ea" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaUrl", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 135580, "Version": 2, "Guid": "ec9a800d-9976-404f-a057-37a5521c060f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Schema Url" }, "Notes": { "en-us": "

Many common schemas are available on SchemaStore or you can specify other URLs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "78ec0298-216e-4fad-bb9e-7dd465d82952" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135581, "Version": 2, "Guid": "be1342ac-5da9-4aa4-b09c-7a72729b06f5", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "*.json" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": true }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaRaw", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 135931, "Version": 5, "Guid": "32dba462-d65c-4aa9-8a99-46ecc3d05a2d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Raw JSON Schema" }, "Notes": { "en-us": "

Custom schemas must adhere to the latest Draft 8 specs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5b934578-e633-4bcd-86b3-217c61337d4e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135932, "Version": 4, "Guid": "fe42f234-acfb-4810-9ceb-5d14e52faa3f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135933, "Version": 4, "Guid": "544bfcfb-3fb2-4eef-b71f-d4736727b277", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "strict" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "https://json-schema.org/draft/2019-09/schema" } }, "Number": { "Rows": { "en-us": 25 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonCommentsAllowed", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 144393, "Version": 3, "Guid": "6a620b1e-0cf7-417f-8770-8ad7ab93dfa8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "JsonCommentsAllowed" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144394, "Version": 2, "Guid": "c7f62557-5854-4a3b-b938-3450a577399e", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Show warning if user adds comments" }, "TitleIndeterminate": { "en-us": "JSON comments - use defaults (show warning)" }, "TitleTrue": { "en-us": "Allow comments in JSON" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183875, "Version": 2, "Guid": "f57b953e-9caf-4bf8-bbf8-51d2479835f5", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Tooltip\nstrict,JSON must be valid (default),The JSON must be valid and can't be saved if it isn't.\nlight,Show warning on invalid JSON,The JSON should be valid, but save is still allowed if not.\nnone,JSON can be anything (not recommended),Allow any input, incl. text and invalid JSON." }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Tooltip]

" }, "ItemTooltip": { "en-us": "

[Item:Tooltip]

" }, "Title": { "en-us": "Custom JSON - JSON Validation" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183881, "Version": 7, "Guid": "a4800b93-f69b-419c-bfa9-7eadbf1a9bfc", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\nnone,No Schema (default),\"Don't use a JSON Schema\"\nstrict,Enforce (recommended),\"You can provide a real JSON Schema which will be checked and enforced.\"\nlight,Suggest,\"Use a JSON Schema to help editing, but don't enforce\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "Json Picker - Json Schema" } }, "Hyperlink": { "ItemLink": { "en-us": "https://json-schema.org/" } } }, "Owner": "dnn:userid=41" }, { "Id": 135938, "Version": 1, "Guid": "c00d685b-568a-45dc-b43a-92a32ed40b36", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.JsonSchemaMode != 'none'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183883, "Version": 1, "Guid": "2705cd61-c736-41f6-8d85-f717597924ea", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\nlink,Link / URL,\"Use a link to a Schema in the internet or on your site\"\nraw,Manual,\"Add Schema manually as JSON below\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "JSON Editor - Schema Source" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135939, "Version": 1, "Guid": "78ec0298-216e-4fad-bb9e-7dd465d82952", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.JsonSchemaMode != 'none' && data.JsonSchemaSource == 'link';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135936, "Version": 1, "Guid": "5b934578-e633-4bcd-86b3-217c61337d4e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.JsonSchemaMode != 'none' && data.JsonSchemaSource == 'raw';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@String", "Name": "@String", "Scope": "System.Fields", "Metadata": [ { "Id": 46433, "Version": 4, "Guid": "605214b9-4de7-448d-8db4-deefa46680f6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "String UI Definitions - only included for compatibility to old app-imports" }, "EditInstructions": { "*": "

Strings don't have any own settings - all string settings are at the specific input-element.

" }, "Label": { "*": "String (Text)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@String" } } ], "Attributes": [ { "Name": "InputType", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 46498, "Version": 3, "Guid": "c424fd63-3ed9-4cc2-8394-397fd6ec6add", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Input Type (old / deprecated)" }, "Notes": { "*": "This was an older implementation - do not use any more. It's only included so that old data will still work." }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 46499, "Version": 2, "Guid": "e63bb057-e819-49dc-8dc7-d3dfb804b33f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46500, "Version": 2, "Guid": "7e2d05df-8c51-41d4-8b0b-af258792fa04", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupOldDropdown", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130437, "Version": 8, "Guid": "d91897bf-1bcf-4df7-aaeb-893dcc94c3eb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Old Settings - Please Migrate Manually" }, "Notes": { "*": "

Previously the dropdown values were configured here. This was an older implementation - do not use any more. It's only included so that old data will still work. 

\n

Please configure this field to be a string-dropdown and move the values to there.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f670e444-96a8-4a00-b588-70a6f8d879ef" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=41" }, { "Id": 130438, "Version": 7, "Guid": "2c56b45a-4758-4d26-be47-56f30375602a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DropdownValues", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 46502, "Version": 14, "Guid": "884665fa-858e-4f29-b008-a8c358a26604", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Old Dropdown Values" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9841f99d-f188-4fb6-b8e0-05890cf288ae" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46504, "Version": 13, "Guid": "c43bbdf6-c699-4a3d-9e2b-32c56783209c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46505, "Version": 13, "Guid": "00c86c88-f991-4b1f-989e-de87e3886350", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 10 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "RowCount", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 46501, "Version": 7, "Guid": "e9353448-5f32-483f-b6f2-506694f247fe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "number-default" }, "Name": { "*": "Old Row Count" }, "Notes": { "*": "This was an older implementation - do not use any more. It's only included so that old data will still work." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "b8083a65-c590-48d8-a278-d96e180db82b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 46503, "Version": 6, "Guid": "bc63f8d1-3886-424f-bbb3-d8dbac21d7df", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "BtnFlushValues", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 130440, "Version": 3, "Guid": "f3ee9289-df63-4cda-92a7-e9037230b681", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Flush Old Values (toggle this after moving the values to the new location)" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "IsEphemeral": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130441, "Version": 2, "Guid": "b947dac0-8c4c-4639-8e25-fb45105d2cc4", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130439, "Version": 4, "Guid": "f670e444-96a8-4a00-b588-70a6f8d879ef", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if(context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n return !!data.DropdownValues;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130442, "Version": 4, "Guid": "9841f99d-f188-4fb6-b8e0-05890cf288ae", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.BtnFlushValues ? '' : data.initial; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value: Reset if Flush" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130443, "Version": 1, "Guid": "b8083a65-c590-48d8-a278-d96e180db82b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.BtnFlushValues ? '' : data.initial; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@string-default", "Name": "@string-default", "Scope": "System.Fields", "Metadata": [ { "Id": 53708, "Version": 1, "Guid": "7987fc75-68b0-4e00-81fc-1ed91a36c5fe", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Default single or multi-line string input" }, "EditInstructions": { "*": "" }, "Label": { "*": "String / Text (basic)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-default" } }, { "Id": 136470, "Version": 1, "Guid": "c3e3ebec-4144-4e36-9572-b0ecf45fd8f8", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-default" } }, { "Id": 136479, "Version": 1, "Guid": "ba5c21e9-4d50-4b6e-83f1-d5439de151ad", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-default" } } ], "Attributes": [ { "Name": "RowCount", "Type": "Number", "InputType": "number-default", "IsTitle": true, "Metadata": [ { "Id": 41666, "Version": 3, "Guid": "cc578b17-8d1c-4b3d-ad32-15ae128db466", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "number-default" }, "Name": { "*": "Rows" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77279, "Version": 2, "Guid": "057ed9d6-679a-437c-b87c-5b2ebbc22933", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "InputFontFamily", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 130496, "Version": 5, "Guid": "41af71f5-a567-4773-9a53-a23dda4caa88", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Font Family" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130497, "Version": 2, "Guid": "b2be2a5a-7c9b-48d2-859e-064e08ab3e80", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183889, "Version": 1, "Guid": "83a04b12-0c9c-4e0a-9429-f22fa099d4c0", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "6625ab49-7a69-45b0-be1e-f4a2e4cd1bf2" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TextWrapping", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 183872, "Version": 7, "Guid": "2be027ec-ebaf-4e69-acba-ac65eed2c08f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Text Wrapping on White Space" }, "Notes": { "en-us": "

Determines how text will wrap if it's longer than the width of the input. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183873, "Version": 2, "Guid": "3a02e478-bfaa-4949-ab08-c01c0665cb16", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183891, "Version": 3, "Guid": "21621aeb-54cf-4710-9f84-f38b5b73dce4", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "397911a4-839e-4c7e-9e20-deb26335aa3a" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183888, "Version": 4, "Guid": "6625ab49-7a69-45b0-be1e-f4a2e4cd1bf2", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Standard\",\"The same standard font as everywhere (default)\"\nmonospace,\"Monospace (code-style)\",\"Font where every character has the same width - usually Courier.

This is for code-style inputs\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "String-Default Input-Font-Family" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183890, "Version": 5, "Guid": "397911a4-839e-4c7e-9e20-deb26335aa3a", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info,Css\n,Automatic (default),\"Text will wrap\",normal\npre,Manual (only on new-line),\"No line wrapping unless manually adding an enter\",pre" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "

[Item:Info]

\n

 

\n

In CSS this is \"[Item:Css]\"

" }, "Title": { "en-us": "String-Default - Text Wrapping Options" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@string-url-path", "Name": "@string-url-path", "Scope": "System.Fields", "Metadata": [ { "Id": 53712, "Version": 2, "Guid": "95489982-4260-446b-9289-839cb132feb4", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configuration for a string-url-path field" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Allows text-input, but only for url-valid characters. Ideal to auto-generate path-parts based on other fields like the title. 

" }, "Label": { "en-us": "Url-Path or Path-Part" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-url-path" } } ], "Attributes": [ { "Name": "AutoGenerateMask", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41676, "Version": 2, "Guid": "7c760382-9abe-47d7-9cfe-72dc9c86e34d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "[Title]" }, "InputType": { "*": "string-default" }, "Name": { "*": "Auto Generate Path Mask" }, "Notes": { "*": "

Will let you automatically pick up a value - like the item-title - and use it to generate the initial path. Default is [Title] which would use the title-field.

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 41677, "Version": 2, "Guid": "a2b35c49-0b18-4484-9bf9-1298cb682de8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 77281, "Version": 1, "Guid": "00171650-ff77-4e6b-98e1-af546b29c807", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AllowSlashes", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 41678, "Version": 3, "Guid": "2884dc70-332b-4cb9-8d76-186506977d5a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Allow Slashes inside Path" }, "Notes": { "en-us": "

This would allow path-parts with slashes inside the path - so word1/word2 would be allowed. Usually you don't want this, because in most cases you will want to have only non-slash words in this url-part.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 77280, "Version": 2, "Guid": "9520913a-714e-4d6a-81a9-d231e03ff567", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No slashes allowed in this field" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Slashes allowed in this field" } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg", "Scope": "System.Fields", "Metadata": [ { "Id": 53697, "Version": 10, "Guid": "7c8aad9f-40a8-4756-94fb-2c3e58e8a2f6", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "[system:path]/extensions/field-string-wysiwyg/index.js" }, "ConfigTypes": { "en-us": "" }, "Description": { "en-us": "light wysiwyg-editor (recommended) - without images or advanced formating, as is usually the case in professional content-templates." }, "Label": { "en-us": "WYSIWYG editor (default)" }, "Type": { "en-us": "string-wysiwyg" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": true } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-wysiwyg" } }, { "Id": 53713, "Version": 4, "Guid": "c9da1ed4-42ab-4947-957d-7f40c0c44a94", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Edit text like using word with the tiny-mce rich-text editor" }, "EditInstructions": { "*": "

Configure settings for the default Wysiwyg editor. For more advanced customizations you need to create a custom Wysiwyg WebComponent.

" }, "Label": { "*": "WYSIWYG (default)" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-wysiwyg" } }, { "Id": 136473, "Version": 1, "Guid": "9f594e21-94c8-4983-a63e-d8038b1f20c1", "Type": { "Id": "c740085a-d548-41f3-8d06-0a48b8692345", "Name": "IsRecommendedDecorator" }, "Attributes": { "String": { "Message": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-wysiwyg" } }, { "Id": 183845, "Version": 2, "Guid": "746882b7-96af-4903-9ee7-da6fe2b3a42e", "Type": { "Id": "c490b369-9cd2-4298-af74-19c1e438cdfc", "Name": "MetadataExpectedDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "" }, "MetadataTypes": { "en-us": "ImageDecorator" }, "Title": { "en-us": "Wysiwyg expects Image Decorator Metadata" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 2 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@string-wysiwyg" } } ], "Attributes": [ { "Name": "WysiwygConfiguration", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 166491, "Version": 12, "Guid": "b6b90707-fe77-4806-b4ce-ba3a6274ae7a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Configuration / Presets" }, "Notes": { "en-us": "

New v15.04 - see docs.

" }, "Placeholder": { "en-us": "Default mode" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166504, "Version": 10, "Guid": "d9a71337-e54b-41bc-b051-cc93b09a8f33", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 166505, "Version": 11, "Guid": "81e6ae95-754e-42d6-9fcb-6deb20e52668", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SettingsEntities" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "ContentType=StringWysiwygConfiguration" }, "Value": { "en-us": "Guid" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupOverrideSettings", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 167718, "Version": 2, "Guid": "ab4df5d5-0c62-44b8-8ca3-a598aa98abaa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Override Settings from the Configuration" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 167719, "Version": 1, "Guid": "d70eab19-4d4f-4ca4-a661-9b8426b6f9e2", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Dialog", "Type": "String", "InputType": "string-picker", "IsTitle": true, "Metadata": [ { "Id": 53794, "Version": 10, "Guid": "5408022f-dfc2-4989-b645-1be76bb6d89b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Dialog Type" }, "Notes": { "en-us": "

Determines if the wysiwyg is opened in a dialog (default behaviour in 2sxc 10).

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53797, "Version": 5, "Guid": "041334ae-0ec1-4373-b92b-2f7a74dd5a9b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 183898, "Version": 3, "Guid": "8536c409-feac-4c30-9629-eb842076552c", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "28e7b048-6967-4abf-bf84-4b09e5c45843" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "InlineInitialHeight", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 142600, "Version": 7, "Guid": "299a0045-1ff2-45d4-9351-d7863ca2a208", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Inline Editor - Initial Height" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "18da7984-28c7-4c22-9c30-c7d698808c15" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142601, "Version": 4, "Guid": "262c1a72-0d37-4eb6-ace1-3b6cf35f57fa", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183900, "Version": 1, "Guid": "3eba4b81-de2a-48e8-a5b3-5f6076625209", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "43c38be0-097c-4c0d-8860-7a530e1f4c7a" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgEnhanced", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 164913, "Version": 6, "Guid": "8eac2cf4-3544-4278-978f-b2796fbfa656", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgEnhanced" }, "Notes": { "en-us": "

Important: Enhanced mode allows editors to better align images / content in the post, but it changes how image alignment happens. This requires the page to also include some CSS to make it look good. See docs [TODO]

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c1f607b3-6cc1-4797-a75b-b46555f512cf" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentCss", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 75079, "Version": 3, "Guid": "e6c3af21-b3f4-449b-90fd-60ff5529b8fe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "hyperlink-default" }, "Name": { "*": "Content Css File" }, "Notes": { "*": "" }, "Placeholder": { "*": "additional css file to load into the wysiwyg" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 75080, "Version": 2, "Guid": "271f2b0d-865f-42b0-b711-69c4e53226af", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "*": "adam,more" }, "DefaultDialog": { "*": "" }, "FileFilter": { "*": "" }, "Paths": { "*": "" }, "ServerResourceMapping": { "*": "" } }, "Boolean": { "ShowAdam": { "*": true }, "ShowFileManager": { "*": false }, "ShowImageManager": { "*": false }, "ShowPagePicker": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupButtons", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 53799, "Version": 3, "Guid": "4ef2a9ce-1362-4b26-8503-d077f47d7a6f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Override Show/Hide of Special Buttons" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "325f68ef-247c-446c-bbe2-30cf32ea437a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 142605, "Version": 2, "Guid": "9a287e0d-3692-4a03-b340-490c0d814ad8", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ButtonSource", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 53795, "Version": 10, "Guid": "54e74c8d-9539-44ba-9ce0-025db7a42e0c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "HTML Source" }, "Notes": { "en-us": "

The button to access the HTML source code.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53800, "Version": 5, "Guid": "464233ce-8364-4b2f-b8fc-8c3591ada33e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 183905, "Version": 3, "Guid": "4e86b58c-6c66-4ff9-acb5-d58cd335e7ec", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "7a6b443a-6d23-45b2-9499-35743cf7d924" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ButtonAdvanced", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 53796, "Version": 9, "Guid": "2e4375c3-f594-44f8-b8d6-bf1d2f61bd1b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Advanced" }, "Notes": { "en-us": "

The button to access advanced features such as formatting and tables.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53802, "Version": 5, "Guid": "ebacf837-1ae9-4c8a-b8f3-70a40b4daec6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 183907, "Version": 2, "Guid": "b3eaf477-32ab-47aa-99ea-ada8a97b2d0e", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "4e5df6de-0980-48f3-8ad4-3e405fe67138" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 160369, "Version": 6, "Guid": "fed70eee-17b9-428b-99df-bae94935901d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Features (experimental /WIP v15)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 160371, "Version": 4, "Guid": "5211c30f-484a-4cf1-93f8-c966ba6040cd", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183897, "Version": 3, "Guid": "28e7b048-6967-4abf-bf84-4b09e5c45843", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Default (inline editor)\",\"Will put the WYSIWYG into the form and usually allow opening a larger dialog when working on a lot of content\"\ndialog,\"Dialog only\",\"Only show a brief preview of the HTML, then use the dialog for editing\"\ninline,\"Inline without dialog\",\"Place inline in form without dialog\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "String-WYSIWYG Dialog Type" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 142603, "Version": 4, "Guid": "18da7984-28c7-4c22-9c30-c7d698808c15", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.Dialog != 'dialog';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183899, "Version": 5, "Guid": "43c38be0-097c-4c0d-8860-7a530e1f4c7a", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Default (narrow)\",\"Default is narrow, but visibly multi-line with ca. 3 lines of text\"\n1,\"Minimum\",\"As narrow as possible, so the user will usually not type much, and it doesn't take much screen space\"\n3,\"Narrow\",\"Narrow, but visibly multi-line\"\n5,\"Medium\",\"Medium size\"\n10,\"Large\",\"Large so it's clearly meant for a lot of text. Only do this if the user should write a lot\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

\n

ca. [Item:Value] lines

" }, "ItemTooltip": { "en-us": "

[Item:Info]

\n

ca. [Item:Value] lines

" }, "Title": { "en-us": "String-WYSIWYG - Inline Initial Height" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164914, "Version": 3, "Guid": "c1f607b3-6cc1-4797-a75b-b46555f512cf", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.WysiwygMode === 'enhanced'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 142604, "Version": 3, "Guid": "325f68ef-247c-446c-bbe2-30cf32ea437a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n // only run in the beginning\n if (context.cache.alreadyRun) return data.value;\n context.cache.alreadyRun = true;\n return data.ButtonSource == '' && data.ButtonAdvanced == '';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Collapsed" }, "Title": { "en-us": "Setting Collapsed" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183904, "Version": 1, "Guid": "7a6b443a-6d23-45b2-9499-35743cf7d924", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Default\",\"In default mode the button is disabled in the small editor, but enabled in the popup Dialog\"\ntrue,\"Always Enable\",\"Enable the button in both the small editor as well as the popup dialog\"\nfalse,\"Always Disable\",\"Disable the button in both the small editor as well as the popup dialog\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "String-WYSIWyG Button Source" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183906, "Version": 2, "Guid": "4e5df6de-0980-48f3-8ad4-3e405fe67138", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Default\",\"Disabled in the small editor, enabled in the popup Dialog\"\ntrue,\"Always Enable\",\"Always enable in all editors\"\nfalse,\"Always Disable\",\"Always disable in all editors\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "String-WYSIWYG - Button Advanced" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "@custom-gps", "Name": "@custom-gps", "Scope": "System.Fields", "Metadata": [ { "Id": 46512, "Version": 9, "Guid": "e0342e24-fca1-412c-8b72-7220833a1410", "Type": { "Id": "ContentType-InputType", "Name": "ContentType-InputType" }, "Attributes": { "String": { "AngularAssets": { "en-us": "[system:path]/extensions/field-custom-gps/index.js" }, "ConfigTypes": { "en-us": "" }, "Description": { "en-us": "to pick a location with a map - can also store the values in separate number fields and auto-find an address based on values in the form" }, "Label": { "en-us": "GPS Picker" }, "Type": { "en-us": "custom-gps" } }, "Boolean": { "DisableI18n": { "en-us": false }, "UseAdam": { "en-us": false } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@custom-gps" } }, { "Id": 53674, "Version": 1, "Guid": "b97ce122-71d1-41a7-b9f1-6f122023cfbe", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Configure the input for gps selection" }, "EditInstructions": { "*": "" }, "Label": { "*": "Custom GPS" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@custom-gps" } }, { "Id": 136786, "Version": 1, "Guid": "2f1defcf-be98-4ebd-8ced-6737d67bb39c", "Type": { "Id": "529ba3a2-d7d4-4f40-a81b-ff819de03a9e", "Name": "IsDefaultDecorator" }, "Attributes": {}, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@custom-gps" } } ], "Attributes": [ { "Name": "AddressMask", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 41596, "Version": 2, "Guid": "6a21874b-9f74-4248-8d4f-6ce8b0c4b0ba", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Address Mask" }, "Notes": { "*": "An initial address to search for or better - tokens of form-fields to find an address in the map. example (spaces intended): [Address] [Zip] [City]" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46496, "Version": 1, "Guid": "3d54b676-c483-4f1c-b957-2f13b1933c1c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } }, "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" }, { "Id": 46497, "Version": 1, "Guid": "fd224683-eff9-4131-a2d9-5de283b81a79", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "Address Mask", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41590, "Version": 2, "Guid": "6e192b44-91bc-44fa-89fb-521395fb2d43", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Address Mask" }, "Notes": { "*": "

Old field - do not use any more. Only kept here for compatibility because old data already uses this field. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=1" }, { "Id": 130222, "Version": 1, "Guid": "b60c4562-efc0-4201-b2ab-411efb36a7ba", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130223, "Version": 1, "Guid": "92328388-990f-4835-afd3-4601e0d39a06", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": {}, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupOldFields", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130224, "Version": 2, "Guid": "c6dfdfd8-7d60-4a2f-a110-7314ad310056", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Old Settings (not recommended)" }, "Notes": { "*": "

These two fields were an older way of passing on the numbers from the GPS picker to other number fields. Please don't use any more, as you can now simply use the GPS field itself using AsDynamic(...).

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130225, "Version": 1, "Guid": "1c3727d5-1b3d-4649-a664-f06ba10546a8", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LatField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41592, "Version": 1, "Guid": "f7c19c8a-29b4-4d8e-87cb-1083780b83ca", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "LatField" }, "Notes": { "*": "An optional field in the form into which the lat-coordinate would be copied automatically by this UI. Example: GPSLat" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "LongField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 41594, "Version": 1, "Guid": "b6c71a10-fde7-43ed-adc5-16ef4ce8912f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "LongField" }, "Notes": { "*": "An optional field in the form into which the lat-coordinate would be copied automatically by this UI. Example: GPSLong" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "@custom-json-editor", "Name": "@custom-json-editor", "Scope": "System.Fields", "Metadata": [ { "Id": 48236, "Version": 6, "Guid": "1c3a6fe6-3318-4308-b063-0716d8de472d", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configuration for a string-json field" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "Custom JSON editor" }, "ListInstructions": { "en-us": "

Note that this is a Custom type, we recommend you use the String json instead. 

" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "@custom-json-editor" } }, { "Id": 136467, "Version": 1, "Guid": "f48cfda7-274a-4e44-9a70-1da3e5c92338", "Type": { "Id": "852fe15e-bf23-44e6-a856-0a130203496c", "Name": "IsObsoleteDecorator" }, "Attributes": { "String": { "Message": { "en-us": "This is an older type - we recommend that you use the String implementation instead. " } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "@custom-json-editor" } } ], "Attributes": [ { "Name": "Rows", "Type": "Number", "InputType": "number-default", "IsTitle": true, "Metadata": [ { "Id": 48235, "Version": 3, "Guid": "992553d3-8e76-4177-96b9-e25e3f08f930", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "10" }, "InputType": { "*": "number-default" }, "Name": { "*": "Rows" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 74864, "Version": 2, "Guid": "a3cec011-c44e-4c8a-8131-74067976b472", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "JsonValidation", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 133274, "Version": 8, "Guid": "05edcd7a-4557-4b97-8505-3513cc372b33", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "strict" }, "InputType": { "*": "string-picker" }, "Name": { "en-us": "JSON Validation" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 133275, "Version": 3, "Guid": "428437ae-e7d7-4cd3-a339-879174513de1", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 133276, "Version": 3, "Guid": "d84e983c-9e0a-4926-8590-fc9c79614cfd", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "strict:JSON must be valid (default)\nlight:Show warning on invalid JSON but allow Save\nnone:JSON can be any text and also invalid JSON (not recommended)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 183876, "Version": 1, "Guid": "99cdc772-db96-4d00-b8be-f2666350814a", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "checkbox" }, "Separator": { "en-us": "\\n" } }, "Entity": { "DataSources": { "*": [ "f57b953e-9caf-4bf8-bbf8-51d2479835f5" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaMode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 133277, "Version": 5, "Guid": "eaa0f5d5-2f50-41f3-b10c-faf931d0ee0c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "none" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "JSON Schema Mode" }, "Notes": { "en-us": "

JSONs can validate using a schema. This can be activated. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 133278, "Version": 4, "Guid": "76b6560c-d8cd-4c2a-a84b-8e7b80ed5ca5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 133279, "Version": 4, "Guid": "03362486-8d56-4380-89f8-0063b8914237", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "none:Don't use a JSON Schema (default)\nstrict:Enforce a JSON Schema\nlight:Use a JSON Schema to help editing, but don't enforce" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaSource", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 133287, "Version": 4, "Guid": "a824446a-0af8-452c-8016-bd25c35e1b29", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "link" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Schema Source" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "196e4c5d-2c45-4908-bd3f-e9ae6d3eb8e0" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 133288, "Version": 3, "Guid": "265bad65-1cd1-49a9-bf87-02ac1be42d81", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 133289, "Version": 3, "Guid": "c7f8b05b-c400-4c23-b3c6-92a8ff0625da", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "link:Link to a Schema\nraw:Add Schema manually as JSON" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaUrl", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 133266, "Version": 5, "Guid": "0ce7a189-a2ab-40e5-93c5-082e5bb3b3ff", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Schema Url" }, "Notes": { "en-us": "

Many common schemas are available on SchemaStore or you can specify other URLs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "91e53b6e-50cf-4da0-a641-87cf17aa4813" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 133280, "Version": 4, "Guid": "2bec1394-4e83-40c4-a3fa-6d8277d80d85", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "*.json" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": true }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "JsonSchemaRaw", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 135930, "Version": 4, "Guid": "e75a881d-c31d-49db-a716-2e7618ef4048", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Raw JSON Schema" }, "Notes": { "en-us": "

Custom schemas must adhere to the latest Draft 8 specs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "0dc4f1a4-caaf-4caf-8449-cd18e751e27d" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135934, "Version": 3, "Guid": "b70132e6-0f9c-45a0-82dc-8351257c06a0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135935, "Version": 3, "Guid": "4fbe9bb9-1196-4997-a5e2-0ed10dd9d171", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "strict" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "https://json-schema.org/draft/2019-09/schema" } }, "Number": { "Rows": { "en-us": 25 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 133290, "Version": 2, "Guid": "196e4c5d-2c45-4908-bd3f-e9ae6d3eb8e0", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.JsonSchemaMode != 'none'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 133281, "Version": 6, "Guid": "91e53b6e-50cf-4da0-a641-87cf17aa4813", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.JsonSchemaMode != 'none' && data.JsonSchemaSource == 'link';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135937, "Version": 1, "Guid": "0dc4f1a4-caaf-4caf-8449-cd18e751e27d", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.JsonSchemaMode != 'none' && data.JsonSchemaSource == 'raw';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-queries.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "Entities": [ { "Id": 42901, "Version": 27, "Guid": "d680fba2-9ab7-417a-8821-db23c15f4a2e", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all apps of a zone (site)" }, "Name": { "en-us": "System.Apps" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "ListContent,Default" }, "StreamWiring": { "en-us": "3e0daa8d-2c13-4b73-94f9-cae9d1c412e8:Default>666576b7-65f7-4d93-96ca-238ef1d336dd:Default\r\n666576b7-65f7-4d93-96ca-238ef1d336dd:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:ZoneId]=2" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42968, "Version": 7, "Guid": "3e0daa8d-2c13-4b73-94f9-cae9d1c412e8", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Apps" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.System.Apps, ToSic.Eav.Apps" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 480,\r\n \"Left\": 440\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d680fba2-9ab7-417a-8821-db23c15f4a2e" }, "Metadata": [ { "Id": 42969, "Version": 2, "Guid": "ead6c3a7-cd8f-433d-bee0-c1fd40d9802e", "Type": { "Id": "fabc849e-b426-42ea-8e1c-c04e69facd9b", "Name": "ToSic.Eav.DataSources.Apps" }, "Attributes": { "String": { "Title": { "*": "" }, "ZoneId": { "*": "[QueryString:ZoneId]" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3e0daa8d-2c13-4b73-94f9-cae9d1c412e8" } } ] }, { "Id": 42970, "Version": 5, "Guid": "666576b7-65f7-4d93-96ca-238ef1d336dd", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "ValueSort" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.ValueSort, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 240,\r\n \"Left\": 440\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d680fba2-9ab7-417a-8821-db23c15f4a2e" }, "Metadata": [ { "Id": 42971, "Version": 1, "Guid": "bdda4bef-cee9-439a-b92b-622472bf5a01", "Type": { "Id": "|Config ToSic.Eav.DataSources.ValueSort", "Name": "ToSic.Eav.DataSources.ValueSort" }, "Attributes": { "String": { "Attributes": { "*": "Name" }, "Directions": { "*": "Asc" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "666576b7-65f7-4d93-96ca-238ef1d336dd" } } ] }, { "Id": 166436, "Version": 1, "Guid": "1c219107-bc74-492f-8bc3-131a18e631b1", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d680fba2-9ab7-417a-8821-db23c15f4a2e" } } ] }, { "Id": 42938, "Version": 19, "Guid": "95041b6d-8669-4941-a516-47725acfe6ec", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all attributes of a content-type" }, "Name": { "en-us": "System.Attributes" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "ListContent,Default" }, "StreamWiring": { "en-us": "018a942b-1bad-4124-978c-0d0c35633be1:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:ContentTypeName]=@All,@Entity" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42980, "Version": 9, "Guid": "018a942b-1bad-4124-978c-0d0c35633be1", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Attributes" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.System.Attributes, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 354,\r\n \"Left\": 400\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "95041b6d-8669-4941-a516-47725acfe6ec" }, "Metadata": [ { "Id": 43014, "Version": 1, "Guid": "788a504a-9636-4b1b-9620-db2dcf612fa5", "Type": { "Id": "5461d34d-7dc6-4d38-9250-a0729cc8ead3", "Name": "ToSic.Eav.DataSources.Attributes" }, "Attributes": { "String": { "ContentTypeName": { "*": "[QueryString:ContentTypeName]" }, "Title": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "018a942b-1bad-4124-978c-0d0c35633be1" } } ] }, { "Id": 166437, "Version": 1, "Guid": "d06b4574-0b8b-41a9-87c2-57610f505ae2", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "95041b6d-8669-4941-a516-47725acfe6ec" } } ] }, { "Id": 42937, "Version": 33, "Guid": "ede9fc6f-34bb-4a1f-8482-6dd0742e365f", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "*": "Retrieve the content-types of an app" }, "Name": { "*": "System.ContentTypes" }, "Params": { "*": "AppId=[QueryString:AppId]\nScope=[QueryString:Scope]" }, "StreamsOut": { "*": "ListContent,Default" }, "StreamWiring": { "*": "db8515d1-e8c9-4e84-a1ec-970376ea9922:Default>Out:Default" }, "TestParameters": { "*": "[QueryString:AppId]=\n[QueryString:Scope]=" }, "VisualDesignerData": { "*": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "*": true }, "HiddenInQueryPicker": { "*": false } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42978, "Version": 14, "Guid": "db8515d1-e8c9-4e84-a1ec-970376ea9922", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "ContentTypes" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.System.ContentTypes, ToSic.Eav.Apps" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 400,\r\n \"Left\": 460\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ede9fc6f-34bb-4a1f-8482-6dd0742e365f" }, "Metadata": [ { "Id": 42979, "Version": 3, "Guid": "d0ef68cc-151d-4cc5-bb57-1b424c9f7d19", "Type": { "Id": "37b25044-29bb-4c78-85e4-7b89f0abaa2c", "Name": "ToSic.Eav.DataSources.ContentTypes" }, "Attributes": { "String": { "AppId": { "en-us": "[Params:AppId]" }, "Scope": { "en-us": "[Params:Scope]" }, "Title": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "db8515d1-e8c9-4e84-a1ec-970376ea9922" } } ] }, { "Id": 166438, "Version": 1, "Guid": "5a87e94f-a3f2-4809-9aa4-7386d1ecc907", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ede9fc6f-34bb-4a1f-8482-6dd0742e365f" } } ] }, { "Id": 129754, "Version": 22, "Guid": "34acb79b-21e1-423e-bdec-b67f4a5c8c85", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all pages of the current site. " }, "Name": { "en-us": "System.Pages" }, "Params": { "en-us": "IncludeHidden=[QueryString:IncludeHidden]\nIncludeLinks=[QueryString:IncludeLinks]\nIncludeDeleted=[QueryString:IncludeDeleted]\nIncludeAdmin=[QueryString:IncludeAdmin]\nIncludeSystem=[QueryString:IncludeSystem]" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "b1fa7bee-c137-4e60-b8b5-3588b9c16b9a:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:IncludeHidden]=true" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 129756, "Version": 13, "Guid": "b1fa7bee-c137-4e60-b8b5-3588b9c16b9a", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Pages" }, "PartAssemblyAndType": { "*": "e35031b2-3e99-41fe-a5ac-b79f447d5800" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 280,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "34acb79b-21e1-423e-bdec-b67f4a5c8c85" }, "Metadata": [ { "Id": 169984, "Version": 2, "Guid": "fb4d8d0d-9eef-4a95-acd0-0d9843b432e7", "Type": { "Id": "3d970d2b-32cb-4ecb-aeaf-c49fbcc678a5", "Name": "PagesDataSourceConfig" }, "Attributes": { "String": { "IncludeAdmin": { "en-us": "[Params:IncludeAdmin||false]" }, "IncludeDeleted": { "en-us": "[Params:IncludeDeleted||false]" }, "IncludeHidden": { "en-us": "[Params:IncludeHidden||false]" }, "IncludeLinks": { "en-us": "[Params:IncludeLinks||true]" }, "IncludeSystem": { "en-us": "[Params:IncludeSystem||false]" }, "RequireEditPermissions": { "en-us": "false" }, "RequireViewPermissions": { "en-us": "true" }, "Title": { "en-us": "Pages Configuration" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "b1fa7bee-c137-4e60-b8b5-3588b9c16b9a" } } ] }, { "Id": 129760, "Version": 1, "Guid": "d540eb1f-f7f9-45cb-8651-8daf71b1bffb", "Type": { "Id": "PermissionConfiguration", "Name": "PermissionConfiguration" }, "Attributes": { "String": { "Condition": { "*": "SecurityAccessLevel.Edit" }, "Grant": { "*": "r" }, "Identity": { "*": "" }, "Title": { "*": "Accessible for content editors" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "34acb79b-21e1-423e-bdec-b67f4a5c8c85" } }, { "Id": 166439, "Version": 1, "Guid": "02d62934-cca2-4c75-bfcb-079297f458ad", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "34acb79b-21e1-423e-bdec-b67f4a5c8c85" } } ] }, { "Id": 42915, "Version": 20, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieves the queries of the current app (usually for drop-downs)" }, "Name": { "en-us": "System.Queries" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "89b3116e-efab-4fee-8a7c-afe1e28825d2:DataPipeline>3d48f6fe-81dd-4cef-8717-45ab3c786625:Default\r\n3b01ba93-62ea-4f73-b150-c8129eb82cab:Default>40460932-1d32-4005-8bd1-c45f8599da24:Default\r\n40460932-1d32-4005-8bd1-c45f8599da24:Default>Out:Default\r\n3d48f6fe-81dd-4cef-8717-45ab3c786625:Default>3b01ba93-62ea-4f73-b150-c8129eb82cab:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42916, "Version": 14, "Guid": "89b3116e-efab-4fee-8a7c-afe1e28825d2", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "App" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.App, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 840,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" }, "Metadata": [ { "Id": 169176, "Version": 1, "Guid": "8e81803b-1701-4417-85d9-1c9ad1caf422", "Type": { "Id": "|Config ToSic.Eav.DataSources.App", "Name": "ToSic.Eav.DataSources.App" }, "Attributes": { "String": { "AppSwitch": { "en-us": "" }, "WithAncestors": { "en-us": "true" }, "ZoneSwitch": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "89b3116e-efab-4fee-8a7c-afe1e28825d2" } } ] }, { "Id": 42917, "Version": 11, "Guid": "3b01ba93-62ea-4f73-b150-c8129eb82cab", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "AttributeFilter" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.AttributeFilter, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 460,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" }, "Metadata": [ { "Id": 42918, "Version": 2, "Guid": "33ab87f2-ae04-4b2f-a80c-664d0a87a96e", "Type": { "Id": "|Config ToSic.Eav.DataSources.AttributeFilter", "Name": "ToSic.Eav.DataSources.AttributeFilter" }, "Attributes": { "String": { "AttributeNames": { "*": "Name,Id,Guid" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3b01ba93-62ea-4f73-b150-c8129eb82cab" } } ] }, { "Id": 42919, "Version": 7, "Guid": "40460932-1d32-4005-8bd1-c45f8599da24", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "ValueSort" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.ValueSort, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 220,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" }, "Metadata": [ { "Id": 42920, "Version": 2, "Guid": "f0034b9d-9255-4cb1-906a-33081a79bca3", "Type": { "Id": "|Config ToSic.Eav.DataSources.ValueSort", "Name": "ToSic.Eav.DataSources.ValueSort" }, "Attributes": { "String": { "Attributes": { "en-us": "AppId,Name" }, "Directions": { "en-us": "Desc,Asc" }, "Languages": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "40460932-1d32-4005-8bd1-c45f8599da24" } } ] }, { "Id": 42926, "Version": 1, "Guid": "6f0a476e-9b25-4a41-9aed-71711b3e46f3", "Type": { "Id": "PermissionConfiguration", "Name": "PermissionConfiguration" }, "Attributes": { "String": { "Condition": { "*": "SecurityAccessLevel.Admin" }, "Grant": { "*": "r" }, "Title": { "*": "Security Rule" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" } }, { "Id": 166440, "Version": 1, "Guid": "dcbe1853-edb8-4433-80e8-d9a5d51182f7", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" } }, { "Id": 169180, "Version": 2, "Guid": "3d48f6fe-81dd-4cef-8717-45ab3c786625", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Value Filter" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.ValueFilter, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 660,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e57cfebc-2c9f-4feb-95e0-9362049b7502" }, "Metadata": [ { "Id": 169181, "Version": 1, "Guid": "4667674d-dbdf-4a0d-a184-8d37f09373c3", "Type": { "Id": "|Config ToSic.Eav.DataSources.ValueFilter", "Name": "ToSic.Eav.DataSources.ValueFilter" }, "Attributes": { "String": { "Attribute": { "en-us": "HiddenInQueryPicker" }, "Languages": { "en-us": "" }, "Operator": { "en-us": "!=" }, "Take": { "en-us": "" }, "Value": { "en-us": "true" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d48f6fe-81dd-4cef-8717-45ab3c786625" } } ] } ] }, { "Id": 42946, "Version": 39, "Guid": "2889c62f-9c07-4027-b85e-af7ddf55f44f", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieve streams and fields of a query. " }, "Name": { "en-us": "System.QueryInfo" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "ListContent,Default,Attributes" }, "StreamWiring": { "en-us": "c11d7835-035d-441c-8cbc-287aaecbea81:Attributes>Out:Attributes\r\nc11d7835-035d-441c-8cbc-287aaecbea81:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:QueryName]=System.Apps\n[QueryString:StreamName]=Default" }, "VisualDesignerData": { "en-us": "" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42976, "Version": 12, "Guid": "c11d7835-035d-441c-8cbc-287aaecbea81", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "QueryInfo" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.System.QueryInfo, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 340,\r\n \"Left\": 427\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2889c62f-9c07-4027-b85e-af7ddf55f44f" }, "Metadata": [ { "Id": 42977, "Version": 1, "Guid": "beaa3575-01f6-4730-9232-3b29a8287e1d", "Type": { "Id": "4638668f-d506-4f5c-ae37-aa7fdbbb5540", "Name": "ToSic.Eav.DataSources.QueryInfo" }, "Attributes": { "String": { "QueryName": { "*": "[QueryString:QueryName]" }, "StreamName": { "*": "[QueryString:StreamName]" }, "Title": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "c11d7835-035d-441c-8cbc-287aaecbea81" } } ] }, { "Id": 166441, "Version": 1, "Guid": "cf5ae7aa-f70e-42e0-ad42-83d6398c0cc8", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2889c62f-9c07-4027-b85e-af7ddf55f44f" } }, { "Id": 169163, "Version": 2, "Guid": "f61dbc48-f992-41c2-9d04-f6aa0d6342fa", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

IMPORTANT: The test-values should not be changed - they must be [QueryString:QueryName]=System.Apps and [QueryString:StreamName]=Default

" }, "NoteType": { "en-us": "warning" }, "Title": { "en-us": "IMPORTANT: The test-values sho..." } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2889c62f-9c07-4027-b85e-af7ddf55f44f" } } ] }, { "Id": 42900, "Version": 20, "Guid": "e8a702d2-eccd-4b0f-83bd-600d8a8449d9", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieve full list of all zones" }, "Name": { "en-us": "System.Zones" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "ListContent,Default" }, "StreamWiring": { "en-us": "a942aaca-088c-41f4-b938-f625a5170ab0:Default>Out:Default\r\ne60248e9-4dce-475a-a99d-61d11a6fb1cc:Default>a942aaca-088c-41f4-b938-f625a5170ab0:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=1", "Metadata": [ { "Id": 42948, "Version": 9, "Guid": "a942aaca-088c-41f4-b938-f625a5170ab0", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Sort by Tenant Name" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.ValueSort, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 226,\r\n \"Left\": 466\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e8a702d2-eccd-4b0f-83bd-600d8a8449d9" }, "Metadata": [ { "Id": 42949, "Version": 3, "Guid": "b47783df-02fd-482f-9548-a231d79a702e", "Type": { "Id": "|Config ToSic.Eav.DataSources.ValueSort", "Name": "ToSic.Eav.DataSources.ValueSort" }, "Attributes": { "String": { "Attributes": { "*": "TenantName" }, "Directions": { "*": "Asc" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "a942aaca-088c-41f4-b938-f625a5170ab0" } } ] }, { "Id": 42967, "Version": 3, "Guid": "e60248e9-4dce-475a-a99d-61d11a6fb1cc", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Zones" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.System.Zones, ToSic.Eav.Apps" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 400,\r\n \"Left\": 469\r\n}" } } }, "Owner": "dnn:userid=1", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e8a702d2-eccd-4b0f-83bd-600d8a8449d9" } }, { "Id": 166442, "Version": 1, "Guid": "4a5b205b-9b1f-4a24-bb71-e880dc74b73f", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e8a702d2-eccd-4b0f-83bd-600d8a8449d9" } } ] }, { "Id": 160746, "Version": 23, "Guid": "f54e66aa-0ed1-47ca-b15d-774f3a5d60ca", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieve all roles of the current site." }, "Name": { "en-us": "System.UserRoles" }, "Params": { "en-us": "RoleIds=[QueryString:RoleIds]\nExcludeRoleIds=[QueryString:ExcludeRoleIds]" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "e5837542-beeb-4528-829b-2983d11e566a:Default>Out:Default" }, "TestParameters": { "en-us": "[Params:ExcludeRoleIds]=351" }, "VisualDesignerData": { "en-us": "" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 160751, "Version": 9, "Guid": "e5837542-beeb-4528-829b-2983d11e566a", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Roles" }, "PartAssemblyAndType": { "*": "eee54266-d7ad-4f5e-9422-2d00c8f93b45" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 440,\r\n \"Left\": 440\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "f54e66aa-0ed1-47ca-b15d-774f3a5d60ca" }, "Metadata": [ { "Id": 160759, "Version": 3, "Guid": "68bac4d0-8a56-4cbd-b7fd-c656c290b062", "Type": { "Id": "1b9fd9d1-dde0-40ad-bb66-5cd7f30de18d", "Name": "RolesDataSourceConfig" }, "Attributes": { "String": { "ExcludeRoleIds": { "en-us": "[Params:ExcludeRoleIds]" }, "RoleIds": { "en-us": "[Params:RoleIds]" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e5837542-beeb-4528-829b-2983d11e566a" } } ] }, { "Id": 166443, "Version": 1, "Guid": "140ce9e2-6018-4fdb-b9ec-dab072f6a38a", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "f54e66aa-0ed1-47ca-b15d-774f3a5d60ca" } } ] }, { "Id": 160760, "Version": 27, "Guid": "dd3021bf-1b9a-4d10-8dde-12efe9832f47", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get users of this site." }, "Name": { "en-us": "System.Users" }, "Params": { "en-us": "UserIds=[QueryString:UserIds]\nExcludeUserIds=[QueryString:ExcludeUserIds]\nRoleIds=[QueryString:RoleIds]\nExcludeRoleIds=[QueryString:ExcludeRoleIds]\nIncludeSystemAdmins=[QueryString:IncludeSystemAdmins]" }, "StreamsOut": { "en-us": "Default,Header,Roles" }, "StreamWiring": { "en-us": "71a257cd-cebf-4c3c-a588-c46e9244a398:Default>Out:Default\r\n71a257cd-cebf-4c3c-a588-c46e9244a398:Roles>Out:Roles" }, "TestParameters": { "en-us": "[QueryString:IncludeSystemAdmins]=false" }, "VisualDesignerData": { "en-us": "" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 160762, "Version": 15, "Guid": "71a257cd-cebf-4c3c-a588-c46e9244a398", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Users" }, "PartAssemblyAndType": { "*": "93ac53c6-adc6-4218-b979-48d1071a5765" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 380,\r\n \"Left\": 380\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "dd3021bf-1b9a-4d10-8dde-12efe9832f47" }, "Metadata": [ { "Id": 160780, "Version": 6, "Guid": "580dc00d-497c-45b4-9422-c8e426d34e4a", "Type": { "Id": "ac11fae7-1916-4d2d-8583-09872e1e6966", "Name": "UsersDataSourceConfig" }, "Attributes": { "String": { "AddRoles": { "en-us": "true" }, "ExcludeRoleIds": { "en-us": "[Params:ExcludeRoleIds]" }, "ExcludeUserIds": { "en-us": "[Params:ExcludeUserIds]" }, "IncludeSystemAdmins": { "en-us": "[Params:IncludeSystemAdmins]" }, "RoleIds": { "en-us": "[Params:RoleIds]" }, "UserIds": { "en-us": "[Params:UserIds]" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "71a257cd-cebf-4c3c-a588-c46e9244a398" } } ] }, { "Id": 166444, "Version": 1, "Guid": "2d383a38-e609-4edc-b925-1573a4d0c677", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "dd3021bf-1b9a-4d10-8dde-12efe9832f47" } } ] }, { "Id": 166473, "Version": 7, "Guid": "34693704-fa1f-48bd-a5d7-0ace93d1ee3e", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all the data scopes of the current App (like folders to organize content-types)" }, "Name": { "en-us": "System.Scopes" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "0d20bfd8-52c8-411a-bf78-fc6908c70ad1:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166475, "Version": 2, "Guid": "0d20bfd8-52c8-411a-bf78-fc6908c70ad1", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Scopes" }, "PartAssemblyAndType": { "*": "f134e3c1-f09f-4fbc-85be-de43a64c6eed" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 320,\r\n \"Left\": 480\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "34693704-fa1f-48bd-a5d7-0ace93d1ee3e" } }, { "Id": 166476, "Version": 1, "Guid": "7288dd48-5fbd-455e-9610-f2f7fbf50c33", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "34693704-fa1f-48bd-a5d7-0ace93d1ee3e" } } ] }, { "Id": 166484, "Version": 36, "Guid": "05ab1404-55f3-45f4-8252-a3c9bd59d6f6", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieve settings entities from global App and from current App." }, "Name": { "en-us": "System.SettingsEntities" }, "Params": { "en-us": "ContentType=[QueryString:ContentType]" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "706d272f-9cd5-4c10-80a7-cfa4128a8e7b:Default>Out:Default\r\n2a723149-7dee-407d-8831-14180e294705:Default>425988c7-0851-47f5-8955-9949b52cfa3e:Default\r\n425988c7-0851-47f5-8955-9949b52cfa3e:Default>706d272f-9cd5-4c10-80a7-cfa4128a8e7b:Default" }, "TestParameters": { "en-us": "[QueryString:ContentType]=⚙️Image" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166503, "Version": 1, "Guid": "d41628cd-68af-45ac-9350-6158dc989904", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "05ab1404-55f3-45f4-8252-a3c9bd59d6f6" } }, { "Id": 166533, "Version": 12, "Guid": "706d272f-9cd5-4c10-80a7-cfa4128a8e7b", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Serialization Configuration" }, "PartAssemblyAndType": { "*": "2952e680-4aaa-4a12-adf7-325cb2854358" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 180,\r\n \"Left\": 320\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "05ab1404-55f3-45f4-8252-a3c9bd59d6f6" }, "Metadata": [ { "Id": 166534, "Version": 1, "Guid": "75ac5a8d-c218-453e-954c-55fa4a1c1d72", "Type": { "Id": "5c84cd3f-f853-40b3-81cf-dee6a07dc411", "Name": "DsSerializationConfiguration" }, "Attributes": { "String": { "IncludeAppId": { "en-us": "true" }, "IncludeCreated": { "en-us": "" }, "IncludeGuid": { "en-us": "" }, "IncludeId": { "en-us": "" }, "IncludeMetadata": { "en-us": "" }, "IncludeMetadataFor": { "en-us": "" }, "IncludeMetadataForId": { "en-us": "" }, "IncludeMetadataForType": { "en-us": "" }, "IncludeMetadataGuid": { "en-us": "" }, "IncludeMetadataId": { "en-us": "" }, "IncludeMetadataTitle": { "en-us": "" }, "IncludeModified": { "en-us": "" }, "IncludeRelationshipGuid": { "en-us": "" }, "IncludeRelationshipId": { "en-us": "" }, "IncludeRelationships": { "en-us": "" }, "IncludeRelationshipTitle": { "en-us": "" }, "IncludeTitle": { "en-us": "" }, "Notes": { "en-us": "" }, "RemoveEmptyStringValues": { "en-us": "" }, "RemoveFalseValues": { "en-us": "" }, "RemoveNullValues": { "en-us": "" }, "RemoveZeroValues": { "en-us": "" }, "Title": { "en-us": "Serialization Configuration - include AppId" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "706d272f-9cd5-4c10-80a7-cfa4128a8e7b" } } ] }, { "Id": 169174, "Version": 10, "Guid": "2a723149-7dee-407d-8831-14180e294705", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "App" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.App, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 600,\r\n \"Left\": 320\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "05ab1404-55f3-45f4-8252-a3c9bd59d6f6" }, "Metadata": [ { "Id": 169175, "Version": 1, "Guid": "10e5c50a-439a-4264-9ecc-dddb812a633a", "Type": { "Id": "|Config ToSic.Eav.DataSources.App", "Name": "ToSic.Eav.DataSources.App" }, "Attributes": { "String": { "AppSwitch": { "en-us": "" }, "WithAncestors": { "en-us": "true" }, "ZoneSwitch": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2a723149-7dee-407d-8831-14180e294705" } } ] }, { "Id": 183840, "Version": 4, "Guid": "425988c7-0851-47f5-8955-9949b52cfa3e", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Type-Filter" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.EntityTypeFilter, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 380,\r\n \"Left\": 300\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "05ab1404-55f3-45f4-8252-a3c9bd59d6f6" }, "Metadata": [ { "Id": 183841, "Version": 1, "Guid": "b3b9d389-d9a9-4bbc-9d58-23fc43ac16d4", "Type": { "Id": "|Config ToSic.Eav.DataSources.EntityTypeFilter", "Name": "ToSic.Eav.DataSources.EntityTypeFilter" }, "Attributes": { "String": { "TypeName": { "en-us": "[Params:ContentType||error-no-type-should-be-used]" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "425988c7-0851-47f5-8955-9949b52cfa3e" } } ] } ] }, { "Id": 166506, "Version": 6, "Guid": "9e0c28ce-e4fe-4fe4-8cac-35fa6dad5df5", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "List of Metadata TargetTypes, which determine what kind of target the metadata is for." }, "Name": { "en-us": "System.MetadataTargetTypes" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "67cc45e2-fe12-4161-8181-930777d46e53:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166508, "Version": 2, "Guid": "67cc45e2-fe12-4161-8181-930777d46e53", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Metadata Target Types" }, "PartAssemblyAndType": { "*": "fba0d40d-f6af-4593-9ccb-54cfd73d8217" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 360,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "9e0c28ce-e4fe-4fe4-8cac-35fa6dad5df5" } }, { "Id": 166509, "Version": 1, "Guid": "08dad3ad-1002-4cc3-9bb4-09999db29ca3", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "9e0c28ce-e4fe-4fe4-8cac-35fa6dad5df5" } } ] }, { "Id": 166627, "Version": 5, "Guid": "1e8d613c-e68b-471a-a438-c9325e53f003", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get a list of all licenses in the system." }, "Name": { "en-us": "System.Licenses" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "70cab874-14f8-41b1-8991-def591ae0de8:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166629, "Version": 2, "Guid": "70cab874-14f8-41b1-8991-def591ae0de8", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Licenses" }, "PartAssemblyAndType": { "*": "402fa226-5584-46d1-a763-e63ba0774c31" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 300,\r\n \"Left\": 400\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "1e8d613c-e68b-471a-a438-c9325e53f003" } }, { "Id": 166633, "Version": 1, "Guid": "d22b716c-f4e4-4090-8a42-8ad6763d006f", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "1e8d613c-e68b-471a-a438-c9325e53f003" } } ] }, { "Id": 166630, "Version": 6, "Guid": "abb9d5ee-3333-4a15-9539-36e1e0f00953", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Retrieve a list of all features and their state." }, "Name": { "en-us": "System.Features" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "200e0670-301e-4cb7-b0b3-da6344894fcc:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166632, "Version": 2, "Guid": "200e0670-301e-4cb7-b0b3-da6344894fcc", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Features" }, "PartAssemblyAndType": { "*": "398d0b9f-044f-48f7-83ef-307872f7ed93" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 260,\r\n \"Left\": 440\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "abb9d5ee-3333-4a15-9539-36e1e0f00953" } }, { "Id": 166634, "Version": 1, "Guid": "6f8ba371-8e2b-4148-aeaa-815519ff6549", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "abb9d5ee-3333-4a15-9539-36e1e0f00953" } } ] }, { "Id": 166646, "Version": 8, "Guid": "310cc86c-2281-4614-8605-a423c87105e9", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all the sites in the system." }, "Name": { "en-us": "System.Sites" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "39f544b2-45a2-4229-9e26-1f95c950f8f6:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166648, "Version": 3, "Guid": "39f544b2-45a2-4229-9e26-1f95c950f8f6", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Sites" }, "PartAssemblyAndType": { "*": "a11c28fb-7d8d-40a2-a22c-50beaa019e41" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 320,\r\n \"Left\": 400\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "310cc86c-2281-4614-8605-a423c87105e9" } }, { "Id": 166649, "Version": 1, "Guid": "71f07571-ac86-46b3-ab6e-a840d39177b6", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "310cc86c-2281-4614-8605-a423c87105e9" } } ] }, { "Id": 169100, "Version": 9, "Guid": "2317bfff-79bc-4812-89dd-0e0b9cba1cb9", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all settings of the current app incl. global and preset settings." }, "Name": { "en-us": "System.Settings" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "b897b9c9-4dc2-4c2e-959b-eca18871b062:Default>Out:Default" }, "TestParameters": { "en-us": "" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 169102, "Version": 2, "Guid": "b897b9c9-4dc2-4c2e-959b-eca18871b062", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "App Stack" }, "PartAssemblyAndType": { "*": "60806cb1-0c76-4c1e-8dfe-dcec94726f8d" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 300,\r\n \"Left\": 460\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2317bfff-79bc-4812-89dd-0e0b9cba1cb9" }, "Metadata": [ { "Id": 169115, "Version": 2, "Guid": "a84c055f-55e1-4faa-a5d7-e49f118bcdb6", "Type": { "Id": "f9aca0f0-1b1b-4414-b42e-b337de124124", "Name": "SystemStackConfig" }, "Attributes": { "String": { "AddValues": { "en-us": "" }, "StackNames": { "en-us": "Settings" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "b897b9c9-4dc2-4c2e-959b-eca18871b062" } } ] }, { "Id": 169103, "Version": 1, "Guid": "97754be9-8b32-483b-8dea-a36cc17ef0c3", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2317bfff-79bc-4812-89dd-0e0b9cba1cb9" } } ] }, { "Id": 182360, "Version": 13, "Guid": "68af1a61-9362-4cc5-8e60-cd9c37fe88c3", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "*": "Retrieve all Picker Sources to reuse in pickers." }, "Name": { "*": "System.UiPickers" }, "Params": { "*": "" }, "StreamsOut": { "*": "Default,Header" }, "StreamWiring": { "*": "6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceCustomList>e73021f3-b121-4fc0-81c3-a8800bbd14d9:CustomList\r\n6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceEntity>e73021f3-b121-4fc0-81c3-a8800bbd14d9:Entity\r\n6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceQuery>e73021f3-b121-4fc0-81c3-a8800bbd14d9:Query\r\ne73021f3-b121-4fc0-81c3-a8800bbd14d9:Default>Out:Default\r\n6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceCustomCsv>e73021f3-b121-4fc0-81c3-a8800bbd14d9:Default\r\n6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceCss>e73021f3-b121-4fc0-81c3-a8800bbd14d9:UiPickerSourceCss\r\n6c04fa59-082e-428c-9a1f-ac511e3d04b6:UiPickerSourceAppAssets>e73021f3-b121-4fc0-81c3-a8800bbd14d9:UiPickerSourceAppAssets" }, "TestParameters": { "*": "" }, "VisualDesignerData": { "*": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "*": true }, "HiddenInQueryPicker": { "*": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 182362, "Version": 11, "Guid": "6c04fa59-082e-428c-9a1f-ac511e3d04b6", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "App" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.App, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 480,\r\n \"Left\": 420\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "68af1a61-9362-4cc5-8e60-cd9c37fe88c3" } }, { "Id": 182363, "Version": 9, "Guid": "e73021f3-b121-4fc0-81c3-a8800bbd14d9", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Merge Streams" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.StreamMerge, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 200,\r\n \"Left\": 400\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "68af1a61-9362-4cc5-8e60-cd9c37fe88c3" } }, { "Id": 182365, "Version": 2, "Guid": "acba9b5f-fead-4181-8a36-e39281fc7288", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "68af1a61-9362-4cc5-8e60-cd9c37fe88c3" } } ] }, { "Id": 182535, "Version": 14, "Guid": "ca79c11d-0c2e-422a-8bcb-0a89d493ecc0", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Entity picker for UI with special security, as security is handled in the data source. " }, "Name": { "en-us": "System.EntityPicker" }, "Params": { "en-us": "" }, "StreamsOut": { "en-us": "Default,Header" }, "StreamWiring": { "en-us": "d0fac9fe-78ce-464a-8696-57fb5f69646d:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:TypeNames]=SystemExportDecorator,@All\n[QueryString:xx-ItemIds]=42930,42931" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 182537, "Version": 7, "Guid": "d0fac9fe-78ce-464a-8696-57fb5f69646d", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Entity-Picker (internal)" }, "PartAssemblyAndType": { "*": "32369814-8f6d-47d8-a648-ce5372de78a8" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 220,\r\n \"Left\": 440\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ca79c11d-0c2e-422a-8bcb-0a89d493ecc0" } }, { "Id": 182538, "Version": 1, "Guid": "d65d5b41-6770-447b-895d-fc449a6b2545", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ca79c11d-0c2e-422a-8bcb-0a89d493ecc0" } }, { "Id": 183752, "Version": 1, "Guid": "c324500c-8dd9-41ec-a7ae-b30809384e2f", "Type": { "Id": "PermissionConfiguration", "Name": "PermissionConfiguration" }, "Attributes": { "String": { "Condition": { "en-us": "SecurityAccessLevel.View" }, "Grant": { "en-us": "r" }, "Identity": { "en-us": "" }, "PermissionType": { "en-us": "" }, "Title": { "en-us": "Allow Anonymous Access with View Permission" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ca79c11d-0c2e-422a-8bcb-0a89d493ecc0" } } ] }, { "Id": 167720, "Version": 26, "Guid": "952633f8-c04b-4592-9db9-a3e6ecf2dbb5", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get all the files / folders from an App (new v18.02)" }, "Name": { "en-us": "System.AppAssets" }, "Params": { "en-us": "RootFolder=[QueryString:RootFolder||/]\nFileFilter=[QueryString:FileFilter||*.*]\nSearchSubfolders=[QueryString:SearchSubfolders||false]\nAssetType=[QueryString:AssetType||Files]\n" }, "StreamsOut": { "en-us": "Default,Header,Files,Folders,All" }, "StreamWiring": { "en-us": "da65ba2b-ae16-4446-84f7-90d76c98c513:Files>Out:Files\r\nda65ba2b-ae16-4446-84f7-90d76c98c513:Folders>Out:Folders\r\nda65ba2b-ae16-4446-84f7-90d76c98c513:All>Out:All\r\nda65ba2b-ae16-4446-84f7-90d76c98c513:Files>0ccade9c-343a-4d4f-b037-66ed381d8cee:Files\r\nda65ba2b-ae16-4446-84f7-90d76c98c513:Folders>0ccade9c-343a-4d4f-b037-66ed381d8cee:Folders\r\nda65ba2b-ae16-4446-84f7-90d76c98c513:All>0ccade9c-343a-4d4f-b037-66ed381d8cee:All\r\n0ccade9c-343a-4d4f-b037-66ed381d8cee:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:RootFolder]=/\n[QueryString:FileFilter]=*.*\n[QueryString:SearchSubfolders]=false\n[QueryString:AssetType]=Folders" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 167722, "Version": 15, "Guid": "da65ba2b-ae16-4446-84f7-90d76c98c513", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "AppFiles" }, "PartAssemblyAndType": { "*": "3fe6c215-4c37-45c1-8883-b4b2a47162a7" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 520,\r\n \"Left\": 200\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "952633f8-c04b-4592-9db9-a3e6ecf2dbb5" }, "Metadata": [ { "Id": 184022, "Version": 4, "Guid": "6059b2f9-28d6-4673-b165-540c6d85828b", "Type": { "Id": "477d5de4-5ffa-43ef-8553-37354cb27660", "Name": "AppFilesDataSourceConfig" }, "Attributes": { "String": { "FileFilter": { "en-us": "[Params:FileFilter]" }, "RootFolder": { "en-us": "[Params:RootFolder]" }, "SearchSubfolders": { "en-us": "[Params:SearchSubfolders]" }, "Title": { "en-us": "App Files" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "da65ba2b-ae16-4446-84f7-90d76c98c513" } } ] }, { "Id": 184023, "Version": 1, "Guid": "72559058-b7e0-4be1-bca6-ecf809c55b14", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "952633f8-c04b-4592-9db9-a3e6ecf2dbb5" } }, { "Id": 184053, "Version": 6, "Guid": "0ccade9c-343a-4d4f-b037-66ed381d8cee", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Pick Stream" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.StreamPick, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 260,\r\n \"Left\": 540\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "952633f8-c04b-4592-9db9-a3e6ecf2dbb5" }, "Metadata": [ { "Id": 184054, "Version": 1, "Guid": "cb686948-965b-4b9b-a14a-920c0594b48c", "Type": { "Id": "67b19864-df6d-400b-9f37-f41f1dd69c4a", "Name": "StreamPick" }, "Attributes": { "String": { "StreamName": { "en-us": "[Params:AssetType]" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "0ccade9c-343a-4d4f-b037-66ed381d8cee" } } ] } ] }, { "Id": 184091, "Version": 34, "Guid": "3d492956-301c-4ad9-afce-085b41661035", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "en-us": "Get everything with a specific Metadata - for now Entities & ContentTypes" }, "Name": { "en-us": "System.BundleDetails" }, "Params": { "en-us": "ConfigurationGuid=[QueryString:ConfigurationGuid]" }, "StreamsOut": { "en-us": "Default,Header,PleaseRename54247" }, "StreamWiring": { "en-us": "29f1a49c-aad2-46b7-adcc-4de99b5a4e54:Default>7e8e2c29-d170-4738-b99d-5bcfdcfdafb3:Default\r\nac245cea-8418-4a29-8ef7-76062b006c49:Default>0f5703bc-6e2f-4e02-b864-191aaf76d1d2:Default\r\n7e8e2c29-d170-4738-b99d-5bcfdcfdafb3:Default>1cdab8ab-f4ff-4965-a8bc-acdbbfafd015:Default\r\n1cdab8ab-f4ff-4965-a8bc-acdbbfafd015:Default>ac245cea-8418-4a29-8ef7-76062b006c49:Default\r\n0f5703bc-6e2f-4e02-b864-191aaf76d1d2:Default>dd5fafd6-7b3e-4fe5-874e-330381df561d:Default\r\ndd5fafd6-7b3e-4fe5-874e-330381df561d:Default>Out:Default" }, "TestParameters": { "en-us": "[QueryString:ConfigurationGuid]=1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" }, "VisualDesignerData": { "en-us": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "en-us": true }, "HiddenInQueryPicker": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 184093, "Version": 26, "Guid": "29f1a49c-aad2-46b7-adcc-4de99b5a4e54", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "App" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.App, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 820,\r\n \"Left\": 120\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" }, "Metadata": [ { "Id": 184096, "Version": 2, "Guid": "900c5376-38e3-41d3-be5a-953ef8d37b91", "Type": { "Id": "|Config ToSic.Eav.DataSources.App", "Name": "ToSic.Eav.DataSources.App" }, "Attributes": { "String": { "AppSwitch": { "en-us": "" }, "WithAncestors": { "en-us": "" }, "ZoneSwitch": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "29f1a49c-aad2-46b7-adcc-4de99b5a4e54" } } ] }, { "Id": 184094, "Version": 25, "Guid": "7e8e2c29-d170-4738-b99d-5bcfdcfdafb3", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Type-Filter Export Config" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.EntityTypeFilter, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 680,\r\n \"Left\": 340\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" }, "Metadata": [ { "Id": 184095, "Version": 2, "Guid": "a2fac7d0-825a-45e3-a39b-6cfd19840d17", "Type": { "Id": "|Config ToSic.Eav.DataSources.EntityTypeFilter", "Name": "ToSic.Eav.DataSources.EntityTypeFilter" }, "Attributes": { "String": { "TypeName": { "en-us": "d7f2e4fa-5306-41bb-a3cd-d9529c838879" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "7e8e2c29-d170-4738-b99d-5bcfdcfdafb3" } } ] }, { "Id": 184097, "Version": 1, "Guid": "503a3137-d447-49db-acd7-581536da1cad", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

The test data guid \"d7f2e4fa-5306-41bb-a3cd-d9529c838879\" is the export-decorator used in the system-queries app.

" }, "NoteType": { "en-us": "note" }, "Title": { "en-us": "The test data guid \"d7f2e4fa-5..." } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" } }, { "Id": 184098, "Version": 21, "Guid": "0f5703bc-6e2f-4e02-b864-191aaf76d1d2", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Metadata Targets" }, "PartAssemblyAndType": { "*": "afaf73d9-775c-4932-aebd-23e898b1643e" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 300,\r\n \"Left\": 580\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" } }, { "Id": 184099, "Version": 19, "Guid": "ac245cea-8418-4a29-8ef7-76062b006c49", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Parents - Decorators for this Config" }, "PartAssemblyAndType": { "*": "915217e5-7957-4303-a19c-a15505f2ad1d" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 380,\r\n \"Left\": 100\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" }, "Metadata": [ { "Id": 184100, "Version": 1, "Guid": "f2afd28f-4115-4fe2-b3e5-c0fae23390dc", "Type": { "Id": "a72cb2f4-52bb-41e6-9281-10e69aeb0310", "Name": "ParentsDataSourceConfig" }, "Attributes": { "String": { "ContentTypeName": { "en-us": "32698880-1c2e-41ab-bcfc-420091d3263f" }, "FieldName": { "en-us": "Configuration" }, "FilterDuplicates": { "en-us": "true" }, "Title": { "en-us": "Get Parent Items" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "ac245cea-8418-4a29-8ef7-76062b006c49" } } ] }, { "Id": 184103, "Version": 12, "Guid": "1cdab8ab-f4ff-4965-a8bc-acdbbfafd015", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Filter desired Config" }, "PartAssemblyAndType": { "*": "ToSic.Eav.DataSources.ValueFilter, ToSic.Eav.DataSources" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 520,\r\n \"Left\": 600\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" }, "Metadata": [ { "Id": 184104, "Version": 3, "Guid": "df250d6f-11db-45ee-afd9-85cc34352688", "Type": { "Id": "|Config ToSic.Eav.DataSources.ValueFilter", "Name": "ToSic.Eav.DataSources.ValueFilter" }, "Attributes": { "String": { "Attribute": { "en-us": "EntityGuid" }, "Languages": { "en-us": "" }, "Operator": { "en-us": "==" }, "Take": { "en-us": "" }, "Value": { "en-us": "[Params:ConfigurationGuid]" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "1cdab8ab-f4ff-4965-a8bc-acdbbfafd015" } } ] }, { "Id": 184105, "Version": 1, "Guid": "aa4ebca9-5bf0-4f73-accc-9c0ae788698a", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" } }, { "Id": 184121, "Version": 3, "Guid": "dd5fafd6-7b3e-4fe5-874e-330381df561d", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "Serialization Configuration" }, "PartAssemblyAndType": { "*": "2952e680-4aaa-4a12-adf7-325cb2854358" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 120,\r\n \"Left\": 380\r\n}" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3d492956-301c-4ad9-afce-085b41661035" }, "Metadata": [ { "Id": 184122, "Version": 2, "Guid": "29c21925-dc7c-454a-8b46-c6287aafcf64", "Type": { "Id": "5c84cd3f-f853-40b3-81cf-dee6a07dc411", "Name": "DsSerializationConfiguration" }, "Attributes": { "String": { "IncludeAppId": { "en-us": "" }, "IncludeCreated": { "en-us": "" }, "IncludeGuid": { "en-us": "" }, "IncludeId": { "en-us": "" }, "IncludeMetadata": { "en-us": "" }, "IncludeMetadataFor": { "en-us": "" }, "IncludeMetadataForId": { "en-us": "" }, "IncludeMetadataForType": { "en-us": "" }, "IncludeMetadataGuid": { "en-us": "" }, "IncludeMetadataId": { "en-us": "" }, "IncludeMetadataTitle": { "en-us": "" }, "IncludeModified": { "en-us": "" }, "IncludeRelationshipGuid": { "en-us": "" }, "IncludeRelationshipId": { "en-us": "" }, "IncludeRelationships": { "en-us": "" }, "IncludeRelationshipsAsCsv": { "en-us": "" }, "IncludeRelationshipTitle": { "en-us": "" }, "IncludeTitle": { "en-us": "" }, "IncludeTypeAs": { "en-us": "flat" }, "IncludeTypeId": { "en-us": "false" }, "IncludeTypeName": { "en-us": "true" }, "Notes": { "en-us": "" }, "RemoveEmptyStringValues": { "en-us": "" }, "RemoveFalseValues": { "en-us": "" }, "RemoveNullValues": { "en-us": "" }, "RemoveZeroValues": { "en-us": "" }, "Title": { "en-us": "Serialization Configuration" }, "TypePropertyNames": { "en-us": "Type" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "dd5fafd6-7b3e-4fe5-874e-330381df561d" } } ] } ] }, { "Id": 185367, "Version": 43, "Guid": "4570a596-5020-4111-b494-3e510f778c6e", "Type": { "Id": "DataPipeline", "Name": "DataPipeline" }, "Attributes": { "String": { "Description": { "*": "Retrieve data from the backend - basically any other DataSource." }, "Name": { "*": "System.SysData" }, "Params": { "*": "SysDataSource=[QueryString:SysDataSource]\nSysDataStream=[QueryString:SysDataStream||Default]" }, "StreamsOut": { "*": "*,Header" }, "StreamWiring": { "*": "9ca272fb-3778-4ade-bc11-9687ab5d3995:Default>Out:*" }, "TestParameters": { "*": "[QueryString:SysDataSource_Metadata]=fba0d40d-f6af-4593-9ccb-54cfd73d8217\n[Params:SysDataSource_Scopes]=f134e3c1-f09f-4fbc-85be-de43a64c6eed\n[QueryString:SysDataSource]=ToSic.Eav.DataSources.System.Attributes, ToSic.Eav.DataSources\n[Params:SysDataSource_Never]=398d0b9f-044f-48f7-83ef-307872f7ed93\n[Params:SysDataStream_xx]=Default\n[QueryString:ContentTypeName]=Test" }, "VisualDesignerData": { "*": "{\"ShowDataSourceDetails\":true}" } }, "Boolean": { "AllowEdit": { "*": true }, "HiddenInQueryPicker": { "*": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 185369, "Version": 20, "Guid": "9ca272fb-3778-4ade-bc11-9687ab5d3995", "Type": { "Id": "DataPipelinePart", "Name": "DataPipelinePart" }, "Attributes": { "String": { "Description": { "*": "" }, "Name": { "*": "System Data" }, "PartAssemblyAndType": { "*": "37cf83f7-5e57-4c4a-9798-a7e1440f99b3" }, "VisualDesignerData": { "*": "{\r\n \"Top\": 240,\r\n \"Left\": 440\r\n}" } } }, "Owner": "unknown", "For": { "Target": "Entity", "TargetType": 4, "Guid": "4570a596-5020-4111-b494-3e510f778c6e" } }, { "Id": 185370, "Version": 1, "Guid": "d1d0e574-0f40-431f-9255-3b0e3c77317e", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1fac6138-39c7-4ab6-9c54-9cf3e4ffd5ed" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "4570a596-5020-4111-b494-3e510f778c6e" } }, { "Id": 185371, "Version": 1, "Guid": "c9c3cb1e-b4bf-4a30-a578-06b2d95e2d1d", "Type": { "Id": "PermissionConfiguration", "Name": "PermissionConfiguration" }, "Attributes": { "String": { "Condition": { "en-us": "SecurityAccessLevel.Admin" }, "Grant": { "en-us": "r" }, "Identity": { "en-us": "" }, "PermissionType": { "en-us": "" }, "Title": { "en-us": "Allow admins - but internal security checks will restrict it more" } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "4570a596-5020-4111-b494-3e510f778c6e" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-query.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "DataPipeline", "Name": "DataPipeline", "Scope": "System.DataSources", "Metadata": [ { "Id": 45145, "Version": 2, "Guid": "b48d7594-b48d-4412-8450-0080a1f3327b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Describes a set of data sources and how they are interconnected." }, "EditInstructions": { "*": "

A Query (DataPipeline) is the definition type of a Visual-Query, containing title, description and hidden information like wiring between the parts. 

" }, "Label": { "*": "Query" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "DataPipeline" } }, { "Id": 137453, "Version": 1, "Guid": "01a3080f-1409-4760-84ee-632fe76142f7", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "DataPipeline" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45120, "Version": 4, "Guid": "8d83d13c-916f-4594-9ae9-aa1f5c0fe24f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Query Name" }, "Notes": { "en-us": "Descriptive Name" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45121, "Version": 3, "Guid": "f6dabb9c-1f12-4443-9783-70f691d6e7b2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45150, "Version": 2, "Guid": "f23e2e7e-aa81-405f-b129-22e2816240df", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45122, "Version": 2, "Guid": "41533565-885e-4c33-9bfb-8e208ed8d8ee", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Description" }, "Notes": { "*": "Short info about this pipeline, what it's for" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45123, "Version": 3, "Guid": "009d0843-b009-41ae-9237-e22b465316e8", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45151, "Version": 2, "Guid": "a2cb52c2-3c1b-4486-8222-4aadcf9840f0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 3 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AllowEdit", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45124, "Version": 3, "Guid": "ea3d9f87-c42b-46c9-8ddd-9c073f09c0fe", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "True" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Allow Edit" }, "Notes": { "en-us": "If set to false, the pipeline-system will only show this pipeline but not allow changes." }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 169179, "Version": 1, "Guid": "b8ac5fc0-85c5-4146-ba33-e897e932c857", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Read-only - editing not allowed" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Allow Edit" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "HiddenInQueryPicker", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 169177, "Version": 3, "Guid": "d94606d0-72d5-4f65-a1aa-ecea3fa4f049", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "HiddenInQueryPicker" }, "Notes": { "en-us": "

Hide this query from users who pick a query in a query picker.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169178, "Version": 2, "Guid": "297811b1-d326-4600-8700-d789e366c3fc", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Visible in Query Picker (default)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Hidden in Query Picker" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ParametersGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 63402, "Version": 3, "Guid": "fdcb6b4a-f22d-45ca-817e-c14b68a03828", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Parameters for Testing and Runtime" }, "Notes": { "*": "

The Test Parameters are for testing only, while the Parameters are used for the Params LookUp - for tokens like [Params:Id]. Read more about Query Params in the docs.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63404, "Version": 2, "Guid": "5d34f96d-02db-4858-959e-80870dda0708", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Params", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 63403, "Version": 9, "Guid": "a67f614b-d57a-48f7-bfd8-05604fa88725", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "ReplaceThis=27\nReplaceThisAsWell=[QueryString:Id]" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Parameters" }, "Notes": { "en-us": "

Parameters used in this query. One on each line. Format like Key=Value. Examples: 

\n
    \n
  • Id=27
  • \n
  • Id=[QueryString:Id]
  • \n
  • Id=[QueryString:Id||27]
  • \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63405, "Version": 8, "Guid": "86929de5-86c8-4a85-8854-7cedaaa3693a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63406, "Version": 8, "Guid": "81f36eff-3f91-4a23-9b90-13a3137e08c1", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 5 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "TestParameters", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 63461, "Version": 3, "Guid": "56ada5ea-e4ff-4bba-80bd-5dfb27d044e5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Test Parameters" }, "Notes": { "en-us": "

Test parameters, one per line. See docs. Syntax is

\n
    \n
  • [source:property]=value
  • \n
  • [source:property]=[othersource:property]
  • \n
" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 63462, "Version": 2, "Guid": "c3bc760d-e33f-45b4-987c-cb8854192aa3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 63463, "Version": 2, "Guid": "b003c249-537f-4ab3-a0a3-09b12336e01a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 5 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 135947, "Version": 5, "Guid": "c7be53d6-3fe2-43c4-8a3c-fd94bf4c4bd8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced Settings ⚠️" }, "Notes": { "en-us": "

Please be very careful editing this stuff

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f4e52fd1-4a37-406f-82cf-e51cb977dde4" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 135948, "Version": 4, "Guid": "18f8c776-392d-43e8-afb1-e4ec659907cb", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "StreamsOut", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45125, "Version": 4, "Guid": "e65cbf0e-8415-444b-8c76-c018a056119e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Streams Out" }, "Notes": { "en-us": "Comma separated list of streams this pipeline offers to the target. Like 'Content, Presentation, ListContent, ListPresentation'" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45126, "Version": 3, "Guid": "fbda1223-55eb-405f-99a3-4dff47cc79ea", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45152, "Version": 2, "Guid": "b8e18079-d7ae-47cb-af24-174b5b167746", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "StreamWiring", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45127, "Version": 4, "Guid": "8597cd16-2cb5-4bd5-94af-a3b9ef656602", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Stream Wiring" }, "Notes": { "en-us": "List of connections between the parts of this pipeline, each connection on one line, like 6730:Default>6732:Default" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45128, "Version": 3, "Guid": "7719f9a1-905a-4501-8e91-8e692f8397ce", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45153, "Version": 2, "Guid": "3fa3e6d8-9242-42e1-8d13-dc4184203fe1", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 10 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "VisualDesignerData", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 135586, "Version": 7, "Guid": "f09ddc98-2037-4b63-aa22-d1267b324b29", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "{\"ShowDataSourceDetails\":true}" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "VisualDesignerData" }, "Notes": { "en-us": "

Contains UI configuration / settings. Will not affect the backend, just the display of the query. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 135587, "Version": 5, "Guid": "0c21341b-6c33-4792-88fe-bf73b2a17875", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135588, "Version": 1, "Guid": "7d6b9263-1351-4208-85b2-c4b035c8d298", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 135946, "Version": 4, "Guid": "f655ac6f-db30-4964-92c0-ee0ff460bcfe", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "none" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "" } }, "Number": { "Rows": { "en-us": 10 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 135949, "Version": 2, "Guid": "f4e52fd1-4a37-406f-82cf-e51cb977dde4", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return context.debug; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "DataPipelinePart", "Name": "DataPipelinePart", "Scope": "System.DataSources", "Metadata": [ { "Id": 45146, "Version": 2, "Guid": "ce3bc4fa-1f60-46b6-b6a8-9f26e981b55d", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "A part in the data pipeline, usually a data source/target element." }, "EditInstructions": { "*": "

This is an internal data-type, usually invisible to the user. It contains the specs for a DataSource part inside a VisualQuery (DataPipeline). You should usually not edit this yourself, as you'll probably break something. 

" }, "Label": { "*": "Query Part" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "DataPipelinePart" } }, { "Id": 137454, "Version": 1, "Guid": "5ceca9a8-eda2-46d5-a47b-84b7a6c686d9", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "DataPipelinePart" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45131, "Version": 3, "Guid": "848cf93b-b0fb-405a-9abf-f4dbbd15333c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Name" }, "Notes": { "*": "The part name for easy identification by the user" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45132, "Version": 3, "Guid": "536504b2-8914-41ee-a17d-65cded02d08e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45155, "Version": 1, "Guid": "a1bef096-4ab2-4fbf-8429-48e7f3c1a0f5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45133, "Version": 3, "Guid": "0bb6d7dc-4918-4f05-9ce3-4eaaf105cd18", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Description" }, "Notes": { "*": "Notes about this item" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45134, "Version": 3, "Guid": "3221122f-0fe5-4714-8088-f6e83df36d79", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45156, "Version": 1, "Guid": "b6d59b24-e328-4b7f-8f9d-fc3e6f7f54a7", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PartAssemblyAndType", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45135, "Version": 6, "Guid": "a44a5c63-b20e-4096-92ba-32bdb8f2923b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Identity" }, "Notes": { "en-us": "

This is the identity of the DataSource - usually a GUID or Assembly and type info to help the system find this dll etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45136, "Version": 5, "Guid": "ced8f8a3-4f49-44d3-a573-386d9aa526c5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45157, "Version": 3, "Guid": "eca41956-0eb4-4a43-bd0f-7c4ca0ed5d76", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "VisualDesignerData", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 45137, "Version": 6, "Guid": "1a3c49c4-471a-4338-b862-1e20bf4720c5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Visual Designer Data" }, "Notes": { "en-us": "Technical data for the designer so it can save it's values etc." }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45138, "Version": 4, "Guid": "ef734c14-4efa-4288-9764-ee2d2eb7aa53", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45158, "Version": 1, "Guid": "3f98bef5-f95d-4c1d-ae8c-0eec97198603", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 10 } } }, "Owner": "dnn:userid=1" }, { "Id": 135945, "Version": 1, "Guid": "ca02b45f-d534-4b6a-911d-1bc51550c44c", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "none" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "" } }, "Number": { "Rows": { "en-us": 25 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-resources.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "8cfea27d-ab69-42e7-bfcb-0aa054eacbfb", "Name": "ResourcesSystem", "Scope": "System.Configuration", "Metadata": [ { "Id": 132213, "Version": 1, "Guid": "4fc531f6-9548-4298-832e-5d98cd8ffb56", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "DynamicChildrenField": { "*": "" }, "EditInstructions": { "*": "

Here you can configure System Resources. If you're new to this please read the docs

\n

As of now, there are not many pre-defined SystemResources - so if this form looks pretty empty that's expected \uD83D\uDE09.

\n

Remember that you can always create custom resources for anything you want. These will not be stored here, but in a new ContentType called Resources which you would create on your own. 

" }, "Label": { "*": "System Resources" }, "ListInstructions": { "*": "

These settings override defaults provided at the global level. Make sure you understand Settings before doing much here. Read the docs please

\n

Note: you should usually only have exactly 1 item in this list. The only exception is on the main Content app where you have two items (one affecting only the current App, one affecting the entire Site). 

" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "8cfea27d-ab69-42e7-bfcb-0aa054eacbfb" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 132215, "Version": 2, "Guid": "9d4b1723-383d-4f16-8589-6eae07b2511d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "System Resources" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132216, "Version": 1, "Guid": "30490916-f80d-4bf2-b74c-09c8b83851cb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 132217, "Version": 1, "Guid": "80ae7716-eb37-4e87-b932-7f16de538796", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TestMessage", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 132205, "Version": 2, "Guid": "c4d6ec9f-fca2-4413-be77-fa671d2ca9dd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Test Message (TestMessage)" }, "Notes": { "*": "

This is just a dummy test message which will always be in the PresetSystem data to verify resources work. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132209, "Version": 1, "Guid": "27eb0826-5452-4de3-806b-e285956bf6a3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 132210, "Version": 1, "Guid": "a5bee366-0780-4ed1-9280-172d5662f490", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } }, "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SettingsEntityScope", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 132204, "Version": 5, "Guid": "a7e23a29-1b9a-4022-8632-7277ff6845c3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Scope / Reach of these Resources" }, "Notes": { "en-us": "

Leave on Default in 99% of the cases. Only rare cases use Site. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132207, "Version": 3, "Guid": "8d864fdc-d11c-479a-89fe-6206023288a6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 132208, "Version": 3, "Guid": "046451e4-3860-47e5-82e5-e4dc78ec5a3c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (current App)\nsite:Site (these Settings affect all Apps of this Site)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageSiteScope", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 132211, "Version": 4, "Guid": "26de0eb1-19b2-488d-a58e-cf78d08f576d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Important: Site-Scope only Works in the Content-App (OLD, remove some time)" }, "Notes": { "en-us": "

Important Information about Site-Level Resources

\n

Normally all resources only affect the current app. Switching the above setting to Site will affect the entire site but only if you are in the primary Content-App. On any other App it will still only affect the current app. Read more about resources

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GoogleMaps", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 132239, "Version": 3, "Guid": "ca2459d8-4a7b-435c-b768-5aa40222f014", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Google Maps" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132240, "Version": 2, "Guid": "25232847-80da-48d6-a0e4-b07f58d3ad5b", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "\uD83C\uDF10GoogleMaps" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Toolbar", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 168752, "Version": 5, "Guid": "f66487be-7c17-42fa-9fd4-2d53fc8c4c15", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Toolbar" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 168753, "Version": 4, "Guid": "357c276d-06b0-440e-9a2e-b690645edd46", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "\uD83C\uDF10Toolbar" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "40e561d2-096f-4ff7-a388-55f61a19490c", "Name": "\uD83C\uDF10GoogleMaps", "Scope": "System.Configuration", "Metadata": [ { "Id": 132238, "Version": 1, "Guid": "886e8b4c-6a04-44d5-b641-d632f54cfaf7", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

These resources are to be used with Google Maps implementations.

" }, "Label": { "en-us": "\uD83C\uDF10GoogleMaps" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "40e561d2-096f-4ff7-a388-55f61a19490c" } } ], "Attributes": [ { "Name": "Identifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 132244, "Version": 7, "Guid": "cd5948e1-94b2-4742-88da-7986a568e1d8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "GoogleMaps" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Identifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132245, "Version": 6, "Guid": "58f12a41-b38a-4acb-afa2-5519d3fa3bca", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 132246, "Version": 6, "Guid": "33501e3a-af78-4fed-8861-fca4988b92aa", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "WarningApiKeyForDemoOnly", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 132237, "Version": 2, "Guid": "7877762a-e261-4d59-a01d-a30b1f214c17", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Warning Message: Api-Key is for Demo Purposes" }, "Notes": { "en-us": "", "de-de": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132242, "Version": 1, "Guid": "758f3da9-c075-4ff7-814f-5472cb03eac0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 132243, "Version": 1, "Guid": "1f99b176-a683-4196-b927-b62869a27140", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "29be4120-d21f-473a-a5c9-9ce10f0248c7", "Name": "\uD83C\uDF10Toolbar", "Scope": "System.Configuration", "Metadata": [], "Attributes": [ { "Name": "Identifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 168746, "Version": 2, "Guid": "58b2014a-bbb8-46e3-8fb6-7b706045954e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Toolbar" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Identifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 168747, "Version": 1, "Guid": "2a7ae2dd-754c-4c6a-8d2e-57dd8f01c0bf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 168748, "Version": 1, "Guid": "7e786097-950e-48af-af62-e776874bd4fa", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsDemoItem", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 168744, "Version": 1, "Guid": "4254c9a4-c6ae-4528-94fc-8975e93b911a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "IsDemoItem" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsDemoSubItem", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 168745, "Version": 1, "Guid": "26f32cb0-f31f-41cf-b480-b740f204aa7a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "IsDemoSubItem" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] } ], "Entities": [ { "Id": 132214, "Version": 5, "Guid": "a0bedfbb-57eb-44b6-a4ce-738b199fdbc2", "Type": { "Id": "8cfea27d-ab69-42e7-bfcb-0aa054eacbfb", "Name": "ResourcesSystem" }, "Attributes": { "String": { "SettingsEntityScope": { "en-us": "" }, "TestMessage": { "en-us": "This is a test-message for testing the Resources - always remember that the answer is 42!", "de-de": "Das ist eine Testmeldung für die Ressourcen (Resources). Vergiss nicht: die Antwort ist immer 42!" }, "Title": { "en-us": "System Resources" } }, "Entity": { "GoogleMaps": { "*": [ "d3af78fc-8d7a-44f4-9712-ec8554714158" ] }, "Toolbar": { "*": [ "1d9dc186-d707-467b-ba49-c2e58d2869a0" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166591, "Version": 1, "Guid": "af6d1d4c-57de-48a5-b001-3f0b33a5349e", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "e3d5d17c-126e-4061-8f44-658406df642a" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "a0bedfbb-57eb-44b6-a4ce-738b199fdbc2" } } ] }, { "Id": 132241, "Version": 8, "Guid": "d3af78fc-8d7a-44f4-9712-ec8554714158", "Type": { "Id": "40e561d2-096f-4ff7-a388-55f61a19490c", "Name": "\uD83C\uDF10GoogleMaps" }, "Attributes": { "String": { "Identifier": { "en-us": "GoogleMaps" }, "WarningApiKeyForDemoOnly": { "en-us": "

Warning: This GoogleMap uses a demo API-Key, which will cause problems on live web sites. Please change the Google ApiKey.

", "de-de": "

Achtung: Diese GoogleMap verwendet einen API-Key für Demo-Zwecke. Das würde später Probleme verursachen. Bitte ändere den API-Key.

" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166592, "Version": 1, "Guid": "53673bf0-1986-411d-906c-933db7bce302", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "e3d5d17c-126e-4061-8f44-658406df642a" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d3af78fc-8d7a-44f4-9712-ec8554714158" } } ] }, { "Id": 168749, "Version": 1, "Guid": "1d9dc186-d707-467b-ba49-c2e58d2869a0", "Type": { "Id": "29be4120-d21f-473a-a5c9-9ce10f0248c7", "Name": "\uD83C\uDF10Toolbar" }, "Attributes": { "String": { "Identifier": { "en-us": "Toolbar" }, "IsDemoItem": { "en-us": "This is a demo item. When you edit it, it will create a new item.", "de-de": "Dies ist ein Demo-Element. Wenn de ihn bearbeitest, wird ein neues Element erstellt." }, "IsDemoSubItem": { "en-us": "This is a sub item of a demo-item. You must first edit the main item to start adding sub items.", "de-de": "Dies ist ein Unterelement eines Demo-Elements. Du musst zuerst das Hauptelement bearbeiten, um Unterelemente hinzuzufügen." } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 168751, "Version": 1, "Guid": "65141641-8f57-474b-b0bc-8f153e2eb748", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "e3d5d17c-126e-4061-8f44-658406df642a" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "1d9dc186-d707-467b-ba49-c2e58d2869a0" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-settings-web-resources-data.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource", "Scope": "System.Configuration", "Metadata": [ { "Id": 166467, "Version": 1, "Guid": "cad9fa69-b654-414a-9de2-cc59be5664be", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Web Resource" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "66f19c62-371e-4ad1-a98b-de0745507be4" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130637, "Version": 4, "Guid": "b460d734-3b44-4f2e-9006-affa1d3a842a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Settings Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "915a2d6e-7092-4552-a367-a68e753777e3" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130646, "Version": 3, "Guid": "c4fe15aa-1c62-4ba3-918f-14e043cea781", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130647, "Version": 3, "Guid": "c7e54e84-093c-4c7c-9f90-719c536534be", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemIdentifier", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 130638, "Version": 8, "Guid": "885919d3-9278-4278-89c0-b83e5ceaa0bd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Name / Item Identifier" }, "Notes": { "en-us": "

Select a predefined identifier or create your own with the TT-button. These identifiers are case-insensitive. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130643, "Version": 6, "Guid": "78c62298-7189-45eb-a2cb-de21d26d9ac3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130644, "Version": 6, "Guid": "7fc87496-192e-4d70-8884-74392a3fcee0", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Bootstrap4:Bootstrap4\nBootstrap5:Bootstrap5\nfancybox3:fancybox3\nfancybox4:fancybox4\nFontAwesome5:FontAwesome5\nFontAwesome6:FontAwesome6" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Enabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130656, "Version": 7, "Guid": "7f966c33-b4d7-41c8-90a8-ad28395b8d51", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Enabled" }, "Notes": { "*": "

Usually it's enabled, but if the skin already includes it, set to false to avoid it being added again. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130657, "Version": 6, "Guid": "fc93ad3a-a947-452c-9893-47c5d1c2ed9f", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "Disable this resource" }, "TitleIndeterminate": { "*": "Don't configure / use default setting" }, "TitleTrue": { "*": "Enable this resource" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Html", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130639, "Version": 5, "Guid": "62a70977-5a94-4c11-ae2d-51b233e4b4f4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Raw Html Snippets for this Resource (Html)" }, "Notes": { "*": "

This is the raw HTML to add, incl. JS/CSS tags etc. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130648, "Version": 4, "Guid": "70304913-6bde-4f25-bddb-9310f8a677ee", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130649, "Version": 4, "Guid": "e45576ab-6895-4e56-9594-de392ca1e1bf", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "monospace" } }, "Number": { "RowCount": { "*": 20 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 169560, "Version": 2, "Guid": "770341e9-6a2a-4349-a2e4-c5f0387b50da", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169561, "Version": 1, "Guid": "f964befb-f612-4a82-b83a-bc75da716427", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AutoOptimize", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 169562, "Version": 2, "Guid": "6caf29fa-4e9a-45bf-bd8d-5a48006be1ee", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "AutoOptimize" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169563, "Version": 1, "Guid": "6d4cbce9-da2c-4ee8-bcab-f9c5dcb814e6", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Disable automatic optimizations" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Automatically optimize, bundle etc." } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130645, "Version": 2, "Guid": "915a2d6e-7092-4552-a367-a68e753777e3", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return 'WebResources.' + data.ItemIdentifier; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "9ff20ccf-3ff7-4a76-b749-dd22771df730", "Name": "⚙️WebResources", "Scope": "System.Configuration", "Metadata": [ { "Id": 130636, "Version": 4, "Guid": "d7779b22-0193-43f4-b8fe-50132c133d34", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "DynamicChildrenField": { "*": "Items" }, "EditInstructions": { "*": "

Web Resources are additional script etc. which are often loaded from a CDN. 

\n

The default configuration will continue to point to the latest CDN versions you need - but you can always override this in your System/Site/App as needed.

\n

Only Apps which explicitly want to load these resources from the Settings will actually obey this - older and custom apps may have their own list of things they load. 

" }, "Label": { "*": "⚙️WebResources" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "9ff20ccf-3ff7-4a76-b749-dd22771df730" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 130628, "Version": 2, "Guid": "04c3974c-a33b-425e-bdc6-5670403471b3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "WebResources" }, "InputType": { "*": "string-default" }, "Name": { "*": "SettingsIdentifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130629, "Version": 1, "Guid": "70449387-aef3-4fa2-b6b9-fff1da999497", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130630, "Version": 1, "Guid": "8313a56b-a109-4016-a955-8d455cb9e876", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CdnSourceNotEnabledWarning", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 169950, "Version": 4, "Guid": "3a897222-1950-4d38-a0b1-fe5af3f98888", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "CdnSourceNotEnabledWarning" }, "Notes": { "en-us": "

⚠️ Warning ⚠️

\n

You have configured an alternate CDN source. It appears that the features for this are not enabled, so the settings will not have an effect. See CDN docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "69741b0b-6734-49b8-a8b5-46b42908e302" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CdnSourcePublic", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 169551, "Version": 9, "Guid": "c26bb49e-8607-47bd-add3-12962104a963", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "CDN Source for Public Resources" }, "Notes": { "en-us": "

Preferred location where to load public resources from, such as bootstrap, fancybox etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169552, "Version": 8, "Guid": "4d053dd3-3456-41d9-a797-90b9ab0849d7", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169553, "Version": 8, "Guid": "880a956f-d542-4608-8e6a-055858a1e589", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Not set - use system default (usually Public CDNs)\ncdn:Public CDNs such as Google-Fonts\nhttps\\://cdn.2sxc.org/packages:2sxc CDN (cdn.2sxc.org)\n/cdn/packages:Local - on this website (/cdn)\ncustom:Custom path or site (switch to text-mode to type custom value)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CdnSourceEdit", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 169564, "Version": 6, "Guid": "7d01e570-7af5-4ed2-bfe1-0ba58a956a1d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "CDN Source for Edit Resources" }, "Notes": { "en-us": "

These are resources used in the edit dialog, such as icons and fonts.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169565, "Version": 5, "Guid": "0e2a664d-e946-4585-a1e3-6a2a810d00bd", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 169566, "Version": 5, "Guid": "4eac359d-372e-42d1-94c5-3628c9a79fab", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Not set - use system default (usually Public CDNs)\ncdn:Public CDNs such as Google-Fonts\nhttps\\://cdn.2sxc.org/packages:2sxc CDN (cdn.2sxc.org)\n/cdn/packages:Local - on this website (/cdn)\ncustom:Custom path or site (switch to text-mode to type custom value)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Items", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130635, "Version": 9, "Guid": "c3fa7759-f4fb-4266-ac54-89857e301ccb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Resource Items" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130641, "Version": 8, "Guid": "19b7bfe7-2bb6-4022-a851-a481c81cd492", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️WebResource" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 169951, "Version": 3, "Guid": "69741b0b-6734-49b8-a8b5-46b42908e302", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const hasCdn = data.CdnSourceEdit || data.CdnSourcePublic;\n if (!hasCdn) return false;\n // show the warning if any of the features are not enabled\n const f = context.features;\n if (!f.isEnabled('CdnSourceEdit') || !f.isEnabled('CdnSourcePublic'))\n return true;\n return false;\n});" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ], "Entities": [ { "Id": 130652, "Version": 12, "Guid": "06f4fa58-2e91-4896-a16e-3bbaf9a5f491", "Type": { "Id": "9ff20ccf-3ff7-4a76-b749-dd22771df730", "Name": "⚙️WebResources" }, "Attributes": { "String": { "CdnSourceEdit": { "en-us": "" }, "CdnSourcePublic": { "en-us": "" }, "SettingsIdentifier": { "en-us": "WebResources" } }, "Entity": { "Items": { "*": [ "e6d3d600-ea17-4957-9c56-9bae78329c67", "72286f65-e38b-42ee-a0da-0c73e55f7ba4", "4b9ef331-480a-4a38-86f1-a580f8345677", "3356ad17-91ce-4814-83c1-9f527697391a", "38e0226d-4c31-4d2e-ab97-8e16483ddf94", "3e6811a8-87ab-4954-8402-6e2b3d80c6e2" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166554, "Version": 1, "Guid": "3c2edf90-4fe7-42dc-9031-af52dcecc36d", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "06f4fa58-2e91-4896-a16e-3bbaf9a5f491" } } ] }, { "Id": 130653, "Version": 6, "Guid": "e6d3d600-ea17-4957-9c56-9bae78329c67", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n\n" }, "ItemIdentifier": { "en-us": "Bootstrap4" }, "SettingsIdentifier": { "en-us": "WebResources.Bootstrap4" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166555, "Version": 1, "Guid": "136bb934-15a8-418f-9b74-2a76abdd8022", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e6d3d600-ea17-4957-9c56-9bae78329c67" } } ] }, { "Id": 130654, "Version": 9, "Guid": "38e0226d-4c31-4d2e-ab97-8e16483ddf94", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n" }, "ItemIdentifier": { "en-us": "FontAwesome5" }, "SettingsIdentifier": { "en-us": "WebResources.FontAwesome5" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 144504, "Version": 1, "Guid": "049f481e-a3aa-4a85-afe7-8c88ccafd38d", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

Get updated links from the CDNJS.

" }, "NoteType": { "en-us": "note" }, "Title": { "en-us": "Get updated links from the CDN..." } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "38e0226d-4c31-4d2e-ab97-8e16483ddf94" } }, { "Id": 166556, "Version": 1, "Guid": "b757c81f-6b2a-46a6-be76-30a907586813", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "38e0226d-4c31-4d2e-ab97-8e16483ddf94" } } ] }, { "Id": 130655, "Version": 5, "Guid": "4b9ef331-480a-4a38-86f1-a580f8345677", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n\n" }, "ItemIdentifier": { "en-us": "Fancybox3" }, "SettingsIdentifier": { "en-us": "WebResources.Fancybox3" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166557, "Version": 1, "Guid": "7db3406c-be34-4953-aa9e-7170ba075e5b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "4b9ef331-480a-4a38-86f1-a580f8345677" } } ] }, { "Id": 130658, "Version": 7, "Guid": "72286f65-e38b-42ee-a0da-0c73e55f7ba4", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n\n\n" }, "ItemIdentifier": { "en-us": "Bootstrap5" }, "SettingsIdentifier": { "en-us": "WebResources.Bootstrap5" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166558, "Version": 1, "Guid": "c0c72782-77a4-4419-be31-7c5ac4f7bca0", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "72286f65-e38b-42ee-a0da-0c73e55f7ba4" } } ] }, { "Id": 131820, "Version": 11, "Guid": "3356ad17-91ce-4814-83c1-9f527697391a", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n\n" }, "ItemIdentifier": { "en-us": "fancybox4" }, "SettingsIdentifier": { "en-us": "WebResources.fancybox4" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 144503, "Version": 1, "Guid": "04c9dd2c-f931-48b0-a1ad-7473e2526f00", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

Best update with exact version links and SRI from here:

\n

https://www.jsdelivr.com/package/npm/@fancyapps/ui?path=dist  

" }, "NoteType": { "en-us": "note" }, "Title": { "en-us": "Best update with exact version..." } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3356ad17-91ce-4814-83c1-9f527697391a" } }, { "Id": 166559, "Version": 1, "Guid": "b5aca58e-d6af-4489-9853-dcaaab66b3cb", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3356ad17-91ce-4814-83c1-9f527697391a" } } ] }, { "Id": 144505, "Version": 5, "Guid": "3e6811a8-87ab-4954-8402-6e2b3d80c6e2", "Type": { "Id": "66f19c62-371e-4ad1-a98b-de0745507be4", "Name": "⚙️WebResource" }, "Attributes": { "String": { "Html": { "en-us": "\n" }, "ItemIdentifier": { "en-us": "FontAwesome6" }, "SettingsIdentifier": { "en-us": "WebResources.FontAwesome6" } }, "Boolean": { "AutoOptimize": { "en-us": true }, "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 144506, "Version": 1, "Guid": "be43a43e-56c9-4660-97a4-a3aadafa370e", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

Get updated links from the CDNJS.

" }, "NoteType": { "en-us": "note" }, "Title": { "en-us": "Get updated links from the CDN..." } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3e6811a8-87ab-4954-8402-6e2b3d80c6e2" } }, { "Id": 166560, "Version": 1, "Guid": "ecf47466-931f-4e69-9c56-d8e3a0853d38", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "1a29fa3e-69e7-48db-836f-c04ee3991284" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3e6811a8-87ab-4954-8402-6e2b3d80c6e2" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-settings.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "813a3cb7-1a89-4477-bdfe-8863ab3ae59a", "Name": "SettingsSystem", "Scope": "System.Configuration", "Metadata": [ { "Id": 130614, "Version": 7, "Guid": "c0313d2f-899f-4d31-b863-6c10ff6f8383", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "DynamicChildrenField": { "*": "" }, "EditInstructions": { "*": "

Here you can configure System Settings. If you're new to this please read the docs

\n

Remember that you can always create custom settings for anything you want. These will not be stored here, but in a new ContentType called Settings which you would create on your own. 

" }, "Label": { "*": "System Settings" }, "ListInstructions": { "*": "

These settings override defaults provided at the global level. Make sure you understand Settings before doing much here. Read the docs please

\n

Note: you should usually only have exactly 1 item in this list. The only exception is on the main Content app where you have two items (one affecting only the current App, one affecting the entire Site). 

" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "813a3cb7-1a89-4477-bdfe-8863ab3ae59a" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 130556, "Version": 4, "Guid": "2cb4d735-f4dc-44c5-8890-36e7b8f50201", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "System Settings" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 130559, "Version": 3, "Guid": "050a85b3-1508-4200-852a-93d04889492f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130560, "Version": 3, "Guid": "81c65f11-5b9c-4994-9dd8-ab4c33259d4c", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SettingsEntityScope", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 130610, "Version": 7, "Guid": "198ac2ed-06af-4cf0-9ae4-94a665fba259", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Scope / Reach of these Settings" }, "Notes": { "en-us": "

Leave on Default in 99% of the cases. Only rare cases use Site. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 130611, "Version": 6, "Guid": "6bf1cfc3-8a1e-4f48-a7c9-9f86ea03894a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130612, "Version": 6, "Guid": "d8b1df1c-1a22-4a5d-9e72-69da716c7126", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (current App)\nsite:Site (these Settings affect all Apps of this Site)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageGlobalScope", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 166050, "Version": 4, "Guid": "1a824775-95df-4d4b-9ea8-687a25404772", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MessageGlobalScope" }, "Notes": { "en-us": "

You are Editing Global Settings

\n

These settings will affect the entire system. There are identical settings for each Site / Portal or for specific Apps. App settings will override Site settings, which override Global settings, which override built-in presets. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8ada531e-f7ea-4c14-b843-91b9d86cbea7" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageSiteScope", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 131471, "Version": 11, "Guid": "623eb94e-c2ea-4436-b32c-61311ea3d714", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Important: Site-Scope" }, "Notes": { "en-us": "

You are Editing Site-Level Settings

\n

These settings will affect the current Site / Portal. There are identical settings for the entire System (global), or for specific Apps. App settings will override Site settings, which override System settings, which override built-in presets. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e78504d3-1016-43e2-9a42-692554ea9145" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageAppScope", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 166051, "Version": 4, "Guid": "1df44260-b2ee-4452-8cbd-8e43a4ae1fec", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MessageAppScope" }, "Notes": { "en-us": "

You are Editing App Settings

\n

These settings will affect the current App. There are identical settings for each Site / Portal or for specific the entire System (global). App settings will override Site settings, which override Global settings, which override built-in presets. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "414f8b4d-6b9c-4acf-a0b0-53a1ffa2a5b5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupContent", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130602, "Version": 4, "Guid": "33d8eef3-9a7f-4756-8c82-11f6e8b79c69", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Content / Output Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "015cd69e-c652-4cce-ad01-e4a644cbd318" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130603, "Version": 3, "Guid": "a54af856-06e3-4915-ba80-5ea3900871c3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Images", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130659, "Version": 5, "Guid": "1b86a72c-9ea8-4927-8ed7-b03111c6f087", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Images" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130660, "Version": 4, "Guid": "c8a913ba-d892-4f70-9d37-199f610f9cc3", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "⚙️Images" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Copyright", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 182642, "Version": 3, "Guid": "ffbc2df0-83a1-4883-b7bc-68fbffc1b0a5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Copyright (WIP v17)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182643, "Version": 2, "Guid": "6bc5d0cb-be03-4138-8d46-3bb960a63d42", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️CopyrightSettings" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupInputFields", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 185438, "Version": 2, "Guid": "8a5a2402-02d5-4137-a6f6-17c3aa532aa2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Input Fields" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185440, "Version": 1, "Guid": "8e2e45ff-232d-4aab-acfb-6bd922c2f4b3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "InputFields", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 185439, "Version": 8, "Guid": "8fd45cd0-1c46-473b-a2ef-b4aa52669fc9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Input Fields" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185441, "Version": 2, "Guid": "d0463c61-ed48-4111-a122-0290217137ef", "Type": { "Id": "6fa7f390-7612-40c6-baff-2bcf6140a85f", "Name": "@entity-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" } }, "Entity": { "DataSources": { "*": [ "6c5d1062-1628-4b45-8f33-1b93a39f2ac5" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 185453, "Version": 3, "Guid": "03ee551e-e6f2-42e0-a4fd-29d882acf516", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️InputFields" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupThirdParty", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 134257, "Version": 3, "Guid": "86c1cd5d-3b16-4071-b048-2942fc03f253", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Extensions / Third-Party Services" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f526066d-7f78-4177-a81a-1a1248018a54" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134259, "Version": 2, "Guid": "d4765e91-ccc9-4204-8d40-3a0be958a94b", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GoogleRecaptcha", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 134258, "Version": 4, "Guid": "cf06e71c-f14e-4f0a-a0a0-455b6628cd9c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Google Recaptcha Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134260, "Version": 3, "Guid": "66f7c299-a872-4313-a3c6-ccc14e4262e2", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️GoogleRecaptcha" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GoogleMaps", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130558, "Version": 3, "Guid": "5b9ddffb-03e2-45a2-a109-cff38919e4f0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "Google Maps Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130562, "Version": 2, "Guid": "51fc1f39-6e7a-4bed-a26b-12254214526f", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "⚙️GoogleMaps" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GoogleTranslate", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 164898, "Version": 2, "Guid": "91efd773-b042-481e-82bc-fb3bb9d065cd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Google Translate (WIP / BETA v15)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164899, "Version": 1, "Guid": "b8424c6f-66bf-49ce-856d-b17f0d63b366", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️GoogleTranslate" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupWebResources", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130625, "Version": 4, "Guid": "41d29954-c106-4742-b59f-91d18d74beee", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Web Resources" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "19bb9348-59b3-4c23-b769-a950de118cf2" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130683, "Version": 3, "Guid": "f9a34b2b-fc02-4e3f-9cf9-e1b9263bd6ca", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "WebResources", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130626, "Version": 3, "Guid": "c4f29d42-b61a-4a08-8ee6-b1113e4b9f92", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "WebResources" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130642, "Version": 2, "Guid": "1df20cb6-629e-4550-ba4f-22ddae96d050", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️WebResources" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSecurity", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 144474, "Version": 5, "Guid": "cb63ebab-2640-4261-86ca-735f1290b7c6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Security / Content Security Policies" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144476, "Version": 4, "Guid": "75539fd7-1e8e-4cd7-887d-5a228632f0b6", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentSecurityPolicies", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 144475, "Version": 3, "Guid": "ef86dbc2-faf5-4078-a934-2f191fb50d99", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Content Security Policies" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144477, "Version": 2, "Guid": "665b299b-40b5-404e-9cbc-7b45e3828ae0", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️ContentSecurityPolicies" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSiteSetup", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 164888, "Version": 4, "Guid": "78b2fc6b-6ca9-4c07-86a8-ae9206f9a3b9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Site Setup Settings (new in v15)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164890, "Version": 3, "Guid": "5b7d19d2-4ea2-4487-b6d6-1f006015576e", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SiteSetup", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 164889, "Version": 4, "Guid": "c0fead0b-da4c-4ee6-b770-5960a157edfb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Site Setup Settings" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "3984debd-09ca-4e42-93b6-4284af3dcffe" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 164891, "Version": 2, "Guid": "b1eae523-a9b9-417f-aaee-102807385525", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️SiteSetup" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupInPage", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130601, "Version": 4, "Guid": "2c04ce26-d2bd-4696-acab-36d5265481a3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "In-Page Edit Experience Settings (not yet implemented)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130604, "Version": 3, "Guid": "1851dc87-f322-4346-acd3-38b778fbd2d9", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "QuickEdit", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130557, "Version": 5, "Guid": "92c49d95-789d-49b7-a98d-a9a9d05e8035", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "QuickEdit Settings" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130561, "Version": 4, "Guid": "f3872579-aec0-45c2-80a7-7e86d2fe35e5", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "⚙️QuickEdit" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": false }, "EnableAddExisting": { "*": false }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 166052, "Version": 2, "Guid": "8ada531e-f7ea-4c14-b843-91b9d86cbea7", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return context.app.isGlobal; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166053, "Version": 2, "Guid": "e78504d3-1016-43e2-9a42-692554ea9145", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return context.app.isSite; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166054, "Version": 2, "Guid": "414f8b4d-6b9c-4acf-a0b0-53a1ffa2a5b5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !(context.app.isSite || context.app.isGlobal);\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130627, "Version": 2, "Guid": "015cd69e-c652-4cce-ad01-e4a644cbd318", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { \n const symbols = [];\n if(data.GoogleMaps.length) symbols.push('\uD83C\uDF10');\n if(data.Images.length) symbols.push('\uD83D\uDDBC️');\n const addition = symbols.length ? ' (' + symbols.join(',') + ')' : '';\n return data.default + addition; \n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 185442, "Version": 2, "Guid": "6c5d1062-1628-4b45-8f33-1b93a39f2ac5", "Type": { "Id": "f11f79a2-186b-49ec-89d6-be260698e371", "Name": "UiPickerSourceEntity" }, "Attributes": { "String": { "ContentTypeNames": { "en-us": "⚙️InputFieldsWysiwygSettings" }, "CreateTypes": { "en-us": "⚙️InputFieldsWysiwygSettings" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Title": { "en-us": "Picker Entity - Input Fields (ATM only field wysiwyg)" }, "Value": { "en-us": "Guid" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134262, "Version": 2, "Guid": "f526066d-7f78-4177-a81a-1a1248018a54", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { \n const symbols = [];\n if(data.GoogleRecaptcha.length) symbols.push('\uD83D\uDD11');\n const addition = symbols.length ? ' (' + symbols.join(',') + ')' : '';\n return data.default + addition; \n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130682, "Version": 1, "Guid": "19bb9348-59b3-4c23-b769-a950de118cf2", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return data.default + (data.WebResources.length ? ' (✔️)': ''); }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166041, "Version": 2, "Guid": "3984debd-09ca-4e42-93b6-4284af3dcffe", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return context.debug; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "d7f2e4fa-5306-41bb-a3cd-d9529c838879", "Name": "\uD83E\uDDD1‍\uD83D\uDCBBSystemExportConfiguration", "Scope": "System.Configuration", "Metadata": [ { "Id": 165960, "Version": 4, "Guid": "36e39115-81bd-458b-92d6-52338e48a24b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Configuration for a specific export" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Define export packages for quick re-export of certain parts of the App.

" }, "Label": { "en-us": "\uD83E\uDDD1‍\uD83D\uDCBBExport Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "d7f2e4fa-5306-41bb-a3cd-d9529c838879" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 165951, "Version": 1, "Guid": "84a30b63-d348-4b0d-909c-03ce0c2df7de", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Name" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "WarningRequiresFeature", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 166415, "Version": 3, "Guid": "141c8eca-c247-45d6-8e99-2fe8ae43d1b6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "WarningRequiresFeature" }, "Notes": { "en-us": "

⚠️ Warning - Feature not Enabled ⚠️

\n

This configuration requires the feature DataExportImportBundles. Without it, it will not have an effect. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "9cc5420b-097f-4af8-a8f3-a8b27cccf9a7" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ExportFormat", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 165952, "Version": 3, "Guid": "9796b144-1972-4e25-9e01-a8f1f1cad9bd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "json" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Export Format" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 165955, "Version": 2, "Guid": "89d6b2bc-d793-430c-89ac-9010e05731d6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 165956, "Version": 2, "Guid": "b74b6a5a-3084-406e-a1e7-21b6a533fbcc", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "json:JSON\njson-zip:Zipped JSON (not supported yet)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "FileName", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 165953, "Version": 2, "Guid": "98d81fa6-33c9-458f-8c86-2cd655ea1eac", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "app-data.json" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "File Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 165957, "Version": 1, "Guid": "ef6354de-6e3f-4116-8978-36b68aa79fc3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 165958, "Version": 1, "Guid": "523a4d76-62ac-4f6b-b41f-36a3815f9052", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PreserveMarkers", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 165954, "Version": 4, "Guid": "7103b508-ce9c-4e33-bb40-1d0176f3cbaa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Preserve Markers" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 165959, "Version": 3, "Guid": "2cc0e49d-91fa-4d76-9d5a-4482789fc659", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Remove Export-Metadata Markers" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Preserve Export Metadata Markers" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EntitiesWithMetadata", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 166445, "Version": 5, "Guid": "5dad1f37-2379-4ff3-bbb0-49ca6f86a162", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "With Metadata" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166446, "Version": 3, "Guid": "ebd7978c-dca3-4301-bee9-4e2268640b33", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When exporting Entities, flush Metadata" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "When exporting Entities, keep Metadata (recommended)" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 166416, "Version": 2, "Guid": "9cc5420b-097f-4af8-a8f3-a8b27cccf9a7", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !context.features.isEnabled('DataExportImportBundles');\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "5f431769-ff03-472e-aab5-33891af10acc", "Name": "⚙️ContentSecurityPolicies", "Scope": "System.Configuration", "Metadata": [ { "Id": 144468, "Version": 4, "Guid": "d4b784fd-ab13-41c8-a92b-8f3e3c00eb68", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "Items" }, "EditInstructions": { "en-us": "

\"\"

\n

Content Security Policies are security configurations for CSP.  

" }, "Label": { "en-us": "⚙️Content Security Policies" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5f431769-ff03-472e-aab5-33891af10acc" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 144469, "Version": 3, "Guid": "240ee6bc-874a-46af-b9e3-5c3c954b4438", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "ContentSecurityPolicies" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SettingsIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144472, "Version": 2, "Guid": "aed104fd-4c0c-4519-8f1f-5855e67af962", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144473, "Version": 2, "Guid": "ee7a6890-723a-48b5-8caf-5c8a60dde864", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgWarningFeatureDisabled", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144498, "Version": 4, "Guid": "ae1d4551-1470-4dc2-982b-3fe7e2d30ce4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgWarningFeatureDisabled" }, "Notes": { "en-us": "

Warning

\n

The ContentSecurityPolicy feature is disabled. In this mode, this configuration will not have an effect. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "420612fc-6056-49a9-baa5-8267c72e86bc" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Items", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 144470, "Version": 3, "Guid": "8b004990-fba8-4baa-9717-4f9dc42ea422", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Items" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144471, "Version": 2, "Guid": "864fe97a-82c6-4f91-a1af-6f7de0ca6f9c", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️ContentSecurityPolicy" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 144499, "Version": 2, "Guid": "420612fc-6056-49a9-baa5-8267c72e86bc", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return !context.features.isEnabled('ContentSecurityPolicy'); }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "92f2eb3c-c3b7-4378-82df-b2393da6687e", "Name": "⚙️ContentSecurityPolicy", "Scope": "System.Configuration", "Metadata": [ { "Id": 144478, "Version": 2, "Guid": "938a4147-c2ef-4ae1-9849-46dc9cef4b5a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

\"\"

" }, "Label": { "en-us": "⚙️Content Security Policy" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "92f2eb3c-c3b7-4378-82df-b2393da6687e" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 144480, "Version": 4, "Guid": "da88eb53-6ec2-4c2c-9646-e1f79e7cad32", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SettingsIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "728d2627-698b-4bc6-b34e-3bee512ab93f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 144482, "Version": 3, "Guid": "64e3ee53-d510-4435-b70f-a7323d83b47e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144483, "Version": 3, "Guid": "d6d9a4be-3f44-4b44-848e-22b1cb9cc5dd", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgWarningCspFeature", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144500, "Version": 3, "Guid": "071f96c4-edea-479b-9989-fdbd9eb224f8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgWarningCspFeature" }, "Notes": { "en-us": "

Warning

\n

The ContentSecurityPolicy feature is disabled. In this mode, this configuration will not have an effect. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "67897d2b-1039-4008-9e8c-13af71fc34dc" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemIdentifier", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 144459, "Version": 9, "Guid": "bb50c3ed-1ac8-4fb1-ae9f-f5ef16f9eada", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Default" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Configuration For" }, "Notes": { "en-us": "

This is the ItemIdentifier

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144460, "Version": 8, "Guid": "a7b5e5d4-83bd-4a83-83a1-1a77f58d9cec", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144461, "Version": 8, "Guid": "1b1bd0fc-723f-4e56-982d-0d5c7dc8fb7f", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Default:Default (this is used if no other policies apply first)\nDev:Development - review and test using ?csp=dev\nSystemAdmin:System Admin (Super-User) only\nSiteAdmin:Site Admin only\nAnonymous:Anonymous Users (not logged in users) only" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgDevMode", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144494, "Version": 3, "Guid": "9fd9ff5c-f99c-49a9-9639-e6aefbe86f19", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgDevMode" }, "Notes": { "en-us": "

The CSP configuration for Dev is meant to help you develop CSP configurations in the background, without affecting the live operations. 

\n

Any configuration made here will apply if these two things are given

\n
    \n
  1. The CSP feature and the CSP URL feature are enabled
  2. \n
  3. You add ?csp=dev to the url
  4. \n
\n

In this case it will apply the policies you add here (plus policies in Razor code), no matter what login you use. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "cd800dca-99fc-4970-bbc8-1aa215436c0e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsEnabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 144462, "Version": 9, "Guid": "2cf8b990-787d-4fb3-a981-b0a6f6e406f5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Enabled" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6294cc9e-3793-4506-a777-a8aada403bb1", "d15730b0-3402-4cf6-a63a-ea3f792e4917" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144491, "Version": 6, "Guid": "1c7d7e47-89ab-4be3-abcb-0284a8edcfe6", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "CSP Disabled" }, "TitleIndeterminate": { "en-us": "CSP Enabled will inherit setting from Global or Preset" }, "TitleTrue": { "en-us": "CSP Enabled" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "IsEnforced", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 144463, "Version": 8, "Guid": "88ba9f39-f176-4b3d-b76c-060daf023c6e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Enforce" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "f6be3e78-a86c-44da-97d7-f283481b5f8e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144464, "Version": 5, "Guid": "59e23162-3843-42c0-89a1-2415136ad604", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Report Only (show warnings, don't enforce rules)" }, "TitleIndeterminate": { "en-us": "Enforce / Report will inherit setting from Global or Preset" }, "TitleTrue": { "en-us": "Enforce rules" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgPoliciesInherited", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144496, "Version": 5, "Guid": "773d4d5e-dfff-4936-b9e5-615355cb8015", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgPoliciesInherited" }, "Notes": { "en-us": "

Important: Empty Policies auto-inherit Parent Policies

\n

The policy is currently empty. In this case, the policy will be inherited from the configuration with the same name, from Global or Preset

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c6170f01-7fd3-49eb-8203-cdea80148094" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MsgAppPolicy", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 144513, "Version": 5, "Guid": "e963ca63-2738-4fff-93f7-e3b2636157f5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MsgAppPolicy" }, "Notes": { "en-us": "

Important: App Policies

\n

You are editing the App Policies. This will be merged with the Site or Global Policies.

\n

You also cannot change the Enabled / Report-Only at App-Level.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "49c22fa1-4e1f-4585-92e7-10d18a6da0fe" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Policies", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 144465, "Version": 7, "Guid": "835b01e9-ab75-453a-9892-fddc389bfd6e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Policies (one per line, use lines starting with // for comments)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "1571d7da-298c-476e-a25c-d2fe79c1052b" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144466, "Version": 4, "Guid": "36d35e0b-ae2d-449d-b4d7-bd89b4e630ae", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144467, "Version": 4, "Guid": "a5a8028e-e44d-4749-8c8d-d30292fed19a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 20 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 144481, "Version": 1, "Guid": "728d2627-698b-4bc6-b34e-3bee512ab93f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return 'ContentSecurityPolicies.' + data.ItemIdentifier; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144501, "Version": 2, "Guid": "67897d2b-1039-4008-9e8c-13af71fc34dc", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !context.features.isEnabled('ContentSecurityPolicy');\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144495, "Version": 2, "Guid": "cd800dca-99fc-4970-bbc8-1aa215436c0e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.ItemIdentifier == 'Dev'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144493, "Version": 2, "Guid": "6294cc9e-3793-4506-a777-a8aada403bb1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return data.ItemIdentifier == 'Dev'\n? 'not relevant for dev-mode configuration'\n: data.default;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Notes" }, "Title": { "en-us": "Setting Notes" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144492, "Version": 3, "Guid": "d15730b0-3402-4cf6-a63a-ea3f792e4917", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n // in dev mode, we\n if (context.debug) return false;\n return data.ItemIdentifier == 'Dev' || !(context.app.isSite || context.app.isGlobal);\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144521, "Version": 2, "Guid": "f6be3e78-a86c-44da-97d7-f283481b5f8e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n // in dev mode, we\n if (context.debug) return false;\n return !(context.app.isSite || context.app.isGlobal);\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144497, "Version": 3, "Guid": "c6170f01-7fd3-49eb-8203-cdea80148094", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !data.Policies && (context.app.isSite || context.app.isGlobal);\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144514, "Version": 2, "Guid": "49c22fa1-4e1f-4585-92e7-10d18a6da0fe", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n const app = context.app;\n return !(app.isSite || app.isGlobal);\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144512, "Version": 3, "Guid": "1571d7da-298c-476e-a25c-d2fe79c1052b", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if (context.cache.secondRun) return data.value;\n context.cache.secondRun = true;\n // detect if we're on app or site/global\n const onApp = !(context.app.isSite || context.app.isGlobal);\n var original = data.default;\n return onApp \n ? data.default.replace('Policies (', 'App Policies (') \n : data.default;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "f5764f60-2621-4a5d-9391-100fbe664640", "Name": "⚙️GoogleMaps", "Scope": "System.Configuration", "Metadata": [ { "Id": 166452, "Version": 2, "Guid": "8286402e-d593-4615-a0e0-b3f9dd5e166a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Google Maps" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "f5764f60-2621-4a5d-9391-100fbe664640" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 130589, "Version": 3, "Guid": "f1d1ccd8-f9f1-41e9-80b5-c8eb8d3e0a3e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "GoogleMaps" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Settings Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130598, "Version": 2, "Guid": "2eb275b8-b5c2-4afa-b494-10c6c727ae5d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130599, "Version": 2, "Guid": "b3d0af8c-a179-4002-9dfe-ebbecd799019", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Zoom", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 132247, "Version": 3, "Guid": "b3518e15-5f91-4f35-b391-73751ef4af02", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-dropdown" }, "Name": { "en-us": "Initial Zoom of the Map" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 132248, "Version": 2, "Guid": "9f90f92f-7b74-4bcb-b230-334ba27c91a8", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" }, { "Id": 132249, "Version": 2, "Guid": "302e69b8-5422-408d-a326-6c0d2d79566d", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "1 (show as much as possible):1\n2:2\n3:3\n4:4\n5:5\n6:6\n7:7\n8:8\n9:9\n10:10\n11:11\n12:12\n13:13\n14:14 (default)\n15:15\n16:16\n17:17\n18:18\n19:19\n20 (zoom as close as possible):20" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ApiKey", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130591, "Version": 3, "Guid": "3a024141-f6ac-44fd-9786-ead31b01dcc2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Google Maps Api Key" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130596, "Version": 2, "Guid": "17d48b76-3efa-4eee-82a6-08587661451a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130597, "Version": 2, "Guid": "aad0d742-e928-4d6c-923f-8fb69830cbba", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 2 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MarkerIcon", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 130621, "Version": 2, "Guid": "fa2d78fc-dbb2-4e34-93fe-78bb116b3769", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "hyperlink-default" }, "Name": { "*": "Marker Icon" }, "Notes": { "*": "

This will set the marker icon (the \uD83D\uDCCD). Leave empty for the google-maps default. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130622, "Version": 1, "Guid": "6b052128-2aad-4154-a89c-ee1e6679f287", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "*": "adam,more" }, "DefaultDialog": { "*": "" }, "FileFilter": { "*": "" }, "Paths": { "*": "" }, "ServerResourceMapping": { "*": "" } }, "Boolean": { "ShowAdam": { "*": true }, "ShowFileManager": { "*": false }, "ShowImageManager": { "*": false }, "ShowPagePicker": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DefaultCoordinates", "Type": "Custom", "InputType": "custom-gps", "IsTitle": false, "Metadata": [ { "Id": 166027, "Version": 3, "Guid": "1126f85e-2ac6-48e2-8542-e62a411adaa5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "custom-gps" }, "Name": { "en-us": "Default GPS Coordinates" }, "Notes": { "en-us": "

The initial coordinates used before it is configured. Requires EditUiGpsCustomDefaults.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "200d66a2-823b-415c-9a41-19ec5eb6e520" ] }, "Warnings": { "*": [] } }, "Boolean": { "DisableAutoTranslation": { "en-us": false }, "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166031, "Version": 1, "Guid": "aa41513e-05f2-499b-a437-3af8b8526fdb", "Type": { "Id": "@custom-gps", "Name": "@custom-gps" }, "Attributes": { "String": { "Address Mask": { "en-us": "" }, "AddressMask": { "en-us": "" }, "LatField": { "en-us": "" }, "LongField": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 166030, "Version": 2, "Guid": "200d66a2-823b-415c-9a41-19ec5eb6e520", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !context.features.isEnabled('EditUiGpsCustomDefaults');\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "838b51db-b06c-449b-adcc-cb508ca4b488", "Name": "⚙️GoogleRecaptcha", "Scope": "System.Configuration", "Metadata": [ { "Id": 130620, "Version": 2, "Guid": "796f4a72-8c10-4456-8902-feb0060b7499", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "EditInstructions": { "*": "

Configure how Google Recaptcha should work.

" }, "Label": { "*": "⚙️GoogleRecaptcha" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "838b51db-b06c-449b-adcc-cb508ca4b488" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 134250, "Version": 3, "Guid": "270801b1-91cf-4e45-8f16-0145c1b3f6f4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "GoogleRecaptcha" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Settings Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "SiteKey", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 134251, "Version": 3, "Guid": "750733fa-9d17-4a45-9342-6bfb9eec7a29", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Site Key" }, "Notes": { "en-us": "

The \"public\" part of the keys, which will be used in the JavaScript. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134253, "Version": 2, "Guid": "be1df46d-c5f8-4cd5-ba4c-11bf11b8ab83", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134254, "Version": 2, "Guid": "b7c1fa53-f558-4f6a-929d-47c01d9c7387", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 3 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "PrivateKey", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 134252, "Version": 3, "Guid": "57f20cc1-6d1b-4ebe-8516-fa2fa76a5a4a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Private Key" }, "Notes": { "en-us": "

The protected key which should only be used in API backends to verify the user. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 134255, "Version": 2, "Guid": "f773bbd5-d87d-4a4e-af9a-c1969c719a7d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 134256, "Version": 2, "Guid": "5aff68f9-26ad-43e2-8e12-26f9dbd19e06", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 3 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ScoreThreshold", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 184322, "Version": 1, "Guid": "7dbd96c0-f948-47a6-864e-ef357ea0cbc2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "0.5" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Score Threshold" }, "Notes": { "en-us": "

Recaptcha score / threshold which must be met to pass the test. See docs. Recommended default is 0.5, for highly attacked sites 0.7 may be better.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184323, "Version": 1, "Guid": "c60c362d-79aa-4cbd-a21e-6ec8fa58515e", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 2 }, "Max": { "en-us": 1 }, "Min": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "6a7b65c2-b07b-4ce0-8d5a-15572431698e", "Name": "⚙️GoogleTranslate", "Scope": "System.Configuration", "Metadata": [ { "Id": 166455, "Version": 1, "Guid": "641dbbc5-e12a-4a67-ae86-243ffa048f6b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Google Translate" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "6a7b65c2-b07b-4ce0-8d5a-15572431698e" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 164892, "Version": 2, "Guid": "7ba81bf5-e339-4d56-a0f4-8d0935926505", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "GoogleTranslate" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title / Settings Identifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164894, "Version": 1, "Guid": "d1d16821-8119-468a-903e-e88262662b4a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164895, "Version": 1, "Guid": "801d857c-6d53-49f4-b4e6-5fc4d36ff648", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ApiKey", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 164893, "Version": 4, "Guid": "ee1352b6-f68f-4606-856a-3f847bca7530", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "ApiKey" }, "Notes": { "en-us": "

Your API key to use Google Translate.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164896, "Version": 3, "Guid": "810150dc-8330-4928-9e77-4b8a0196783c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164897, "Version": 3, "Guid": "1725b76d-8275-4da1-9668-e6bf17916a28", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 3 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image", "Scope": "System.Configuration", "Metadata": [ { "Id": 166457, "Version": 1, "Guid": "d7c5a829-129d-4ac5-a3db-34d003586424", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Image" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1a86b080-9e0d-4207-97d2-04edf80b4f2f" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130667, "Version": 4, "Guid": "7253aa04-09c6-4308-81b9-3937b36e6c61", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Settings Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e9fa2064-ad18-475a-b549-cfa1434d4e15" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130675, "Version": 3, "Guid": "17ba7686-01c7-4d01-82f4-8fd87d3d2dfd", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130676, "Version": 3, "Guid": "2a9cadb4-11a9-4252-8278-fad10c5c89f0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemIdentifier", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 130668, "Version": 6, "Guid": "f0df036b-1ce2-4c6c-8e25-08f85608e42e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Content" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Name / ItemIdentifier" }, "Notes": { "en-us": "

Use the TT-Freetext option to create an own Identifier like News

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130672, "Version": 5, "Guid": "9db820ca-4625-4e8a-968a-38792a4cdfdf", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130673, "Version": 5, "Guid": "9629a7be-9978-49ab-bbea-5318c9414d30", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Content:Content (the typical full-width Image in the Content-Area)\nLightbox:Lightbox (images which open in a Lightbox)\nSection:Section (usually a full-width background / parallax)\nScreen:Full Screen images / Backgrounds\nWysiwyg:Wysiwyg - for images in the Wysiwyg Editor" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 183842, "Version": 2, "Guid": "2d77478d-7f3a-4ae7-9b1b-4979b453ba50", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Description" }, "Notes": { "en-us": "

Used to help select the right option in dropdowns.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 183843, "Version": 1, "Guid": "9d0208c3-aff5-4de2-a268-68c017990a89", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 183844, "Version": 1, "Guid": "515cffe6-4730-4a76-884d-0d1f5c9eae9b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Width", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 130669, "Version": 1, "Guid": "b5be42ed-e558-46a3-95c3-2ead0f1e31f7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "number-default" }, "Name": { "*": "Width" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AspectRatio", "Type": "Number", "InputType": "number-dropdown", "IsTitle": false, "Metadata": [ { "Id": 131455, "Version": 7, "Guid": "0615d0c7-797e-41fb-9759-4313d20e970a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "number-dropdown" }, "Name": { "*": "Aspect Ratio" }, "Notes": { "*": "

The ratio is width to height. 1 is square, 1.618 is the Golden Ratio wide-format. Used when resizing images which are proportional to the initial width. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131456, "Version": 5, "Guid": "78c21972-4122-4a04-bb13-a87932e2c90a", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "*": 10 } } }, "Owner": "dnn:userid=41" }, { "Id": 131465, "Version": 3, "Guid": "5f494775-cb1a-47cf-836c-d7e45d3c0234", "Type": { "Id": "@number-dropdown", "Name": "@number-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": ":Empty / no value\n1:Square 1:1\n2:Twice as wide, 2:1 - ideal for blogs / Social Media\n1.618:Golden Ratio Wide\n0.618:Golden Ratio Tall\n1.333:Classic TV Wide 4:3\n0.75:Classic TV Tall 4:3\n1.777:Cinema / Smartphone Wide 16:9\n0.5625:Cinema / Smartphone Tall 16:9\n" }, "DropdownValuesFormat": { "*": "value-label" } }, "Boolean": { "EnableTextEntry": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Height", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 130671, "Version": 2, "Guid": "e1e8149a-73fb-4a30-87ef-c365d82a91c0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "number-default" }, "Name": { "*": "Height" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ad90da09-ab14-4b6a-b762-6b60613cf63c" ] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Quality", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 130670, "Version": 1, "Guid": "cb7c6873-6bbb-4ace-8e0a-8ef46c8511b3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "number-default" }, "Name": { "*": "Quality" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ResizeMode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 130684, "Version": 5, "Guid": "d11bd984-630f-40a2-9b31-f948f394ebcc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Resize Mode (Mode)" }, "Notes": { "en-us": "

See resize variations of ImageResizing.net.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130685, "Version": 4, "Guid": "3b9de40d-8e26-4508-845b-c54668208a0b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130686, "Version": 4, "Guid": "e365f343-3f5c-43b1-99c6-1d03864bded3", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (not set)\n(none):Reset to not set, even if other settings would have set this\nmax:Max (preserve ratio)\npad:Pad (add white to ensure size)\ncrop:Crop (preserve ratio and crop to get into that shape)\nstretch:Stretch (distort image if necessary)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ScaleMode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 131466, "Version": 8, "Guid": "c62e2399-bf83-4ce2-8e65-96167db2ca75", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Scale Mode" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 131467, "Version": 7, "Guid": "18edb3cf-c813-422f-b020-d647893f7bd5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 131468, "Version": 7, "Guid": "0b1f2d83-73f3-40ef-96bf-9984a568604c", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default (not set, downscale-only)\n(none):Reset to not set, even if other settings would have set this\nboth:Both - Downscale and Upscale\ndown:Down - Downscale only - same as default\nup:Upscale only - you probably never want this" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Format", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 137816, "Version": 3, "Guid": "c5195e5c-59c3-4104-82e8-bea6a93ed60c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Format" }, "Notes": { "en-us": "

force all resized images to use this format

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 137817, "Version": 2, "Guid": "015de30f-8bac-49cb-b562-88ab9f5e8188", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 137818, "Version": 2, "Guid": "946ddba3-c530-438c-86f8-662bb580b1e2", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":not set (will use existing image format)\n(none):Reset to use existing format, even if other settings had a format specified\nwebp:WebP Format (recommended)\npng:PNG Format\njpg:JPEG Format\npng:PNG Format\ngif:GIF Format" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Advanced", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 144383, "Version": 11, "Guid": "31cd4bb6-3a64-434e-babc-c97f836fce83", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Advanced" }, "Notes": { "en-us": "

Advanced settings configured in json. See Image Resize Guide and Image-Resize Recipe.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "00eed300-a780-4959-8c6e-b5b2a1ff8af5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144384, "Version": 9, "Guid": "f2e77914-359c-481c-9379-d887a7b2edad", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 144385, "Version": 9, "Guid": "a1eb3b7a-377c-4fbf-a21f-a0fa93d6a412", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "light" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "https://schemas.2sxc.org/image-resize/v13/index.json" } }, "Number": { "Rows": { "en-us": 25 } }, "Boolean": { "JsonCommentsAllowed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130674, "Version": 2, "Guid": "e9fa2064-ad18-475a-b549-cfa1434d4e15", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return 'Images.' + data.ItemIdentifier; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 144381, "Version": 2, "Guid": "ad90da09-ab14-4b6a-b762-6b60613cf63c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return !data.AspectRatio; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 160374, "Version": 2, "Guid": "00eed300-a780-4959-8c6e-b5b2a1ff8af5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n if (data.value === '{}') {\n return `{\n \"$schema\": \"https://schemas.2sxc.org/image-resize/v13/index.json\",\n \"recipe\": {\n \"name\": \"default\",\n \"variants\": \"2*, 1*, 3/4*, 1/2*\",\n \"setWidth\": false,\n \"attributes\": {\n \"loading\": \"lazy\"\n }\n }\n}`;\n }\n return data.value;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "7edd0b8d-1405-44ed-ac33-d0d63a274bd6", "Name": "⚙️Images", "Scope": "System.Configuration", "Metadata": [ { "Id": 130661, "Version": 4, "Guid": "17eab878-42c2-45c5-a766-c66a33ef1db6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "DynamicChildrenField": { "*": "Items" }, "EditInstructions": { "*": "

This contains global image settings. Modern Apps will follow the settings here, but some apps may still have their custom behavior. 

" }, "Label": { "*": "⚙️Images" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "7edd0b8d-1405-44ed-ac33-d0d63a274bd6" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 130662, "Version": 2, "Guid": "a141688b-027d-4a2d-a31f-6e75819d237f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Images" }, "InputType": { "*": "string-default" }, "Name": { "*": "SettingsIdentifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130664, "Version": 1, "Guid": "28179b36-a916-4d74-aa66-d136b118c08b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130665, "Version": 1, "Guid": "f067e605-67de-4e8c-a135-4213a533ad26", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Items", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130663, "Version": 8, "Guid": "4f194dec-92a3-4459-92bb-9b1cf671758a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Preset Items" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130666, "Version": 7, "Guid": "05c1f082-c301-4da9-a6d9-2b5f8beab350", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️Image" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "57248ccb-24f1-44c6-9c6c-085e44ebb0cb", "Name": "⚙️License", "Scope": "System.Configuration", "Metadata": [ { "Id": 165978, "Version": 3, "Guid": "ccee5764-f2ff-469d-b610-72e372089a4d", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Special license ID for this system. Normally you would:

\n
    \n
  1. Create such an item
  2. \n
  3. Export it as json
  4. \n
  5. Place it in the App_Data/system-custom/entities/ folder
  6. \n
\n

This itself only provides an additional fingerprint for activating certain features. It does not enable the license. For this you must also have the matching license file, which you would get from 2sxc. 

" }, "Label": { "en-us": "⚙️License" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "57248ccb-24f1-44c6-9c6c-085e44ebb0cb" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 165976, "Version": 1, "Guid": "48bd0a6a-bd62-4cbc-829a-9b130177a1f0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Title" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Fingerprint", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 165977, "Version": 1, "Guid": "9ff395ea-6916-4bf7-9f00-bdf64ba77af1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Fingerprint" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "5ad95efe-1dc9-4681-adb8-42d9e7f0183b", "Name": "⚙️QuickEdit", "Scope": "System.Configuration", "Metadata": [ { "Id": 130619, "Version": 3, "Guid": "c83fbbf0-ef8c-43c7-8c70-42814991b30a", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "" }, "DynamicChildrenField": { "*": "Items" }, "EditInstructions": { "*": "

Important: This data is still experimental and more Proof-Of-Concept. It doesn't have an affect yet, so we recommend you don't add your own settings. 

" }, "Label": { "*": "⚙️QuickEdit" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5ad95efe-1dc9-4681-adb8-42d9e7f0183b" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 130563, "Version": 3, "Guid": "4f243a10-1795-4b51-afc9-118bab0cdd11", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "QuickEdit" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title / Settings Identifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130564, "Version": 2, "Guid": "1bebc016-265b-488d-8b15-b9429930cf0c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130565, "Version": 2, "Guid": "99f85172-ad98-4edc-a6fa-8ce4682bf3d5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Items", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 130566, "Version": 3, "Guid": "8f910efd-f176-43e3-b642-08d62f4b1486", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "entity-default" }, "Name": { "*": "QuickEdit Parts/Items" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130567, "Version": 2, "Guid": "666bd355-4a79-4b88-bf6f-0e39d25e6860", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "*": "⚙️QuickEditPart" }, "Prefill": { "*": "" } }, "Boolean": { "AllowMultiValue": { "*": true }, "EnableAddExisting": { "*": true }, "EnableCreate": { "*": true }, "EnableDelete": { "*": true }, "EnableEdit": { "*": true }, "EnableRemove": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "46cd1afc-c840-4473-8586-6bb1f35656a8", "Name": "⚙️QuickEditPart", "Scope": "System.Configuration", "Metadata": [ { "Id": 166462, "Version": 1, "Guid": "9b5b4edc-32dd-470d-ad2b-96d1ed1b30e2", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️QuickEdit Part" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "46cd1afc-c840-4473-8586-6bb1f35656a8" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130568, "Version": 4, "Guid": "847bf7af-2f9e-43bd-9477-389c101b025f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "SettingsIdentifier" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "bf0b980d-1e5c-487c-8732-ae780b7e84e0" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": true }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130579, "Version": 3, "Guid": "9ee0bf8d-7dde-426b-afd5-2eee0f1701ca", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130580, "Version": 3, "Guid": "d850de1d-1ae4-4623-b110-1c9a947ec669", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "*": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemIdentifier", "Type": "String", "InputType": "string-dropdown", "IsTitle": true, "Metadata": [ { "Id": 130569, "Version": 2, "Guid": "4544b653-e57c-42d8-92e6-291b4d5de48e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "Default" }, "InputType": { "*": "string-dropdown" }, "Name": { "*": "Part" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130576, "Version": 1, "Guid": "d7a1450e-417a-44f1-8560-c0c125d03528", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 130577, "Version": 1, "Guid": "fafd16ef-fcc9-42db-89ba-c6c2da5b6290", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "*": "Default:Default\nModule:Module\nInner Content Area:InnerContentArea\nInner Content WYSIWYG / Dynamic:InnerContentDynamic" } }, "Boolean": { "EnableTextEntry": { "*": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Enable", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130571, "Version": 1, "Guid": "e7c1f9da-a305-4845-a837-a5dbc0247bd3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Enable" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AddApp", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130572, "Version": 1, "Guid": "02856302-f4da-41ef-8f1b-f50ab0614e6a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-tristate" }, "Name": { "*": "AddApp" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AddContent", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130573, "Version": 1, "Guid": "fd280ad2-9dcf-48f2-86fe-bda9b927cda1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-tristate" }, "Name": { "*": "AddContent" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Select", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130574, "Version": 1, "Guid": "cd637330-f49f-46a0-b61c-3cba6620a870", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Select" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Paste", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130575, "Version": 1, "Guid": "cae6aa41-bfec-4bd9-999c-fc83fd1beff4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Paste" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Move", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 130581, "Version": 3, "Guid": "30e2e6d1-edb8-491c-9d7f-73ee742777f0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-tristate" }, "Name": { "*": "Move" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130588, "Version": 2, "Guid": "2cc1ecbb-7853-4013-b064-bd34d45e39f0", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130578, "Version": 4, "Guid": "bf0b980d-1e5c-487c-8732-ae780b7e84e0", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return \"QuickEdit.\" + data.ItemIdentifier; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Value" }, "Title": { "*": "Value" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "0948fd10-7ce2-4495-bc6e-7ccb8265857e", "Name": "⚙️SiteSetup", "Scope": "System.Configuration", "Metadata": [ { "Id": 166061, "Version": 1, "Guid": "6e5e7f67-6ad6-4fd5-8531-c0a57f116bc0", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Here you can configure aspects of how new sites are setup.

\n

As of v15, you can what apps should be available in the Auto-Installer. If this feature is popular, we'll consider enhancing it to also support custom apps and more.

" }, "Label": { "en-us": "⚙️SiteSetup" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "0948fd10-7ce2-4495-bc6e-7ccb8265857e" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 164881, "Version": 2, "Guid": "af9f284a-c6c6-4f77-886f-d05457556ec8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Installation" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 164883, "Version": 1, "Guid": "1338a5e0-8661-40e6-93d6-ce202058b0c6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164884, "Version": 1, "Guid": "0ec37593-6f43-44e7-b5f0-6c35fb6f8980", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "HintFeatureRequired", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 166059, "Version": 3, "Guid": "28b4578d-8771-4acc-9306-c89f7a06b8bf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "HintFeatureRequired" }, "Notes": { "en-us": "

⚠️ Important ⚠️

\n

This feature is not enabled on this site. So you can configure this, but the settings will not take effect until you enable the feature AppAutoInstallerConfigurable.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "ad2e2046-6eef-4cb1-98dd-0ae513af9e50" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AutoInstallApps", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 164882, "Version": 4, "Guid": "a4a9c154-90ea-4e8c-8895-2b8d5b0f2ee7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Apps Auto Install Rules" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164885, "Version": 3, "Guid": "f479f640-e7a6-487b-b6d4-f4815662a580", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "⚙️SiteSetupAutoInstallApps" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 166060, "Version": 2, "Guid": "ad2e2046-6eef-4cb1-98dd-0ae513af9e50", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n return !context.features.isEnabled('AppAutoInstallerConfigurable');\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "833baa25-899b-4242-ade7-323a319bcf71", "Name": "⚙️SiteSetupAutoInstallApps", "Scope": "System.Configuration", "Metadata": [ { "Id": 166465, "Version": 1, "Guid": "2ab9428b-d082-4837-9839-54c66560eb6e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️SiteSetup Auto Install Apps" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "833baa25-899b-4242-ade7-323a319bcf71" } } ], "Attributes": [ { "Name": "Name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 164867, "Version": 3, "Guid": "795e2d26-301a-4155-bffe-154edf2359de", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Name of App or Rule" }, "Notes": { "en-us": "

This has no real functionality, but is to help you be sure which app this is.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164868, "Version": 2, "Guid": "c785c222-025f-4fd5-a397-aad907a884ad", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164869, "Version": 2, "Guid": "9ae91ccd-1abf-4fab-8353-876045c69aa6", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Target", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 164872, "Version": 3, "Guid": "1acd3e13-346e-4bc5-9304-1576761346d6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "guid" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Target of this Rule" }, "Notes": { "en-us": "

What does this rule apply to?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164873, "Version": 2, "Guid": "7a842c84-7d21-4b89-94bf-b44da6bcdfeb", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164874, "Version": 2, "Guid": "637bd140-abba-4e0a-ae2e-0771151321c7", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "guid:Specific App (default)\nall:All Apps (basically for deny-anything except whitelisted-rules)\nurl:App Link (to zip of APP)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Mode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 164865, "Version": 6, "Guid": "335fcc90-f084-40c9-985c-54ade83297a8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "a" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Mode" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "4bbd4c45-a56a-4aed-ab73-4fb6bffad6a1" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164870, "Version": 4, "Guid": "8a543fa0-390c-4407-a61a-685afdd90248", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164871, "Version": 4, "Guid": "0a9e4842-d548-4997-ad82-280eb0a31bf4", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "f:Forbidden (may NOT be auto-installed)\nr:Required (MUST be installed when using auto-install)\na:Allowed (is allowed and selected, but can also be unselected)\no:Optional (is allowed but not selected)" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AppGuid", "Type": "String", "InputType": "string-url-path", "IsTitle": false, "Metadata": [ { "Id": 164864, "Version": 4, "Guid": "4790b967-fa82-4cdd-bf99-70369c4b1d9b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-url-path" }, "Name": { "en-us": "App Guid" }, "Notes": { "en-us": "

Find the App Guids in the App Catalog.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c4b84ce2-edd3-4ab5-a87c-d0534251947c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164875, "Version": 2, "Guid": "15a2b72e-8664-4df4-869a-b90dbb1977e7", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164876, "Version": 2, "Guid": "eecaa63b-f51e-476f-8680-e073c131a5b0", "Type": { "Id": "@string-url-path", "Name": "@string-url-path" }, "Attributes": { "String": { "AutoGenerateMask": { "en-us": "[Title]" } }, "Boolean": { "AllowSlashes": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Url", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 164866, "Version": 3, "Guid": "4ffbfe66-dbf0-4ce4-95aa-8c571d9a1dc6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Url" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8431ad5d-a030-4646-b524-5acf4ca502ee" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164880, "Version": 1, "Guid": "93c49ac7-fbe8-448f-b956-357a782112e8", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 164877, "Version": 3, "Guid": "4bbd4c45-a56a-4aed-ab73-4fb6bffad6a1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.Target !== ''; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164878, "Version": 3, "Guid": "c4b84ce2-edd3-4ab5-a87c-d0534251947c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.Target === 'guid'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164879, "Version": 2, "Guid": "8431ad5d-a030-4646-b524-5acf4ca502ee", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.Target === 'url'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "aed871cf-220b-4330-b368-f1259981c9c8", "Name": "⚙️CopyrightSettings", "Scope": "System.Configuration", "Metadata": [ { "Id": 182640, "Version": 2, "Guid": "08208884-69bd-4448-8fd9-4f0f7cef5f50", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Copyright Settings" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "aed871cf-220b-4330-b368-f1259981c9c8" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 182632, "Version": 6, "Guid": "61220dc2-2824-4ef1-adad-a28373be49bc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Copyright" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SettingsIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182635, "Version": 5, "Guid": "680db639-cb65-4e13-9b6f-5024bd8d40a0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182636, "Version": 5, "Guid": "3e4678e5-0250-457f-adef-289e0b5a885a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ImagesInputEnabled", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 182634, "Version": 5, "Guid": "514cbecb-0063-43c1-a8a6-4f0703d746fb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Images - Copyright Input" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182639, "Version": 4, "Guid": "750733f6-9673-4df9-8b0f-b2a558eac401", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "no copyright input for images" }, "TitleIndeterminate": { "en-us": "inherit default setting (no copyright input for images)" }, "TitleTrue": { "en-us": "enable copyright input for images (toolbar-buttons)" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DisplayPrefix", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182646, "Version": 1, "Guid": "78e0ae31-81fd-44b1-b702-763cc04f0d8f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "DisplayPrefix" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DisplayFormat", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 182647, "Version": 2, "Guid": "bbed63a0-301d-4c36-969e-46fd281181c0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "DisplayFormat" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 182648, "Version": 1, "Guid": "adf0a5fe-ef0c-46b7-b951-08df15c3020f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182649, "Version": 1, "Guid": "318364e3-5aa1-487f-b27d-5e42e3a2cb15", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default - [prefix] [owner] [year] [type] [message]" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "60131b0d-d042-43c8-a4a7-fb44a45db60c", "Name": "⚙️InputFields", "Scope": "System.Configuration", "Metadata": [ { "Id": 185444, "Version": 5, "Guid": "ae780cf6-edf1-443b-9e5b-ac06d545df1e", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "Items" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Input Fields (BETA)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "60131b0d-d042-43c8-a4a7-fb44a45db60c" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 185448, "Version": 2, "Guid": "e719a89c-c811-4ba8-b732-b6704d13b669", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "InputFields" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SettingsIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185450, "Version": 1, "Guid": "18325ede-6bd4-4c4d-8c25-139f6ad00563", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185451, "Version": 1, "Guid": "d7e24b07-8885-470f-a75d-1843fab56f62", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Items", "Type": "Entity", "InputType": "entity-picker", "IsTitle": false, "Metadata": [ { "Id": 185449, "Version": 2, "Guid": "a73885a8-ef7b-4c5c-b787-5d3e846350ed", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-picker" }, "Name": { "en-us": "Items" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185452, "Version": 1, "Guid": "665c0af6-76c3-44fd-8f8a-0342a115340d", "Type": { "Id": "6fa7f390-7612-40c6-baff-2bcf6140a85f", "Name": "@entity-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" } }, "Entity": { "DataSources": { "*": [ "6c5d1062-1628-4b45-8f33-1b93a39f2ac5" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "f8a6ed24-11c0-42c4-9022-409989489563", "Name": "⚙️InputFieldsWysiwygSettings", "Scope": "System.Configuration", "Metadata": [ { "Id": 185429, "Version": 3, "Guid": "30e898a6-5c85-4316-bc8c-a70a24621ae1", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "⚙️Input Field - Wysiwyg Settings (beta)" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "

Configuration for the WYSIWYG - BETA.

" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "f8a6ed24-11c0-42c4-9022-409989489563" } } ], "Attributes": [ { "Name": "SettingsIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 185430, "Version": 4, "Guid": "e9157ff9-26f8-4dcf-a71f-186afd16030f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "InputFields.StringWysiwyg" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "SettingsIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185431, "Version": 3, "Guid": "54f39b44-9a9a-437a-a1ff-6a0d7d865798", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185432, "Version": 3, "Guid": "1eb61cc5-f3d9-42b8-8c88-0a0da9368ab7", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ItemIdentifier", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 185445, "Version": 2, "Guid": "6518ffc1-d503-43f6-aaaf-f0c602521ed9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "StringWysiwyg" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "ItemIdentifier" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185446, "Version": 1, "Guid": "a6985349-3048-4164-8c2f-4e3fcd3204cc", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185447, "Version": 1, "Guid": "2388e2dd-943f-4b69-8c8f-931e63cab23e", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EditorPlugin", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 185433, "Version": 2, "Guid": "a9f6a367-d31b-48f5-80c2-62d976a2758f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "tinymce" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Editor Plugin" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185456, "Version": 1, "Guid": "a5af80fd-2ff4-4832-bd93-b59eea87346b", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185457, "Version": 1, "Guid": "cbb82eaa-993c-46d3-b5b8-c4ee046c87c1", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ButtonSource", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 185434, "Version": 2, "Guid": "a95b1a9a-dd79-4197-9b83-cdf849fb34b3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Button HTML Source" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185436, "Version": 1, "Guid": "5cbf571f-8ef5-4690-a129-8c4a38e21990", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "7a6b443a-6d23-45b2-9499-35743cf7d924" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ButtonSourceInDebugMode", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 185435, "Version": 2, "Guid": "33c5221b-6b0a-4f6a-b5c1-4f2e3002ecaf", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Button HTML Source (when in Debug Mode)" }, "Notes": { "en-us": "

Determine if super-users can access HTML source in debug mode.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185437, "Version": 1, "Guid": "12db5759-46a7-4c9b-b160-16160407ed9b", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "7a6b443a-6d23-45b2-9499-35743cf7d924" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 183904, "Version": 1, "Guid": "7a6b443a-6d23-45b2-9499-35743cf7d924", "Type": { "Id": "3a96ad21-027d-4679-8372-c39406ad1d11", "Name": "UiPickerSourceCustomCsv" }, "Attributes": { "String": { "Csv": { "en-us": "Value,Title,Info\n,\"Default\",\"In default mode the button is disabled in the small editor, but enabled in the popup Dialog\"\ntrue,\"Always Enable\",\"Enable the button in both the small editor as well as the popup dialog\"\nfalse,\"Always Disable\",\"Disable the button in both the small editor as well as the popup dialog\"" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:Info]

" }, "ItemTooltip": { "en-us": "

[Item:Info]

" }, "Title": { "en-us": "String-WYSIWyG Button Source" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ], "Entities": [ { "Id": 130583, "Version": 18, "Guid": "8c87f24f-959c-4ff1-b537-077556e8d439", "Type": { "Id": "813a3cb7-1a89-4477-bdfe-8863ab3ae59a", "Name": "SettingsSystem" }, "Attributes": { "String": { "SettingsEntityScope": { "en-us": "" }, "Title": { "en-us": "System Settings" } }, "Entity": { "ContentSecurityPolicies": { "*": [ "285c4a83-7fa2-4732-b1a2-da945b94c3dd" ] }, "Copyright": { "*": [ "7116c320-769d-4d7c-94ef-76c176a17ba2" ] }, "GoogleMaps": { "*": [ "c459f03d-bb65-4813-ac8a-0a780f72eab7" ] }, "GoogleRecaptcha": { "*": [ "7d929ae6-ffe2-4686-b3dc-cf0937abea00" ] }, "GoogleTranslate": { "*": [ "eb39ffc9-f7fa-4599-8ea4-549a8fd9d69a" ] }, "Images": { "*": [ "89184eb0-1d4d-4429-8c38-c453f8aa149d" ] }, "InputFields": { "*": [ "22930727-fb85-4dfb-86b1-6517b34ac386" ] }, "QuickEdit": { "*": [ "a88c329c-cc6e-4744-b3ec-88c186502d9d" ] }, "SiteSetup": { "*": [ "052a5e27-40f8-40bf-bd97-35a6641e9df0" ] }, "WebResources": { "*": [ "06f4fa58-2e91-4896-a16e-3bbaf9a5f491" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166535, "Version": 1, "Guid": "c8c3fac2-0aa3-407a-8463-a5e724f54623", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "8c87f24f-959c-4ff1-b537-077556e8d439" } } ] }, { "Id": 144479, "Version": 3, "Guid": "285c4a83-7fa2-4732-b1a2-da945b94c3dd", "Type": { "Id": "5f431769-ff03-472e-aab5-33891af10acc", "Name": "⚙️ContentSecurityPolicies" }, "Attributes": { "String": { "SettingsIdentifier": { "en-us": "ContentSecurityPolicies" } }, "Entity": { "Items": { "*": [ "429b41cd-c626-48f2-919e-63d7a4cdd226", "2ab98dd8-9937-4a5c-8f9f-651222c2bad9" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166536, "Version": 1, "Guid": "fcc413ba-ca41-40d1-bf92-89ecdeed8e11", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "285c4a83-7fa2-4732-b1a2-da945b94c3dd" } } ] }, { "Id": 144484, "Version": 13, "Guid": "429b41cd-c626-48f2-919e-63d7a4cdd226", "Type": { "Id": "92f2eb3c-c3b7-4378-82df-b2393da6687e", "Name": "⚙️ContentSecurityPolicy" }, "Attributes": { "String": { "ItemIdentifier": { "en-us": "Default" }, "Policies": { "en-us": "// *************************\n// ALL-SRC\n// this will be added to default and all other src which are set\nall-src: 'self'\nall-src: https:\nall-src: *\nall-src: 'unsafe-inline'\n\n// *************************\n// SCRIPT-SRC\n\n// This is for the default asp.net web forms script block in Dnn 7 - 9\n// For now it's disabled, as it would deactivate 'unsafe-inline'\n// script-src: 'sha256-1lxkJKcAqLep9MQngjrTJpfkCA56HejJ0oNvP3hq0gI='\n\n// This will allow just about any script to run\nscript-src: 'unsafe-eval'\nscript-src: 'unsafe-hashes'\n\n// *************************\n" }, "SettingsIdentifier": { "en-us": "ContentSecurityPolicies.Default" } }, "Boolean": { "IsEnabled": { "en-us": false }, "IsEnforced": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166537, "Version": 1, "Guid": "b9cdb5ac-5c94-4d9d-8c5b-88e0365011dc", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "429b41cd-c626-48f2-919e-63d7a4cdd226" } } ] }, { "Id": 144490, "Version": 1, "Guid": "2ab98dd8-9937-4a5c-8f9f-651222c2bad9", "Type": { "Id": "92f2eb3c-c3b7-4378-82df-b2393da6687e", "Name": "⚙️ContentSecurityPolicy" }, "Attributes": { "String": { "ItemIdentifier": { "en-us": "Dev" }, "Policies": { "en-us": "// *************************\n// ALL-SRC\n// this will be added to default and all other src which are set\nall-src: 'self'\nall-src: https:\nall-src: *\nall-src: 'unsafe-inline'\n\n// *************************\n// SCRIPT-SRC\n\n// This is for the default asp.net web forms script block in Dnn 7 - 9\n// For now it's disabled, as it would deactivate 'unsafe-inline'\n// script-src: 'sha256-1lxkJKcAqLep9MQngjrTJpfkCA56HejJ0oNvP3hq0gI='\n\n// This will allow just about any script to run\nscript-src: 'unsafe-eval'\nscript-src: 'unsafe-hashes'\n\n// *************************\n" }, "SettingsIdentifier": { "en-us": "ContentSecurityPolicies.Dev" } }, "Boolean": { "IsEnabled": { "en-us": true }, "IsEnforced": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166538, "Version": 1, "Guid": "13dd5bb1-7d3f-44f9-93c2-649d65814f50", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "2ab98dd8-9937-4a5c-8f9f-651222c2bad9" } } ] }, { "Id": 130593, "Version": 14, "Guid": "c459f03d-bb65-4813-ac8a-0a780f72eab7", "Type": { "Id": "f5764f60-2621-4a5d-9391-100fbe664640", "Name": "⚙️GoogleMaps" }, "Attributes": { "String": { "ApiKey": { "en-us": "secure:7nRMfvzJ0BHyTtGDFaVB4kCYLBGRkgW1oAYG1KTLXk/jme8q9Hhb4a1ZOuJVwM94;iv:5cmjUX6SDTJMCj+IkwhWNA==" }, "SettingsIdentifier": { "en-us": "GoogleMaps" } }, "Hyperlink": { "MarkerIcon": { "en-us": "" } }, "Custom": { "DefaultCoordinates": { "en-us": "{\"latitude\":47.1747,\"longitude\":9.4692}" } }, "Number": { "Zoom": { "en-us": 14 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166539, "Version": 1, "Guid": "f0753bdc-e7a1-4b61-b721-4b4e21b34f7c", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "c459f03d-bb65-4813-ac8a-0a780f72eab7" } } ] }, { "Id": 164900, "Version": 3, "Guid": "eb39ffc9-f7fa-4599-8ea4-549a8fd9d69a", "Type": { "Id": "6a7b65c2-b07b-4ce0-8d5a-15572431698e", "Name": "⚙️GoogleTranslate" }, "Attributes": { "String": { "ApiKey": { "en-us": "secure:DyUZbdZzGCO4Mmllq0wgHnIi2IF3i1cGV3lUNjI1ZhX3o76cBZit//QGtk7WTvWe;iv:lAZPeWu3aKkaXgDVeAYkrA==" }, "SettingsIdentifier": { "en-us": "GoogleTranslate" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166540, "Version": 1, "Guid": "a58efde7-756d-4f34-a0dc-be478b2c183b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "eb39ffc9-f7fa-4599-8ea4-549a8fd9d69a" } } ] }, { "Id": 134261, "Version": 2, "Guid": "7d929ae6-ffe2-4686-b3dc-cf0937abea00", "Type": { "Id": "838b51db-b06c-449b-adcc-cb508ca4b488", "Name": "⚙️GoogleRecaptcha" }, "Attributes": { "String": { "PrivateKey": { "en-us": "secure:qrPulUBStmCGTZ0EnQ9NdKrfe0oO+jei9fhV6+wxKCUUMxgdbA44+QaJJLECU1Eh;iv:/XLUVMOz/w8lQRLLyvD79w==" }, "SettingsIdentifier": { "en-us": "GoogleRecaptcha" }, "SiteKey": { "en-us": "secure:+klje+7SHT2AiCDpTM+AsLZ9IGcAXBV1DlGUsdWrASihQfxwa5J/y11hvn/ahemA;iv:1tYjA+gPNTKHvWTo8aef+Q==" } }, "Number": { "ScoreThreshold": { "en-us": 0.5 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166541, "Version": 1, "Guid": "5f53e47b-d9c4-4a21-9b6d-b873c4c61185", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "7d929ae6-ffe2-4686-b3dc-cf0937abea00" } } ] }, { "Id": 130678, "Version": 26, "Guid": "358ce0df-52bf-4877-bf32-19c3fb723c73", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"2*, 1*, 3/4*, 1/2*\",\r\n \"setWidth\": false,\r\n \"attributes\": {\r\n \"loading\": \"lazy\"\r\n },\r\n \"recipes\": [\r\n {\r\n \"name\": \"Bootstrap3\",\r\n \"forCss\": \"bs3\",\r\n \"attributes\": { \"class\": \"img-responsive\" },\r\n \"setWidth\": false\r\n },\r\n {\r\n \"name\": \"Bootstrap4\",\r\n \"forCss\": \"bs4\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true\r\n },\r\n {\r\n \"name\": \"Bootstrap5\",\r\n \"forCss\": \"bs5\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true,\r\n \"setHeight\" : true,\r\n \"recipes\": [\r\n { \r\n \"forFactor\": \"12/12\", \r\n \"width\": 1230,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 100vw, 1230px\"\r\n }\r\n },\r\n { \"forFactor\": \"11/12\", \"width\": 1100 },\r\n { \"forFactor\": \"10/12\", \"width\": 1000 },\r\n { \"forFactor\": \"9/12\", \"width\": 900 },\r\n { \"forFactor\": \"8/12\", \"width\": 800 },\r\n { \"forFactor\": \"7/12\", \"width\": 700 },\r\n { \r\n \"forFactor\": \"6/12\", \r\n \"width\": 600, \r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 50vw, (max-width: 576px) 100vw, 600px\" \r\n }\r\n },\r\n { \"forFactor\": \"5/12\", \"width\": 500 },\r\n { \r\n \"forFactor\": \"4/12\", \r\n \"width\": 390,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 34vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 390px\"\r\n }\r\n },\r\n { \r\n \"forFactor\": \"3/12\", \r\n \"width\": 285,\r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 25vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 285px\"\r\n }\r\n },\r\n { \"forFactor\": \"2/12\", \"width\": 170 },\r\n { \"forFactor\": \"1/12\", \"width\": 75 }\r\n ]\r\n }\r\n ]\r\n }\r\n}" }, "Description": { "en-us": "Standard image sizes / aspect-ratios, usually the default for most pictures." }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Content" }, "ResizeMode": { "en-us": "crop" }, "ScaleMode": { "en-us": "both" }, "SettingsIdentifier": { "en-us": "Images.Content" } }, "Number": { "AspectRatio": { "en-us": 1.618 }, "Height": { "en-us": 865 }, "Quality": { "en-us": 75 }, "Width": { "en-us": 1400 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166542, "Version": 1, "Guid": "0dc356a3-acff-4bcf-b276-a13e46fc3a9d", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "358ce0df-52bf-4877-bf32-19c3fb723c73" } } ] }, { "Id": 130679, "Version": 15, "Guid": "35d4e680-2f92-455a-90b7-4a5a936c287f", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"2*, 1/1*, 3/4*, 1/2*\",\r\n \"setWidth\": false\r\n }\r\n}" }, "Description": { "en-us": "Large images in lightbox popups." }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Lightbox" }, "ResizeMode": { "en-us": "max" }, "ScaleMode": { "en-us": "down" }, "SettingsIdentifier": { "en-us": "Images.Lightbox" } }, "Number": { "AspectRatio": { "en-us": 1.333 }, "Height": { "en-us": 1500 }, "Quality": { "en-us": 75 }, "Width": { "en-us": 2000 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166543, "Version": 1, "Guid": "e5fefea9-ae40-4151-afcb-619aa88ee09b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "35d4e680-2f92-455a-90b7-4a5a936c287f" } } ] }, { "Id": 130680, "Version": 16, "Guid": "bdbff289-219d-46d6-b697-5d17050eebe9", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"3000, 2400, 1600, 1200, 800\",\r\n \"setWidth\": false\r\n }\r\n}" }, "Description": { "en-us": "Typically used for the background behind content, e.g. for parallax effects. " }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Section" }, "ResizeMode": { "en-us": "crop" }, "ScaleMode": { "en-us": "both" }, "SettingsIdentifier": { "en-us": "Images.Section" } }, "Number": { "AspectRatio": { "en-us": 1.333 }, "Height": { "en-us": 1200 }, "Quality": { "en-us": 60 }, "Width": { "en-us": 1600 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166544, "Version": 1, "Guid": "6993d8e1-158d-4ca2-baa0-b3b846d49773", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "bdbff289-219d-46d6-b697-5d17050eebe9" } } ] }, { "Id": 130681, "Version": 19, "Guid": "8affa267-ec04-408f-af93-48c0ae693e5c", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"3000, 2400, 1600, 1200, 800\",\r\n \"setWidth\": false\r\n }\r\n}" }, "Description": { "en-us": "Full-screen images." }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Screen" }, "ResizeMode": { "en-us": "crop" }, "ScaleMode": { "en-us": "both" }, "SettingsIdentifier": { "en-us": "Images.Screen" } }, "Number": { "AspectRatio": { "en-us": 1.333 }, "Height": { "en-us": 1500 }, "Quality": { "en-us": 60 }, "Width": { "en-us": 2000 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166545, "Version": 1, "Guid": "c7a4b6b0-f3e8-45af-aff9-dd498be1f318", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "8affa267-ec04-408f-af93-48c0ae693e5c" } } ] }, { "Id": 130677, "Version": 4, "Guid": "89184eb0-1d4d-4429-8c38-c453f8aa149d", "Type": { "Id": "7edd0b8d-1405-44ed-ac33-d0d63a274bd6", "Name": "⚙️Images" }, "Attributes": { "String": { "SettingsIdentifier": { "en-us": "Images" } }, "Entity": { "Items": { "*": [ "358ce0df-52bf-4877-bf32-19c3fb723c73", "35d4e680-2f92-455a-90b7-4a5a936c287f", "bdbff289-219d-46d6-b697-5d17050eebe9", "8affa267-ec04-408f-af93-48c0ae693e5c", "8c454005-9a76-48b2-a63d-7e92a731bb80", "6c155e30-43a4-4564-bf3f-0d80c925c4d7" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166546, "Version": 1, "Guid": "2ec32b16-b553-49d8-9495-2fd9b7d8a8c2", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "89184eb0-1d4d-4429-8c38-c453f8aa149d" } } ] }, { "Id": 130582, "Version": 2, "Guid": "a88c329c-cc6e-4744-b3ec-88c186502d9d", "Type": { "Id": "5ad95efe-1dc9-4681-adb8-42d9e7f0183b", "Name": "⚙️QuickEdit" }, "Attributes": { "String": { "SettingsIdentifier": { "*": "QuickEdit" } }, "Entity": { "Items": { "*": [ "c8e3769a-96e9-4312-8cb4-da24f90b9fdd", "02667ae8-dbb6-4431-81ae-125a22f9e5ac", "89c89890-ab00-42f7-9ee1-c81d79855533", "7cb78140-86e6-401b-bca5-a46ee525b925" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166547, "Version": 1, "Guid": "43f8d589-2948-4a26-8a2f-ff58176ca847", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "a88c329c-cc6e-4744-b3ec-88c186502d9d" } } ] }, { "Id": 130584, "Version": 3, "Guid": "c8e3769a-96e9-4312-8cb4-da24f90b9fdd", "Type": { "Id": "46cd1afc-c840-4473-8586-6bb1f35656a8", "Name": "⚙️QuickEditPart" }, "Attributes": { "String": { "ItemIdentifier": { "*": "Default" }, "SettingsIdentifier": { "*": "QuickEdit.Default" } }, "Boolean": { "AddApp": { "*": true }, "AddContent": { "*": true }, "Enable": { "*": true }, "Move": { "*": true }, "Paste": { "*": true }, "Select": { "*": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166548, "Version": 1, "Guid": "f7e455a4-51de-4fc5-a97a-d3fb968ccc1b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "c8e3769a-96e9-4312-8cb4-da24f90b9fdd" } } ] }, { "Id": 130585, "Version": 3, "Guid": "02667ae8-dbb6-4431-81ae-125a22f9e5ac", "Type": { "Id": "46cd1afc-c840-4473-8586-6bb1f35656a8", "Name": "⚙️QuickEditPart" }, "Attributes": { "String": { "ItemIdentifier": { "*": "Module" }, "SettingsIdentifier": { "*": "QuickEdit.Module" } }, "Boolean": { "AddApp": { "*": true }, "AddContent": { "*": true }, "Enable": { "*": true }, "Move": { "*": true }, "Paste": { "*": true }, "Select": { "*": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166549, "Version": 1, "Guid": "77dcf7a8-40f8-4c81-85e3-d2c4b1c64a76", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "02667ae8-dbb6-4431-81ae-125a22f9e5ac" } } ] }, { "Id": 130586, "Version": 3, "Guid": "89c89890-ab00-42f7-9ee1-c81d79855533", "Type": { "Id": "46cd1afc-c840-4473-8586-6bb1f35656a8", "Name": "⚙️QuickEditPart" }, "Attributes": { "String": { "ItemIdentifier": { "*": "InnerContentArea" }, "SettingsIdentifier": { "*": "QuickEdit.InnerContentArea" } }, "Boolean": { "AddApp": { "*": true }, "AddContent": { "*": true }, "Enable": { "*": true }, "Move": { "*": false }, "Paste": { "*": true }, "Select": { "*": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166550, "Version": 1, "Guid": "4b931acc-7554-4a5a-8961-643a196e7297", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "89c89890-ab00-42f7-9ee1-c81d79855533" } } ] }, { "Id": 130587, "Version": 3, "Guid": "7cb78140-86e6-401b-bca5-a46ee525b925", "Type": { "Id": "46cd1afc-c840-4473-8586-6bb1f35656a8", "Name": "⚙️QuickEditPart" }, "Attributes": { "String": { "ItemIdentifier": { "*": "InnerContentDynamic" }, "SettingsIdentifier": { "*": "QuickEdit.InnerContentDynamic" } }, "Boolean": { "AddApp": { "*": true }, "AddContent": { "*": true }, "Enable": { "*": true }, "Move": { "*": false }, "Paste": { "*": false }, "Select": { "*": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166551, "Version": 1, "Guid": "825217f1-d5b9-44d9-a311-3ec53c241b5c", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "7cb78140-86e6-401b-bca5-a46ee525b925" } } ] }, { "Id": 165968, "Version": 1, "Guid": "052a5e27-40f8-40bf-bd97-35a6641e9df0", "Type": { "Id": "0948fd10-7ce2-4495-bc6e-7ccb8265857e", "Name": "⚙️SiteSetup" }, "Attributes": { "String": { "SettingsIdentifier": { "en-us": "Installation" } }, "Entity": { "AutoInstallApps": { "*": [] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166552, "Version": 1, "Guid": "4ff9ceef-85f8-4f79-96dc-42c6a25c97db", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "052a5e27-40f8-40bf-bd97-35a6641e9df0" } } ] }, { "Id": 169969, "Version": 2, "Guid": "8c454005-9a76-48b2-a63d-7e92a731bb80", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"2*, 1*, 3/4*, 1/2*\",\r\n \"setWidth\": false,\r\n \"attributes\": {\r\n \"loading\": \"lazy\"\r\n },\r\n \"recipes\": [\r\n {\r\n \"name\": \"Bootstrap3\",\r\n \"forCss\": \"bs3\",\r\n \"attributes\": { \"class\": \"img-responsive\" },\r\n \"setWidth\": false\r\n },\r\n {\r\n \"name\": \"Bootstrap4\",\r\n \"forCss\": \"bs4\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true\r\n },\r\n {\r\n \"name\": \"Bootstrap5\",\r\n \"forCss\": \"bs5\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true,\r\n \"setHeight\" : true,\r\n \"recipes\": [\r\n { \r\n \"forFactor\": \"12/12\", \r\n \"width\": 1230,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 100vw, 1230px\"\r\n }\r\n },\r\n { \"forFactor\": \"11/12\", \"width\": 1100 },\r\n { \"forFactor\": \"10/12\", \"width\": 1000 },\r\n { \"forFactor\": \"9/12\", \"width\": 900 },\r\n { \"forFactor\": \"8/12\", \"width\": 800 },\r\n { \"forFactor\": \"7/12\", \"width\": 700 },\r\n { \r\n \"forFactor\": \"6/12\", \r\n \"width\": 600, \r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 50vw, (max-width: 576px) 100vw, 600px\" \r\n }\r\n },\r\n { \"forFactor\": \"5/12\", \"width\": 500 },\r\n { \r\n \"forFactor\": \"4/12\", \r\n \"width\": 390,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 34vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 390px\"\r\n }\r\n },\r\n { \r\n \"forFactor\": \"3/12\", \r\n \"width\": 285,\r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 25vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 285px\"\r\n }\r\n },\r\n { \"forFactor\": \"2/12\", \"width\": 170 },\r\n { \"forFactor\": \"1/12\", \"width\": 75 }\r\n ]\r\n }\r\n ]\r\n }\r\n}" }, "Description": { "en-us": "Recommended for auto-resizing images shown in wysiwyg content - eg. in blogs." }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Wysiwyg" }, "ResizeMode": { "en-us": "max" }, "ScaleMode": { "en-us": "both" }, "SettingsIdentifier": { "en-us": "Images.Wysiwyg" } }, "Number": { "Height": { "en-us": 1400 }, "Quality": { "en-us": 75 }, "Width": { "en-us": 1400 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 169970, "Version": 1, "Guid": "2987dbad-0186-4bc0-9684-685ddf64a1e2", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "8c454005-9a76-48b2-a63d-7e92a731bb80" } } ] }, { "Id": 175300, "Version": 2, "Guid": "6c155e30-43a4-4564-bf3f-0d80c925c4d7", "Type": { "Id": "1a86b080-9e0d-4207-97d2-04edf80b4f2f", "Name": "⚙️Image" }, "Attributes": { "String": { "Advanced": { "en-us": "{\r\n \"recipe\": {\r\n \"name\": \"default\",\r\n \"variants\": \"2*, 1*, 3/4*, 1/2*\",\r\n \"setWidth\": false,\r\n \"attributes\": {\r\n \"loading\": \"lazy\"\r\n },\r\n \"recipes\": [\r\n {\r\n \"name\": \"Bootstrap3\",\r\n \"forCss\": \"bs3\",\r\n \"attributes\": { \"class\": \"img-responsive\" },\r\n \"setWidth\": false\r\n },\r\n {\r\n \"name\": \"Bootstrap4\",\r\n \"forCss\": \"bs4\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true\r\n },\r\n {\r\n \"name\": \"Bootstrap5\",\r\n \"forCss\": \"bs5\",\r\n \"attributes\": { \"class\": \"img-fluid\" },\r\n \"setWidth\": true,\r\n \"setHeight\" : true,\r\n \"recipes\": [\r\n { \r\n \"forFactor\": \"12/12\", \r\n \"width\": 1230,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 100vw, 1230px\"\r\n }\r\n },\r\n { \"forFactor\": \"11/12\", \"width\": 1100 },\r\n { \"forFactor\": \"10/12\", \"width\": 1000 },\r\n { \"forFactor\": \"9/12\", \"width\": 900 },\r\n { \"forFactor\": \"8/12\", \"width\": 800 },\r\n { \"forFactor\": \"7/12\", \"width\": 700 },\r\n { \r\n \"forFactor\": \"6/12\", \r\n \"width\": 600, \r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 50vw, (max-width: 576px) 100vw, 600px\" \r\n }\r\n },\r\n { \"forFactor\": \"5/12\", \"width\": 500 },\r\n { \r\n \"forFactor\": \"4/12\", \r\n \"width\": 390,\r\n \"attributes\":{\r\n \"sizes\": \"(max-width: 1400px) 34vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 390px\"\r\n }\r\n },\r\n { \r\n \"forFactor\": \"3/12\", \r\n \"width\": 285,\r\n \"attributes\": {\r\n \"sizes\": \"(max-width: 1400px) 25vw, (max-width: 991px) 50vw, (max-width: 575px) 100vw, 285px\"\r\n }\r\n },\r\n { \"forFactor\": \"2/12\", \"width\": 170 },\r\n { \"forFactor\": \"1/12\", \"width\": 75 }\r\n ]\r\n }\r\n ]\r\n }\r\n}" }, "Description": { "en-us": "Square images such as profile pictures." }, "Format": { "en-us": "" }, "ItemIdentifier": { "en-us": "Square" }, "ResizeMode": { "en-us": "crop" }, "ScaleMode": { "en-us": "both" }, "SettingsIdentifier": { "en-us": "Images.Square" } }, "Number": { "AspectRatio": { "en-us": 1 }, "Height": { "en-us": 865 }, "Quality": { "en-us": 73 }, "Width": { "en-us": 1400 } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 175301, "Version": 1, "Guid": "7d64cbc8-6c71-433f-b691-bb5e0dcab9fa", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "6c155e30-43a4-4564-bf3f-0d80c925c4d7" } } ] }, { "Id": 182644, "Version": 2, "Guid": "7116c320-769d-4d7c-94ef-76c176a17ba2", "Type": { "Id": "aed871cf-220b-4330-b368-f1259981c9c8", "Name": "⚙️CopyrightSettings" }, "Attributes": { "String": { "SettingsIdentifier": { "en-us": "Copyright" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 182645, "Version": 1, "Guid": "e6913d5f-d209-4dce-af00-a8dd39140f1b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "7116c320-769d-4d7c-94ef-76c176a17ba2" } } ] }, { "Id": 185454, "Version": 2, "Guid": "22930727-fb85-4dfb-86b1-6517b34ac386", "Type": { "Id": "60131b0d-d042-43c8-a4a7-fb44a45db60c", "Name": "⚙️InputFields" }, "Attributes": { "String": { "SettingsIdentifier": { "en-us": "InputFields" } }, "Entity": { "Items": { "*": [ "e69e447f-8534-4182-8e56-8b0f987a48a9" ] } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 185461, "Version": 1, "Guid": "53a7f6d5-a072-4037-b6e7-c12e770a7a9c", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "22930727-fb85-4dfb-86b1-6517b34ac386" } } ] }, { "Id": 185455, "Version": 1, "Guid": "e69e447f-8534-4182-8e56-8b0f987a48a9", "Type": { "Id": "f8a6ed24-11c0-42c4-9022-409989489563", "Name": "⚙️InputFieldsWysiwygSettings" }, "Attributes": { "String": { "ButtonSource": { "en-us": "" }, "ButtonSourceInDebugMode": { "en-us": "" }, "EditorPlugin": { "en-us": "tinymce" }, "ItemIdentifier": { "en-us": "StringWysiwyg" }, "SettingsIdentifier": { "en-us": "InputFields.StringWysiwyg" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 185462, "Version": 1, "Guid": "333b2897-4edd-43c2-a656-b0b22815fdad", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "48e9f943-45da-49b4-9ceb-2b91bb6a54be" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "e69e447f-8534-4182-8e56-8b0f987a48a9" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system-wysiwyg-configs.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration", "Scope": "System.Fields", "Metadata": [ { "Id": 164748, "Version": 4, "Guid": "a376b4ec-1ae0-4295-a696-f7a8efe8cc87", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This is an advanced way to configure your wysiwyg, new / WIP v15.04.

\n

\uD83D\uDC49\uD83C\uDFFD Do consult the string-wysiwyg docs

" }, "Label": { "en-us": "String WYSIWYG Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "63a00a8a-39d8-410d-ae45-ab09ef07af5b" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 164749, "Version": 4, "Guid": "616e5886-0e71-4dca-83fe-6c59374faaed", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title" }, "Notes": { "en-us": "

Name of this configuration so it's easier to identify when used

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164752, "Version": 3, "Guid": "dd30ef07-c971-4c62-8de5-7c36a45d837c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164753, "Version": 3, "Guid": "dea28b78-12cb-4d29-a3da-e1ef41a9a7ae", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Mode", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 164751, "Version": 9, "Guid": "f2b55ac9-29da-43f4-9a99-a2329412de45", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Mode" }, "Notes": { "en-us": "

A preset from which to base your custom configuration.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164754, "Version": 8, "Guid": "57c69b36-98d6-406b-a378-769554d7c7e7", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164755, "Version": 8, "Guid": "2df16e5a-df0a-48dc-8b2b-28cff2408ffd", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "default:Default WYSIWYG configuration\ntext:Text WYSIWYG - optimized for formatted text without images etc.\ntext-basic:Text-Basic - Simplified text, without headings\ntext-minimal:Text-Minigal - Very reduced text without headings or bullets\ntext-plain:Text-Plain - basically not a wysiwyg\nrich:Rich Media / Images for long bodies such as Blogs" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "MessageModeRich", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 171650, "Version": 3, "Guid": "bd265ac7-08bb-4162-a856-bb2981cc430d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "MessageModeRich" }, "Notes": { "en-us": "

To learn about the new rich mode and how the Razor much be modified to support this, see r.2sxc.org/wysiwyg-rich.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c842ce13-f28b-4104-97d3-209bcf3a312a" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CustomConfiguration", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 166479, "Version": 2, "Guid": "879aa3a6-9978-46a9-a079-e6cb4c3bb651", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "CustomConfiguration" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166480, "Version": 1, "Guid": "131a7da0-949e-4103-90e8-930baecfef95", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Use Mode-Presets" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Override Presets with Custom Settings" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Advanced", "Type": "String", "InputType": "string-json", "IsTitle": false, "Metadata": [ { "Id": 164750, "Version": 4, "Guid": "5a7aec8e-adea-4724-b122-83a370cf1024", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-json" }, "Name": { "en-us": "Advanced" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "75c5a65b-e2ce-455e-9f1e-1bcde7b63c74", "eb12c7d9-2c4c-476e-bfb5-b9d1aff55854" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 164756, "Version": 1, "Guid": "ecfc6ff2-58b6-4915-85ba-8b52e6bef540", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 164757, "Version": 1, "Guid": "9d5ffee7-04eb-4a3e-92fe-90ca50c60e1b", "Type": { "Id": "@string-json", "Name": "@string-json" }, "Attributes": { "String": { "JsonSchemaMode": { "en-us": "none" }, "JsonSchemaRaw": { "en-us": "" }, "JsonSchemaSource": { "en-us": "link" }, "JsonValidation": { "en-us": "strict" } }, "Hyperlink": { "JsonSchemaUrl": { "en-us": "" } }, "Number": { "Rows": { "en-us": 25 } }, "Boolean": { "JsonCommentsAllowed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 167715, "Version": 2, "Guid": "75c5a65b-e2ce-455e-9f1e-1bcde7b63c74", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => { return !context.debug; });" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166481, "Version": 2, "Guid": "eb12c7d9-2c4c-476e-bfb5-b9d1aff55854", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.CustomConfiguration; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 171651, "Version": 1, "Guid": "c842ce13-f28b-4104-97d3-209bcf3a312a", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.Mode == 'rich';\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ], "Entities": [ { "Id": 164758, "Version": 4, "Guid": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "default" }, "Title": { "en-us": "Default" } }, "Boolean": { "CustomConfiguration": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166511, "Version": 1, "Guid": "436d4a9d-a5ee-45d2-a59c-cd710634938e", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0" } } ] }, { "Id": 164759, "Version": 4, "Guid": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "text-minimal" }, "Title": { "en-us": "Text-Minimal - Only very basic formatting" } }, "Boolean": { "CustomConfiguration": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166512, "Version": 1, "Guid": "a709a155-de65-4621-9a64-4ab1ebb02fe4", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "3e9dd123-ccef-4d81-80e7-4c6ae6f5ddc6" } } ] }, { "Id": 166477, "Version": 3, "Guid": "d8d6e212-4878-4483-be4a-3de865a85ee6", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "text" }, "Title": { "en-us": "Text-Default - For Text Editing without Images/Media" } }, "Boolean": { "CustomConfiguration": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166513, "Version": 1, "Guid": "4ef8ac28-beeb-4243-b6dd-644dc38a5d02", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "d8d6e212-4878-4483-be4a-3de865a85ee6" } } ] }, { "Id": 166478, "Version": 8, "Guid": "52d79da0-b10d-4f62-9838-2e17b2254a3e", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "rich" }, "Title": { "en-us": "Rich Media (new 16.01) - With Images and Layout (for Blogs, News etc.)" } }, "Boolean": { "CustomConfiguration": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166514, "Version": 1, "Guid": "6625e473-3466-4129-b1f6-e3b39ca4130d", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "52d79da0-b10d-4f62-9838-2e17b2254a3e" } } ] }, { "Id": 166515, "Version": 2, "Guid": "c2d17507-e076-4a93-a9f9-e94e7ecc7e96", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "text-basic" }, "Title": { "en-us": "Text-Basic - Like Text, but without Headers" } }, "Boolean": { "CustomConfiguration": { "en-us": false } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 166516, "Version": 1, "Guid": "ca702550-5d92-48ec-bace-baf97310afe5", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "c2d17507-e076-4a93-a9f9-e94e7ecc7e96" } } ] }, { "Id": 167713, "Version": 5, "Guid": "df032556-2d8a-40d7-bc35-57ec9088f15d", "Type": { "Id": "63a00a8a-39d8-410d-ae45-ab09ef07af5b", "Name": "StringWysiwygConfiguration" }, "Attributes": { "String": { "Advanced": { "en-us": "" }, "Mode": { "en-us": "text-plain" }, "Title": { "en-us": "Text-Plain - Really just text, basically not a WYSIWYG" } }, "Boolean": { "CustomConfiguration": { "en-us": true } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 167714, "Version": 1, "Guid": "0a4d1e62-2ca1-45e9-9e78-2ac548b8b5ed", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "fdc0d360-3e20-4794-ac20-9bb57899cd24" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "df032556-2d8a-40d7-bc35-57ec9088f15d" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/bundles/system.json ================================================ { "_": { "V": 1 }, "Bundles": [ { "Name": "default", "ContentTypes": [ { "ContentType": { "Id": "ContentType", "Name": "ContentType", "Scope": "System", "Metadata": [ { "Id": 45144, "Version": 3, "Guid": "0047f7c3-26ee-44bb-9ab4-9eec48e37837", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "en-us": "Description of a Content-Type (Metadata)" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

This is (optional) metadata for the content-type. Imagine it as added information, which if available, will be used in dialogs to enhance the user experience. 

" }, "Label": { "en-us": "Content Type" }, "ListInstructions": { "en-us": "

These are Metadata for existing Content-Types. Please edit with caution. Make sure you know what you're doing. 

" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "ContentType" } }, { "Id": 137458, "Version": 2, "Guid": "da6abab0-fa90-4bf9-bd1d-b0acc7288b35", "Type": { "Id": "4c88d78f-5f3e-4b66-95f2-6d63b7858847", "Name": "MetadataForDecorator" }, "Attributes": { "String": { "DeleteWarning": { "en-us": "

This usually contains descriptions for content-types, and shouldn't be deleted.

" }, "TargetName": { "en-us": "" }, "Title": { "en-us": "Metadata for ContentTypes" } }, "Number": { "Amount": { "en-us": 1 }, "TargetType": { "en-us": 5 } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "ContentType" } }, { "Id": 142656, "Version": 1, "Guid": "b51d7b5a-3085-4087-b7cc-8f347434d171", "Type": { "Id": "5e958dc6-2922-4d68-835c-7b9711538b12", "Name": "NoteDecorator" }, "Attributes": { "String": { "Note": { "en-us": "

Warning: This data contains name/description of this Content-Type. You usually don't want to delete it. 

" }, "NoteType": { "en-us": "System.Warning.Delete" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "ContentType" } } ], "Attributes": [ { "Name": "Label", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45101, "Version": 1, "Guid": "12a7a6cd-4af8-43fd-9602-5194deb7e476", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Label" }, "Notes": { "*": "

This is the nice name shown in the end user dialogs. You should keep it short and simple. Read the recommendations in help.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": true }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45102, "Version": 1, "Guid": "b83fc329-1fbf-486c-a90c-ee0180430930", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45103, "Version": 1, "Guid": "f655d08d-08dd-424a-be8c-766c35d68785", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45104, "Version": 1, "Guid": "deb013df-b677-45a2-b3fd-72fdae4bb2cc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Description" }, "Notes": { "*": "

A nice description of what this content-type is for. It will be shown as tool-tip or help-text in normal user dialogs, so keep it simple and non-techie. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45105, "Version": 1, "Guid": "100a0948-c079-4266-a836-bedd739f4e85", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45106, "Version": 1, "Guid": "887c5090-8dd4-4b44-bd25-61d95970dda9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1.0 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupMore", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130220, "Version": 3, "Guid": "67c64f34-3f6e-4bdb-a5c6-9e71cdbfb8e1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "More Settings like Icon, Notes etc." }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8c586209-0552-4a8d-ba6b-5f614040b370" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130221, "Version": 2, "Guid": "e6748899-cbc6-4e26-beba-22435542f0c3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Notes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 45107, "Version": 1, "Guid": "26aaee3d-f546-46a6-883b-11750002b796", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "Notes" }, "Notes": { "*": "

Use this for internal, technical notes. It won't be shown to the content editors. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45108, "Version": 1, "Guid": "05690831-7509-42fb-89e8-df7796ceab1e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "Icon", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 45109, "Version": 4, "Guid": "18de4b80-06da-4f59-8c72-a015c44935a1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Icon" }, "Notes": { "en-us": "

Give this content-type an icon to use in tile-style buttons - see docs. We recommend using the [App:Path] placeholder.

" }, "Placeholder": { "en-us": "Drop file or use [App:Path]/file-in-your-app.png" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5090e000-abab-403c-9aa8-1601824550d1", null ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45110, "Version": 3, "Guid": "5320a089-48d4-4204-834f-f2e631311847", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Link", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 45111, "Version": 1, "Guid": "afdcadc4-58e4-4229-afe5-049aa17c160d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "hyperlink-default" }, "Name": { "*": "Link" }, "Notes": { "*": "

This is an optional link to further information, tutorials, help, etc. It will be shown to the end user if such a link exists. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45112, "Version": 1, "Guid": "13473a70-31e4-4498-90b8-bdc2f574eff3", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "*": "" }, "DefaultDialog": { "*": "" }, "FileFilter": { "*": "" }, "Paths": { "*": "" } }, "Boolean": { "ShowAdam": { "*": false }, "ShowFileManager": { "*": false }, "ShowImageManager": { "*": false }, "ShowPagePicker": { "*": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupInstructions", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130218, "Version": 4, "Guid": "19f674bb-a807-4045-9c4d-f3a556bb29fd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Instructions for the User" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "de7676c0-37ff-493c-a73b-c6109375c530" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130219, "Version": 3, "Guid": "219bffff-a0c9-4cb4-98cc-2fe6c89e39e7", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "EditInstructions", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 45113, "Version": 1, "Guid": "3773eafb-d6a6-4743-9493-011106ac3c28", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "Edit Instructions" }, "Notes": { "*": "

Instructions shown to the user in the edit-form for additional help/assistance.

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45114, "Version": 1, "Guid": "70caeef5-cdad-48f8-8be1-7ef3bba85b8f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" } ] }, { "Name": "ListInstructions", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 53702, "Version": 2, "Guid": "c04c5a13-2cc8-4fcf-a087-aaea57df08ba", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "List Instructions" }, "Notes": { "*": "

This text will be shown above the normal list of items to provide context or help. That will be implemented in 2sxc 10, ATM it doesn't happen yet. 

" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 53703, "Version": 1, "Guid": "1038d30e-f402-4768-ac98-5ddc44c91dec", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupFormulas", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 169124, "Version": 2, "Guid": "d03a606d-0a2d-47d8-b664-3bca21c55ace", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Formula Settings Σ (experimental v15)" }, "Notes": { "en-us": "

Configure special settings for formulas editing this content type. See docs.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 169125, "Version": 1, "Guid": "6449d62f-381a-4863-b4d6-6a8aff0d71b8", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AdditionalSettings", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 166606, "Version": 8, "Guid": "8e5012f4-558f-47cc-9078-187057b1b065", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "System Settings to allow Formulas to use (beta)" }, "Notes": { "en-us": "

Specify what settings will be broadcast to use in the formula.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166607, "Version": 6, "Guid": "c579910e-4251-4d30-9b58-4b543e531d9f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 166608, "Version": 2, "Guid": "9c851730-9965-4264-a3dc-543b349bfeda", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 166609, "Version": 4, "Guid": "9dc2fc7a-0337-4bda-b271-ced10a49b0f7", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "Query": { "en-us": "System.Settings" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "" }, "Value": { "en-us": "Title" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupHidden", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 130631, "Version": 2, "Guid": "e8a10191-e3d0-49f1-984b-e128d1006089", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Super WIP / Beta Properties - don't touch" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8896ecb9-5e91-471b-8fac-d704160e5b85" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": false } } }, "Owner": "dnn:userid=41" }, { "Id": 130634, "Version": 1, "Guid": "ccf51162-2758-4403-ade2-f6b896a3ba31", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "DynamicChildrenField", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 130632, "Version": 1, "Guid": "91d82501-b529-4f5c-802d-6617d02c4dc3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "DynamicChildrenField" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 130256, "Version": 1, "Guid": "8c586209-0552-4a8d-ba6b-5f614040b370", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { return data.default + ( data.Notes || data.Icon || data.Link ? ' ✅' : '') ; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Indicate content" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 163997, "Version": 3, "Guid": "5090e000-abab-403c-9aa8-1601824550d1", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n const icon = data.Icon.toLowerCase();\n if (icon.indexOf('[app:path]/') == 0)\n return data.default + ' \uD83D\uDC4D\uD83C\uDFFD [App:Path]/... is the best option';\n if (icon.indexOf('file:') == 0)\n return data.default + \" ⚠️ using 'file:...' is not ideal, see docs link in description below\";\n return data.default;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Setting Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130255, "Version": 2, "Guid": "de7676c0-37ff-493c-a73b-c6109375c530", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data) { \n return data.default + (data.EditInstructions || data.ListInstructions ? ' ✅' : ''); \n}" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Name" }, "Title": { "*": "Setting Name: Indicate it has content" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 130633, "Version": 1, "Guid": "8896ecb9-5e91-471b-8fac-d704160e5b85", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "*": "v1(data, context) { return context.debug; }" }, "Notes": { "*": "" }, "Target": { "*": "Field.Settings.Visible" }, "Title": { "*": "Setting Visible" } }, "Boolean": { "Enabled": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "PermissionConfiguration", "Name": "PermissionConfiguration", "Scope": "System", "Metadata": [ { "Id": 45147, "Version": 5, "Guid": "bc962fea-544d-4cad-9da9-8bef0fb1d29c", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "For configuring permissions." }, "EditInstructions": { "*": "

Configure the permissions of views or content-types (see wiki). 

\n

If you want to use new user-identity or groups in the permissions, you'll need to enable the user-feature or group-feature. For the public-users-can-only-create draft data, make sure you also enable that feature.

" }, "Label": { "*": "Permission Configuration" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "PermissionConfiguration" } }, { "Id": 185423, "Version": 1, "Guid": "cd6417ac-70be-4cb3-b33d-2525ad781b30", "Type": { "Id": "9db5de57-7c16-4370-8d16-a8bf4cfe8e5b", "Name": "DataStorageDecorator" }, "Attributes": { "String": { "DataProcessingHandler": { "en-us": "ToSic.Eav.Metadata.Sys.PermissionDataProcessor" }, "StoreType": { "en-us": "" } }, "Boolean": { "SaveIsDisabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "PermissionConfiguration" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45139, "Version": 3, "Guid": "9058ec65-2c69-47f0-a641-37d697abe0c1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "DefaultValue": { "*": "Security Rule" }, "InputType": { "*": "string-default" }, "Name": { "*": "Title" }, "Notes": { "*": "

A title just to help you know what this rule is for. 

" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "PermissionType", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 139994, "Version": 3, "Guid": "a8b1910d-e4cf-42a7-9aca-8b1a4f927f4c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Permission Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139995, "Version": 1, "Guid": "db865551-f2cb-41e2-abe6-c0ea1bde32d9", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 139996, "Version": 1, "Guid": "2dde4c5d-c027-48ee-b101-a1cbcdc1e15f", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Choose a type to get better guidance in selecting permissions\ncontenttype:Content-Type Permissions\nlanguage:Language Permissions\nquery:Query Permissions\napp:App Permissions\nview:View Permissions" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "InstructionsLanguage", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 139998, "Version": 2, "Guid": "2979f262-ac25-4e0e-b418-c5e4a1252feb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "Language Permissions" }, "Notes": { "en-us": "

To set language permissions, specify a user-group name in the identity, and \"Edit\" in the Grant.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5449b7a7-2370-4b92-9893-14a2e6ac199e" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Identity", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 46137, "Version": 6, "Guid": "9698ff5c-330c-477b-8d22-13dda68413dd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Identity" }, "Notes": { "*": "You can type in a user GUID here, or group number(s) like \"5, 12\". Make sure you enable the feature." }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 46138, "Version": 5, "Guid": "20e5f2c4-5f9a-43b7-816f-dcd7c1ef9b9f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 46139, "Version": 5, "Guid": "f771be81-f781-45b1-92a4-cdef397301f3", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Condition", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 45140, "Version": 5, "Guid": "bceeaca4-3bed-4234-9306-3e82e06c6a98", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Condition" }, "Notes": { "en-us": "

Why this security rule should apply.
\r\nLearn more on 2sxc.org/help?tag=permissions

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "561a7c04-037a-4ae0-a1d8-2c2dbbfbeb2c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45141, "Version": 4, "Guid": "118f46a3-f732-4c6f-beae-9a28d23841de", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45148, "Version": 3, "Guid": "00e1395e-3d43-44e2-b94b-ce90567411eb", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "Please Select:\nAnonymous (any user):SecurityAccessLevel.Anonymous\nView:SecurityAccessLevel.View\nEdit:SecurityAccessLevel.Edit\nAdmin:SecurityAccessLevel.Admin\nHost:SecurityAccessLevel.Host\nAuthor / Creator of a Content-Item:Owner" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Grant", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 45142, "Version": 8, "Guid": "07cacd48-4e7d-47fb-997b-2a2d4ec56096", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "-" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Grant" }, "Notes": { "en-us": "

What we will grant in this rule. 
\r\nLearn more on 2sxc.org/help?tag=permissions

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "8c45026c-8701-4b94-ac83-6386d01c8aa3", "eed58642-7465-4075-857b-fbe562b2df35" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45143, "Version": 7, "Guid": "5c8e94dd-b3b2-40bd-87d6-d7540ef76278", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45149, "Version": 6, "Guid": "35e59922-5e4c-409a-805d-026d8f0b7676", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "None (no permissions defined):-\nRead:r\nCreate (no read or edit):c\nUpdate (read and modify existing):ru\nDelete:d\nEdit (Create, Read, Update, Delete):crud\nAll Content (CRUD + Approve):cruda\nAll Content + Permissions:crudap\nDesign/Develop (modify internal structure):crudav\nDesign and Permissions:crudavp\nFull Control (usually host only):crudavpz\nRead schema (applies to content-types):$\nRead drafts (applies to content-types):ř\nCreate draft (applies to content-types):č\nUpdate drafts (applies to content-types):ǔ\nEdit draft CRUD (applies to centent-types):řčǔď" }, "DropdownValuesFormat": { "en-us": "" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=1" } ] } ] }, "Entities": [ { "Id": 139999, "Version": 2, "Guid": "5449b7a7-2370-4b92-9893-14a2e6ac199e", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.PermissionType == 'language'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 139997, "Version": 2, "Guid": "561a7c04-037a-4ae0-a1d8-2c2dbbfbeb2c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) { return data.PermissionType != 'language'; }" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Setting Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 140000, "Version": 2, "Guid": "8c45026c-8701-4b94-ac83-6386d01c8aa3", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n // if language, only allow crud\n return data.PermissionType == 'language' ? 'crud' : data.value;\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 140001, "Version": 2, "Guid": "eed58642-7465-4075-857b-fbe562b2df35", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v1(data, context) {\n // if language, only allow crud\n return data.PermissionType == 'language';\n}" }, "Notes": { "en-us": "" }, "Target": { "en-us": "Field.Settings.Disabled" }, "Title": { "en-us": "Setting Disabled" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "2SexyContent-App", "Name": "2SexyContent-App", "Scope": "System.App", "Metadata": [ { "Id": 45264, "Version": 2, "Guid": "fea7925f-3fb1-42a4-b923-161f2ebc84c1", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "Description": { "*": "Describes a 2sxc App" }, "EditInstructions": { "*": "" }, "Label": { "*": "App Specifications" }, "ListInstructions": { "*": "" }, "Notes": { "*": "" } }, "Hyperlink": { "Icon": { "*": "" }, "Link": { "*": "" } } }, "Owner": "dnn:userid=1", "For": { "Target": "ContentType", "TargetType": 5, "String": "2SexyContent-App" } } ], "Attributes": [ { "Name": "DisplayName", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 45242, "Version": 2, "Guid": "49f597af-2a2e-4216-b42f-2290b97893c2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Display Name" }, "Notes": { "*": "The name of the app as shown in the app-picker. Can be translated to other languages as needed." }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45250, "Version": 1, "Guid": "02bc09e6-f565-4c5e-b893-5fc2859bc85e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45251, "Version": 1, "Guid": "5130aee7-c5ef-4fe1-94a3-3856ffeaed28", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Description", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45243, "Version": 2, "Guid": "3e231c29-d0d0-4f40-bbb8-5c1f454c1277", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Description" }, "Notes": { "*": "A short description of this app - more for your own use." }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45252, "Version": 1, "Guid": "2a2257ac-2ffc-4cbf-a58d-9fa8bf40062f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": {}, "Owner": "dnn:userid=1" }, { "Id": 45253, "Version": 1, "Guid": "c4eb0496-a36b-4390-82d5-5dfeae93ad4b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Version", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45244, "Version": 3, "Guid": "1144757d-5ac3-435a-80e0-fb604b049370", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "00.00.01" }, "InputType": { "*": "string-default" }, "Name": { "*": "Version" }, "Notes": { "*": "A version - needed for various checks - in the format 01.03.08" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45254, "Version": 2, "Guid": "4d90dbda-d436-4d60-8c63-d62e1c84b690", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45255, "Version": 2, "Guid": "c9ccf464-e857-4140-aba9-81a1ec1a164c", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Folder", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45245, "Version": 3, "Guid": "7444ffbf-b47c-4e43-935b-0043e6e925bc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Folder" }, "Notes": { "*": "The folder of this app within the 2sxc-folder - only change this if you know what you're doing." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45256, "Version": 2, "Guid": "72ca629c-6a37-4e22-a81f-d95fcb761806", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45257, "Version": 2, "Guid": "0a433174-3f85-405d-9c49-364837f375f0", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "Hidden", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45248, "Version": 5, "Guid": "340210e1-81b3-4764-a742-bf3f66b68687", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Hidden" }, "Notes": { "en-us": "Show / hide this in the app selector. Advanced apps are usually set to hidden once the developer adds them to the necessary pages." }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45260, "Version": 4, "Guid": "40b12003-1962-4004-aaae-4e08b7c7bab6", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Default (Visible)" }, "TitleIndeterminate": { "en-us": "Default (Visible)" }, "TitleTrue": { "en-us": "Hidden - will not appear in add-app list" } }, "Boolean": { "ReverseToggle": { "en-us": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupFeatures", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129743, "Version": 4, "Guid": "00e026d9-685c-47ac-8c6b-41db9655911b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "App Features" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a0ed3d8d-3410-4317-b415-aee9b5d5b2c9" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129746, "Version": 2, "Guid": "a70c7a0c-011d-4953-be26-fd1d84f7ab1c", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AllowTokenTemplates", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45246, "Version": 3, "Guid": "d1bbd975-5e8b-4b00-92f1-f8318501d155", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Token Templates" }, "Notes": { "*": "Allow token templates. As of now, this is only informative. In the future, it may be used to enforce certain rules." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45258, "Version": 2, "Guid": "aa966d1c-582e-4fe4-9581-db6096812ea2", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "AllowRazorTemplates", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45247, "Version": 3, "Guid": "a82ea4fb-f236-4264-9e08-c462bb18ed55", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "true" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Razor Templates" }, "Notes": { "*": "Allow token templates. As of now, this is only informative. In the future, it may be used to enforce certain rules." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45259, "Version": 2, "Guid": "cb09586b-5bb9-4ebf-9cf9-2932891fe39f", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "SupportsAjaxReload", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 45238, "Version": 2, "Guid": "af506a2b-a65d-4365-ac17-33c4e02e0630", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "boolean-default" }, "Name": { "*": "Supports Ajax Reload" }, "Notes": { "*": "

If your views can handle being reloaded inside the page without requiring a page-refresh, then activate this. This setting applies to all views in this app, so only use it if your app is fully AJAX ready. Read more about this in 2sxc.org/help?tag=ajax

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45239, "Version": 2, "Guid": "de1f9f5d-eb60-494a-a182-60057742ac60", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "*": "" }, "TitleIndeterminate": { "*": "" }, "TitleTrue": { "*": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "GroupRequirements", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129741, "Version": 4, "Guid": "a8486bb9-04cc-4a34-8f7c-62b394553b11", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Installation Requirements" }, "Notes": { "*": "

These are requirements for installing on another platform. The developer sets these values as he/she believes is correct. 

" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "6225b39f-aeef-4f14-92a1-8e66abae60f4" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129742, "Version": 2, "Guid": "35750ea4-f0b9-4f63-a6b1-2c31505a8de6", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RequiredVersion", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45234, "Version": 4, "Guid": "a9000056-63c8-4cde-b9b3-472c2113d959", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "16.00.00" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Required Version" }, "Notes": { "en-us": "

The version of 2sxc required for this app to work. Use it when you rely on 2sxc features which don't exist is other versions. read more on 2sxc.org/en/help?tag=app

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45235, "Version": 4, "Guid": "b4e97da0-cec2-423b-bfd8-42911e5d9351", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 45263, "Version": 3, "Guid": "73d48c11-9200-4c3f-8555-ae0ff83aa1c0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "RequiredDnnVersion", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45236, "Version": 3, "Guid": "0f314a6f-2588-4f00-9a47-57b995528dc4", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "09.06.01" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Required DNN Version" }, "Notes": { "en-us": "

The version of DNN required for this app to work. Use it when you rely on DNN features which don't exist is other versions. read more on 2sxc.org/en/help?tag=app

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45237, "Version": 3, "Guid": "f2a4fa6d-95f2-4742-b370-b8f6403cb3d9", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=1" }, { "Id": 129750, "Version": 2, "Guid": "6d7a591d-ca6b-456d-92ba-b68fe0785bb9", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RequiredOqtaneVersion", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 129740, "Version": 5, "Guid": "b5086140-80de-4b8b-a151-5cfa8114e23a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Required Oqtane Version" }, "Notes": { "en-us": "

Minimum version of Oqtane supported. Leave empty if it doesn't support Oqtane. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": true }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129744, "Version": 4, "Guid": "06a055e9-5e5e-4212-ad06-27cb650c82f5", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 129745, "Version": 4, "Guid": "3a6ca1a4-232b-42ae-a367-a3b70f49770b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 129747, "Version": 3, "Guid": "89448369-3fd7-4e10-851a-958f8e93bd61", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "empty-default" }, "Name": { "*": "Advanced" }, "Notes": { "*": "" }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": false }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=41" }, { "Id": 129748, "Version": 2, "Guid": "3d50c302-2565-470f-af17-0f9d8906ef1b", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "*": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "OriginalId", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 45249, "Version": 3, "Guid": "343a499c-2ab0-4e41-9bbd-d4ccfe4f6b89", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "*": "" }, "DefaultValue": { "*": "" }, "InputType": { "*": "string-default" }, "Name": { "*": "Original Id" }, "Notes": { "*": "A GUID of the original app. This is used for cases where you clone an app with another id, and we want to remember the original ID - for example to point to help content." }, "Placeholder": { "*": "" }, "ValidationRegExJavaScript": { "*": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "*": false }, "DisableTranslation": { "*": true }, "Required": { "*": false }, "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" }, { "Id": 45261, "Version": 2, "Guid": "83e2327f-26bb-4764-a823-123023091919", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "*": "" }, "InputType": { "*": "" } } }, "Owner": "dnn:userid=1" }, { "Id": 45262, "Version": 2, "Guid": "cef684fe-7aac-4c88-8e22-88200de8dc43", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "Number": { "RowCount": { "*": 1 } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "DebugLog", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 182539, "Version": 2, "Guid": "a81dc518-309d-452d-8871-41b0c8b0c65d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "DebugLog" }, "Notes": { "en-us": "

Special value to track down issues with app data creation https://github.com/2sic/2sxc/issues/3203 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 182540, "Version": 1, "Guid": "e52c0fe7-9883-4b36-bdd5-c3b9d3ad6dfa", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 182541, "Version": 1, "Guid": "75636a01-f1a1-4351-8bfb-981f0d09fbec", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 172321, "Version": 4, "Guid": "a0ed3d8d-3410-4317-b415-aee9b5d5b2c9", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const token = 'Tokens: ' + (data.AllowTokenTemplates ? '✅' : '➖');\n const razor = 'Razor: ' + (data.AllowRazorTemplates ? '✅' : '➖');\n const ajax = 'Ajax: ' + (data.SupportsAjaxReload ? '✅' : '➖');\n return data.default + ' (' + [token, razor, ajax].join('; ') + ')';\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 172322, "Version": 1, "Guid": "6225b39f-aeef-4f14-92a1-8e66abae60f4", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n const sxc = '2sxc: ' + (data.RequiredVersion || '?');\n const dnn = 'Dnn: ' + (data.RequiredDnnVersion || '?');\n const oqt = 'Oqt: ' + (data.RequiredOqtaneVersion || '❔');\n return data.default + ' (' + [sxc, dnn, oqt].join('; ') + ')';\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "5d70d9f6-3c03-4c09-8413-1a0c2e8dbf8f", "Name": "\uD83E\uDD77\uD83C\uDFFDInsightsLoggingCustomized", "Scope": "System", "Metadata": [ { "Id": 184157, "Version": 1, "Guid": "a322a8e3-159b-4e61-90e4-ffba2a1c15db", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure custom settings for how insights logging should behave on the server.

\n

This does not affect the UI logging, only the backend. 

" }, "Label": { "en-us": "Insights Logging - Customized" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5d70d9f6-3c03-4c09-8413-1a0c2e8dbf8f" } }, { "Id": 185420, "Version": 1, "Guid": "fb72c3d4-43bf-4daf-9717-c9610bf56c8d", "Type": { "Id": "9db5de57-7c16-4370-8d16-a8bf4cfe8e5b", "Name": "DataStorageDecorator" }, "Attributes": { "String": { "DataProcessingHandler": { "en-us": "" }, "StoreType": { "en-us": "" } }, "Number": { "ItemsMax": { "en-us": 0 } }, "Boolean": { "SaveIsDisabled": { "en-us": true } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "5d70d9f6-3c03-4c09-8413-1a0c2e8dbf8f" } } ], "Attributes": [ { "Name": "GroupLoadSystemData", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184160, "Version": 2, "Guid": "e2ca7a1f-0003-4757-b2ef-d9ee7839c088", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Logging of Load System Data" }, "Notes": { "en-us": "

This is about the system content types etc. Usually this just works and does not need detailed logging.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184164, "Version": 1, "Guid": "a3e3d1ac-62bb-468c-a9e0-097bdbdcf083", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LoadSystemDataDetails", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": true, "Metadata": [ { "Id": 184158, "Version": 4, "Guid": "d71e3813-a895-4ff8-8093-3efa8e95925a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Load System Data - Log Details" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184165, "Version": 3, "Guid": "a3baffa3-8a65-4a88-9c82-79b4a206fcab", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When loading system data, never log details" }, "TitleIndeterminate": { "en-us": "When loading system data, use system defaults for details logging" }, "TitleTrue": { "en-us": "When loading system data, always log details" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LoadSystemDataSummary", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 184159, "Version": 3, "Guid": "3b7aac49-fa84-4f08-b95e-a6fbc4450b99", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Load System Data - Log Summary" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184166, "Version": 2, "Guid": "48809728-ec88-4cf1-878c-943b32bf5ab1", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When loading system data, never log summaries" }, "TitleIndeterminate": { "en-us": "When loading system data, use system defaults for summary logging" }, "TitleTrue": { "en-us": "When loading system data, always log summaries" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupLoadApp", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184161, "Version": 2, "Guid": "9006daf1-d350-42ad-91ff-91eaeb8554b5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Logging of Load App" }, "Notes": { "en-us": "

This is about logging details when apps are being loaded from the DB.

\n

Usually this just works and does not need detailed logging.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184167, "Version": 1, "Guid": "a7eec903-ad67-4c92-a790-fd332dd00a91", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LoadAppDetails", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 184162, "Version": 3, "Guid": "9fa28f83-0698-4e8a-8f99-764c3582af61", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Load App - Log Details" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184168, "Version": 2, "Guid": "445f45b3-91ad-4d4e-9c07-96451344f843", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When loading app data, never log details" }, "TitleIndeterminate": { "en-us": "When loading app data, use system defaults for details logging" }, "TitleTrue": { "en-us": "When loading app data, always log details" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "LoadAppSummary", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 184163, "Version": 3, "Guid": "284af0f9-8096-4f5f-ad5c-884dd5b30bcd", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "Load App - Log Summary" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184169, "Version": 2, "Guid": "20583cff-a36d-4f9b-8a3d-086e7e6a4d18", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When loading app data, never log summary" }, "TitleIndeterminate": { "en-us": "When loading app data, use system defaults for summary logging" }, "TitleTrue": { "en-us": "When loading app data, always log summary" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupImportData", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184183, "Version": 2, "Guid": "bbe5ef42-dfe8-40c6-8303-988bb689f8ab", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Import Data Logging" }, "Notes": { "en-us": "

Determine how detailed data imports should be logged. 

\n

Less logging makes it easier to get an overview, but harder to pinpoint specific issues. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184186, "Version": 1, "Guid": "712ec2dd-0e32-42aa-aed1-ce3f211b957a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ImportDataDetails", "Type": "Boolean", "InputType": "boolean-tristate", "IsTitle": false, "Metadata": [ { "Id": 184184, "Version": 2, "Guid": "b7f15112-61e5-4ed6-9251-b9d41b38123e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-tristate" }, "Name": { "en-us": "ImportDataDetails" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184185, "Version": 1, "Guid": "176a9e4d-2251-406d-aea8-c7efe0cb9563", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "When importing data, never log details" }, "TitleIndeterminate": { "en-us": "When importing data, use system defaults to logs details" }, "TitleTrue": { "en-us": "When importing data, always log details" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "e523fd1a-f9e3-4e73-826e-1433e8afca8a", "Name": "\uD83E\uDD77SqlPerformance", "Scope": "System", "Metadata": [ { "Id": 184192, "Version": 1, "Guid": "5bfa96bd-8802-4d15-9c18-2ff8b9751b1b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "SQL Performance Settings" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "e523fd1a-f9e3-4e73-826e-1433e8afca8a" } } ], "Attributes": [ { "Name": "RelationshipLoadChunkingGroup", "Type": "Empty", "InputType": "empty-default", "IsTitle": true, "Metadata": [ { "Id": 184187, "Version": 1, "Guid": "8b151d6d-df02-4a00-a8ce-b3b3a4e5af88", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Relationship Load Chunking" }, "Notes": { "en-us": "

Entity relationships are loaded in separate SQL requests. When there are many, they requested IDs will be chunked to avoid certain limits and timeouts, which may vary by SQL server edition. 

\n

Larger numbers (assuming your SQL can handle it) will result in faster performance.

\n

The default for standard 2sxc is a very safe 1'000.

\n

The default for patrons performance is set to 25'000 but may change as with time.

\n

Leave the field empty or use 0 to use the default values. Numbers less than 10 will be ignored. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184189, "Version": 1, "Guid": "0ac88d10-2d4a-4278-aabf-d32f65ae94b0", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "RelationshipLoadChunking", "Type": "Number", "InputType": "number-default", "IsTitle": false, "Metadata": [ { "Id": 184194, "Version": 1, "Guid": "45eff176-b7c4-4d07-83c1-30fdb2111400", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "number-default" }, "Name": { "en-us": "Relationship Load Chunking" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "Recommended range is 5000 to 50000" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184195, "Version": 1, "Guid": "a34c0f54-29b0-468f-9246-fbd8b8e0534a", "Type": { "Id": "@Number", "Name": "@Number" }, "Attributes": { "Number": { "Decimals": { "en-us": 0 } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [] }, { "ContentType": { "Id": "a0f44af0-6750-40c9-9ad9-4a07b6eda8b3", "Name": "\uD83E\uDD77AppExtension", "Scope": "System", "Metadata": [ { "Id": 184235, "Version": 1, "Guid": "0460e878-eb6f-4b6f-9c4d-89c46314eab6", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "App Extension Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "a0f44af0-6750-40c9-9ad9-4a07b6eda8b3" } }, { "Id": 184344, "Version": 1, "Guid": "f204d371-c1ed-41fe-a8b1-c4d59ce34121", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "a0f44af0-6750-40c9-9ad9-4a07b6eda8b3" } } ], "Attributes": [ { "Name": "groupSpecs", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184247, "Version": 1, "Guid": "676893e3-d6cc-42e3-8429-0ebc8c219949", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Technical Specs" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5f5a713d-4f0b-4c3f-9f02-a058e2e0da00" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184249, "Version": 1, "Guid": "d425c9dd-e75c-4867-bf48-747d17c51f4d", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "nameId", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184196, "Version": 1, "Guid": "ff9e719c-6f61-4e58-9317-9723383dbac5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "NameId" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "7136e4d6-5789-4c40-bdce-7ea39eb0ac12" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184204, "Version": 1, "Guid": "1531c7b8-00c0-421b-968f-b437778a4a6d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184205, "Version": 1, "Guid": "c31c33a1-a7b6-4a45-b7c3-0d32869da4e8", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 1 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "isInstalled", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184248, "Version": 1, "Guid": "6b4e6c30-a2d5-423c-9483-1d0fe13eb8c2", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "isInstalled" }, "Notes": { "en-us": "

Source extensions can be exported, Installed extensions can be updated.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184250, "Version": 1, "Guid": "c16066d1-1ae5-4593-8725-ebafa07248c2", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "This is a Source Extension" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "This is an Installed Extension" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupDescription", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184258, "Version": 1, "Guid": "b9d82417-9ceb-4b68-b7f7-5d2989010d03", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Description" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184261, "Version": 1, "Guid": "a91d177e-e988-4c4f-8330-bee23e922fa6", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "name", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 184197, "Version": 1, "Guid": "21d15092-cf97-4ae2-a8de-63b812dcbe83", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184206, "Version": 1, "Guid": "fe163b4e-6744-4fd6-ad39-ae80d6452cc7", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184207, "Version": 1, "Guid": "37919ecb-71d5-421d-a5fe-f238ada05945", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "version", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184215, "Version": 1, "Guid": "dbb158b8-dfb7-4497-84fd-ff0b6f6bc216", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "00.00.01" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Version" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184223, "Version": 1, "Guid": "56ae652c-21e4-4bfa-a7a4-0f5ce800948a", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184224, "Version": 1, "Guid": "190274c6-e5a9-4268-a020-1b7a0208ffb2", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "teaser", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184198, "Version": 1, "Guid": "84e72856-3dc0-42d4-a496-112fd224beeb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Teaser" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184208, "Version": 1, "Guid": "daf1f269-d6cd-49cd-90a2-167d788048d6", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184209, "Version": 1, "Guid": "273d217f-455e-4fe2-b5dc-97c154d6a766", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "description", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 184199, "Version": 1, "Guid": "0cf1ebaa-c767-4584-b13d-8cd27f11935d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Description" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184210, "Version": 1, "Guid": "49ad1108-431c-4e30-85ce-90c69c49c0a9", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184211, "Version": 1, "Guid": "5ca8f803-7d54-4125-8167-14e82c53b878", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" }, "WysiwygConfiguration": { "en-us": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupCreated", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184238, "Version": 1, "Guid": "63d26c12-0710-4606-8d75-423f841c6613", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Creator, Copyright and Links" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184239, "Version": 1, "Guid": "6455f578-bbcc-4e44-9a1c-d0fe30389da4", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "createdBy", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184236, "Version": 1, "Guid": "5b463e1c-9164-460b-ac96-e9586b2d217d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Created By" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184240, "Version": 1, "Guid": "8d5374db-6d54-4229-90fd-aa41589ce6a3", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184241, "Version": 1, "Guid": "7c32cab9-8263-4859-9be2-7b7d1dc0619a", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "copyright", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184237, "Version": 1, "Guid": "bf306211-18b2-42b2-a057-fb8ba4145ea0", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Copyright" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184242, "Version": 1, "Guid": "3a28b2c8-1223-452e-8e44-8e2f86b85611", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184243, "Version": 1, "Guid": "16a0f6eb-236d-4dfe-9f6c-01521a141065", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "linkMain", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 184251, "Version": 1, "Guid": "e0fb94b9-0859-4d49-9bbd-150eeedb0ec3", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Link to Main Website" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184255, "Version": 1, "Guid": "7d8632f9-418f-4981-a37a-50f29389bfc1", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "linkDemo", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 184280, "Version": 1, "Guid": "c803c6ca-a26f-4bfb-b081-b8a3eb32a1aa", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "hyperlink-default" }, "Name": { "*": "linkDemo" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "linkDocs", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 184252, "Version": 1, "Guid": "398b447b-5726-4343-a55c-470ef7f3963a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Link to Docs" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184256, "Version": 1, "Guid": "97f1967e-954b-4144-aa63-13522c17be5f", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "linkSource", "Type": "Hyperlink", "InputType": "hyperlink-default", "IsTitle": false, "Metadata": [ { "Id": 184253, "Version": 1, "Guid": "2ff3960b-6f35-490e-80d6-30043405e9a8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "hyperlink-default" }, "Name": { "en-us": "Link to Source Code / Github" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184257, "Version": 1, "Guid": "1a78565f-6b9e-4922-a9c5-b7d1909feb97", "Type": { "Id": "@Hyperlink", "Name": "@Hyperlink" }, "Attributes": { "String": { "Buttons": { "en-us": "adam,more" }, "DefaultDialog": { "en-us": "" }, "FileFilter": { "en-us": "" }, "Paths": { "en-us": "" }, "ServerResourceMapping": { "en-us": "" } }, "Boolean": { "ShowAdam": { "en-us": true }, "ShowFileManager": { "en-us": false }, "ShowImageManager": { "en-us": false }, "ShowPagePicker": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupCreatedEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 184307, "Version": 1, "Guid": "ec716c77-1534-4328-b4bc-ec11442c3b14", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "groupCreatedEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "messageParts", "Type": "Empty", "InputType": "empty-message", "IsTitle": false, "Metadata": [ { "Id": 184309, "Version": 1, "Guid": "9be92242-3730-4be7-8043-f57d5ed2efad", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-message" }, "Name": { "en-us": "messageParts" }, "Notes": { "en-us": "

Parts / Features / Functionality

\n

The following toggles define what this extension contains. This is important when exporting the extension, as only activated parts will be included.

\n

Some features when activated will show additional settings to configure.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" } ] }, { "Name": "inputFieldInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184203, "Version": 1, "Guid": "e7d6b283-d8a0-4654-99d9-874437b327ba", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Has UI Fields" }, "Notes": { "en-us": "

does the extension have input fields for the Edit UI?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184213, "Version": 1, "Guid": "852850ce-5658-437e-8b02-7b3d325167b2", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Edit-UI Input Fields" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has Edit-UI Input Fields" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupInputField", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184300, "Version": 1, "Guid": "1df7ab45-ebeb-4b47-9ca8-035cd99020e9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Input Fields Configuration" }, "Notes": { "en-us": "

Provide additional information about input fields.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "e7f883d9-cfb3-4360-9562-886b4d97a71c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184302, "Version": 1, "Guid": "8740923e-299e-4f32-8d38-b0fa20bbe155", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "inputFieldAssets", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184301, "Version": 1, "Guid": "39336675-fff6-45c4-b698-b70f522fc51f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "index.js" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Input Field Assets" }, "Notes": { "en-us": "

Assets to load when this input field is used. Default is index.js, which should then load everything. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184303, "Version": 1, "Guid": "bdf1ec49-0593-4e21-932f-d8dc61f2048f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184304, "Version": 1, "Guid": "c0cead99-decd-4a6f-8b54-a3ec1a1ebc18", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } }, "Number": { "RowCount": { "en-us": 2 } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupInputFieldEnd", "Type": "Empty", "InputType": "empty-end", "IsTitle": false, "Metadata": [ { "Id": 184308, "Version": 1, "Guid": "a3f788ae-d947-4f8b-af13-25293fdfbb6e", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "empty-end" }, "Name": { "*": "groupInputFieldEnd" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "appCodeInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184201, "Version": 1, "Guid": "27ea00b8-2609-4e0c-9cbd-14f03f1c8ead", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Has AppCode" }, "Notes": { "en-us": "

does the extension has it's own AppCode in /AppCode/Extensions/[name]/?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184214, "Version": 1, "Guid": "fc229c87-44a6-4980-a614-fe324fa5ad63", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No own AppCode" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has own AppCode" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "webApiInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184216, "Version": 1, "Guid": "8eaa81d5-3ba8-4b17-ae85-c96748850f7a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Has Web Api" }, "Notes": { "en-us": "

does the extension have web api controllers in /AppCode/Extensions/[name]/Api/?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184225, "Version": 1, "Guid": "ff6659a7-7472-44cd-b1a1-8372aef411eb", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No own WebApi" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has own WebApi" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "razorInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184218, "Version": 1, "Guid": "2abbcc69-371a-4139-9edd-d8edb34f45e1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Has Razor" }, "Notes": { "en-us": "

does the extension have Razor files?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184226, "Version": 1, "Guid": "748fa11c-6cf1-4f49-8eaa-bd391be83ea1", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Razor Included" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has Razor Files" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "editionsSupported", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184298, "Version": 1, "Guid": "2870777f-5bf4-4c10-8ecc-02e1d53acb59", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "false" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "supportsEditions" }, "Notes": { "en-us": "

If it supports polymorphism, then multiple editions can be installed side-by-side so that developers can try a new edition while users still see the existing, installed edition.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184299, "Version": 1, "Guid": "526de5f1-c439-4e59-af7a-6665361d2098", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Does not support Polymorphism / Editions" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Supports Polymorphism / Editions" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "dataInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184231, "Version": 1, "Guid": "a3c8e258-a26a-4f51-8fc8-de14d52fd1f9", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "has Data Bundles" }, "Notes": { "en-us": "

does the extension have data which will should be exported/included?

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184232, "Version": 1, "Guid": "0126123e-bbd6-4e8c-bdae-af5f4ad2c986", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Data Included" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Includes Data Bundles" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupData", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184244, "Version": 1, "Guid": "4de9d239-1754-40c3-994f-07debaba554a", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Included Data" }, "Notes": { "en-us": "

Specify what kind of data is included. This will affect the export and provide information to people installing this extension.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "c592e168-eeb0-4067-a689-8997f30b4672" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184245, "Version": 1, "Guid": "f1e5ec8c-ebe4-4352-8c4b-1c111faa43e4", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "dataBundles", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 184246, "Version": 1, "Guid": "61ca9627-f31e-4811-8d9d-9dcf7d811ef1", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Data Bundles" }, "Notes": { "en-us": "

Reference data bundles to include / export with this extension.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184259, "Version": 1, "Guid": "0e9babfb-2c6a-4184-a292-ce3a49e8dfbf", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.EntityPicker" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "TypeNames=d7f2e4fa-5306-41bb-a3cd-d9529c838879" }, "Value": { "en-us": "Guid" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "contentTypesInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184221, "Version": 1, "Guid": "2399385c-8350-43a6-a271-27ffb8e26202", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "has ContentTypes" }, "Notes": { "en-us": "

The data contains Content-Types.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184229, "Version": 1, "Guid": "5b4900c1-2124-4e9e-aadd-430aacbb1c76", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Content-Types Included" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has Own Content-Types" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "settingsContentType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184312, "Version": 1, "Guid": "988f52ef-75c1-47d3-adaf-8d0e4e110e31", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Content Type for Extension Settings" }, "Notes": { "en-us": "

If your extension has settings, specify the content-type here. Make sure it's included in the bundle. 

\n

We recommend that you only export the content-type, but not the data, as the data would be read-only when installed. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "566978cb-890f-4946-adb4-a7661f0320a5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184317, "Version": 1, "Guid": "6262e53c-38ee-4845-a4f3-000dd5e75d83", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "bc05f883-9165-4229-b08c-0f0048b5beed" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "resourcesContentType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 184318, "Version": 1, "Guid": "1af68821-e85a-494a-addf-679f33b61c1d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Resources Content Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "38483b10-b8b2-4767-a80f-991d6d3e0514" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184319, "Version": 1, "Guid": "6bc2f83a-0da7-47e1-9bd7-6041973bbdd8", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "bc05f883-9165-4229-b08c-0f0048b5beed" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "queriesInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184220, "Version": 1, "Guid": "a8a7f755-e50f-4392-85a9-ce128ac54004", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "has Queries" }, "Notes": { "en-us": "

The data include Queries.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184228, "Version": 1, "Guid": "423f16b8-8899-4d1c-b778-3ae2e5eabcb6", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Queries Included" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Contains Queries" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "viewsInside", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184219, "Version": 1, "Guid": "428a751e-3175-4868-bfcf-e07fe6a35a33", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Has Views" }, "Notes": { "en-us": "

The data contain View Configurations.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184227, "Version": 1, "Guid": "47832075-c0bd-4305-a1a4-ff7a28768be7", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "No Views Configurations included" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Has View Configurations" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupReleases", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184262, "Version": 1, "Guid": "0801c11f-728f-4be0-bff9-552a1171c625", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Release Information" }, "Notes": { "en-us": "

This information helps the installer inform and warn about breaking changes etc.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184264, "Version": 1, "Guid": "5b02b80e-76a6-4e4e-a2d7-1b30ecdbde2f", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "releases", "Type": "Entity", "InputType": "entity-default", "IsTitle": false, "Metadata": [ { "Id": 184263, "Version": 1, "Guid": "0f7bf161-a255-48d5-a1f9-d6ce4b908c27", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "entity-default" }, "Name": { "en-us": "Releases" }, "Notes": { "en-us": "

Add releases to make it easier for the person installing it to make good decisions.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184268, "Version": 1, "Guid": "e4c04a65-5dcd-4b20-8552-9dd67e5416cc", "Type": { "Id": "@Entity", "Name": "@Entity" }, "Attributes": { "String": { "EntityType": { "en-us": "1d91a2c0-4d5d-4197-8cb8-d4bfebf72f15" }, "Prefill": { "en-us": "" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": true }, "EnableDelete": { "en-us": true }, "EnableEdit": { "en-us": true }, "EnableRemove": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupPlatforms", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184281, "Version": 1, "Guid": "7fcffc32-7f0b-43d7-89a8-adc9dfac22ad", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Target Platforms" }, "Notes": { "en-us": "

Explain which platforms this will work on. By default, all are enabled, but disable those which won't work.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "522654a6-bef7-4597-9a4d-b1b1c34b200f" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184284, "Version": 1, "Guid": "947764fa-f5cf-43e4-b426-e40b3a1755e3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "sxcSupported", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184296, "Version": 1, "Guid": "7a121a90-45c2-4334-837d-e23e89f3d8ca", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "2sxc" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184297, "Version": 1, "Guid": "acf4575a-6dd8-4027-abb4-b68e7072472b", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "sxcVersionMin", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184287, "Version": 1, "Guid": "129a7adc-70b4-46a6-a390-1ec58eeefff7", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "21.00.00" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "2sxc Version Minimum" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184290, "Version": 1, "Guid": "0ce2e804-bccb-49cf-af00-dcea4f06d70d", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184291, "Version": 1, "Guid": "75c6ee49-af49-403e-b3f0-12192cc2b83b", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "dnnSupported", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184282, "Version": 1, "Guid": "89309d2d-9b5d-4f92-a468-26fadff03df5", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "DNN" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184285, "Version": 1, "Guid": "96b66070-4297-4716-8565-e0e453630543", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "dnnVersionMin", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184288, "Version": 1, "Guid": "5ddd86f0-a77d-495a-8f70-0564405e60fb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "DNN Version Minimum" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184292, "Version": 1, "Guid": "e4cb4f43-bd62-4dee-88a5-a603ee3e5c7f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184293, "Version": 1, "Guid": "62e8b792-18c0-4304-8866-7d55dc915883", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "oqtSupported", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184283, "Version": 1, "Guid": "fa97cc53-c479-4802-a35e-a35edf86fe87", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "true" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Oqtane" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184286, "Version": 1, "Guid": "76cabe88-4bdc-4dc2-9115-5fab44cf7ace", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "oqtVersionMin", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184289, "Version": 1, "Guid": "48a1c4a3-e164-4695-bd3e-3c33e2d5b5f6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Oqtane Version Minimum" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184294, "Version": 1, "Guid": "c43803d4-3164-42ea-b716-3d4e32926386", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184295, "Version": 1, "Guid": "5207a723-8d4c-4bfd-9a1a-17c5eafc3017", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "groupDependencies", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 184340, "Version": 1, "Guid": "fba6cb2c-ec1f-48ef-8042-5988a6d143b8", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Dependencies" }, "Notes": { "en-us": "

Dependencies tell the system to include other things (such as extensions) in the export. 

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184341, "Version": 1, "Guid": "542e071d-5883-42ea-b24b-a63bc4a4b217", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "extensionsBundled", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184339, "Version": 1, "Guid": "8ffb4716-1b0e-491a-8674-328c98e69d4c", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Extensions which must be Bundled / included" }, "Notes": { "en-us": "

Write the extension names here, comma separated; no spaces. These extensions are to be included in the export and installation.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184342, "Version": 1, "Guid": "fab617f4-1a7c-466a-8ec3-a5889cae082f", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184343, "Version": 1, "Guid": "9a35cab0-0c4d-4119-844b-dfc478d767b5", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 184311, "Version": 1, "Guid": "5f5a713d-4f0b-4c3f-9f02-a058e2e0da00", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return `${data.default} (id: ${data.nameId})`;\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184233, "Version": 1, "Guid": "7136e4d6-5789-4c40-bdce-7ea39eb0ac12", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.value || context.target.entity.guid;\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184305, "Version": 1, "Guid": "e7f883d9-cfb3-4360-9562-886b4d97a71c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, _) => {\n return data.inputFieldInside;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184260, "Version": 1, "Guid": "c592e168-eeb0-4067-a689-8997f30b4672", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.dataInside;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184314, "Version": 1, "Guid": "566978cb-890f-4946-adb4-a7661f0320a5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.contentTypesInside;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184316, "Version": 1, "Guid": "bc05f883-9165-4229-b08c-0f0048b5beed", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "

For use in the AppExtensions to pick settings/resources.

" }, "ItemInformation": { "en-us": "

Scope: [Item:Scope]

\n

Content Type: [Item:Title]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "[Item:Scope]: [Item:Title]" }, "MoreFields": { "en-us": "Scope" }, "Query": { "en-us": "System.ContentTypes" }, "QueryParameters": { "en-us": "scope=*&$filter=not startswith(Scope, 'System')" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "AppExtensions: Content Types of all Scopes except System" }, "Value": { "en-us": "NameId" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184321, "Version": 1, "Guid": "38483b10-b8b2-4767-a80f-991d6d3e0514", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.contentTypesInside;\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184310, "Version": 1, "Guid": "522654a6-bef7-4597-9a4d-b1b1c34b200f", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return `${data.default} (2sxc v${data.sxcVersionMin}; Dnn v${data.dnnVersionMin}; Oqtane v${data.oqtVersionMin})`;\n});" }, "Target": { "en-us": "Field.Settings.Name" }, "Title": { "en-us": "Field.Settings.Name" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "1d91a2c0-4d5d-4197-8cb8-d4bfebf72f15", "Name": "AppExtensionRelease", "Scope": "System", "Metadata": [ { "Id": 184279, "Version": 1, "Guid": "7a365f38-0347-4679-b211-df7f2772af6b", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "" }, "Label": { "en-us": "App Extension Release Information" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1d91a2c0-4d5d-4197-8cb8-d4bfebf72f15" } }, { "Id": 184345, "Version": 1, "Guid": "ae4a22cb-1409-4d82-8b97-ef926d4ffb4b", "Type": { "Id": "e2f569c9-d1dd-4458-a54e-4aaf53e9ae3c", "Name": "LanguagesDecorator" }, "Attributes": { "String": { "Title": { "en-us": "Disable Translation" } }, "Boolean": { "Enabled": { "en-us": false } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "1d91a2c0-4d5d-4197-8cb8-d4bfebf72f15" } } ], "Attributes": [ { "Name": "version", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 184265, "Version": 1, "Guid": "1647c6e5-d934-4f68-82ed-d2711667dd48", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "00.00.01" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Version" }, "Notes": { "en-us": "

Must be in the standard format \"00.00.00\".

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "5ccf1b4c-93f4-4874-96b8-193bd561b856", "d4f6fae3-818a-4513-ac61-2f3a1defc505" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184272, "Version": 1, "Guid": "a8370a15-f1e5-4dd4-807b-05a51b7c2b28", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184273, "Version": 1, "Guid": "2e8efcf9-d839-406e-a7a6-5b15548bcc29", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "monospace" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "isBreaking", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 184267, "Version": 1, "Guid": "d31dd8a6-7332-48c9-8012-64e816b3459b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "Is Breaking Release" }, "Notes": { "en-us": "

Set this to true, if the update is going to be a breaking release and add release notes.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184277, "Version": 1, "Guid": "a809f000-1b87-4cd8-94a8-505b8053a5b3", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "releaseNotes", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 184266, "Version": 1, "Guid": "3abee705-de79-40f3-9d4c-e3a534c0d59f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-wysiwyg" }, "Name": { "en-us": "Release Notes" }, "Notes": { "en-us": "

Add release notes, especially about breaking changes.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184275, "Version": 1, "Guid": "92b77fb4-7c40-4efb-8f3b-712e5790b6f2", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184276, "Version": 1, "Guid": "270d411a-4301-4514-b141-70208601d4d4", "Type": { "Id": "@string-wysiwyg", "Name": "@string-wysiwyg" }, "Attributes": { "String": { "ButtonAdvanced": { "en-us": "" }, "ButtonSource": { "en-us": "" }, "Dialog": { "en-us": "" }, "InlineInitialHeight": { "en-us": "" }, "WysiwygConfiguration": { "en-us": "d3dde02f-c1dc-43b8-a8b7-4be3c43eadd0" } }, "Hyperlink": { "ContentCss": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 184274, "Version": 1, "Guid": "5ccf1b4c-93f4-4874-96b8-193bd561b856", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // Use regex to keep only digits (0-9) and dots (.)\n return data.value.replace(/[^0-9.]/g, '');\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 184269, "Version": 1, "Guid": "d4f6fae3-818a-4513-ac61-2f3a1defc505", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n function isValidVersion(version) {\n // Regex pattern: \n // ^\\d{2,}$ - starts with at least 2 digits\n // \\. - literal dot\n // \\d{2,} - at least 2 digits \n // \\. - literal dot\n // \\d{2,}$ - ends with at least 2 digits\n const versionPattern = /^\\d{2,}\\.\\d{2,}\\.\\d{2,}$/;\n return typeof version === 'string' && versionPattern.test(version);\n }\n\n if (isValidVersion(data.version))\n return;\n return {\n value: {\n severity: \"error\",\n message: \"Please provide a version in the format 00.00.00\"\n }\n };\n});" }, "Target": { "en-us": "Field.Validation" }, "Title": { "en-us": "Field.Validation" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "ContentType": { "Id": "b08dcd23-2eb0-4a5e-a3d0-3178d2aae451", "Name": "DataCopilotConfiguration", "Scope": "System", "Metadata": [ { "Id": 184324, "Version": 2, "Guid": "3ea2c591-de9e-4784-b218-4cf29e5613ee", "Type": { "Id": "ContentType", "Name": "ContentType" }, "Attributes": { "String": { "AdditionalSettings": { "en-us": "" }, "Description": { "en-us": "" }, "DynamicChildrenField": { "en-us": "" }, "EditInstructions": { "en-us": "

Configure settings for generating data models - both typed and lightweight.

" }, "Label": { "en-us": "Code Generator / Copilot Configuration" }, "ListInstructions": { "en-us": "" }, "Notes": { "en-us": "" } }, "Hyperlink": { "Icon": { "en-us": "" }, "Link": { "en-us": "" } } }, "Owner": "dnn:userid=41", "For": { "Target": "ContentType", "TargetType": 5, "String": "b08dcd23-2eb0-4a5e-a3d0-3178d2aae451" } } ], "Attributes": [ { "Name": "Title", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 184332, "Version": 1, "Guid": "e4b4169e-b593-4c5c-9cbd-9af6f92d97cc", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Title / Configuration Name" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184333, "Version": 1, "Guid": "22d09e19-0d7f-4cb4-b9cc-c517649e14f0", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184334, "Version": 1, "Guid": "cb29dc69-8e8f-4bbe-9588-90f97aa28b8d", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "OutputType", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 185389, "Version": 2, "Guid": "1841e61f-b558-4e54-beef-792442614bea", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "DataModel" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Output Type" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": true }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185391, "Version": 2, "Guid": "3135f27a-2357-4eb0-b2e1-0a6eae741453", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "list" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "74bae28a-f606-4da4-a380-9f1abff682c1" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "CodeGenerator", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 185360, "Version": 2, "Guid": "2f12e841-c573-4161-8051-4a1b099ac617", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "CSharpTypedDataModelsGenerator" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Code Generator to use" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": true }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185365, "Version": 1, "Guid": "a9c2f200-69c1-4dab-b696-6ce19344f65e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185366, "Version": 1, "Guid": "f976c7fe-a485-43c5-9121-a4c3269299df", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": "CSharpTypedDataModelsGenerator\nCSharpCustomModelsGenerator" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" }, { "Id": 185373, "Version": 2, "Guid": "4473820a-b618-4bd1-b598-2efa6645b528", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "d5e64a2d-eb7e-4ca4-86f0-5d601becf4ac" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": false }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": false }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Edition", "Type": "String", "InputType": "string-picker", "IsTitle": false, "Metadata": [ { "Id": 185374, "Version": 1, "Guid": "6cbd6e55-0b32-4b9c-9248-761c87bda51d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-picker" }, "Name": { "en-us": "Edition (to generate the files into)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "daff7fcd-50f5-424a-93b9-87881d3bd9d5" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185376, "Version": 1, "Guid": "38308a79-14b1-4c00-944f-4c230361c93e", "Type": { "Id": "e64dd20e-0055-4410-87a1-1238fe44707f", "Name": "@string-picker" }, "Attributes": { "String": { "CreateParameters": { "en-us": "" }, "CreatePrefill": { "en-us": "" }, "EditParameters": { "en-us": "" }, "PickerDisplayMode": { "en-us": "auto-inline" }, "Separator": { "en-us": "," } }, "Entity": { "DataSources": { "*": [ "a1eb623f-32a6-46c4-bb12-858befea459a" ] }, "PickerDisplayConfiguration": { "*": [] } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableAddExisting": { "en-us": true }, "EnableCreate": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableReselect": { "en-us": false }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupContentTypes", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 185361, "Version": 1, "Guid": "a058683e-3acf-42c6-9a68-3d2646f7bc14", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Content Types to Export" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185363, "Version": 1, "Guid": "af08ca74-bfe9-4275-84b5-0c4775c79336", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypeSet", "Type": "String", "InputType": "string-dropdown", "IsTitle": false, "Metadata": [ { "Id": 185379, "Version": 1, "Guid": "d59f9450-c9a3-47f8-971a-96ba53d1df3f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown" }, "Name": { "en-us": "Content Type Set" }, "Notes": { "en-us": "

Choose which content-types should be generated.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185380, "Version": 1, "Guid": "2b3b52f8-0e2d-468a-b1e7-5d1426708b7e", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185381, "Version": 1, "Guid": "6dc01766-b6f5-40b8-bc22-45d23adea61d", "Type": { "Id": "@string-dropdown", "Name": "@string-dropdown" }, "Attributes": { "String": { "DropdownValues": { "en-us": ":Default - all from the default scope + AppSettings and AppResources\ncustom:Custom selection" }, "DropdownValuesFormat": { "en-us": "value-label" } }, "Boolean": { "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Scope", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 184325, "Version": 1, "Guid": "a65b1347-17a4-4971-88a9-82a984c1823f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "Default" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Data Scope (to pick Content-Types from)" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "a374f3be-6c7c-4c68-a4b7-f53cda081f5c" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184330, "Version": 1, "Guid": "8861c58a-f3da-4e19-93e7-e8ffd303f905", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.Scopes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "$filter=not startswith(NameId, 'System')" }, "Value": { "en-us": "NameId" } }, "Boolean": { "AllowMultiValue": { "en-us": false }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "ContentTypes", "Type": "String", "InputType": "string-dropdown-query", "IsTitle": false, "Metadata": [ { "Id": 184327, "Version": 1, "Guid": "d5985945-395d-4b28-987a-200ae576f75b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "string-dropdown-query" }, "Name": { "en-us": "Content Types" }, "Notes": { "en-us": "

Select one or more.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [ "65209d3c-2499-4099-afed-e9d4f15cc333" ] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184331, "Version": 1, "Guid": "89d84dc5-d85b-4f63-96c6-c221f5149caf", "Type": { "Id": "@string-dropdown-query", "Name": "@string-dropdown-query" }, "Attributes": { "String": { "Label": { "en-us": "Title" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.ContentTypes" }, "Separator": { "en-us": "," }, "StreamName": { "en-us": "Default" }, "UrlParameters": { "en-us": "scope=[Scope]" }, "Value": { "en-us": "NameId" } }, "Boolean": { "AllowMultiValue": { "en-us": true }, "EnableEdit": { "en-us": false }, "EnableRemove": { "en-us": true }, "EnableTextEntry": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "GroupSpecs", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 185362, "Version": 1, "Guid": "afed059e-4115-46a1-81ef-3828cae591df", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Export Specs" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185364, "Version": 1, "Guid": "6ec1dcd3-bed6-4e62-b36f-bcced3ee5e5a", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": false } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Namespace", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184326, "Version": 1, "Guid": "24879fcd-13e2-4c28-a258-dac04b312a5f", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "AppCode.Data" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "Namespace" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184328, "Version": 1, "Guid": "d192d0c9-ad04-4766-ba1c-bca3b7f4e478", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184329, "Version": 1, "Guid": "9b3ce044-9a6e-425e-bda4-4dffca76f614", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "TargetFolder", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 184336, "Version": 1, "Guid": "f1f5d9c1-2d3c-4838-8398-76665beb916d", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "AppCode/Data" }, "InputType": { "en-us": "string-default" }, "Name": { "en-us": "TargetFolder" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 184337, "Version": 1, "Guid": "f3e1e915-3903-4b1b-b4cd-e9308fbedf4c", "Type": { "Id": "@String", "Name": "@String" }, "Attributes": { "String": { "DropdownValues": { "en-us": "" }, "InputType": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 184338, "Version": 1, "Guid": "4a8141d8-4d87-4408-8b26-40c9b43bb4a2", "Type": { "Id": "@string-default", "Name": "@string-default" }, "Attributes": { "String": { "InputFontFamily": { "en-us": "" }, "TextWrapping": { "en-us": "" } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "Prefix", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 185358, "Version": 1, "Guid": "2ef02372-5886-497c-a47e-b7ae9b1090e6", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Prefix" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "Suffix", "Type": "String", "InputType": "string-default", "IsTitle": false, "Metadata": [ { "Id": 185359, "Version": 1, "Guid": "9fe0f31f-fa31-4a7c-af2f-d24307ee471b", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "Suffix" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "unknown" } ] }, { "Name": "GroupAdvanced", "Type": "Empty", "InputType": "empty-default", "IsTitle": false, "Metadata": [ { "Id": 185425, "Version": 4, "Guid": "0c980309-1e5b-4d92-aa76-c40e955430ab", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "empty-default" }, "Name": { "en-us": "Advanced (BETA)" }, "Notes": { "en-us": "

These features are experimental and probably don't work yet.

" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185427, "Version": 3, "Guid": "d0d6962e-329a-4e87-9649-d8dd4824d2f3", "Type": { "Id": "@empty-default", "Name": "@empty-default" }, "Attributes": { "Boolean": { "DefaultCollapsed": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] }, { "Name": "AutoGenerate", "Type": "Boolean", "InputType": "boolean-default", "IsTitle": false, "Metadata": [ { "Id": 185426, "Version": 2, "Guid": "af9affc8-309e-4c07-a9e3-7f9253facdfb", "Type": { "Id": "@All", "Name": "@All" }, "Attributes": { "String": { "CustomJavaScript": { "en-us": "" }, "DefaultValue": { "en-us": "" }, "InputType": { "en-us": "boolean-default" }, "Name": { "en-us": "AutoGenerate" }, "Notes": { "en-us": "" }, "Placeholder": { "en-us": "" }, "ValidationRegExJavaScript": { "en-us": "" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "Disabled": { "en-us": false }, "DisableTranslation": { "en-us": false }, "Required": { "en-us": false }, "VisibleInEditUI": { "en-us": true } } }, "Owner": "unknown" }, { "Id": 185428, "Version": 1, "Guid": "25e68b9c-73a5-4318-81e4-7178359cb2a7", "Type": { "Id": "@Boolean", "Name": "@Boolean" }, "Attributes": { "String": { "TitleFalse": { "en-us": "Don't auto re-generate code when data changes (default)" }, "TitleIndeterminate": { "en-us": "" }, "TitleTrue": { "en-us": "Auto re-generate code when Content-Types change" } } }, "Owner": "dnn:userid=41" } ] } ] }, "Entities": [ { "Id": 185390, "Version": 2, "Guid": "74bae28a-f606-4da4-a380-9f1abff682c1", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "Name" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.CodeGenerators&SysDataStream=OutputType" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: Copilot Output Types" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185372, "Version": 3, "Guid": "d5e64a2d-eb7e-4ca4-86f0-5d601becf4ac", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:DescriptionHtml]

" }, "ItemTooltip": { "en-us": "

[Item:Description]

" }, "Label": { "en-us": "[Item:Name] v[Item:Version]" }, "MoreFields": { "en-us": "Version,Description,DescriptionHtml" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.CodeGenerators&$filter=OutputType eq '[OutputType]'" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: Copilot Generators" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185377, "Version": 1, "Guid": "daff7fcd-50f5-424a-93b9-87881d3bd9d5", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n // console.log(\"isnew\", context.target.entity.isNew);\n // console.log('edition', data.value, `isEmpty: ${data.value.length}`);\n\n // 1. Exit if editing something existing\n if (!context.target.entity.isNew)\n return;\n\n // Otherwise try to set default to best possible value\n // 2. wait for options to exist\n if (data.options.length == 0)\n return;\n\n // 3. Find default if given, and select that, then stop the formula\n const best = data.options.find(o => o?.data?.IsDefault ?? false);\n // console.log('options', data.options, best);\n return { \n value: best ? [best.value] : data.value,\n stop: true\n };\n});" }, "Target": { "en-us": "Field.Value" }, "Title": { "en-us": "Field.Value" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 185375, "Version": 2, "Guid": "a1eb623f-32a6-46c4-bb12-858befea459a", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "\"[Item:Name]\" - [Item:Description]" }, "MoreFields": { "en-us": "Description,IsDefault" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.AppEditions" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: App Editions" }, "Value": { "en-us": "Name" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41" }, { "Id": 185382, "Version": 1, "Guid": "a374f3be-6c7c-4c68-a4b7-f53cda081f5c", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.ContentTypeSet == 'custom';\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" }, { "Id": 185383, "Version": 1, "Guid": "65209d3c-2499-4099-afed-e9d4f15cc333", "Type": { "Id": "772dfff1-b236-4aa9-8359-5f53c08ff7bf", "Name": "UiFormula" }, "Attributes": { "String": { "Formula": { "en-us": "v2((data, context) => {\n return data.ContentTypeSet == 'custom';\n});" }, "Target": { "en-us": "Field.Settings.Visible" }, "Title": { "en-us": "Field.Settings.Visible" } }, "Boolean": { "Enabled": { "en-us": true } } }, "Owner": "dnn:userid=41" } ] } ], "Entities": [ { "Id": 185412, "Version": 4, "Guid": "a148a07e-7bd0-41ae-9911-a00583215ae5", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:AssemblyQualifiedName]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "FullName" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.DataProcessors" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: SysData DataProcessors" }, "Value": { "en-us": "FullName" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 185414, "Version": 1, "Guid": "655d92f5-252f-4d30-87fb-b3772735789b", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "acc500b8-ff84-40e6-aa1f-0cd2d762bace" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "a148a07e-7bd0-41ae-9911-a00583215ae5" } } ] }, { "Id": 185417, "Version": 3, "Guid": "6e3f3520-77b9-4cb9-80ea-2d507bea197d", "Type": { "Id": "5f8e3968-e02b-40d5-ab77-f60c2e73d244", "Name": "UiPickerSourceQuery", "AttributeMap": { "Query": "1454db62-f29f-4471-b2a5-5bd82817580a", "StreamName": "cb87841b-d687-43ab-be67-cdb810a69e3a", "Value": "0ee078ec-ee4d-41a0-b6b6-ffcdfa90f4eb", "Label": "a3489bc4-6f3c-4e84-a825-2476b0ae4c32" } }, "Attributes": { "String": { "CreateTypes": { "en-us": "" }, "Description": { "en-us": "" }, "ItemInformation": { "en-us": "

[Item:NameId]

" }, "ItemTooltip": { "en-us": "" }, "Label": { "en-us": "NameId" }, "MoreFields": { "en-us": "" }, "Query": { "en-us": "System.SysData" }, "QueryParameters": { "en-us": "SysDataSource=System.MetadataTargetTypes" }, "StreamName": { "en-us": "Default" }, "Title": { "en-us": "Query: SysData MetadataTargetType" }, "Value": { "en-us": "Id" } }, "Hyperlink": { "ItemLink": { "en-us": "" } } }, "Owner": "dnn:userid=41", "Metadata": [ { "Id": 185419, "Version": 1, "Guid": "5007830c-c374-493a-8c1a-9e552f9b43ba", "Type": { "Id": "32698880-1c2e-41ab-bcfc-420091d3263f", "Name": "SystemExportDecorator" }, "Attributes": { "Entity": { "Configuration": { "*": [ "acc500b8-ff84-40e6-aa1f-0cd2d762bace" ] } } }, "Owner": "dnn:userid=41", "For": { "Target": "Entity", "TargetType": 4, "Guid": "6e3f3520-77b9-4cb9-80ea-2d507bea197d" } } ] } ] } ] } ================================================ FILE: Src/Data/App_Data/system/readme.md ================================================ # invisible .data folder This folder contains various json configuration files. they are NOT included in the VS project, to keep them out of code analysis and search-replace loops, as they should never be changed that way. ================================================ FILE: Src/Data/App_Data/system-beta/readme.md ================================================ # .databeta folder This folder contains data / content-types which we're still experimenting with. This stuff should be loaded as we're developing, but should not slip into the distribution. ================================================ FILE: Src/Data/App_Data/system-beta/xconfigurations/features.json ================================================ { "_": { "V": 1 }, "Entity": { "Id": 48237, "Version": 4, "Guid": "0b5f33c3-b566-4c19-9492-2955462084c8", "Type": { "Name": "FeaturesConfiguration", "Id": "094941f2-688e-4df1-89c9-51a51c8bbb2e" }, "Attributes": { "String": { "Signature": { "*": "testing" } }, "Custom": { "Features": { "*": "{\n\t\"features\": [{\n\t\t\"id\": \"f6b8d6da-4744-453b-9543-0de499aa2352\",\n\t\t\"enabled\": true,\n\t\t\"expires\": \"2025-04-14T00:00:00+02:00\"\n\t},{\n\t\t\"id\": \"6cac008e-0663-4cd8-92b2-1d3afbcefcd8\",\n\t\t\"enabled\": true,\n\t\t\"expires\": \"2025-04-14T00:00:00+02:00\"\n\t},{\n\t\t\"id\": \"d93baf71-74c6-4956-9fe0-8281acdfd14a\",\n\t\t\"enabled\": true,\n\t\t\"expires\": \"2025-04-14T00:00:00+02:00\"\n\t},{\n\t\t\"id\": \"79b9f5f8-d104-458b-8e8f-9f4a11c5935e\",\n\t\t\"enabled\": true,\n\t\t\"expires\": \"2025-04-14T00:00:00+02:00\"\n\t},\n\t{\n\t\t\"id\": \"4f3d0021-1c8b-4286-a33b-3210ed3b2d9a\",\n\t\t\"enabled\": true,\n\t\t\"expires\": \"2018-04-14T00:00:00+02:00\"\n\t},\n\t{\n\t\t\"id\": \"00000000-0000-0000-0000-000000000000\",\n\t\t\"enabled\": false,\n\t\t\"expires\": \"2018-04-13T00:00:00+02:00\"\n\t}]\n}" } } }, "Owner": "dnn:userid=1" } } ================================================ FILE: Src/Data/App_Data/system-beta/xcontenttypes/Default.6d5bebc7-1caf-430c-9628-a7c30b77f393.json ================================================ { "_": { "V": 1 }, "ContentType": { "Id": "6d5bebc7-1caf-430c-9628-a7c30b77f393", "Name": "TstData", "Scope": "Default", "Description": "", "Attributes": [ { "Name": "SomeText", "Type": "String", "InputType": "string-default", "IsTitle": true, "Metadata": [ { "Id": 203992, "Version": 1, "Guid": "a78c4c6e-c543-454c-9ebc-b86a84491ea9", "Type": { "Name": "@All", "Id": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-default" }, "Name": { "*": "SomeText" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] }, { "Name": "SomeHtml", "Type": "String", "InputType": "string-wysiwyg", "IsTitle": false, "Metadata": [ { "Id": 203993, "Version": 1, "Guid": "508becc7-5f90-4ae5-bbdd-07a8234d1250", "Type": { "Name": "@All", "Id": "@All" }, "Attributes": { "String": { "InputType": { "*": "string-wysiwyg" }, "Name": { "*": "SomeHtml" } }, "Entity": { "Errors": { "*": [] }, "Formulas": { "*": [] }, "Warnings": { "*": [] } }, "Boolean": { "VisibleInEditUI": { "*": true } } }, "Owner": "dnn:userid=1" } ] } ], "Metadata": [] }, "Entities": [] } ================================================ FILE: Src/Data/App_Data/system-beta/xcontenttypes/json.y48d849d6-b83d-4001-96e5-79da0833e84e.json ================================================ {"_":{"V":1},"ContentType":{"Id":"y48d849d6-b83d-4001-96e5-79da0833e84e","Name":"JsonTest","Scope":"json","Description":"todo","Attributes":[{"Name":"Title","Type":"String","IsTitle":true,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":"from code"},"InputType":{"*":"string-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}}]},{"Name":"Group","Type":"Empty","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":"empty-default"},"Name":{"*":"Group from Code"}},"Boolean":{"VisibleInEditUI":{"*":true}}}}]},{"Name":"Text","Type":"String","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":"from code"},"InputType":{"*":"string-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}}]},{"Name":"Number","Type":"Number","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":"number-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}}]},{"Name":"Entity1","Type":"Entity","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":"entity-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}},{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@entity-default","Id":"@entity-default"},"Attributes":{"String":{"EntityType":{"*":"BlogPost"}},"Boolean":{"AllowMultiValue":{"*":false},"EnableAddExisting":{"*":true},"EnableCreate":{"*":true},"EnableDelete":{"*":false},"EnableEdit":{"*":true},"EnableRemove":{"*":true}}}}]},{"Name":"EntityMulti","Type":"Entity","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":"entity-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}},{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@entity-default","Id":"@entity-default"},"Attributes":{"String":{"EntityType":{"*":"BlogPost"}},"Boolean":{"AllowMultiValue":{"*":true},"EnableAddExisting":{"*":true},"EnableCreate":{"*":true},"EnableDelete":{"*":false},"EnableEdit":{"*":true},"EnableRemove":{"*":true}}}}]},{"Name":"CodeText","Type":"String","IsTitle":false,"Metadata":[{"Id":0,"Version":1,"Guid":"00000000-0000-0000-0000-000000000000","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":"string-default"}},"Boolean":{"VisibleInEditUI":{"*":true}}}}]}],"Metadata":[]}} ================================================ FILE: Src/Data/json-schemas/JSON model 2sxc Image Resize Advanced.hck.json ================================================ { "modelName": "2sxc Image Resize Advanced", "collections": [ { "collectionName": "Recipe", "type": "object", "properties": [ { "name": "Name", "hackoladeMeta": {}, "isActivated": true, "type": "string", "properties": [], "GUID": "3b3ce810-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "name" }, { "name": "SetWidth", "hackoladeMeta": { "namingConvention": "" }, "isActivated": true, "type": "boolean", "GUID": "41780f70-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "setWidth" }, { "name": "Variants", "hackoladeMeta": {}, "isActivated": true, "type": "string", "properties": [], "GUID": "62f4c0d0-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "variants" }, { "name": "Attributes", "hackoladeMeta": {}, "isActivated": true, "type": "document", "properties": [], "additionalProperties": true, "GUID": "8bded800-b40b-11ec-b2ec-ddf76f2d96ad", "code": "attributes", "error": {}, "propertyNames": { "GUID": "93d73fc0-b40b-11ec-b2ec-ddf76f2d96ad" } }, { "name": "SetHeight", "hackoladeMeta": {}, "isActivated": true, "type": "boolean", "GUID": "a6d52830-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "setHeight" }, { "name": "Width", "hackoladeMeta": {}, "isActivated": true, "type": "numeric", "properties": [], "GUID": "bf48c520-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "width" }, { "name": "For Css", "hackoladeMeta": {}, "isActivated": true, "type": "string", "properties": [], "GUID": "d44a93e0-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "forCss" }, { "name": "For Factor", "hackoladeMeta": {}, "isActivated": true, "type": "any", "properties": [], "code": "forFactor", "GUID": "daf03ce0-b40b-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false } }, { "name": "For Tag", "hackoladeMeta": {}, "isActivated": true, "type": "string", "properties": [], "GUID": "0175fe40-b40c-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "forTag" }, { "name": "Recipes", "hackoladeMeta": {}, "isActivated": true, "type": "array", "properties": [ { "hackoladeMeta": {}, "isActivated": true, "type": "document", "properties": [], "additionalProperties": false, "GUID": "259239b0-b40c-11ec-b2ec-ddf76f2d96ad", "arrayItem": true, "arrayParentType": "array", "error": {} } ], "additionalItems": true, "GUID": "258df3f0-b40c-11ec-b2ec-ddf76f2d96ad", "code": "recipes", "foreignCollection": "f98c31f0-b40a-11ec-b2ec-ddf76f2d96ad", "error": {} } ], "definitions": { "type": "definitions", "properties": [], "GUID": "f98e2dc0-b40a-11ec-b2ec-ddf76f2d96ad" }, "isActivated": true, "additionalProperties": false, "GUID": "f98c31f0-b40a-11ec-b2ec-ddf76f2d96ad", "id": "/recipe", "bucketId": "4b3a28c0-b40d-11ec-b2ec-ddf76f2d96ad" }, { "collectionName": "SettingsAdvanced", "type": "object", "properties": [ { "name": "Recipe", "hackoladeMeta": {}, "isActivated": true, "type": "document", "properties": [], "additionalProperties": false, "GUID": "a7ed0b60-b40c-11ec-b2ec-ddf76f2d96ad", "error": { "name": false, "code": false }, "code": "recipe" } ], "definitions": { "type": "definitions", "properties": [], "GUID": "18c9c8c0-b40b-11ec-b2ec-ddf76f2d96ad" }, "isActivated": true, "additionalProperties": false, "GUID": "18c7ccf0-b40b-11ec-b2ec-ddf76f2d96ad", "bucketId": "4b3a28c0-b40d-11ec-b2ec-ddf76f2d96ad" } ], "buckets": [ { "name": "Root", "type": "bucket", "collectionIds": [ "f98c31f0-b40a-11ec-b2ec-ddf76f2d96ad", "18c7ccf0-b40b-11ec-b2ec-ddf76f2d96ad" ], "backgroundColor": { "r": 216, "g": 0, "b": 115, "a": 1 }, "show": true, "isActivated": true, "GUID": "4b3a28c0-b40d-11ec-b2ec-ddf76f2d96ad" } ], "views": [], "relationships": [], "users": [], "diagramViews": [], "idToNameHashTable": { "f98c31f0-b40a-11ec-b2ec-ddf76f2d96ad": "Recipe", "18c7ccf0-b40b-11ec-b2ec-ddf76f2d96ad": "SettingsAdvanced", "3b3ce810-b40b-11ec-b2ec-ddf76f2d96ad": "Name", "41780f70-b40b-11ec-b2ec-ddf76f2d96ad": "SetWidth", "62f4c0d0-b40b-11ec-b2ec-ddf76f2d96ad": "Variants", "8bded800-b40b-11ec-b2ec-ddf76f2d96ad": "Attributes", "a6d52830-b40b-11ec-b2ec-ddf76f2d96ad": "SetHeight", "bf48c520-b40b-11ec-b2ec-ddf76f2d96ad": "Width", "d44a93e0-b40b-11ec-b2ec-ddf76f2d96ad": "For Css", "daf03ce0-b40b-11ec-b2ec-ddf76f2d96ad": "For Factor", "0175fe40-b40c-11ec-b2ec-ddf76f2d96ad": "For Tag", "258df3f0-b40c-11ec-b2ec-ddf76f2d96ad": "Recipes", "a7ed0b60-b40c-11ec-b2ec-ddf76f2d96ad": "Recipe", "4b3a28c0-b40d-11ec-b2ec-ddf76f2d96ad": "Root" }, "definitions": { "type": "definitions", "properties": [], "GUID": "e5248051-b40a-11ec-b2ec-ddf76f2d96ad" }, "polyglotDefinitions": { "type": "polyglotDefinitions", "properties": [], "GUID": "e5248053-b40a-11ec-b2ec-ddf76f2d96ad" }, "externalDefinitions": { "type": "externalDefinitions", "properties": [], "GUID": "e5248052-b40a-11ec-b2ec-ddf76f2d96ad" }, "sources": [], "decorativeSymbols": [], "dbVendor": "JSON", "dbVersion": "draft-07", "appTarget": "JSON", "creationTS": "2022-04-04T11:32:22.868Z", "GUID": "e5248050-b40a-11ec-b2ec-ddf76f2d96ad", "isLineageEnabled": false, "hackoladeMeta": { "validationErrors": { "modelName": false } }, "author": "2sic", "lastModifTS": "2022-04-04T12:02:25.290Z", "persistenceSchemaVersion": "5", "isCreatedByPlugin": true, "pluginInformation": { "pluginEngineVersion": "1.0.0" }, "applicationInformation": { "version": "5.4.11" }, "settings": { "centralPane": { "dbLevel": { "erd": [ { "GUID": "f98c31f0-b40a-11ec-b2ec-ddf76f2d96ad", "x": 443, "y": 85, "width": 184, "height": 231, "color": {} }, { "GUID": "18c7ccf0-b40b-11ec-b2ec-ddf76f2d96ad", "x": 80, "y": 80, "width": 222, "height": 51, "color": {} } ], "buckets": [ { "x": 40, "y": 40, "GUID": "4b3a28c0-b40d-11ec-b2ec-ddf76f2d96ad" } ], "collapsedNodes": [], "activeRelationship": "", "activeRelationshipFields": { "childField": [], "parentField": [] }, "selectedCollections": [], "displayColorPicker": false, "graphView": { "erd": [], "buckets": [], "decorativeSymbols": [], "forceLayout": true, "defaultLinkLength": 300 }, "diagramViews": [], "decorativeSymbols": [], "nestedCollectionsLayout": "horizontal", "options": [] }, "collectionLevel": {}, "changed": false }, "dtDiagram": { "collapsedNodes": [], "shouldDistributeCollections": false } } } ================================================ FILE: Src/Data/json-schemas/image-resize-recipe-v1.json ================================================ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "http://example.com/example.json", "type": "object", "title": "The root schema", "description": "The root schema comprises the entire JSON document.", "default": {}, "examples": [ { "recipe": { "name": "default", "variants": "2*, 1*, 3/4*, 1/2*", "setWidth": false, "attributes": { "loading": "lazy" }, "recipes": [ { "name": "Experimental Bootstrap3", "forCss": "bs3", "attributes": { "class": "img-responsive" }, "setWidth": false }, { "name": "Experimental Bootstrap5", "forCss": "bs5", "attributes": { "class": "img-fluid" }, "setWidth": true, "recipes": [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } }, { "forFactor": "11/12", "width": 1100 }, { "forFactor": "1/12", "width": 75 } ] } ] } } ], "required": [ "recipe" ], "properties": { "recipe": { "$id": "#/properties/recipe", "type": "object", "title": "The recipe schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "name": "default", "variants": "2*, 1*, 3/4*, 1/2*", "setWidth": false, "attributes": { "loading": "lazy" }, "recipes": [ { "name": "Experimental Bootstrap3", "forCss": "bs3", "attributes": { "class": "img-responsive" }, "setWidth": false }, { "name": "Experimental Bootstrap5", "forCss": "bs5", "attributes": { "class": "img-fluid" }, "setWidth": true, "recipes": [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } }, { "forFactor": "11/12", "width": 1100 }, { "forFactor": "1/12", "width": 75 } ] } ] } ], "required": [ "name", "variants", "setWidth", "attributes", "recipes" ], "properties": { "name": { "$id": "#/properties/recipe/properties/name", "type": "string", "title": "The name schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "default" ] }, "variants": { "$id": "#/properties/recipe/properties/variants", "type": "string", "title": "The variants schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "2*, 1*, 3/4*, 1/2*" ] }, "setWidth": { "$id": "#/properties/recipe/properties/setWidth", "type": "boolean", "title": "The setWidth schema", "description": "An explanation about the purpose of this instance.", "default": false, "examples": [ false ] }, "attributes": { "$id": "#/properties/recipe/properties/attributes", "type": "object", "title": "The attributes schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "loading": "lazy" } ], "required": [ "loading" ], "properties": { "loading": { "$id": "#/properties/recipe/properties/attributes/properties/loading", "type": "string", "title": "The loading schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "lazy" ] } }, "additionalProperties": true }, "recipes": { "$id": "#/properties/recipe/properties/recipes", "type": "array", "title": "The recipes schema", "description": "An explanation about the purpose of this instance.", "default": [], "examples": [ [ { "name": "Experimental Bootstrap3", "forCss": "bs3", "attributes": { "class": "img-responsive" }, "setWidth": false }, { "name": "Experimental Bootstrap5", "forCss": "bs5", "attributes": { "class": "img-fluid" }, "setWidth": true, "recipes": [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } }, { "forFactor": "11/12", "width": 1100 }, { "forFactor": "1/12", "width": 75 } ] } ] ], "additionalItems": true, "items": { "$id": "#/properties/recipe/properties/recipes/items", "anyOf": [ { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0", "type": "object", "title": "The first anyOf schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "name": "Experimental Bootstrap3", "forCss": "bs3", "attributes": { "class": "img-responsive" }, "setWidth": false } ], "required": [ "name", "forCss", "attributes", "setWidth" ], "properties": { "name": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0/properties/name", "type": "string", "title": "The name schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "Experimental Bootstrap3" ] }, "forCss": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0/properties/forCss", "type": "string", "title": "The forCss schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "bs3" ] }, "attributes": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0/properties/attributes", "type": "object", "title": "The attributes schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "class": "img-responsive" } ], "required": [ "class" ], "properties": { "class": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0/properties/attributes/properties/class", "type": "string", "title": "The class schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "img-responsive" ] } }, "additionalProperties": true }, "setWidth": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/0/properties/setWidth", "type": "boolean", "title": "The setWidth schema", "description": "An explanation about the purpose of this instance.", "default": false, "examples": [ false ] } }, "additionalProperties": true }, { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1", "type": "object", "title": "The second anyOf schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "name": "Experimental Bootstrap5", "forCss": "bs5", "attributes": { "class": "img-fluid" }, "setWidth": true, "recipes": [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } }, { "forFactor": "11/12", "width": 1100 }, { "forFactor": "1/12", "width": 75 } ] } ], "required": [ "name", "forCss", "attributes", "setWidth", "recipes" ], "properties": { "name": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/name", "type": "string", "title": "The name schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "Experimental Bootstrap5" ] }, "forCss": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/forCss", "type": "string", "title": "The forCss schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "bs5" ] }, "attributes": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/attributes", "type": "object", "title": "The attributes schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "class": "img-fluid" } ], "required": [ "class" ], "properties": { "class": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/attributes/properties/class", "type": "string", "title": "The class schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "img-fluid" ] } }, "additionalProperties": true }, "setWidth": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/setWidth", "type": "boolean", "title": "The setWidth schema", "description": "An explanation about the purpose of this instance.", "default": false, "examples": [ true ] }, "recipes": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes", "type": "array", "title": "The recipes schema", "description": "An explanation about the purpose of this instance.", "default": [], "examples": [ [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } }, { "forFactor": "11/12", "width": 1100 } ] ], "additionalItems": true, "items": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items", "anyOf": [ { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/0", "type": "object", "title": "The first anyOf schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "forFactor": "12/12", "width": 1230, "attributes": { "sizes": "(max-width: 1400px) 100vw, 1230px" } } ], "required": [ "forFactor", "width", "attributes" ], "properties": { "forFactor": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/0/properties/forFactor", "type": "string", "title": "The forFactor schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "12/12" ] }, "width": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/0/properties/width", "type": "integer", "title": "The width schema", "description": "An explanation about the purpose of this instance.", "default": 0, "examples": [ 1230 ] }, "attributes": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/0/properties/attributes", "type": "object", "title": "The attributes schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "sizes": "(max-width: 1400px) 100vw, 1230px" } ], "required": [ "sizes" ], "properties": { "sizes": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/0/properties/attributes/properties/sizes", "type": "string", "title": "The sizes schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "(max-width: 1400px) 100vw, 1230px" ] } }, "additionalProperties": true } }, "additionalProperties": true }, { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/1", "type": "object", "title": "The second anyOf schema", "description": "An explanation about the purpose of this instance.", "default": {}, "examples": [ { "forFactor": "11/12", "width": 1100 } ], "required": [ "forFactor", "width" ], "properties": { "forFactor": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/1/properties/forFactor", "type": "string", "title": "The forFactor schema", "description": "An explanation about the purpose of this instance.", "default": "", "examples": [ "11/12" ] }, "width": { "$id": "#/properties/recipe/properties/recipes/items/anyOf/1/properties/recipes/items/anyOf/1/properties/width", "type": "integer", "title": "The width schema", "description": "An explanation about the purpose of this instance.", "default": 0, "examples": [ 1100 ] } }, "additionalProperties": true } ] } } }, "additionalProperties": true } ] } } }, "additionalProperties": true } }, "additionalProperties": true } ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.DataSources.DnnFormAndList.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.DataSources.DnnFormAndList","Name":"|Config ToSic.SexyContent.DataSources.DnnFormAndList","Scope":"System.DataSources","Description":"Configuration for the Form and List Data Source","Attributes":[{"Name":"Title","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":468,"Version":1,"Guid":"eb7cacd2-6da7-42cf-a38c-3c1e0b6f4457","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":"FnL DataSource Configuration"},"Name":{"*":"Title"},"Notes":{"*":"

Just a title for you to give this configuration a name.

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":true},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-070000"}]},{"Name":"ModuleId","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":469,"Version":1,"Guid":"f7093be0-ebc7-4759-aa90-d54808ba0fe2","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"Name":{"*":"FnL Module Id"},"Notes":{"*":"

The ID of the Form and List Module in DNN. The Data will be retrieved from that specific module. 

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":true},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-070000"}]},{"Name":"TitleFieldName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":470,"Version":1,"Guid":"48ff65ea-ba00-4243-87c5-9132f24cd593","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"Name":{"*":"Title Field Name"},"Notes":{"*":"The column in Form and List which should become the title of the resulting content-items. If you leave this blank, the system will just pick the first column as title. "}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-070000"}]},{"Name":"ContentTypeName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":471,"Version":1,"Guid":"fef1a456-4e74-4299-8a1b-792da607a5ec","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"Name":{"*":"Content Type Name"},"Notes":{"*":"

This is the internal name for the resulting Content-Type. Usually not important, if you leave it blank a default value (usually FnL) is used. 

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-070000"}]}],"Sharing":{"AlwaysShare":true,"ParentZoneId":1,"ParentAppId":1},"Metadata":[]}} ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.DataSources.DnnSqlDataSource.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.DataSources.DnnSqlDataSource","Name":"ToSic.SexyContent.DataSources.DnnSqlDataSource","Scope":"System.DataSources","Description":"used to configure a DNN SqlDataSource","Attributes":[{"Name":"ContentType","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":46932,"Version":7,"Guid":"5bfdf93e-8fa4-40e2-bb76-3e13af2ad26c","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"en-us":""},"DefaultValue":{"en-us":""},"InputType":{"en-us":"string-default"},"Name":{"en-us":"Content Type Name"},"Notes":{"en-us":"

The Content-Type name used for entities which are created from SQL.

"},"Placeholder":{"en-us":""},"ValidationRegExJavaScript":{"en-us":""}},"Entity":{"Errors":{"*":[]},"Formulas":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"en-us":false},"DisableTranslation":{"en-us":false},"Required":{"en-us":false},"VisibleInEditUI":{"en-us":true}}},"Owner":"dnn:userid=1"},{"Id":46933,"Version":6,"Guid":"2ee4cd3f-5d63-46d6-8c55-ca9106521023","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"en-us":""},"InputType":{"en-us":""}}},"Owner":"dnn:userid=1"},{"Id":46950,"Version":5,"Guid":"a79dbf61-08f9-4f3a-a7e9-baf797b8a2d0","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"String":{"InputFontFamily":{"en-us":""}},"Number":{"RowCount":{"en-us":1}}},"Owner":"dnn:userid=1"}]},{"Name":"SelectCommand","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":46934,"Version":6,"Guid":"2cc30c2a-4bf6-425d-beb6-920a1e3b155d","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"en-us":""},"DefaultValue":{"en-us":""},"InputType":{"en-us":"string-default"},"Name":{"en-us":"Select Command"},"Notes":{"en-us":""},"Placeholder":{"en-us":""},"ValidationRegExJavaScript":{"en-us":""}},"Entity":{"Errors":{"*":[]},"Formulas":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"en-us":false},"DisableTranslation":{"en-us":false},"Required":{"en-us":false},"VisibleInEditUI":{"en-us":true}}},"Owner":"dnn:userid=1"},{"Id":46935,"Version":5,"Guid":"b8485426-d16a-4cc7-a4f5-5b8bc4e5cd5f","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"en-us":""},"InputType":{"en-us":"default"}},"Number":{"RowCount":{"en-us":10}}},"Owner":"dnn:userid=1"},{"Id":46949,"Version":4,"Guid":"db1728dd-1eca-491d-ac4c-ae618dff6a11","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"String":{"InputFontFamily":{"en-us":""}},"Number":{"RowCount":{"en-us":10}}},"Owner":"dnn:userid=1"}]}],"Metadata":[{"Id":46951,"Version":2,"Guid":"e7e45a1c-38b2-4fa5-8801-fd1519d90ef4","Type":{"Name":"ContentType","Id":"ContentType"},"Attributes":{"String":{"Description":{"*":"used to configure a DNN SqlDataSource"},"EditInstructions":{"*":"

Read about this in the docs

"},"Label":{"*":"DNN SQL DataSource"},"ListInstructions":{"*":""},"Notes":{"*":""}},"Hyperlink":{"Icon":{"*":""},"Link":{"*":""}}},"Owner":"dnn:userid=1","For":{"Target":"ContentType","TargetType":5,"String":"|Config ToSic.SexyContent.DataSources.DnnSqlDataSource"}}]},"Entities":[]} ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.DataSources.DnnUserProfileDataSource.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.DataSources.DnnUserProfileDataSource","Name":"ToSic.SexyContent.DataSources.DnnUserProfileDataSource","Scope":"System.DataSources","Description":"Configuration for DNN UserProfile DataSource","Attributes":[{"Name":"TitleFieldName","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":46936,"Version":1,"Guid":"fa7be2bc-62c7-4677-9b78-f60be4e2a941","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"DisplayName"},"InputType":{"*":"string-default"},"Name":{"*":"Title Field Name"},"Notes":{"*":"

The profile field which should define title - and will be available on the object as EntityTitle. You can always get more help here.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"dnn:userid=1"},{"Id":46937,"Version":1,"Guid":"1fd75026-ee7b-41f5-a2ab-e299b302de47","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"*":""},"InputType":{"*":""}},"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"},{"Id":46938,"Version":1,"Guid":"66c62507-0a7b-4860-8e56-76a439eca058","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"}]},{"Name":"Properties","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":46939,"Version":1,"Guid":"5c3f7727-a8b9-44a1-a3ff-299e8ec96f4d","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"DisplayName,Email,FirstName,LastName,Username,City,Website"},"InputType":{"*":"string-default"},"Name":{"*":"Properties"},"Notes":{"*":"

List the profile properties you want to provide. Typically this includes DisplayName,FirstName,LastName, etc. Remember to check the help for more guidance.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"dnn:userid=1"},{"Id":46940,"Version":1,"Guid":"cf30ac5b-1d15-4456-818f-1ca652f97846","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"*":""},"InputType":{"*":""}},"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"},{"Id":46941,"Version":1,"Guid":"cabe7daf-ca2e-4abb-9c99-3e0523bcabc2","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"}]},{"Name":"ContentTypeName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":46942,"Version":1,"Guid":"9e0b5607-5bca-4883-ab8f-305193f4621f","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"Profile"},"InputType":{"*":"string-default"},"Name":{"*":"Content Type Name"},"Notes":{"*":"

An optional term for the content-type as it will be used in your program. Example: \"Profile\"

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"dnn:userid=1"},{"Id":46943,"Version":1,"Guid":"8eaac900-dd5a-4dfb-a8e9-d74bb93de039","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"*":""},"InputType":{"*":""}},"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"},{"Id":46944,"Version":1,"Guid":"a35cec6a-a901-44d9-bbd5-c0ffd7938ee0","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"}]},{"Name":"UserIds","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":46945,"Version":1,"Guid":"2d6a7d60-d051-4b78-bf85-c21691051c43","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":""},"InputType":{"*":"string-default"},"Name":{"*":"User IDs"},"Notes":{"*":"

Use this to limit the profiles to certain users, like \"740,50603,203\" - you can also use tokens of course, like [QueryString:UserId]. Leave blank to not filter by user-id.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"dnn:userid=1"},{"Id":46946,"Version":1,"Guid":"0752361d-2609-4530-8e27-7427363e5862","Type":{"Name":"@String","Id":"@String"},"Attributes":{"String":{"DropdownValues":{"*":""},"InputType":{"*":""}},"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"},{"Id":46947,"Version":1,"Guid":"aedffcdd-bf55-4876-9dc3-f73fc9156198","Type":{"Name":"@string-default","Id":"@string-default"},"Attributes":{"Number":{"RowCount":{"*":1.0}}},"Owner":"dnn:userid=1"}]}],"Metadata":[{"Id":74256,"Version":1,"Guid":"993e890b-62a6-4de8-b62f-30d742db3244","Type":{"Name":"ContentType","Id":"ContentType"},"Attributes":{"String":{"Description":{"*":"Configuration for DNN UserProfile DataSource"},"EditInstructions":{"*":""},"Label":{"*":"DNN User Profile"},"ListInstructions":{"*":""},"Notes":{"*":""}},"Hyperlink":{"Icon":{"*":""},"Link":{"*":""}}},"Owner":"dnn:userid=1","For":{"Target":"ContentType","String":"|Config ToSic.SexyContent.DataSources.DnnUserProfileDataSource"}}]}} ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnFormAndList.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnFormAndList","Name":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnFormAndList","Scope":"System.DataSources","Description":"Configuration for the Form and List Data Source","Attributes":[{"Name":"Title","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":694,"Version":1,"Guid":"f9047247-5d8b-4c18-85e7-80dc81041c99","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":"FnL DataSource Configuration"},"InputType":{"*":""},"Name":{"*":"Title"},"Notes":{"*":"

Just a title for you to give this configuration a name.

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":true},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"ModuleId","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":695,"Version":1,"Guid":"25550deb-d5be-48e9-bbdd-3e32603e1b2f","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":""},"Name":{"*":"FnL Module Id"},"Notes":{"*":"

The ID of the Form and List Module in DNN. The Data will be retrieved from that specific module. 

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":true},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"TitleFieldName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":696,"Version":1,"Guid":"3cc9e8bb-98f8-4f28-a474-f200c0da54be","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":""},"Name":{"*":"Title Field Name"},"Notes":{"*":"The column in Form and List which should become the title of the resulting content-items. If you leave this blank, the system will just pick the first column as title. "}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"ContentTypeName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":697,"Version":1,"Guid":"bff61cfd-4362-4c86-ac88-19f2cce62644","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":""},"Name":{"*":"Content Type Name"},"Notes":{"*":"

This is the internal name for the resulting Content-Type. Usually not important, if you leave it blank a default value (usually FnL) is used. 

"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]}],"Sharing":{"AlwaysShare":true,"ParentZoneId":1,"ParentAppId":1},"Metadata":[]}} ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource","Name":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource","Scope":"System.DataSources","Description":"used to configure a DNN SqlDataSource","Attributes":[{"Name":"ContentType","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":698,"Version":1,"Guid":"94eb1219-a3be-4e85-ac2d-83937776897a","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":""},"Name":{"*":"ContentType"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"},{"Id":699,"Version":1,"Guid":"098fee4d-7674-4539-9e95-4fc7bd7dfdbe","Type":{"Name":"@String","Id":"@String"},"Attributes":{},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"SelectCommand","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":700,"Version":1,"Guid":"276ccd93-0b75-4636-a676-48f64edfe387","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"DefaultValue":{"*":""},"InputType":{"*":""},"Name":{"*":"SelectCommand"}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"},{"Id":701,"Version":1,"Guid":"9224d287-5874-4b47-b126-193c0c187632","Type":{"Name":"@String","Id":"@String"},"Attributes":{"Number":{"RowCount":{"*":10.0}}},"Owner":"System-ModuleUpgrade-08.05.05"}]}],"Sharing":{"AlwaysShare":true,"ParentZoneId":1,"ParentAppId":1},"Metadata":[]}} ================================================ FILE: Src/Data-Dnn/App_Data/system/contenttypes/System.DataSources.Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource.json ================================================ {"_":{"V":1},"ContentType":{"Id":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource","Name":"|Config ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource","Scope":"System.DataSources","Description":"Configuration for DNN UserProfile DataSource","Attributes":[{"Name":"TitleFieldName","Type":"String","InputType":"string-default","IsTitle":true,"Metadata":[{"Id":702,"Version":1,"Guid":"e954062a-2c38-4029-ad35-c3bcb38751d6","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"DisplayName"},"InputType":{"*":"string-default"},"Name":{"*":"Title Field Name"},"Notes":{"*":"

The profile field which should define title - and will be available on the object as EntityTitle. You can always get more help here.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"Properties","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":703,"Version":1,"Guid":"92f15927-f21a-4649-823c-5cabd3f4b01b","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"DisplayName,Email,FirstName,LastName,Username,City,Website"},"InputType":{"*":"string-default"},"Name":{"*":"Properties"},"Notes":{"*":"

List the profile properties you want to provide. Typically this includes DisplayName,FirstName,LastName, etc. Remember to check the help for more guidance.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"ContentTypeName","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":704,"Version":1,"Guid":"c9d43e11-6e20-4da7-aa0d-06c3e92092f0","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":"Profile"},"InputType":{"*":"string-default"},"Name":{"*":"Content Type Name"},"Notes":{"*":"

An optional term for the content-type as it will be used in your program. Example: \"Profile\"

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]},{"Name":"UserIds","Type":"String","InputType":"string-default","IsTitle":false,"Metadata":[{"Id":705,"Version":1,"Guid":"14df746f-ed68-4560-b482-212f45f069e1","Type":{"Name":"@All","Id":"@All"},"Attributes":{"String":{"CustomJavaScript":{"*":""},"DefaultValue":{"*":""},"InputType":{"*":"string-default"},"Name":{"*":"User IDs"},"Notes":{"*":"

Use this to limit the profiles to certain users, like \"740,50603,203\" - you can also use tokens of course, like [QueryString:UserId]. Leave blank to not filter by user-id.

"},"ValidationRegExJavaScript":{"*":""}},"Entity":{"Errors":{"*":[]},"Warnings":{"*":[]}},"Boolean":{"Disabled":{"*":false},"Required":{"*":false},"VisibleInEditUI":{"*":true}}},"Owner":"System-ModuleUpgrade-08.05.05"}]}],"Sharing":{"AlwaysShare":true,"ParentZoneId":1,"ParentAppId":1},"Metadata":[]}} ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates .vs # Build results [Dd]ebug/ [Rr]elease/ x64/ build/ [Bb]in/ [Oo]bj/ # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets !packages/*/build/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* *_i.c *_p.c *.ilk *.meta *.obj *.pch *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.log *.scc # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper # Windows Azure Build Output csx *.build.csdef # Others ClientBin/ # ========================= # Windows detritus # ========================= # Windows image file caches Thumbs.db ehthumbs.db # Folder config file Desktop.ini # ========================= # DNN Module # ========================= # Ignore .manifest file created by DNN while installing the module Resources.zip.manifest # Ignore ModulePackages /ModulePackages/ /Upgrade/Log /Packages/ /_/ # include bin files from koi, razor blade, and old-razorblade !koi/bin/ !razorblade/bin/ !razorblade-old/bin/ !Extensions/ImageResizer/bin/ !Extensions/Imageflow/bin/ # Test data \.data-custom/configurations/features.json .data-custom/contenttypes 2/ \.data-custom/configurations/** .data-custom/configurations/** ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/App_LocalResources/View.ascx.de-DE.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Vorlage wechseln Bearbeiten Portal Konfigurieren Für die ausgewählte Vorlage wurde noch kein Inhalt eingegeben. Die gewählte Vorlage existiert nicht mehr. Vorlage bearbeiten Hinzufügen Liste bearbeiten Möchten Sie \"{0} ({1})\" wirklich löschen? Klick hier um dies einzurichten <Typ des Inhalts auswählen> <b>Beim Rendern des Templates ist ein Fehler aufgetreten</b> Dieses Modul benötigt Daten vom Server. Wenn Du diese Meldung siehst, ist das Veröffentlichen für dieses Modul nicht aktiviert. Bitte aktiviere das in den Moduleinstellungen des Moduls {0} (das Modul mit dem Titel "{1}"). "Getting Started" Vorlagen installieren ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/App_LocalResources/View.ascx.fr-FR.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Changer de template/modèle Éditer Configurer Il n'existe pas encore d'item de démo pour le modèle (template) sélectionné. Le modèle (tempalte) sélectionné n'existe pas. Éditer le template Ajouter un item Éditer la liste Voulez-vous supprimer l'item \"{0} ({1})\"? Cliquer ici pour le paramétrer <Choisir un modèle de contenu> <b>Une erreur s'est produite lors du rendu du modèle (template)</b> Ce module tente de récupérer les données du serveur. Si vous voyez ce message, c'est parce que Data Publishing n'est pas activé sur ce module. Veuillez l'activer dans les paramètres du module {0} (le module avec le titre "{1}"). Installer "Getting Started" templates ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/App_LocalResources/View.ascx.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Change Template / Layout Edit Configure No demo item exists for the selected template. The selected template does not exist anymore. Edit Template Add Item Edit List Do you want to delete item \"{0} ({1})\"? Click here to configure this <Choose Content Type> <b>There was an error while rendering the template</b> This module is trying to retrieve data from the server. If you see this message, it is because Data Publishing is not enabled on this module. Please enable it in the module settings of the module {0} (the module with the title "{1}"). Install "Getting Started" templates ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/BuildScripts/AfterBuild.Targets ================================================  %(DnnRoot.Identity) %(DnnRoot.Identity) $(CurrentDnnRoot)DesktopModules\ToSic.Sxc ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/BuildScripts/LoadBuildConfig.Targets ================================================  true false ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/BuildScripts/MSBuild.Community.Tasks.targets ================================================ $(MSBuildExtensionsPath)\MSBuildCommunityTasks $([MSBUILD]::Unescape($(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll)) ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/BuildScripts/ModulePackage.Targets ================================================ DnnPackageBuilder/ToSic.Sxc.Dnn.dnn ToSic.Sxc.Dnn $(MSBuildProjectDirectory)\ModulePackages\Temp $(MSBuildProjectDirectory)\ModulePackages\TempResources $(MSBuildProjectDirectory)\ModulePackages\TempPdb ../../../InstallPackages/Dnn-Installer $(PackageName).$(Version)_Install.zip $(Source)..\$(Version) ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/BuildScripts/readme.md ================================================ ## Build Scripts This is an MS-Build package which gets run when Visual Studio does a production build. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ClientScripts/ModuleEditor.js ================================================ (function (sxc) { if (sxc || window['2sxc-loading']) return; window['2sxc-loading'] = true; var scripts = [ '/DesktopModules/ToSic.Sxc/js/2sxc.api.min.js', '/DesktopModules/ToSic.Sxc/dist/inpage/inpage.min.js', ]; console.debug('lazy loading 2sxc'); var head = document.getElementsByTagName('head')[0]; for (var i = 0; i < scripts.length; i++) head.appendChild(createScriptTag(scripts[i])); function createScriptTag(url) { var el = document.createElement('script'); el.setAttribute('defer', 'defer'); el.src = url; return el; } })(window['$2sxc']); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ClientScripts/readme.md ================================================ ## ClientScripts of 2sxc This folder contains JS which is automatically loaded by DNN 9 when a user opens the "add module to page" dialog. Our script ensures that the 2sxc js is loaded when the user adds the module to the page. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnBusinessController.cs ================================================ using DotNetNuke.Entities.Modules; using ToSic.Sxc.Dnn.StartUp; // Note about the name // Some day we should change this namespace to ToSic.Sxc.Dnn.something // But we can't just do it, because the name is registered in Dnn DBs, so update-scripts would be needed // WHY IS THIS NOT PART OF THE DnnBusinessController? it seems that that is already the term in the DB? // Reason if that can't call StartupDnn().Configure() from ToSic.Sxc.Dnn.DnnBusinessController because of circular dependency // and need to configure DI before UpgradeModule to fix issue: "Module upgrade did not complete." // "System.ArgumentNullException: Value cannot be null. Parameter name: provider // at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) // at ToSic.Eav.Factory.GetServiceProvider()" // ReSharper disable once CheckNamespace namespace ToSic.Sxc; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnBusinessController: ToSic.Sxc.Dnn.DnnBusinessController, IUpgradeable, IVersionable { public new string UpgradeModule(string version) { new StartupDnn().Configure(); // can't call it from ToSic.Sxc.Dnn.DnnBusinessController because of circular dependency return base.UpgradeModule(version); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/Cleanup/flush.txt ================================================ DesktopModules\ToSic.Sxc\dist\ DesktopModules\ToSic.Sxc\.data\ DesktopModules\ToSic.Sxc\App_Data\system\ ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/Cleanup/flush20.txt ================================================ bin\ToSic.Eav.dll bin\ToSic.Eav.Core.dll bin\ToSic.Lib.Core.dll bin\ToSic.Sxc.dll DesktopModules\ToSIC_SexyContent\2Sexy Content Razor\ DesktopModules\ToSIC_SexyContent\2sxc Dnn\ DesktopModules\ToSIC_SexyContent\2sxc.WebApi.Tests\ DesktopModules\ToSIC_SexyContent\_\ DesktopModules\ToSIC_SexyContent\Administration\ DesktopModules\ToSIC_SexyContent\API\ DesktopModules\ToSIC_SexyContent\App_LocalResources\ DesktopModules\ToSIC_SexyContent\assets\ DesktopModules\ToSIC_SexyContent\bootstrap\ DesktopModules\ToSIC_SexyContent\bower_components\ DesktopModules\ToSIC_SexyContent\ClientScripts\ DesktopModules\ToSIC_SexyContent\dist\ DesktopModules\ToSIC_SexyContent\DnnWebForms\ DesktopModules\ToSIC_SexyContent\Extensions\ DesktopModules\ToSIC_SexyContent\i18n\ DesktopModules\ToSIC_SexyContent\Images\ DesktopModules\ToSIC_SexyContent\ImportExport\ DesktopModules\ToSIC_SexyContent\SexyContent\ DesktopModules\ToSIC_SexyContent\SqlDataProvider\ DesktopModules\ToSIC_SexyContent\Styles\ DesktopModules\ToSIC_SexyContent\Sxc WebApi\ DesktopModules\ToSIC_SexyContent\ToSic.Sxc.Tests\ DesktopModules\ToSIC_SexyContent\ToSic.Sxc\ DesktopModules\ToSIC_SexyContent\edit.css DesktopModules\ToSIC_SexyContent\EditContentGroup.ascx DesktopModules\ToSIC_SexyContent\EditContentGroupItem.ascx DesktopModules\ToSIC_SexyContent\EditDataSource.ascx DesktopModules\ToSIC_SexyContent\EditEntity.ascx DesktopModules\ToSIC_SexyContent\EditList.ascx DesktopModules\ToSIC_SexyContent\EditTemplateFile.ascx DesktopModules\ToSIC_SexyContent\icon-app-black.png DesktopModules\ToSIC_SexyContent\icon-app.png DesktopModules\ToSIC_SexyContent\icon-black.png DesktopModules\ToSIC_SexyContent\icon.png DesktopModules\ToSIC_SexyContent\License.txt DesktopModules\ToSIC_SexyContent\packages.config DesktopModules\ToSIC_SexyContent\readme.md DesktopModules\ToSIC_SexyContent\ReleaseNotes.txt DesktopModules\ToSIC_SexyContent\Resources.zip.manifest DesktopModules\ToSIC_SexyContent\Settings.ascx DesktopModules\ToSIC_SexyContent\SettingsWrapper.ascx DesktopModules\ToSIC_SexyContent\TemplateHelpGrid.ascx DesktopModules\ToSIC_SexyContent\turn-on.js DesktopModules\ToSIC_SexyContent\turn-on.js.map DesktopModules\ToSIC_SexyContent\View.ascx DesktopModules\ToSIC_SexyContent\ViewApp.ascx DesktopModules\ToSIC_SexyContent\web.config DesktopModules\ToSIC_SexyContent\WebConfigTemplate.config ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/ReleaseNotes.txt ================================================ 

2sxc v21.07.00

Note: 2sxc v20 cleans up a lot of old APIs, so it's called a MoT release (Moment of Truth).

If you have old code, things may break and you will be guided to fix the issues.

Please read the release notes carefully, do backups, and test-upgrade on a copy before upgrading a live environment. See the release blog for more details.


Also read the release notes on Github

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/00.00.01.SqlDataProvider ================================================ /************************************************************/ /***** SqlDataProvider *****/ /***** *****/ /***** *****/ /***** Note: To manually execute this script you must *****/ /***** perform a search and replace operation *****/ /***** for {databaseOwner} and {objectQualifier} *****/ /***** *****/ /************************************************************/ -- The following SQL script is actually 'Install.SqlDataProvider' for clean install v20.00.00 DB, but adjusted for 2sxc Package rename -- Set session language to english to ensure DateTime format is correct (all following insert statements in this script expect that) SET LANGUAGE English; -- Check for custom Object Qualifier - break installation if it's configured (2sxc does not support object qualifier) IF '{objectQualifier}' <> '' BEGIN RAISERROR(N'Your SQL installation is non-standard using a Custom Object Qualifier. 2sic uses the standard Microsoft Entity Framework which doesn''t work well with this feature - installation aborted.', 16, 1); RETURN; END GO -- adjusted for 2sxc Package rename -- find if old package '2SexyContent' is installed, and if so, skip this clean install script DECLARE @upgradeVersion NVARCHAR(20) = '00.00.01', @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2SexyContent'), '00.00.00' ); -- skip further execution if installedVersion > upgradeVersion IF ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 1) AS INT) ) ) ) ) RETURN; -- special case to handle clean install of Install.SqlDataProvider for v20.00.05 db, after 2sxc Packaga rename PRINT N'Clean install 00.00.01.SqlDataProvider (actually Install.SqlDataProvider for v20.00.05)'; -- Start of install procedure which replaces all install scripts and code updates until and including version 20.00.05 ------------------------------------------------- /****** Object: Table [dbo].[TsDynDataApp] Script Date: 15.5.2025. 13:42:07 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataApp]( [AppId] [int] IDENTITY(1,1) NOT NULL, [ZoneId] [int] NOT NULL, [Name] [nvarchar](255) NOT NULL, [SysSettings] [nvarchar](max) NULL, [TransCreatedId] [int] NULL, [TransModifiedId] [int] NULL, [TransDeletedId] [int] NULL, CONSTRAINT [PK_TsDynDataApp] PRIMARY KEY CLUSTERED ( [AppId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] /****** Object: Table [dbo].[TsDynDataAttribute] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataAttribute]( [AttributeId] [int] IDENTITY(1,1) NOT NULL, [StaticName] [nvarchar](50) NOT NULL, [Type] [nvarchar](50) NOT NULL, [TransCreatedId] [int] NOT NULL, [TransDeletedId] [int] NULL, [Guid] [uniqueidentifier] NULL, [SysSettings] [nvarchar](max) NULL, [ContentTypeId] [int] NOT NULL, [SortOrder] [int] NOT NULL, [IsTitle] [bit] NOT NULL, [TransModifiedId] [int] NULL, CONSTRAINT [PK_TsDynDataAttribute] PRIMARY KEY CLUSTERED ( [AttributeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataAttributeType] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataAttributeType]( [Type] [nvarchar](50) NOT NULL, CONSTRAINT [PK_TsDynDataAttributeType] PRIMARY KEY CLUSTERED ( [Type] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataContentType] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataContentType]( [ContentTypeId] [int] IDENTITY(1,1) NOT NULL, [StaticName] [nvarchar](150) NULL, [Name] [nvarchar](150) NULL, [Scope] [nvarchar](50) NULL, [TransCreatedId] [int] NOT NULL, [TransDeletedId] [int] NULL, [AppId] [int] NOT NULL, [InheritContentTypeId] [int] NULL, [IsGlobal] [bit] NOT NULL, [Json] [nvarchar](max) NULL, [SysSettings] [nvarchar](max) NULL, [TransModifiedId] [int] NULL, CONSTRAINT [PK_TsDynDataContentType] PRIMARY KEY CLUSTERED ( [ContentTypeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataDimension] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataDimension]( [DimensionId] [int] IDENTITY(1,1) NOT NULL, [Parent] [int] NULL, [Name] [nvarchar](100) NOT NULL, [SystemKey] [nvarchar](100) NULL, [ExternalKey] [nvarchar](100) NULL, [Active] [bit] NOT NULL, [ZoneId] [int] NOT NULL, CONSTRAINT [PK_TsDynDataDimension] PRIMARY KEY CLUSTERED ( [DimensionId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataEntity] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataEntity]( [EntityId] [int] IDENTITY(1,1) NOT NULL, [EntityGuid] [uniqueidentifier] NOT NULL, [ContentTypeId] [int] NOT NULL, [TargetTypeId] [int] NOT NULL, [KeyNumber] [int] NULL, [KeyGuid] [uniqueidentifier] NULL, [KeyString] [nvarchar](100) NULL, [TransCreatedId] [int] NOT NULL, [TransDeletedId] [int] NULL, [IsPublished] [bit] NOT NULL, [PublishedEntityId] [int] NULL, [TransModifiedId] [int] NOT NULL, [Owner] [nvarchar](250) NULL, [Json] [nvarchar](max) NULL, [Version] [int] NOT NULL, [AppId] [int] NOT NULL, [ContentType] [nvarchar](250) NULL, CONSTRAINT [PK_TsDynDataEntity] PRIMARY KEY CLUSTERED ( [EntityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataHistory] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataHistory]( [HistoryId] [int] IDENTITY(1,1) NOT NULL, [SourceTable] [nvarchar](250) NOT NULL, [SourceId] [int] NULL, [SourceGuid] [uniqueidentifier] NULL, [Operation] [nchar](1) NOT NULL, [Timestamp] [datetime] NOT NULL, [TransactionId] [int] NULL, [Json] [nvarchar](max) NULL, [CJson] [varbinary](max) NULL, CONSTRAINT [PK_TsDynDataHistory] PRIMARY KEY CLUSTERED ( [HistoryId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataRelationship] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataRelationship]( [AttributeId] [int] NOT NULL, [ParentEntityId] [int] NOT NULL, [ChildEntityId] [int] NULL, [SortOrder] [int] NOT NULL, CONSTRAINT [PK_TsDynDataRelationship] PRIMARY KEY CLUSTERED ( [AttributeId] ASC, [ParentEntityId] ASC, [SortOrder] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataTargetType] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataTargetType]( [TargetTypeId] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Description] [nvarchar](max) NOT NULL, CONSTRAINT [PK_TsDynDataTargetType] PRIMARY KEY CLUSTERED ( [TargetTypeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataTransaction] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataTransaction]( [TransactionId] [int] IDENTITY(1,1) NOT NULL, [Timestamp] [datetime] NOT NULL, [User] [nvarchar](255) NULL, CONSTRAINT [PK_TsDynDataTransaction] PRIMARY KEY CLUSTERED ( [TransactionId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataValue] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataValue]( [ValueId] [int] IDENTITY(1,1) NOT NULL, [EntityId] [int] NOT NULL, [AttributeId] [int] NOT NULL, [Value] [nvarchar](max) NOT NULL, CONSTRAINT [PK_TsDynDataValue] PRIMARY KEY CLUSTERED ( [ValueId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataValueDimension] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataValueDimension]( [ValueId] [int] NOT NULL, [DimensionId] [int] NOT NULL, [ReadOnly] [bit] NOT NULL, CONSTRAINT [PK_TsDynDataValueDimension] PRIMARY KEY CLUSTERED ( [ValueId] ASC, [DimensionId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; /****** Object: Table [dbo].[TsDynDataZone] Script Date: 15.5.2025. 13:42:08 ******/ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[TsDynDataZone]( [ZoneId] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](255) NOT NULL, [TransCreatedId] [int] NULL, [TransModifiedId] [int] NULL, [TransDeletedId] [int] NULL, CONSTRAINT [PK_TsDynDataZone] PRIMARY KEY CLUSTERED ( [ZoneId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; SET IDENTITY_INSERT [dbo].[TsDynDataApp] ON; INSERT [dbo].[TsDynDataApp] ([AppId], [ZoneId], [Name], [SysSettings], [TransCreatedId], [TransModifiedId], [TransDeletedId]) VALUES (1, 1, N'Default', NULL, NULL, NULL, NULL); SET IDENTITY_INSERT [dbo].[TsDynDataApp] OFF; INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Boolean'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Custom'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'DateTime'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Empty'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Entity'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Hyperlink'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'Number'); INSERT [dbo].[TsDynDataAttributeType] ([Type]) VALUES (N'String'); SET IDENTITY_INSERT [dbo].[TsDynDataContentType] ON; INSERT [dbo].[TsDynDataContentType] ([ContentTypeId], [StaticName], [Name], [Scope], [TransCreatedId], [TransDeletedId], [AppId], [InheritContentTypeId], [IsGlobal], [Json], [SysSettings], [TransModifiedId]) VALUES (1, N'Default', N'Default (built in)', N'2SexyContent-System', 1, NULL, 1, NULL, 1, NULL, NULL, NULL); SET IDENTITY_INSERT [dbo].[TsDynDataContentType] OFF; SET IDENTITY_INSERT [dbo].[TsDynDataDimension] ON; INSERT [dbo].[TsDynDataDimension] ([DimensionId], [Parent], [Name], [SystemKey], [ExternalKey], [Active], [ZoneId]) VALUES (1, NULL, N'Culture Root', N'Culture', NULL, 1, 1); SET IDENTITY_INSERT [dbo].[TsDynDataDimension] OFF; SET IDENTITY_INSERT [dbo].[TsDynDataTargetType] ON; INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (1, N'Default', N'Default'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (2, N'EAV Field Properties', N'EAV Field Properties'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (3, N'App', N'App'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (4, N'Entity', N'For Permissions, Data Pipelines with Pipeline Parts and Configurations'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (5, N'ContentType', N'Metadata for ContentTypes'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (6, N'Zone', N'Metadata for Zone'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (7, N'Scope', N'Metadata for Scope'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (8, N'Dimension', N'Metadata for Dimension'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (9, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (10, N'CmsObject', N'References to CMS objects like files and pages'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (11, N'System', N'Metadata for System'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (12, N'Site', N'Metadata for Site'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (13, N'SiteVariant', N'Metadata for SiteVariant'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (14, N'Page', N'Metadata for Page'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (15, N'PageVariant', N'Metadata for PageVariant'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (16, N'Module', N'Metadata for Module'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (17, N'ModuleVariant', N'Metadata for ModuleVariant'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (18, N'User', N'Metadata for User'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (19, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (20, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (21, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (22, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (23, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (24, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (25, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (26, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (27, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (28, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (29, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (30, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (31, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (32, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (33, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (34, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (35, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (36, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (37, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (38, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (39, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (40, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (41, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (42, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (43, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (44, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (45, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (46, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (47, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (48, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (49, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (50, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (51, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (52, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (53, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (54, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (55, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (56, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (57, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (58, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (59, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (60, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (61, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (62, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (63, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (64, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (65, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (66, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (67, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (68, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (69, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (70, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (71, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (72, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (73, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (74, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (75, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (76, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (77, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (78, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (79, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (80, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (81, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (82, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (83, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (84, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (85, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (86, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (87, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (88, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (89, N'Reserved', N'Reserved'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (90, N'Custom', N'Custom'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (91, N'Custom1', N'Custom1'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (92, N'Custom2', N'Custom2'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (93, N'Custom3', N'Custom3'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (94, N'Custom4', N'Custom4'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (95, N'Custom5', N'Custom5'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (96, N'Custom6', N'Custom6'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (97, N'Custom7', N'Custom7'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (98, N'Custom8', N'Custom8'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (99, N'Custom9', N'Custom9'); INSERT [dbo].[TsDynDataTargetType] ([TargetTypeId], [Name], [Description]) VALUES (100, N'Reserved', N'Reserved'); SET IDENTITY_INSERT [dbo].[TsDynDataTargetType] OFF; SET IDENTITY_INSERT [dbo].[TsDynDataTransaction] ON; INSERT [dbo].[TsDynDataTransaction] ([TransactionId], [Timestamp], [User]) VALUES (1, CAST(N'2012-05-02T08:31:35.297' AS DateTime), NULL); INSERT [dbo].[TsDynDataTransaction] ([TransactionId], [Timestamp], [User]) VALUES (100, CAST(N'2020-10-20T00:00:00.000' AS DateTime), NULL); SET IDENTITY_INSERT [dbo].[TsDynDataTransaction] OFF; SET IDENTITY_INSERT [dbo].[TsDynDataZone] ON ; INSERT [dbo].[TsDynDataZone] ([ZoneId], [Name], [TransCreatedId], [TransModifiedId], [TransDeletedId]) VALUES (1, N'Default', NULL, NULL, NULL); SET IDENTITY_INSERT [dbo].[TsDynDataZone] OFF; SET ANSI_PADDING ON; /****** Object: Index [UQ_TsDynDataApp_Name_ZoneId] Script Date: 15.5.2025. 13:42:08 ******/ ALTER TABLE [dbo].[TsDynDataApp] ADD CONSTRAINT [UQ_TsDynDataApp_Name_ZoneId] UNIQUE NONCLUSTERED ( [Name] ASC, [ZoneId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataApp_TransCreatedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransCreatedId] ON [dbo].[TsDynDataApp] ( [TransCreatedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataApp_TransDeletedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransDeletedId] ON [dbo].[TsDynDataApp] ( [TransDeletedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataApp_TransModifiedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransModifiedId] ON [dbo].[TsDynDataApp] ( [TransModifiedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataApp_ZoneId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_ZoneId] ON [dbo].[TsDynDataApp] ( [ZoneId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataAttribute_AttributeId_StaticName] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_AttributeId_StaticName] ON [dbo].[TsDynDataAttribute] ( [AttributeId] ASC ) INCLUDE([StaticName]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataAttribute_ContentTypeId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_ContentTypeId] ON [dbo].[TsDynDataAttribute] ( [ContentTypeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataAttribute_TransCreatedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_TransCreatedId] ON [dbo].[TsDynDataAttribute] ( [TransCreatedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataAttribute_TransDeletedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_TransDeletedId] ON [dbo].[TsDynDataAttribute] ( [TransDeletedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataAttribute_TransModifiedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_TransModifiedId] ON [dbo].[TsDynDataAttribute] ( [TransModifiedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataContentType_AppId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_AppId] ON [dbo].[TsDynDataContentType] ( [AppId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataContentType_TransCreatedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_TransCreatedId] ON [dbo].[TsDynDataContentType] ( [TransCreatedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataContentType_TransDeletedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_TransDeletedId] ON [dbo].[TsDynDataContentType] ( [TransDeletedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataContentType_TransModifiedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_TransModifiedId] ON [dbo].[TsDynDataContentType] ( [TransModifiedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataDimension_ZoneId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataDimension_ZoneId] ON [dbo].[TsDynDataDimension] ( [ZoneId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_AppId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_AppId] ON [dbo].[TsDynDataEntity] ( [AppId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_ContentTypeId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_ContentTypeId] ON [dbo].[TsDynDataEntity] ( [ContentTypeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_KeyNumber] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_KeyNumber] ON [dbo].[TsDynDataEntity] ( [KeyNumber] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_TargetTypeId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_TargetTypeId] ON [dbo].[TsDynDataEntity] ( [TargetTypeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_TransCreatedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_TransCreatedId] ON [dbo].[TsDynDataEntity] ( [TransCreatedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_TransDeletedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_TransDeletedId] ON [dbo].[TsDynDataEntity] ( [TransDeletedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataEntity_TransModifiedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataEntity_TransModifiedId] ON [dbo].[TsDynDataEntity] ( [TransModifiedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataHistory_SourceGuid] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_SourceGuid] ON [dbo].[TsDynDataHistory] ( [SourceGuid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataHistory_SourceId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_SourceId] ON [dbo].[TsDynDataHistory] ( [SourceId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataHistory_TransactionId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_TransactionId] ON [dbo].[TsDynDataHistory] ( [TransactionId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataRelationship_ChildEntityId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataRelationship_ChildEntityId] ON [dbo].[TsDynDataRelationship] ( [ChildEntityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataRelationship_ParentEntityId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataRelationship_ParentEntityId] ON [dbo].[TsDynDataRelationship] ( [ParentEntityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; SET ANSI_PADDING ON; /****** Object: Index [IX_TsDynDataTargetType_Name] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataTargetType_Name] ON [dbo].[TsDynDataTargetType] ( [Name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataValue_AttributeId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_AttributeId] ON [dbo].[TsDynDataValue] ( [AttributeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataValue_AttributeId_EntityId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_AttributeId_EntityId] ON [dbo].[TsDynDataValue] ( [AttributeId] ASC, [EntityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataValue_EntityId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_EntityId] ON [dbo].[TsDynDataValue] ( [EntityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value] ON [dbo].[TsDynDataValue] ( [EntityId] ASC, [AttributeId] ASC, [ValueId] ASC ) INCLUDE([Value]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataZone_TransCreatedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransCreatedId] ON [dbo].[TsDynDataZone] ( [TransCreatedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataZone_TransDeletedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransDeletedId] ON [dbo].[TsDynDataZone] ( [TransDeletedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; /****** Object: Index [IX_TsDynDataZone_TransModifiedId] Script Date: 15.5.2025. 13:42:08 ******/ CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransModifiedId] ON [dbo].[TsDynDataZone] ( [TransModifiedId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; ALTER TABLE [dbo].[TsDynDataAttribute] ADD CONSTRAINT [DF_TsDynDataAttribute_ContentTypeId] DEFAULT ((0)) FOR [ContentTypeId]; ALTER TABLE [dbo].[TsDynDataAttribute] ADD CONSTRAINT [DF_TsDynDataAttribute_SortOrder] DEFAULT ((0)) FOR [SortOrder]; ALTER TABLE [dbo].[TsDynDataAttribute] ADD CONSTRAINT [DF_TsDynDataAttribute_IsTitle] DEFAULT ((0)) FOR [IsTitle]; ALTER TABLE [dbo].[TsDynDataContentType] ADD CONSTRAINT [DF_TsDynDataContentType_StaticName] DEFAULT (newid()) FOR [StaticName]; ALTER TABLE [dbo].[TsDynDataContentType] ADD CONSTRAINT [DF_TsDynDataContentType_IsGlobal] DEFAULT ((0)) FOR [IsGlobal]; ALTER TABLE [dbo].[TsDynDataDimension] ADD CONSTRAINT [DF_TsDynDataDimension_Active] DEFAULT ((1)) FOR [Active]; ALTER TABLE [dbo].[TsDynDataEntity] ADD CONSTRAINT [DF_TsDynDataEntity_EntityGuid] DEFAULT (newid()) FOR [EntityGuid]; ALTER TABLE [dbo].[TsDynDataEntity] ADD CONSTRAINT [DF_TsDynDataEntity_IsPublished] DEFAULT ((1)) FOR [IsPublished]; ALTER TABLE [dbo].[TsDynDataHistory] ADD CONSTRAINT [DF_TsDynDataHistory_Operation] DEFAULT (N'I') FOR [Operation]; ALTER TABLE [dbo].[TsDynDataTransaction] ADD CONSTRAINT [DF_TsDynDataTransaction_Timestamp] DEFAULT (getutcdate()) FOR [Timestamp]; ALTER TABLE [dbo].[TsDynDataValueDimension] ADD CONSTRAINT [DF_TsDynDataValueDimension_ReadOnly] DEFAULT ((0)) FOR [ReadOnly]; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionCreated] FOREIGN KEY([TransCreatedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionCreated]; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionDeleted] FOREIGN KEY([TransDeletedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionDeleted]; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionModified] FOREIGN KEY([TransModifiedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionModified]; ALTER TABLE [dbo].[TsDynDataApp] WITH CHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataZone] FOREIGN KEY([ZoneId]) REFERENCES [dbo].[TsDynDataZone] ([ZoneId]); ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataZone]; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataAttributeType] FOREIGN KEY([Type]) REFERENCES [dbo].[TsDynDataAttributeType] ([Type]); ALTER TABLE [dbo].[TsDynDataAttribute] CHECK CONSTRAINT [FK_TsDynDataAttribute_TsDynDataAttributeType]; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataContentType] FOREIGN KEY([ContentTypeId]) REFERENCES [dbo].[TsDynDataContentType] ([ContentTypeId]); ALTER TABLE [dbo].[TsDynDataAttribute] CHECK CONSTRAINT [FK_TsDynDataAttribute_TsDynDataContentType]; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionCreated] FOREIGN KEY([TransCreatedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataAttribute] CHECK CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionCreated]; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionDeleted] FOREIGN KEY([TransDeletedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataAttribute] CHECK CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionDeleted]; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionModified] FOREIGN KEY([TransModifiedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataAttribute] CHECK CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionModified]; ALTER TABLE [dbo].[TsDynDataContentType] WITH CHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataApp] FOREIGN KEY([AppId]) REFERENCES [dbo].[TsDynDataApp] ([AppId]); ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataApp]; ALTER TABLE [dbo].[TsDynDataContentType] WITH CHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataContentType] FOREIGN KEY([InheritContentTypeId]) REFERENCES [dbo].[TsDynDataContentType] ([ContentTypeId]); ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataContentType]; ALTER TABLE [dbo].[TsDynDataContentType] WITH CHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionCreated] FOREIGN KEY([TransCreatedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionCreated]; ALTER TABLE [dbo].[TsDynDataContentType] WITH CHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionDeleted] FOREIGN KEY([TransDeletedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionDeleted]; ALTER TABLE [dbo].[TsDynDataContentType] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionModified] FOREIGN KEY([TransModifiedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionModified]; ALTER TABLE [dbo].[TsDynDataDimension] WITH CHECK ADD CONSTRAINT [FK_TsDynDataDimension_TsDynDataDimension] FOREIGN KEY([Parent]) REFERENCES [dbo].[TsDynDataDimension] ([DimensionId]); ALTER TABLE [dbo].[TsDynDataDimension] CHECK CONSTRAINT [FK_TsDynDataDimension_TsDynDataDimension]; ALTER TABLE [dbo].[TsDynDataDimension] WITH CHECK ADD CONSTRAINT [FK_TsDynDataDimension_TsDynDataZone] FOREIGN KEY([ZoneId]) REFERENCES [dbo].[TsDynDataZone] ([ZoneId]); ALTER TABLE [dbo].[TsDynDataDimension] CHECK CONSTRAINT [FK_TsDynDataDimension_TsDynDataZone]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataApp] FOREIGN KEY([AppId]) REFERENCES [dbo].[TsDynDataApp] ([AppId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataApp]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataContentType] FOREIGN KEY([ContentTypeId]) REFERENCES [dbo].[TsDynDataContentType] ([ContentTypeId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataContentType]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataTargetType] FOREIGN KEY([TargetTypeId]) REFERENCES [dbo].[TsDynDataTargetType] ([TargetTypeId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataTargetType]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionCreated] FOREIGN KEY([TransCreatedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionCreated]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionDeleted] FOREIGN KEY([TransDeletedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionDeleted]; ALTER TABLE [dbo].[TsDynDataEntity] WITH CHECK ADD CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionModified] FOREIGN KEY([TransModifiedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataEntity] CHECK CONSTRAINT [FK_TsDynDataEntity_TsDynDataTransactionModified]; ALTER TABLE [dbo].[TsDynDataHistory] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataHistory_TsDynDataTransaction] FOREIGN KEY([TransactionId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataHistory] CHECK CONSTRAINT [FK_TsDynDataHistory_TsDynDataTransaction]; ALTER TABLE [dbo].[TsDynDataRelationship] WITH CHECK ADD CONSTRAINT [FK_TsDynDataRelationship_TsDynDataAttribute] FOREIGN KEY([AttributeId]) REFERENCES [dbo].[TsDynDataAttribute] ([AttributeId]) ON DELETE CASCADE; ALTER TABLE [dbo].[TsDynDataRelationship] CHECK CONSTRAINT [FK_TsDynDataRelationship_TsDynDataAttribute]; ALTER TABLE [dbo].[TsDynDataRelationship] WITH CHECK ADD CONSTRAINT [FK_TsDynDataRelationship_TsDynDataEntityChild] FOREIGN KEY([ChildEntityId]) REFERENCES [dbo].[TsDynDataEntity] ([EntityId]); ALTER TABLE [dbo].[TsDynDataRelationship] CHECK CONSTRAINT [FK_TsDynDataRelationship_TsDynDataEntityChild]; ALTER TABLE [dbo].[TsDynDataRelationship] WITH CHECK ADD CONSTRAINT [FK_TsDynDataRelationship_TsDynDataEntityParent] FOREIGN KEY([ParentEntityId]) REFERENCES [dbo].[TsDynDataEntity] ([EntityId]); ALTER TABLE [dbo].[TsDynDataRelationship] CHECK CONSTRAINT [FK_TsDynDataRelationship_TsDynDataEntityParent]; ALTER TABLE [dbo].[TsDynDataValue] WITH CHECK ADD CONSTRAINT [FK_TsDynDataValue_TsDynDataAttribute] FOREIGN KEY([AttributeId]) REFERENCES [dbo].[TsDynDataAttribute] ([AttributeId]) ON DELETE CASCADE; ALTER TABLE [dbo].[TsDynDataValue] CHECK CONSTRAINT [FK_TsDynDataValue_TsDynDataAttribute]; ALTER TABLE [dbo].[TsDynDataValue] WITH CHECK ADD CONSTRAINT [FK_TsDynDataValue_TsDynDataEntity] FOREIGN KEY([EntityId]) REFERENCES [dbo].[TsDynDataEntity] ([EntityId]); ALTER TABLE [dbo].[TsDynDataValue] CHECK CONSTRAINT [FK_TsDynDataValue_TsDynDataEntity]; ALTER TABLE [dbo].[TsDynDataValueDimension] WITH CHECK ADD CONSTRAINT [FK_TsDynDataValueDimension_TsDynDataDimension] FOREIGN KEY([DimensionId]) REFERENCES [dbo].[TsDynDataDimension] ([DimensionId]); ALTER TABLE [dbo].[TsDynDataValueDimension] CHECK CONSTRAINT [FK_TsDynDataValueDimension_TsDynDataDimension]; ALTER TABLE [dbo].[TsDynDataValueDimension] WITH CHECK ADD CONSTRAINT [FK_TsDynDataValueDimension_TsDynDataValue] FOREIGN KEY([ValueId]) REFERENCES [dbo].[TsDynDataValue] ([ValueId]); ALTER TABLE [dbo].[TsDynDataValueDimension] CHECK CONSTRAINT [FK_TsDynDataValueDimension_TsDynDataValue]; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionCreated] FOREIGN KEY([TransCreatedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionCreated]; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionDeleted] FOREIGN KEY([TransDeletedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionDeleted]; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionModified] FOREIGN KEY([TransModifiedId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionModified]; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/16.07.01.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO DECLARE @upgradeVersion NVARCHAR(20) = '16.07.01', @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2SexyContent'), '99.99.99' ) -- skip further execution if installedVersion > upgradeVersion IF ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 1) AS INT) ) ) ) ) RETURN; -- if the installed version is older than the upgrade version, then we can continue with the upgrade PRINT N'Upgrading 2sxc from version ' + @installedVersion + ' to ' + @upgradeVersion; -- check for minimum required version of 2sxc package DECLARE @RequiredVersion int, @RequiredVersionIsInstalled int; SET @RequiredVersion = 15; SELECT @RequiredVersionIsInstalled = CASE WHEN EXISTS( SELECT 1 FROM Packages WHERE [Name] = N'2SexyContent' AND CONVERT(int, PARSENAME([Version], 3)) >= @RequiredVersion ) THEN 1 ELSE 0 END IF (@RequiredVersionIsInstalled = 0) BEGIN RAISERROR(N'2sxc 15 or newer must be installed for the app module to install.', 16, 1); RETURN; END -- add [Guid], [SysSettings] columns to 'ToSIC_EAV_Attributes' IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'Guid' AND Object_ID = OBJECT_ID('ToSIC_EAV_Attributes')) BEGIN ALTER TABLE [dbo].[ToSIC_EAV_Attributes] ADD [Guid] uniqueidentifier NULL, [SysSettings] nvarchar(MAX) NULL; END -- add [SysSettings] column to 'ToSIC_EAV_AttributeSets' IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'SysSettings' AND Object_ID = OBJECT_ID('ToSIC_EAV_AttributeSets')) BEGIN ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] ADD [SysSettings] nvarchar(MAX) NULL; END GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/18.03.00.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO DECLARE @upgradeVersion NVARCHAR(20) = '18.03.00', @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2SexyContent'), '99.99.99' ) -- skip further execution if installedVersion > upgradeVersion IF ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 1) AS INT) ) ) ) ) RETURN; -- if the installed version is older than the upgrade version, then we can continue with the upgrade PRINT N'Upgrading 2sxc from version ' + @installedVersion + ' to ' + @upgradeVersion; -- check for minimum required version of 2sxc package DECLARE @RequiredVersion int, @RequiredVersionIsInstalled int; SET @RequiredVersion = 15; SELECT @RequiredVersionIsInstalled = CASE WHEN EXISTS( SELECT 1 FROM Packages WHERE [Name] = N'2SexyContent' AND CONVERT(int, PARSENAME([Version], 3)) >= @RequiredVersion ) THEN 1 ELSE 0 END IF (@RequiredVersionIsInstalled = 0) BEGIN RAISERROR(N'2sxc 15 or newer must be installed for the app module to install.', 16, 1); RETURN; END -- Remove AttributeGroups SQL table and related: -- Drop the foreign key constraint before dropping the column. ALTER TABLE [dbo].[ToSIC_EAV_AttributesInSets] DROP CONSTRAINT IF EXISTS [FK_ToSIC_EAV_AttributesInSets_ToSIC_EAV_AttributeGroups]; -- Now it's safe to drop the column. ALTER TABLE [dbo].[ToSIC_EAV_AttributesInSets] DROP COLUMN IF EXISTS [AttributeGroupID]; -- Drop the foreign key constraint in another table before dropping the table. ALTER TABLE [dbo].[ToSIC_EAV_AttributeGroups] DROP CONSTRAINT IF EXISTS [FK_ToSIC_EAV_AttributeGroups_ToSIC_EAV_AttributeSets]; -- Now it's safe to drop the table. DROP TABLE IF EXISTS [dbo].[ToSIC_EAV_AttributeGroups]; GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/19.00.00.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO DECLARE @upgradeVersion NVARCHAR(20) = '19.00.00', @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2SexyContent'), '99.99.99' ) -- skip further execution if installedVersion > upgradeVersion IF ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 1) AS INT) ) ) ) ) RETURN; -- if the installed version is older than the upgrade version, then we can continue with the upgrade PRINT N'Upgrading 2sxc from version ' + @installedVersion + ' to ' + @upgradeVersion; -- check for minimum required version of 2sxc package DECLARE @RequiredVersion int, @RequiredVersionIsInstalled int; SET @RequiredVersion = 15; SELECT @RequiredVersionIsInstalled = CASE WHEN EXISTS( SELECT 1 FROM Packages WHERE [Name] = N'2SexyContent' AND CONVERT(int, PARSENAME([Version], 3)) >= @RequiredVersion ) THEN 1 ELSE 0 END IF (@RequiredVersionIsInstalled = 0) BEGIN RAISERROR(N'2sxc 15 or newer must be installed for the app module to install.', 16, 1); RETURN; END -- Drop the existing foreign key constraint ALTER TABLE [dbo].[ToSIC_EAV_EntityRelationships] DROP CONSTRAINT IF EXISTS [FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes]; -- Add the foreign key constraint with ON DELETE CASCADE ALTER TABLE [dbo].[ToSIC_EAV_EntityRelationships] ADD CONSTRAINT [FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes] FOREIGN KEY ([AttributeID]) REFERENCES [dbo].[ToSIC_EAV_Attributes] ([AttributeID]) ON UPDATE NO ACTION ON DELETE CASCADE; GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/20.00.00.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO DECLARE @upgradeVersion NVARCHAR(20) = REPLACE('20-00-00','-','.'), @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2SexyContent'), '99.99.99' ) -- skip further execution if installedVersion > upgradeVersion IF ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) = TRY_CAST(PARSENAME(@upgradeVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) > TRY_CAST(PARSENAME(@upgradeVersion, 1) AS INT) ) ) ) ) RETURN; -- continue if installedVersion <= upgradeVersion -- if the installed version is older than the upgrade version, then we can continue with the upgrade PRINT N'Upgrading 2sxc from version ' + @installedVersion + ' to ' + @upgradeVersion; -- check for minimum required version of 2sxc package DECLARE @RequiredVersion int, @RequiredVersionIsInstalled int; SET @RequiredVersion = 15; SELECT @RequiredVersionIsInstalled = CASE WHEN EXISTS( SELECT 1 FROM Packages WHERE [Name] = N'2SexyContent' AND CONVERT(int, PARSENAME([Version], 3)) >= @RequiredVersion ) THEN 1 ELSE 0 END IF (@RequiredVersionIsInstalled = 0) BEGIN RAISERROR(N'2sxc 15 or newer must be installed for the app module to install.', 16, 1); RETURN; END PRINT '*** Starting migration script.'; -- Preflight check 1: Ensure no AttributeID appears more than once in ToSIC_EAV_AttributesInSets IF OBJECT_ID('[dbo].[ToSIC_EAV_AttributesInSets]', 'U') IS NOT NULL BEGIN PRINT 'Running Preflight check 1: Checking for duplicate AttributeIDs in ToSIC_EAV_AttributesInSets'; IF EXISTS ( SELECT AttributeID FROM [dbo].[ToSIC_EAV_AttributesInSets] GROUP BY AttributeID HAVING COUNT(*) > 1 ) BEGIN RAISERROR(N'Preflight check failed: Duplicate AttributeID found in ToSIC_EAV_AttributesInSets. Migration stopped.', 16, 1); RETURN; END END -- Preflight check 2: Remove orphaned Attributes and related data IF OBJECT_ID('[dbo].[ToSIC_EAV_AttributesInSets]', 'U') IS NOT NULL BEGIN PRINT 'Running Preflight check 2: Removing orphaned Attributes and related data'; -- 2.1 Find orphaned AttributeIDs PRINT '... Finding orphaned AttributeIDs'; DECLARE @OrphanedAttributes TABLE (AttributeID INT); INSERT INTO @OrphanedAttributes (AttributeID) SELECT a.AttributeID FROM [dbo].[ToSIC_EAV_Attributes] a LEFT JOIN [dbo].[ToSIC_EAV_AttributesInSets] ais ON a.AttributeID = ais.AttributeID WHERE ais.AttributeID IS NULL; -- 2.2 Find ValueIDs related to orphaned AttributeIDs PRINT '... Finding related ValueIDs'; DECLARE @OrphanedValueIDs TABLE (ValueID INT); INSERT INTO @OrphanedValueIDs (ValueID) SELECT v.ValueID FROM [dbo].[ToSIC_EAV_Values] v INNER JOIN @OrphanedAttributes oa ON v.AttributeID = oa.AttributeID; -- 2.3 Delete from ToSIC_EAV_ValuesDimensions (child of Values) PRINT '... Deleting orphaned ValuesDimensions'; DELETE vd FROM [dbo].[ToSIC_EAV_ValuesDimensions] vd INNER JOIN @OrphanedValueIDs ov ON vd.ValueID = ov.ValueID; -- 2.4 Delete from ToSIC_EAV_Values (child of Attributes) PRINT '... Deleting orphaned Values'; DELETE v FROM [dbo].[ToSIC_EAV_Values] v INNER JOIN @OrphanedValueIDs ov ON v.ValueID = ov.ValueID; -- 2.5 Delete from ToSIC_EAV_EntityRelationships (child of Attributes) PRINT '... Deleting orphaned EntityRelationships'; DELETE er FROM [dbo].[ToSIC_EAV_EntityRelationships] er INNER JOIN @OrphanedAttributes oa ON er.AttributeID = oa.AttributeID; -- 2.6 Delete orphaned Attributes PRINT '... Deleting orphaned Attributes'; DELETE a FROM [dbo].[ToSIC_EAV_Attributes] a INNER JOIN @OrphanedAttributes oa ON a.AttributeID = oa.AttributeID; END PRINT '1. Upgrade script started.'; -- 1.1. Add new columns to ToSIC_EAV_Attributes if they do not exist yet. PRINT '... 1.1. Adding new columns (ContentTypeId, SortOrder, IsTitle) to ToSIC_EAV_Attributes'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] ADD [ContentTypeId] [int] NOT NULL CONSTRAINT DF_ToSIC_EAV_Attributes_ContentTypeId DEFAULT (0), [SortOrder] [int] NOT NULL CONSTRAINT DF_ToSIC_EAV_Attributes_SortOrder DEFAULT (0), [IsTitle] [bit] NOT NULL CONSTRAINT DF_ToSIC_EAV_Attributes_IsTitle DEFAULT (0); -- 1.2. Migrate data from ToSIC_EAV_AttributesInSets to new columns in ToSIC_EAV_Attributes IF OBJECT_ID('[dbo].[ToSIC_EAV_AttributesInSets]', 'U') IS NOT NULL BEGIN PRINT '... 1.2. Migrating data from ToSIC_EAV_AttributesInSets to ToSIC_EAV_Attributes'; -- Keep EXEC statement, since before the EXEC statement below runs any schema changes are in effect. EXEC(' UPDATE a SET a.ContentTypeId = ais.AttributeSetID, a.SortOrder = ais.SortOrder, a.IsTitle = ais.IsTitle FROM [dbo].[ToSIC_EAV_Attributes] a INNER JOIN [dbo].[ToSIC_EAV_AttributesInSets] ais ON a.AttributeID = ais.AttributeID; '); END -- 1.3. Add Index on ContentTypeId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_ContentTypeId' AND Object_ID = OBJECT_ID('ToSIC_EAV_Attributes')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL BEGIN PRINT '... 1.3. Adding index IX_ToSIC_EAV_Attributes_ContentTypeId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Attributes_ContentTypeId] ON [dbo].[ToSIC_EAV_Attributes] ([ContentTypeId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 1.4. Add foreign key constraint from ContentTypeId to AttributeSets.AttributeSetID IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets') AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 1.4. Adding foreign key FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] ADD CONSTRAINT FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets FOREIGN KEY ([ContentTypeId]) REFERENCES [dbo].[ToSIC_EAV_AttributeSets] ([AttributeSetID]); END -- 2. Remove Stored Procedures and Tables PRINT '2. Removing obsolete Stored Procedures and Tables'; IF OBJECT_ID('[dbo].[ToSIC_EAV_ChangeLogSet]', 'P') IS NOT NULL BEGIN PRINT '... 2.1. Removing obsolete Stored Procedures'; DROP PROCEDURE IF EXISTS [dbo].[ToSIC_EAV_ChangeLogSet]; DROP PROCEDURE IF EXISTS [dbo].[ToSIC_EAV_ChangeLogGet]; DROP PROCEDURE IF EXISTS [dbo].[ToSIC_EAV_ChangeLogAdd]; DROP PROCEDURE IF EXISTS [dbo].[ToSIC_EAV_DeleteApp]; END -- Remove Tables IF OBJECT_ID('[dbo].[ToSIC_EAV_ContextInfo]', 'U') IS NOT NULL BEGIN PRINT '... 2.2. Removing obsolete Tables'; DROP TABLE IF EXISTS [dbo].[ToSIC_EAV_ContextInfo]; DROP TABLE IF EXISTS [dbo].[ToSIC_EAV_AttributesInSets]; END -- *** 3. Rename AssignmentObjectTypes to TsDynDataTargetType PRINT '3. Renaming table ToSIC_EAV_AssignmentObjectTypes to TsDynDataTargetType and related objects'; -- 3.1. Rename the table IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_AssignmentObjectTypes' AND type = 'U') BEGIN PRINT '... 3.1. Renaming table ToSIC_EAV_AssignmentObjectTypes to TsDynDataTargetType'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AssignmentObjectTypes]', N'TsDynDataTargetType'; END -- 3.2. Rename the primary key column IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AssignmentObjectTypeID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataTargetType]')) BEGIN PRINT '... 3.2. Renaming column AssignmentObjectTypeID to TargetTypeId in TsDynDataTargetType'; EXEC sp_rename N'[dbo].[TsDynDataTargetType].[AssignmentObjectTypeID]', N'TargetTypeId', N'COLUMN'; END -- 3.3. Rename the primary key constraint IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_AssignmentObjectTypes' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataTargetType]')) BEGIN PRINT '... 3.3.Renaming PK_ToSIC_EAV_AssignmentObjectTypes to PK_TsDynDataTargetType'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_AssignmentObjectTypes]', N'PK_TsDynDataTargetType', N'OBJECT'; END -- 3.4. Rename the index IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AssignmentObjectTypes') BEGIN PRINT '... 3.4. Renaming index IX_ToSIC_EAV_AssignmentObjectTypes to IX_TsDynDataTargetType_Name'; EXEC sp_rename N'[dbo].[TsDynDataTargetType].[IX_ToSIC_EAV_AssignmentObjectTypes]', N'IX_TsDynDataTargetType_Name', N'INDEX'; END -- 3.5. Rename the foreign key column in the referencing table (ToSIC_EAV_Entities) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AssignmentObjectTypeID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 3.5.Renaming column AssignmentObjectTypeID to TargetTypeId in ToSIC_EAV_Entities'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[AssignmentObjectTypeID]', N'TargetTypeId', N'COLUMN'; END -- 3.6. Rename foreign key constraint on ToSIC_EAV_Entities IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_AssignmentObjectTypes') BEGIN PRINT '... 3.6. Rename FK_ToSIC_EAV_Entities_ToSIC_EAV_AssignmentObjectTypes'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_AssignmentObjectTypes]', N'FK_ToSIC_EAV_Entities_TsDynDataTargetType', N'OBJECT'; END -- 3.7. Add Index on TargetTypeId if it doesn't exist IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TargetTypeId' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Entities]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 3.7. Adding index IX_ToSIC_EAV_Entities_TargetTypeId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_TargetTypeId] ON [dbo].[ToSIC_EAV_Entities] ([TargetTypeId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 3.8. Recreate the foreign key constraint on ToSIC_EAV_Entities with the new names IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTargetType') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 3.8. Recreating foreign key FK_ToSIC_EAV_Entities_TsDynDataTargetType'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTargetType] FOREIGN KEY([TargetTypeId]) REFERENCES [dbo].[TsDynDataTargetType] ([TargetTypeId]); END -- 3.9. Check the constraint FK_ToSIC_EAV_Entities_TsDynDataTargetType IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTargetType') BEGIN PRINT '... 3.9. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataTargetType'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTargetType]; END -- *** 4. Rename ToSIC_EAV_ChangeLog to TsDynDataTransaction PRINT '4. Renaming table ToSIC_EAV_ChangeLog to TsDynDataTransaction and related objects'; -- 4.1. Rename the table IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_ChangeLog' AND type = 'U') BEGIN PRINT '... 4.1. Renaming table ToSIC_EAV_ChangeLog to TsDynDataTransaction'; EXEC sp_rename N'[dbo].[ToSIC_EAV_ChangeLog]', N'TsDynDataTransaction'; END -- 4.2. Rename the primary key column in the renamed table IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataTransaction]')) BEGIN PRINT '... 4.2. Renaming column ChangeID to TransactionId in TsDynDataTransaction'; EXEC sp_rename N'[dbo].[TsDynDataTransaction].[ChangeID]', N'TransactionId', N'COLUMN'; END -- 4.3. Rename the primary key constraint IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_ChangeLog' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataTransaction]')) BEGIN PRINT '... 4.3. Renaming PK_ToSIC_EAV_ChangeLog to PK_TsDynDataTransaction'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_ChangeLog]', N'PK_TsDynDataTransaction', N'OBJECT'; END -- 4.4. Rename the default constraint for the Timestamp column IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_ChangeLog_Timestamp' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataTransaction]')) BEGIN PRINT '... 4.4. Renaming default constraint DF_ToSIC_EAV_ChangeLog_Timestamp'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_ChangeLog_Timestamp]', N'DF_TsDynDataTransaction_Timestamp', N'OBJECT'; END -- 4.5. Rename the foreign key column ChangeLogCreated in the referencing table (ToSIC_EAV_Attributes) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogCreated' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Attributes]')) BEGIN PRINT '... 4.5. Renaming ChangeLogCreated columns in ToSIC_EAV_Attributes'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Attributes].[ChangeLogCreated]', N'TransactionIdCreated', N'COLUMN'; END -- 4.6. Rename the foreign key column ChangeLogDeleted in the referencing table (ToSIC_EAV_Attributes) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogDeleted' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Attributes]')) BEGIN PRINT '... 4.6. Renaming ChangeLogDeleted columns in ToSIC_EAV_Attributes'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Attributes].[ChangeLogDeleted]', N'TransactionIdDeleted', N'COLUMN'; END -- 4.7. Rename the foreign key column ChangeLogCreated in the referencing table (ToSIC_EAV_AttributeSets) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogCreated' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_AttributeSets]')) BEGIN PRINT '... 4.7. Renaming ChangeLogCreated columns in ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AttributeSets].[ChangeLogCreated]', N'TransactionIdCreated', N'COLUMN'; END -- 4.8. Rename the foreign key column ChangeLogDeleted in the referencing table (ToSIC_EAV_AttributeSets) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogDeleted' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_AttributeSets]')) BEGIN PRINT '... 4.8. Renaming ChangeLogDeleted columns in ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AttributeSets].[ChangeLogDeleted]', N'TransactionIdDeleted', N'COLUMN'; END -- 4.9. Rename the foreign key column ChangeLogCreated in the referencing table (ToSIC_EAV_Entities) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogCreated' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 4.9. Renaming ChangeLogCreated columns in ToSIC_EAV_Entities'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[ChangeLogCreated]', N'TransactionIdCreated', N'COLUMN'; END -- 4.10. Rename the foreign key column ChangeLogModified in the referencing table (ToSIC_EAV_Entities) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogModified' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 4.10. Renaming ChangeLogModified columns in ToSIC_EAV_Entities'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[ChangeLogModified]', N'TransactionIdModified', N'COLUMN'; END -- 4.11. Rename the foreign key column ChangeLogDeleted in the referencing table (ToSIC_EAV_Entities) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogDeleted' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 4.11. Renaming ChangeLogDeleted columns in ToSIC_EAV_Entities'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[ChangeLogDeleted]', N'TransactionIdDeleted', N'COLUMN'; END -- 4.12. Rename the foreign key column ChangeLogCreated in the referencing table (ToSIC_EAV_Values) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogCreated' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 4.12. Renaming ChangeLogCreated columns in ToSIC_EAV_Values'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values].[ChangeLogCreated]', N'TransactionIdCreated', N'COLUMN'; END -- 4.12b. Rename the foreign key column ChangeLogModified in the referencing table (ToSIC_EAV_Values) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogModified' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 4.12b. Renaming ChangeLogModified columns in ToSIC_EAV_Values'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values].[ChangeLogModified]', N'TransactionIdModified', N'COLUMN'; END -- 4.14. Rename the foreign key column ChangeLogDeleted in the referencing table (ToSIC_EAV_Values) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChangeLogDeleted' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 4.14. Renaming ChangeLogDeleted columns in ToSIC_EAV_Values'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values].[ChangeLogDeleted]', N'TransactionIdDeleted', N'COLUMN'; END -- 4.15. Rename the foreign key constraint FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogCreated') BEGIN PRINT '... 4.15. Rename the foreign key constraint FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogCreated]', N'FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated', N'OBJECT'; END -- 4.16. Add Index on IX_ToSIC_EAV_Attributes_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL BEGIN PRINT '... 4.16. Adding index IX_ToSIC_EAV_Attributes_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Attributes_TransactionIdCreated] ON [dbo].[ToSIC_EAV_Attributes] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.17. Create the foreign key constraint FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL BEGIN PRINT '... 4.17. Creating foreign key FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.18. Check constraint FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated') BEGIN PRINT '... 4.18. Checking foreign key constraints on FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] CHECK CONSTRAINT [FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated]; END -- 4.19. Rename the foreign key constraint FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogDeleted') BEGIN PRINT '... 4.19. Rename the foreign key constraint FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_ToSIC_EAV_ChangeLogDeleted]', N'FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted', N'OBJECT'; END -- 4.20. Add Index on IX_ToSIC_EAV_Attributes_TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL BEGIN PRINT '... 4.20. Adding index IX_ToSIC_EAV_Attributes_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Attributes_TransactionIdDeleted] ON [dbo].[ToSIC_EAV_Attributes] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.21. Create the foreign key constraint FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[ToSIC_EAV_Attributes]', 'U') IS NOT NULL BEGIN PRINT '... 4.21. Creating foreign key FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.22. Check constraint FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted') BEGIN PRINT '... 4.22. Checking foreign key constraints on FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Attributes] CHECK CONSTRAINT [FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted]; END -- 4.23. Rename the foreign key constraint FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogCreated') BEGIN PRINT '... 4.23. Renaming FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogCreated]', N'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated', N'OBJECT'; END -- 4.24. Add Index on IX_ToSIC_EAV_AttributeSets_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 4.24. Adding index IX_ToSIC_EAV_AttributeSets_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_AttributeSets_TransactionIdCreated] ON [dbo].[ToSIC_EAV_AttributeSets] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.25. Create foreign key FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 4.25. Creating foreign key FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.26. Check constraint FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated') BEGIN PRINT '... 4.26. Checking foreign key constraints on FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] CHECK CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated]; END -- 4.27. Rename the foreign key constraint FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogDeleted') BEGIN PRINT '... 4.27. Renaming FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_ChangeLogDeleted]', N'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted', N'OBJECT'; END -- 4.28. Add Index on TransactionIdDeleted if it doesn't exist IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 4.28. Adding index IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted] ON [dbo].[ToSIC_EAV_AttributeSets] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.29. Create foreign key FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 4.29. Creating foreign key FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.30. Check constraint FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted') BEGIN PRINT '... 4.30. Checking foreign key constraints on FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] CHECK CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted]; END -- 4.31. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogCreated') BEGIN PRINT '... 4.31. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogCreated]', N'FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated', N'OBJECT'; END -- 4.32. Add Index IX_ToSIC_EAV_Entities_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Entities]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.32. Adding index IX_ToSIC_EAV_Entities_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_TransactionIdCreated] ON [dbo].[ToSIC_EAV_Entities] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.33. Create foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.33. Creating foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.34. Check constraint FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated') BEGIN PRINT '... 4.34. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated]; END -- 4.35. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLog_Modified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLog_Modified') BEGIN PRINT '... 4.35. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLog_Modified'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLog_Modified]', N'FK_ToSIC_EAV_Entities_TsDynDataTransactionModified', N'OBJECT'; END -- 4.36. Add Index IX_ToSIC_EAV_Entities_TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Entities]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.36. Adding index IX_ToSIC_EAV_Entities_TransactionIdModified'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_TransactionIdModified] ON [dbo].[ToSIC_EAV_Entities] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.37. Create foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionModified IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionModified') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.37. Creating foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionModified'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.38. Check constraint FK_ToSIC_EAV_Entities_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionModified') BEGIN PRINT '... 4.38. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataTransactionModified'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionModified]; END -- 4.39. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogDeleted') BEGIN PRINT '... 4.39. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_ChangeLogDeleted]', N'FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted', N'OBJECT'; END -- 4.40. Add Index IX_ToSIC_EAV_Entities_TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Entities]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.40. Adding index IX_ToSIC_EAV_Entities_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_TransactionIdDeleted] ON [dbo].[ToSIC_EAV_Entities] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.41. Create foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 4.41. Creating foreign key FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.42. Check constraint FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted') BEGIN PRINT '... 4.42. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted]; END -- 4.43. Rename the foreign key constraint FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogCreated') BEGIN PRINT '... 4.43. Renaming FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogCreated]', N'FK_ToSIC_EAV_Values_TsDynDataTransactionCreated', N'OBJECT'; END -- 4.44. Add Index IX_ToSIC_EAV_Values_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.44. Adding index IX_ToSIC_EAV_Values_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Values_TransactionIdCreated] ON [dbo].[ToSIC_EAV_Values] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.45. Create foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.45. Creating foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Values] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.46. Check constraint FK_ToSIC_EAV_Values_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionCreated') BEGIN PRINT '... 4.46. Checking foreign key constraints on FK_ToSIC_EAV_Values_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Values] CHECK CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionCreated]; END -- 4.47. Rename the foreign key constraint FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogModified') BEGIN PRINT '... 4.47. Renaming FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogModified'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogModified]', N'FK_ToSIC_EAV_Values_TsDynDataTransactionModified', N'OBJECT'; END -- 4.48. Add Index IX_ToSIC_EAV_Values_TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.48. Adding index IX_ToSIC_EAV_Values_TransactionIdModified'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Values_TransactionIdModified] ON [dbo].[ToSIC_EAV_Values] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.49. Create foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionModified IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionModified') AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.49. Creating foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionModified'; ALTER TABLE [dbo].[ToSIC_EAV_Values] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.50. Check constraint FK_ToSIC_EAV_Values_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionModified') BEGIN PRINT '... 4.50. Checking foreign key constraints on FK_ToSIC_EAV_Values_TsDynDataTransactionModified'; ALTER TABLE [dbo].[ToSIC_EAV_Values] CHECK CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionModified]; END -- 4.51. Rename the foreign key constraint FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogDeleted') BEGIN PRINT '... 4.51. Renaming FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_ToSIC_EAV_ChangeLogDeleted]', N'FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted', N'OBJECT'; END -- 4.52. Add Index IX_ToSIC_EAV_Values_TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.52. Adding index IX_ToSIC_EAV_Values_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Values_TransactionIdDeleted] ON [dbo].[ToSIC_EAV_Values] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 4.53. Create foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[ToSIC_EAV_Values]', 'U') IS NOT NULL BEGIN PRINT '... 4.53. Creating foreign key FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Values] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 4.54. Check constraint FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted') BEGIN PRINT '... 4.54. Checking foreign key constraints on FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Values] CHECK CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted]; END -- *** 5. Rename ToSIC_EAV_DataTimeline to TsDynDataHistory and update related objects PRINT '5. Renaming table ToSIC_EAV_DataTimeline to TsDynDataHistory and related objects'; -- 5.1. Rename the table IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_DataTimeline' AND type = 'U') BEGIN PRINT '... 5.1. Renaming table ToSIC_EAV_DataTimeline to TsDynDataHistory'; EXEC sp_rename N'[dbo].[ToSIC_EAV_DataTimeline]', N'TsDynDataHistory'; END -- 5.2. Rename the primary key column IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'Id' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.2. Renaming column ID to HistoryId in TsDynDataHistory'; EXEC sp_rename N'[dbo].[TsDynDataHistory].[ID]', N'HistoryId', N'COLUMN'; END -- 5.3. Rename the primary key constraint IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_DataTimeline' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.3. Renaming PK_ToSIC_EAV_DataTimeline to PK_TsDynDataHistory'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_DataTimeline]', N'PK_TsDynDataHistory', N'OBJECT'; END -- 5.4. Drop unused/obsolete column SourceTextKey IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'SourceTextKey' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.4. Dropping obsolete column SourceTextKey'; ALTER TABLE [dbo].[TsDynDataHistory] DROP COLUMN [SourceTextKey]; END -- 5.5. Drop unused/obsolete column NewData IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'NewData' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.5. Dropping obsolete column NewData'; ALTER TABLE [dbo].[TsDynDataHistory] DROP COLUMN [NewData]; END -- 5.6. Rename SysCreatedDate column IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'SysCreatedDate' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.6. Renaming column SysCreatedDate to Timestamp in TsDynDataHistory'; EXEC sp_rename N'[dbo].[TsDynDataHistory].[SysCreatedDate]', N'Timestamp', N'COLUMN'; END -- 5.7. Rename SourceID column IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'SourceID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.7. Renaming column SourceID to SourceId in TsDynDataHistory'; EXEC sp_rename N'[dbo].[TsDynDataHistory].[SourceID]', N'SourceId', N'COLUMN'; END -- 5.8. Rename SysLogId column (the foreign key column) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'SysLogId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataHistory]')) BEGIN PRINT '... 5.8. Renaming column SysLogId to TransactionId in TsDynDataHistory'; EXEC sp_rename N'[dbo].[TsDynDataHistory].[SysLogId]', N'TransactionId', N'COLUMN'; END -- 5.9. Clean up orphaned history entries before adding FK constraint IF EXISTS (SELECT 1 FROM [dbo].[TsDynDataHistory] hist LEFT JOIN [dbo].[TsDynDataTransaction] trans ON hist.TransactionId = trans.TransactionId WHERE trans.TransactionId IS NULL AND hist.TransactionId IS NOT NULL) BEGIN PRINT '... 5.9. Cleaning up orphaned history entries in TsDynDataHistory'; DELETE hist FROM [dbo].[TsDynDataHistory] hist LEFT JOIN [dbo].[TsDynDataTransaction] trans ON hist.TransactionId = trans.TransactionId WHERE trans.TransactionId IS NULL AND hist.TransactionId IS NOT NULL; -- Only delete if TransactionId was set but is now invalid END -- 5.10. Add Index IX_TsDynDataHistory_TransactionId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataHistory_TransactionId' AND object_id = OBJECT_ID('[dbo].[TsDynDataHistory]')) AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... 5.10.Adding index IX_TsDynDataHistory_TransactionId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_TransactionId] ON [dbo].[TsDynDataHistory] ([TransactionId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 5.11. Create the foreign key constraint referencing TsDynDataTransaction IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataHistory_TsDynDataTransaction') AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... 5.11. Creating foreign key FK_TsDynDataHistory_TsDynDataTransaction'; ALTER TABLE [dbo].[TsDynDataHistory] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataHistory_TsDynDataTransaction] FOREIGN KEY([TransactionId]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 5.12. Check the constraint FK_TsDynDataHistory_TsDynDataTransaction IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataHistory_TsDynDataTransaction') BEGIN PRINT '... 5.12. Checking foreign key constraints on FK_TsDynDataHistory_TsDynDataTransaction'; ALTER TABLE [dbo].[TsDynDataHistory] CHECK CONSTRAINT [FK_TsDynDataHistory_TsDynDataTransaction]; END -- 5.12b. Add Index IX_TsDynDataHistory_SourceId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataHistory_SourceId' AND object_id = OBJECT_ID('[dbo].[TsDynDataHistory]')) AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... 5.12b. Adding index IX_TsDynDataHistory_SourceId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_SourceId] ON [dbo].[TsDynDataHistory] ( [SourceId] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 5.14. Add Index IX_TsDynDataHistory_SourceGuid IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataHistory_SourceGuid' AND object_id = OBJECT_ID('[dbo].[TsDynDataHistory]')) AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... 5.14. Adding index IX_TsDynDataHistory_SourceGuid'; CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_SourceGuid] ON [dbo].[TsDynDataHistory] ( [SourceGuid] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 5.15. Rename constraint DF_DataTimeline_Operation IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_DataTimeline_Operation') BEGIN PRINT '... 5.15. Renaming constraint DF_DataTimeline_Operation'; EXEC sp_rename N'[dbo].[DF_DataTimeline_Operation]', N'DF_TsDynDataHistory_Operation', N'OBJECT'; END -- *** 6. Rename ToSIC_EAV_Zones to TsDynDataZone and update related objects PRINT '6. Renaming table ToSIC_EAV_Zones to TsDynDataZone and related objects'; -- 6.1. Rename the table IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Zones' AND type = 'U') BEGIN PRINT '... 6.1. Renaming table ToSIC_EAV_Zones to TsDynDataZone'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Zones]', N'TsDynDataZone'; END -- 6.2. Rename the primary key column IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ZoneID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 6.2. Renaming column ZoneID to ZoneId in TsDynDataZone'; EXEC sp_rename N'[dbo].[TsDynDataZone].[ZoneID]', N'ZoneId', N'COLUMN'; END -- 6.3. Rename the primary key constraint PK_ToSIC_EAV_Zones IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Zones' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) BEGIN PRINT '... 6.3. Renaming PK_ToSIC_EAV_Zones to PK_TsDynDataZone'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Zones]', N'PK_TsDynDataZone', N'OBJECT'; END -- 6.4. Add new column TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdCreated' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataZone]')) AND OBJECT_ID('TsDynDataZone', 'U') IS NOT NULL BEGIN PRINT '... 6.4. Adding TransactionIdCreated column to TsDynDataZone'; ALTER TABLE [dbo].[TsDynDataZone] ADD [TransactionIdCreated] INT NULL; END -- 6.5. Add new column TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdModified' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataZone]')) AND OBJECT_ID('TsDynDataZone', 'U') IS NOT NULL BEGIN PRINT '... 6.5. Adding TransactionIdModified column to TsDynDataZone'; ALTER TABLE [dbo].[TsDynDataZone] ADD [TransactionIdModified] INT NULL; END -- 6.6. Add new column TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdDeleted' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND OBJECT_ID('TsDynDataZone', 'U') IS NOT NULL BEGIN PRINT '... 6.6. Adding TransactionIdDeleted column to TsDynDataZone'; ALTER TABLE [dbo].[TsDynDataZone] ADD [TransactionIdDeleted] INT NULL; END -- 6.7. Rename the foreign key column in the referencing table (ToSIC_EAV_Apps) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ZoneID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Apps]')) BEGIN PRINT '... 6.7. Renaming column ZoneID to ZoneId in ToSIC_EAV_Apps'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Apps].[ZoneID]', N'ZoneId', N'COLUMN'; END -- 6.8. Rename the foreign key column in the referencing table (ToSIC_EAV_Dimensions) IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ZoneID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Dimensions]')) BEGIN PRINT '... 6.8. Renaming column ZoneID to ZoneId in ToSIC_EAV_Dimensions'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Dimensions].[ZoneID]', N'ZoneId', N'COLUMN'; END -- 6.9. Rename the foreign key constraint FK_ToSIC_EAV_Apps_ToSIC_EAV_Zones IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Apps_ToSIC_EAV_Zones') BEGIN PRINT '... 6.9. Renaming Zone foreign key from ToSIC_EAV_Apps'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Apps_ToSIC_EAV_Zones]', N'FK_ToSIC_EAV_Apps_TsDynDataZone', N'OBJECT'; END -- 6.10. Rename the foreign key constraint FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Zones IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Zones') BEGIN PRINT '... 6.10. Renaming Zone foreign key from ToSIC_EAV_Dimensions'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Zones]', N'FK_ToSIC_EAV_Dimensions_TsDynDataZone', N'OBJECT'; END -- 6.11. Add Index IX_ToSIC_EAV_Dimensions_ZoneId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Dimensions_ZoneId' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Dimensions]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Dimensions]', 'U') IS NOT NULL BEGIN PRINT '... 6.11. Adding index IX_ToSIC_EAV_Dimensions_ZoneId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Dimensions_ZoneId] ON [dbo].[ToSIC_EAV_Dimensions] ([ZoneId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 6.12. Create the foreign key constraint referencing TsDynDataZone IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Dimensions_TsDynDataZone') AND OBJECT_ID('[dbo].[ToSIC_EAV_Dimensions]', 'U') IS NOT NULL BEGIN PRINT '... 6.12. Creating foreign key FK_ToSIC_EAV_Dimensions_TsDynDataZone'; ALTER TABLE [dbo].[ToSIC_EAV_Dimensions] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Dimensions_TsDynDataZone] FOREIGN KEY([ZoneId]) REFERENCES [dbo].[TsDynDataZone] ([ZoneId]); END -- 6.12b. Check constraint FK_ToSIC_EAV_Dimensions_TsDynDataZone IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Dimensions_TsDynDataZone') BEGIN PRINT '... 6.12b. Checking foreign key constraints on FK_ToSIC_EAV_Dimensions_TsDynDataZone'; ALTER TABLE [dbo].[ToSIC_EAV_Dimensions] CHECK CONSTRAINT [FK_ToSIC_EAV_Dimensions_TsDynDataZone]; END -- 6.14. Add Index IX_TsDynDataZone_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransCreatedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.14. Adding index IX_TsDynDataZone_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransactionIdCreated] ON [dbo].[TsDynDataZone] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 6.15. Create foreign key FK_TsDynDataZone_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.15. Creating foreign key FK_TsDynDataZone_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 6.16. Check constraint FK_TsDynDataZone_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionCreated') BEGIN PRINT '... 6.16. Checking foreign key constraints on FK_TsDynDataZone_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionCreated]; END -- 6.17. Add Index IX_TsDynDataZone_TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransModifiedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.17. Adding index IX_TsDynDataZone_TransactionIdModified'; CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransactionIdModified] ON [dbo].[TsDynDataZone] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 6.18. Create foreign key FK_TsDynDataZone_TsDynDataTransactionModified IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionModified') AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.18. Creating foreign key FK_TsDynDataZone_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 6.19. Check constraint FK_TsDynDataZone_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionModified') BEGIN PRINT '... 6.19. Checking foreign key constraints on FK_TsDynDataZone_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionModified]; END -- 6.20. Add Index IX_TsDynDataZone_TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransDeletedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataZone]')) AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.20. Adding index IX_TsDynDataZone_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_TsDynDataZone_TransactionIdDeleted] ON [dbo].[TsDynDataZone] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 6.21. Create foreign key FK_TsDynDataZone_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[TsDynDataZone]', 'U') IS NOT NULL BEGIN PRINT '... 6.21. Creating foreign key FK_TsDynDataZone_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[TsDynDataZone] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 6.22. Check the constraints FK_TsDynDataZone_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataZone_TsDynDataTransactionDeleted') BEGIN PRINT '... 6.22. Checking foreign key constraints on FK_TsDynDataZone_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[TsDynDataZone] CHECK CONSTRAINT [FK_TsDynDataZone_TsDynDataTransactionDeleted]; END -- *** 7. Rename ToSIC_EAV_Apps to TsDynDataApp and update related objects PRINT '7. Renaming table ToSIC_EAV_Apps to TsDynDataApp and related objects'; -- 7.1. Rename the table IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Apps' AND type = 'U') BEGIN PRINT '... 7.1. Renaming table ToSIC_EAV_Apps to TsDynDataApp'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Apps]', N'TsDynDataApp'; END -- 7.2. Rename the primary key column IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AppID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 7.2. Renaming column AppID to AppId in TsDynDataApp'; EXEC sp_rename N'[dbo].[TsDynDataApp].[AppID]', N'AppId', N'COLUMN'; END -- 7.3. Rename the primary key constraint IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Apps' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) BEGIN PRINT '... 7.3. Renaming PK_ToSIC_EAV_Apps to PK_TsDynDataApp'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Apps]', N'PK_TsDynDataApp', N'OBJECT'; END -- 7.4. Rename the unique constraint ToSIC_EAV_Apps_PreventDuplicates IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Apps_PreventDuplicates' AND type = 'UQ') BEGIN PRINT '... 7.4. Renaming unique constraint ToSIC_EAV_Apps_PreventDuplicates to UQ_TsDynDataApp_Name_ZoneId'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Apps_PreventDuplicates]', N'UQ_TsDynDataApp_Name_ZoneId', N'OBJECT'; END -- 7.5. Add new column TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdCreated' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('TsDynDataApp', 'U') IS NOT NULL BEGIN PRINT '... 7.5. Adding TransactionIdCreated column to TsDynDataApp'; ALTER TABLE [dbo].[TsDynDataApp] ADD [TransactionIdCreated] INT NULL; END -- 7.6. Add new column TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdModified' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('TsDynDataApp', 'U') IS NOT NULL BEGIN PRINT '... 7.6. Adding TransactionIdModified column to TsDynDataApp'; ALTER TABLE [dbo].[TsDynDataApp] ADD [TransactionIdModified] INT NULL; END -- 7.7. Add new column TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdDeleted' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('TsDynDataApp', 'U') IS NOT NULL BEGIN PRINT '... 7.7. Adding TransactionIdDeleted column to TsDynDataApp'; ALTER TABLE [dbo].[TsDynDataApp] ADD [TransactionIdDeleted] INT NULL; END -- 7.8. Rename the foreign key column in the referencing table (ToSIC_EAV_AttributeSets) IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AppID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_AttributeSets]')) BEGIN PRINT '... 7.8. Renaming column AppID to AppId in ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AttributeSets].[AppID]', N'AppId', N'COLUMN'; END -- 7.9. Rename the foreign key column in the referencing table (ToSIC_EAV_Entities) IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AppID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 7.9. Renaming column AppID to AppId in ToSIC_EAV_Entities'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[AppID]', N'AppId', N'COLUMN'; END -- 7.10. Rename the foreign key constraint FK_ToSIC_EAV_Apps_TsDynDataZone IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Apps_TsDynDataZone') BEGIN PRINT '... 7.10. Renaming Zone foreign key from ToSIC_EAV_Apps'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Apps_TsDynDataZone]', N'FK_TsDynDataApp_TsDynDataZone', N'OBJECT'; END -- 7.11. Add Index IX_TsDynDataApp_ZoneId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_ZoneId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.11. Adding index IX_TsDynDataApp_ZoneId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_ZoneId] ON [dbo].[TsDynDataApp] ([ZoneId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.12. Create the foreign key constraint FK_TsDynDataApp_TsDynDataZone IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataZone') AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.12. Creating foreign key FK_TsDynDataApp_TsDynDataZone'; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataZone] FOREIGN KEY([ZoneId]) REFERENCES [dbo].[TsDynDataZone] ([ZoneId]); END -- 7.12b. Check constraint FK_TsDynDataApp_TsDynDataZone IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataZone') BEGIN PRINT '... 7.12b. Checking foreign key constraints on FK_TsDynDataApp_TsDynDataZone'; ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataZone]; END -- 7.14. Rename the foreign key constraint FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_Apps IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_Apps') BEGIN PRINT '... 7.14. Renaming foreign key FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_Apps'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_Apps]', N'FK_ToSIC_EAV_AttributeSets_TsDynDataApp', N'OBJECT'; END -- 7.15. Add Index IX_ToSIC_EAV_AttributeSets_AppId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_AppId' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 7.15. Adding index IX_ToSIC_EAV_AttributeSets_AppId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_AttributeSets_AppId] ON [dbo].[ToSIC_EAV_AttributeSets] ([AppId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.16. Create the foreign key constraint FK_ToSIC_EAV_AttributeSets_TsDynDataApp IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataApp') AND OBJECT_ID('[dbo].[ToSIC_EAV_AttributeSets]', 'U') IS NOT NULL BEGIN PRINT '... 7.16. Creating foreign key FK_ToSIC_EAV_AttributeSets_TsDynDataApp'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataApp] FOREIGN KEY([AppId]) REFERENCES [dbo].[TsDynDataApp] ([AppId]); END -- 7.17. Check constraint FK_ToSIC_EAV_AttributeSets_TsDynDataApp IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataApp') BEGIN PRINT '... 7.17. Checking foreign key constraints on FK_ToSIC_EAV_AttributeSets_TsDynDataApp'; ALTER TABLE [dbo].[ToSIC_EAV_AttributeSets] CHECK CONSTRAINT [FK_ToSIC_EAV_AttributeSets_TsDynDataApp]; END -- 7.18. Rename the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_Apps IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_Apps') BEGIN PRINT '... 7.18. Renaming foreign key FK_ToSIC_EAV_Entities_ToSIC_EAV_Apps'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_Apps]', N'FK_ToSIC_EAV_Entities_TsDynDataApp', N'OBJECT'; END -- 7.19. Add Index IX_ToSIC_EAV_Entities_AppId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_AppId' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Entities]')) AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 7.19. Adding index IX_ToSIC_EAV_Entities_AppId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_AppId] ON [dbo].[ToSIC_EAV_Entities] ([AppId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.20. Create the foreign key constraint FK_ToSIC_EAV_Entities_TsDynDataApp IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataApp') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 7.20. Creating foreign key FK_ToSIC_EAV_Entities_TsDynDataApp'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataApp] FOREIGN KEY([AppId]) REFERENCES [dbo].[TsDynDataApp] ([AppId]); END -- 7.21. Check constraint FK_ToSIC_EAV_Entities_TsDynDataApp IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataApp') BEGIN PRINT '... 7.21. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataApp'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataApp]; END -- 7.22. Add Index IX_TsDynDataApp_TransactionIdCreated IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransCreatedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.22. Adding index IX_TsDynDataApp_TransactionIdCreated'; CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransactionIdCreated] ON [dbo].[TsDynDataApp] ([TransactionIdCreated] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.23. Create foreign key FK_TsDynDataApp_TsDynDataTransactionCreated IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionCreated') AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.23. Recreating foreign key FK_TsDynDataApp_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionCreated] FOREIGN KEY([TransactionIdCreated]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 7.24. Check constraint FK_TsDynDataApp_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionCreated') BEGIN PRINT '... 7.24. Checking foreign key constraints on FK_TsDynDataApp_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionCreated]; END -- 7.25. Add Index IX_TsDynDataApp_TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransModifiedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.25. Adding index IX_TsDynDataApp_TransactionIdModified'; CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransactionIdModified] ON [dbo].[TsDynDataApp] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.26. Create foreign key FK_TsDynDataApp_TsDynDataTransactionModified IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionModified') AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.26. Creating foreign key FK_TsDynDataApp_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 7.27. Check constraint FK_TsDynDataApp_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionModified') BEGIN PRINT '... 7.27. Checking foreign key constraints on FK_TsDynDataApp_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionModified]; END -- 7.28. Add Index IX_TsDynDataApp_TransactionIdDeleted IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransDeletedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.28. Adding index IX_TsDynDataApp_TransactionIdDeleted'; CREATE NONCLUSTERED INDEX [IX_TsDynDataApp_TransactionIdDeleted] ON [dbo].[TsDynDataApp] ([TransactionIdDeleted] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 7.29. Create foreign key FK_TsDynDataApp_TsDynDataTransactionDeleted IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionDeleted') AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.29. Recreating foreign key FK_TsDynDataApp_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[TsDynDataApp] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionDeleted] FOREIGN KEY([TransactionIdDeleted]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 7.30. Check the constraints FK_TsDynDataApp_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataApp_TsDynDataTransactionDeleted') BEGIN PRINT '... 7.30. Checking foreign key constraints on FK_TsDynDataApp_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[TsDynDataApp] CHECK CONSTRAINT [FK_TsDynDataApp_TsDynDataTransactionDeleted]; END -- 7.31. Rename index IX_ToSIC_EAV_Apps_ZoneId to IX_TsDynDataApp_ZoneId if exists IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Apps_ZoneId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_ZoneId' AND object_id = OBJECT_ID('[dbo].[TsDynDataApp]')) AND OBJECT_ID('[dbo].[TsDynDataApp]', 'U') IS NOT NULL BEGIN PRINT '... 7.31. Renaming index IX_ToSIC_EAV_Apps_ZoneId to IX_TsDynDataApp_ZoneId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[IX_ToSIC_EAV_Apps_ZoneId]', N'IX_TsDynDataApp_ZoneId', N'INDEX'; END -- *** 8. Renaming table ToSIC_EAV_AttributeSets to TsDynDataContentType and update related objects PRINT '8. Renaming table ToSIC_EAV_AttributeSets to TsDynDataContentType and related objects'; -- 8.1. Rename table ToSIC_EAV_AttributeSets IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_AttributeSets' AND type = 'U') BEGIN PRINT '... 8.1. Renaming table ToSIC_EAV_AttributeSets to TsDynDataContentType'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AttributeSets]', N'TsDynDataContentType'; END -- 8.2. Rename PK column AttributeSetID to ContentTypeId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AttributeSetID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.2. Renaming column AttributeSetID to ContentTypeId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[AttributeSetID]', N'ContentTypeId', N'COLUMN'; END -- 8.3. Rename PK_ToSIC_EAV_AttributeSets IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_AttributeSets' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.3. Rename PK_ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_AttributeSets]', N'PK_TsDynDataContentType', N'OBJECT'; END -- 8.4. Rename columns UsesConfigurationOfAttributeSet to InheritContentTypeId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'UsesConfigurationOfAttributeSet' AND Object_ID = Object_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.4. Renaming column UsesConfigurationOfAttributeSet to InheritContentTypeId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[UsesConfigurationOfAttributeSet]', N'InheritContentTypeId', N'COLUMN'; END -- 8.5. Rename columns AlwaysShareConfiguration to IsGlobal IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AlwaysShareConfiguration' AND Object_ID = Object_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.5. Renaming column AlwaysShareConfiguration to IsGlobal'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[AlwaysShareConfiguration]', N'IsGlobal', N'COLUMN'; END -- 8.6. Add column TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'TransactionIdModified' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID('[dbo].[TsDynDataContentType]')) AND OBJECT_ID('TsDynDataContentType', 'U') IS NOT NULL BEGIN PRINT '... 8.6. Adding TransactionIdModified column to TsDynDataContentType'; ALTER TABLE [dbo].[TsDynDataContentType] ADD [TransactionIdModified] INT NULL; END -- 8.7. Rename columns AttributeSetID to ContentTypeId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'AttributeSetID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Entities]')) BEGIN PRINT '... 8.7.Renaming column AttributeSetID to ContentTypeId'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities].[AttributeSetID]', N'ContentTypeId', N'COLUMN'; END -- 8.8. Rename FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_AttributeSets IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_AttributeSets') BEGIN PRINT '... 8.8. Rename FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_ToSIC_EAV_AttributeSets]', N'FK_TsDynDataContentType_TsDynDataContentType' , N'OBJECT'; END -- 8.9. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataApp IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataApp') BEGIN PRINT '... 8.9. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataApp'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_TsDynDataApp]', N'FK_TsDynDataContentType_TsDynDataApp' , N'OBJECT'; END -- 8.10. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated') BEGIN PRINT '... 8.10. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionCreated]', N'FK_TsDynDataContentType_TsDynDataTransactionCreated' , N'OBJECT'; END -- 8.11. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted') BEGIN PRINT '... 8.11. Rename FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_AttributeSets_TsDynDataTransactionDeleted]', N'FK_TsDynDataContentType_TsDynDataTransactionDeleted' , N'OBJECT'; END -- 8.12. Rename FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets') BEGIN PRINT '... 8.12. Rename FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_ContentTypeId_ToSIC_EAV_AttributeSets]', N'FK_ToSIC_EAV_Attributes_TsDynDataContentType' , N'OBJECT'; END -- 8.12b. Rename FK_ToSIC_EAV_Entities_ToSIC_EAV_AttributeSets IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_AttributeSets') BEGIN PRINT '... 8.12b. Rename FK_ToSIC_EAV_Entities_ToSIC_EAV_AttributeSets'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_ToSIC_EAV_AttributeSets]', N'FK_ToSIC_EAV_Entities_TsDynDataContentType' , N'OBJECT'; END -- 8.14. Add Index on ContentTypeId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_ContentTypeId') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 8.14. Adding index IX_ToSIC_EAV_Entities_ContentTypeId'; CREATE NONCLUSTERED INDEX [IX_ToSIC_EAV_Entities_ContentTypeId] ON [dbo].[ToSIC_EAV_Entities] ([ContentTypeId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 8.15. Create foreign key FK_ToSIC_EAV_Entities_TsDynDataContentType IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataContentType') AND OBJECT_ID('[dbo].[ToSIC_EAV_Entities]', 'U') IS NOT NULL BEGIN PRINT '... 8.15. Creating foreign key FK_ToSIC_EAV_Entities_TsDynDataContentType'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] WITH NOCHECK ADD CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataContentType] FOREIGN KEY([ContentTypeId]) REFERENCES [dbo].[TsDynDataContentType] ([ContentTypeId]); END -- 8.16. Check the constraints FK_ToSIC_EAV_Entities_TsDynDataContentType IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataContentType') BEGIN PRINT '... 8.16. Checking foreign key constraints on FK_ToSIC_EAV_Entities_TsDynDataContentType'; ALTER TABLE [dbo].[ToSIC_EAV_Entities] CHECK CONSTRAINT [FK_ToSIC_EAV_Entities_TsDynDataContentType]; END -- 8.17. Add Index IX_TsDynDataContentType_TransactionIdModified IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransModifiedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) AND OBJECT_ID('[dbo].[TsDynDataContentType]', 'U') IS NOT NULL BEGIN PRINT '... 8.17. Adding index IX_TsDynDataContentType_TransactionIdModified'; CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_TransactionIdModified] ON [dbo].[TsDynDataContentType] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 8.18. Create foreign key FK_TsDynDataContentType_TsDynDataTransactionModified IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataContentType_TsDynDataTransactionModified') AND OBJECT_ID('[dbo].[TsDynDataContentType]', 'U') IS NOT NULL BEGIN PRINT '... 8.18. Creating foreign key FK_TsDynDataContentType_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataContentType] WITH NOCHECK ADD CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 8.19. Check constraint FK_TsDynDataContentType_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataContentType_TsDynDataTransactionModified') BEGIN PRINT '... 8.19. Checking foreign key constraints on FK_TsDynDataContentType_TsDynDataTransactionModified'; ALTER TABLE [dbo].[TsDynDataContentType] CHECK CONSTRAINT [FK_TsDynDataContentType_TsDynDataTransactionModified]; END -- 8.20. Rename index IX_ToSIC_EAV_AttributeSets_TransactionIdCreated IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.20. Renaming index IX_ToSIC_EAV_AttributeSets_TransactionIdCreated'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_ToSIC_EAV_AttributeSets_TransactionIdCreated]', N'IX_TsDynDataContentType_TransactionIdCreated', N'INDEX'; END -- 8.21. Rename index IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.21. Renaming index IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_ToSIC_EAV_AttributeSets_TransactionIdDeleted]', N'IX_TsDynDataContentType_TransactionIdDeleted', N'INDEX'; END -- 8.22. Rename index IX_ToSIC_EAV_AttributeSets_AppId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_AttributeSets_AppId' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 8.22. Renaming index IX_ToSIC_EAV_AttributeSets_AppId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_ToSIC_EAV_AttributeSets_AppId]', N'IX_TsDynDataContentType_AppId', N'INDEX'; END -- 8.23. Add Index IX_TsDynDataContentType_AppId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_AppId' AND object_id = OBJECT_ID('[dbo].[TsDynDataContentType]')) AND OBJECT_ID('[dbo].[TsDynDataContentType]', 'U') IS NOT NULL BEGIN PRINT '... 8.23. Adding index IX_TsDynDataContentType_AppId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataContentType_AppId] ON [dbo].[TsDynDataContentType] ([AppId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 8.24. Rename constraint DF_ToSIC_EAV_AttributeSets_AlwaysShareConfiguration IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_AttributeSets_AlwaysShareConfiguration') BEGIN PRINT '... 8.24. Renaming constraint DF_ToSIC_EAV_AttributeSets_AlwaysShareConfiguration'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_AttributeSets_AlwaysShareConfiguration]', N'DF_TsDynDataContentType_IsGlobal', N'OBJECT'; END -- 8.25. Rename constraint DF_ToSIC_EAV_AttributeSets_StaticName IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_AttributeSets_StaticName') BEGIN PRINT '... 8.25. Renaming constraint DF_ToSIC_EAV_AttributeSets_StaticName'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_AttributeSets_StaticName]', N'DF_TsDynDataContentType_StaticName', N'OBJECT'; END -- *** 9. Rename table ToSIC_EAV_Attributes to TsDynDataAttribute and related objects PRINT '9. Renaming table ToSIC_EAV_Attributes to TsDynDataAttribute and related objects'; -- 9.1. Rename the table ToSIC_EAV_Attributes to TsDynDataAttribute IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Attributes' AND type = 'U') BEGIN PRINT '... 9.1. Renaming table ToSIC_EAV_Attributes to TsDynDataAttribute'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Attributes]', N'TsDynDataAttribute'; END -- 9.2. Rename the primary key column AttributeID to AttributeId in TsDynDataAttribute IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AttributeID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.2. Renaming column AttributeID to AttributeId in TsDynDataAttribute'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[AttributeID]', N'AttributeId', N'COLUMN'; END -- 9.3. Rename the primary key constraint PK_ToSIC_EAV_Attributes to PK_TsDynDataAttribute IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Attributes' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.3. Renaming PK_ToSIC_EAV_Attributes to PK_TsDynDataAttribute'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Attributes]', N'PK_TsDynDataAttribute', N'OBJECT'; END -- 9.4. Add new column TransactionIdModified to TsDynDataAttribute IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = Object_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.4. Adding column TransactionIdModified to TsDynDataAttribute'; ALTER TABLE [dbo].[TsDynDataAttribute] ADD [TransactionIdModified] INT NULL; END -- 9.5. Rename FK_ToSIC_EAV_Attributes_ToSIC_EAV_Types IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_ToSIC_EAV_Types' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.5. Renaming FK_ToSIC_EAV_Attributes_ToSIC_EAV_Types to FK_TsDynDataAttribute_ToSIC_EAV_AttributeTypes'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_ToSIC_EAV_Types]', N'FK_TsDynDataAttribute_ToSIC_EAV_AttributeTypes', N'OBJECT'; END -- 9.6. Rename FK_ToSIC_EAV_Attributes_TsDynDataContentType IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataContentType' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.6. Renaming FK_ToSIC_EAV_Attributes_TsDynDataContentType to FK_TsDynDataAttribute_TsDynDataContentType'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_TsDynDataContentType]', N'FK_TsDynDataAttribute_TsDynDataContentType', N'OBJECT'; END -- 9.7. Rename FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.7. Renaming FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated to FK_TsDynDataAttribute_TsDynDataTransactionCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_TsDynDataTransactionCreated]', N'FK_TsDynDataAttribute_TsDynDataTransactionCreated', N'OBJECT'; END -- 9.8. Rename FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.8. Renaming FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted to FK_TsDynDataAttribute_TsDynDataTransactionDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Attributes_TsDynDataTransactionDeleted]', N'FK_TsDynDataAttribute_TsDynDataTransactionDeleted', N'OBJECT'; END -- 9.9. Add new Foreign Key for TransactionIdModified on TsDynDataAttribute IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataAttribute_TsDynDataTransactionModified' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.9. Adding FK_TsDynDataAttribute_TsDynDataTransactionModified to TsDynDataAttribute'; ALTER TABLE [dbo].[TsDynDataAttribute] WITH CHECK ADD CONSTRAINT [FK_TsDynDataAttribute_TsDynDataTransactionModified] FOREIGN KEY([TransactionIdModified]) REFERENCES [dbo].[TsDynDataTransaction] ([TransactionId]); END -- 9.10. Renaming index IX_ToSIC_EAV_Attributes_ContentTypeId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_ContentTypeId' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.10. Renaming index IX_ToSIC_EAV_Attributes_ContentTypeId to IX_TsDynDataAttribute_ContentTypeId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_ToSIC_EAV_Attributes_ContentTypeId]', N'IX_TsDynDataAttribute_ContentTypeId', N'INDEX'; END -- 9.11. Renaming index IX_ToSIC_EAV_Attributes_TransactionIdCreated IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.11. Renaming index IX_ToSIC_EAV_Attributes_TransactionIdCreated to IX_TsDynDataAttribute_TransactionIdCreated'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_ToSIC_EAV_Attributes_TransactionIdCreated]', N'IX_TsDynDataAttribute_TransactionIdCreated', N'INDEX'; END -- 9.12. Renaming index IX_ToSIC_EAV_Attributes_TransactionIdDeleted IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Attributes_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.12. Renaming index IX_ToSIC_EAV_Attributes_TransactionIdDeleted to IX_TsDynDataAttribute_TransactionIdDeleted'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_ToSIC_EAV_Attributes_TransactionIdDeleted]', N'IX_TsDynDataAttribute_TransactionIdDeleted', N'INDEX'; END -- 9.12b. Add new Index for TransactionIdModified on TsDynDataAttribute IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransModifiedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.12b. Adding index IX_TsDynDataAttribute_TransactionIdModified on TsDynDataAttribute'; CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_TransactionIdModified] ON [dbo].[TsDynDataAttribute] ([TransactionIdModified] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 9.14. Add new Index for AttributeId inc. StaticName on TsDynDataAttribute IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_AttributeId_StaticName' AND object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.14. Adding index IX_TsDynDataAttribute_AttributeId_StaticName'; CREATE NONCLUSTERED INDEX [IX_TsDynDataAttribute_AttributeId_StaticName] ON [dbo].[TsDynDataAttribute] ([AttributeId] ASC) INCLUDE([StaticName]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 9.15. Rename Default Constraints DF_ToSIC_EAV_Attributes_ContentTypeId IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Attributes_ContentTypeId' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.15. Renaming default constraint DF_ToSIC_EAV_Attributes_ContentTypeId to DF_TsDynDataAttribute_ContentTypeId'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Attributes_ContentTypeId]', N'DF_TsDynDataAttribute_ContentTypeId', N'OBJECT'; END -- 9.16. Rename Default Constraints DF_ToSIC_EAV_Attributes_SortOrder IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Attributes_SortOrder' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.16. Renaming default constraint DF_ToSIC_EAV_Attributes_SortOrder to DF_TsDynDataAttribute_SortOrder'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Attributes_SortOrder]', N'DF_TsDynDataAttribute_SortOrder', N'OBJECT'; END -- 9.17. Rename Default Constraints DF_ToSIC_EAV_Attributes_IsTitle IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Attributes_IsTitle' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 9.17. Renaming default constraint DF_ToSIC_EAV_Attributes_IsTitle to DF_TsDynDataAttribute_IsTitle'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Attributes_IsTitle]', N'DF_TsDynDataAttribute_IsTitle', N'OBJECT'; END -- 9.18. Renaming column AttributeID to AttributeId in ToSIC_EAV_EntityRelationships IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AttributeID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_EntityRelationships]')) BEGIN PRINT '... 9.18. Renaming column AttributeID to AttributeId in ToSIC_EAV_EntityRelationships'; EXEC sp_rename N'[dbo].[ToSIC_EAV_EntityRelationships].[AttributeID]', N'AttributeId', N'COLUMN'; END -- 9.19. Renaming column AttributeID to AttributeId in ToSIC_EAV_Values IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AttributeID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 9.19. Renaming column AttributeID to AttributeId in ToSIC_EAV_Values'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values].[AttributeID]', N'AttributeId', N'COLUMN'; END -- 9.20. Rename FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes') BEGIN PRINT '... 9.20. Rename FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_Attributes]', N'FK_ToSIC_EAV_EntityRelationships_TsDynDataAttribute' , N'OBJECT'; END -- 9.21. Rename FK_ToSIC_EAV_Values_ToSIC_EAV_Attributes IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_ToSIC_EAV_Attributes') BEGIN PRINT '... 9.21. Rename FK_ToSIC_EAV_Values_ToSIC_EAV_Attributes'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_ToSIC_EAV_Attributes]', N'FK_ToSIC_EAV_Values_TsDynDataAttribute' , N'OBJECT'; END -- *** 10. Renaming table ToSIC_EAV_AttributeTypes to TsDynDataAttributeType and related objects PRINT '10. Renaming table ToSIC_EAV_AttributeTypes to TsDynDataAttributeType and related objects'; -- 10.1. Rename the table ToSIC_EAV_AttributeTypes to TsDynDataAttributeType IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_AttributeTypes' AND type = 'U') BEGIN PRINT '... 10.1. Renaming table ToSIC_EAV_AttributeTypes to TsDynDataAttributeType'; EXEC sp_rename N'[dbo].[ToSIC_EAV_AttributeTypes]', N'TsDynDataAttributeType'; END -- 10.2. Rename the primary key constraint PK_ToSIC_EAV_AttributeTypes to PK_TsDynDataAttributeType IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_AttributeTypes' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttributeType]')) BEGIN PRINT '... 10.2. Renaming PK_ToSIC_EAV_AttributeTypes to PK_TsDynDataAttributeType'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_AttributeTypes]', N'PK_TsDynDataAttributeType', N'OBJECT'; END -- 10.3. Rename the foreign key constraint in TsDynDataAttribute that references this table. IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataAttribute_ToSIC_EAV_AttributeTypes' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 10.3. Renaming FK_TsDynDataAttribute_ToSIC_EAV_AttributeTypes to FK_TsDynDataAttribute_TsDynDataAttributeType'; EXEC sp_rename N'[dbo].[FK_TsDynDataAttribute_ToSIC_EAV_AttributeTypes]', N'FK_TsDynDataAttribute_TsDynDataAttributeType', N'OBJECT'; END -- *** 11. Renaming table ToSIC_EAV_Entities to TsDynDataEntity and related objects PRINT '11. Renaming table ToSIC_EAV_Entities to TsDynDataEntity and related objects'; -- 11.1. Rename table ToSIC_EAV_Entities to TsDynDataEntity IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Entities' AND type = 'U') BEGIN PRINT '... 11.1. Renaming table ToSIC_EAV_Entities to TsDynDataEntity'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Entities]', N'TsDynDataEntity'; END -- 11.2. Rename the primary key column EntityID to EntityId IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'EntityID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.2. Renaming PK column EntityID to EntityId in TsDynDataEntity'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[EntityID]', N'EntityId', N'COLUMN'; END -- 11.3. Rename column EntityGUID to EntityGuid IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'EntityGUID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.3. Renaming column EntityGUID to EntityGuid in TsDynDataEntity'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[EntityGUID]', N'EntityGuid', N'COLUMN'; END -- 11.4. Rename the primary key constraint PK_ToSIC_EAV_Entities to PK_TsDynDataEntity IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Entities' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.4. Renaming PK_ToSIC_EAV_Entities to PK_TsDynDataEntity'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Entities]', N'PK_TsDynDataEntity', N'OBJECT'; END -- 11.5. Drop the foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_Entities IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_ToSIC_EAV_Entities') BEGIN PRINT '... 11.5. Dropping foreign key constraint FK_ToSIC_EAV_Entities_ToSIC_EAV_Entities'; ALTER TABLE [dbo].[TsDynDataEntity] DROP CONSTRAINT [FK_ToSIC_EAV_Entities_ToSIC_EAV_Entities]; END -- 11.6. Drop the ConfigurationSet column IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ConfigurationSet' AND Object_ID = Object_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.6. Dropping column ConfigurationSet from TsDynDataEntity'; ALTER TABLE [dbo].[TsDynDataEntity] DROP COLUMN [ConfigurationSet]; END -- 11.7. Rename the column EntityID to EntityId in ToSIC_EAV_Values IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'EntityID' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 11.7. Renaming column EntityID to EntityId in ToSIC_EAV_Values'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values].[EntityID]', N'EntityId', N'COLUMN'; END -- 11.8. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataApp to FK_TsDynDataEntity_TsDynDataApp IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataApp' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.8. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataApp to FK_TsDynDataEntity_TsDynDataApp'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataApp]', N'FK_TsDynDataEntity_TsDynDataApp', N'OBJECT'; END -- 11.9. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataContentType to FK_TsDynDataEntity_TsDynDataContentType IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataContentType' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.9. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataContentType to FK_TsDynDataEntity_TsDynDataContentType'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataContentType]', N'FK_TsDynDataEntity_TsDynDataContentType', N'OBJECT'; END -- 11.10. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTargetType to FK_TsDynDataEntity_TsDynDataTargetType IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTargetType' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.10. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTargetType to FK_TsDynDataEntity_TsDynDataTargetType'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataTargetType]', N'FK_TsDynDataEntity_TsDynDataTargetType', N'OBJECT'; END -- 11.11. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated to FK_TsDynDataEntity_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.11. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated to FK_TsDynDataEntity_TsDynDataTransactionCreated'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataTransactionCreated]', N'FK_TsDynDataEntity_TsDynDataTransactionCreated', N'OBJECT'; END -- 11.12. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionModified to FK_TsDynDataEntity_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionModified' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.12. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionModified to FK_TsDynDataEntity_TsDynDataTransactionModified'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataTransactionModified]', N'FK_TsDynDataEntity_TsDynDataTransactionModified', N'OBJECT'; END -- 11.12b. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted to FK_TsDynDataEntity_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.12b. Renaming FK FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted to FK_TsDynDataEntity_TsDynDataTransactionDeleted'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Entities_TsDynDataTransactionDeleted]', N'FK_TsDynDataEntity_TsDynDataTransactionDeleted', N'OBJECT'; END -- 11.14. Renaming Default Constraint DF_ToSIC_EAV_Entities_EntityGUID to DF_TsDynDataEntity_EntityGuid IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Entities_EntityGUID' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.14. Renaming Default Constraint DF_ToSIC_EAV_Entities_EntityGUID to DF_TsDynDataEntity_EntityGuid'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Entities_EntityGUID]', N'DF_TsDynDataEntity_EntityGuid', N'OBJECT'; END -- 11.15. Renaming Default Constraint DF_ToSIC_EAV_Entities_IsPublished to DF_TsDynDataEntity_IsPublished IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Entities_IsPublished' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.15. Renaming Default Constraint DF_ToSIC_EAV_Entities_IsPublished to DF_TsDynDataEntity_IsPublished'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Entities_IsPublished]', N'DF_TsDynDataEntity_IsPublished', N'OBJECT'; END -- 11.16. Renaming Index IX_KeyNumber to IX_TsDynDataEntity_KeyNumber IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_KeyNumber' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.16. Renaming Index IX_KeyNumber to IX_TsDynDataEntity_KeyNumber'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_KeyNumber]', N'IX_TsDynDataEntity_KeyNumber', N'INDEX'; END -- 11.17. Renaming Index IX_ToSIC_EAV_Entities_AppId to IX_TsDynDataEntity_AppId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_AppId' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.17. Renaming Index IX_ToSIC_EAV_Entities_AppId to IX_TsDynDataEntity_AppId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_AppId]', N'IX_TsDynDataEntity_AppId', N'INDEX'; END -- 11.18. Renaming Index IX_ToSIC_EAV_Entities_ContentTypeId to IX_TsDynDataEntity_ContentTypeId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_ContentTypeId' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.18. Renaming Index IX_ToSIC_EAV_Entities_ContentTypeId to IX_TsDynDataEntity_ContentTypeId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_ContentTypeId]', N'IX_TsDynDataEntity_ContentTypeId', N'INDEX'; END -- 11.19. Renaming Index IX_ToSIC_EAV_Entities_TargetTypeId to IX_TsDynDataEntity_TargetTypeId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TargetTypeId' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.19. Renaming Index IX_ToSIC_EAV_Entities_TargetTypeId to IX_TsDynDataEntity_TargetTypeId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_TargetTypeId]', N'IX_TsDynDataEntity_TargetTypeId', N'INDEX'; END -- 11.20. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdCreated to IX_TsDynDataEntity_TransactionIdCreated IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.20. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdCreated to IX_TsDynDataEntity_TransactionIdCreated'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_TransactionIdCreated]', N'IX_TsDynDataEntity_TransactionIdCreated', N'INDEX'; END -- 11.21. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdModified to IX_TsDynDataEntity_TransactionIdModified IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.21. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdModified to IX_TsDynDataEntity_TransactionIdModified'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_TransactionIdModified]', N'IX_TsDynDataEntity_TransactionIdModified', N'INDEX'; END -- 11.22. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdDeleted to IX_TsDynDataEntity_TransactionIdDeleted IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Entities_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 11.22. Renaming Index IX_ToSIC_EAV_Entities_TransactionIdDeleted to IX_TsDynDataEntity_TransactionIdDeleted'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_ToSIC_EAV_Entities_TransactionIdDeleted]', N'IX_TsDynDataEntity_TransactionIdDeleted', N'INDEX'; END -- *** 12. Rename ToSIC_EAV_EntityRelationships to TsDynDataRelationship and related objects PRINT '12. Renaming table ToSIC_EAV_EntityRelationships to TsDynDataRelationship and related objects'; -- 12.1. Rename table ToSIC_EAV_EntityRelationships to TsDynDataRelationship IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_EntityRelationships' AND type = 'U') BEGIN PRINT '... 12.1. Renaming table ToSIC_EAV_EntityRelationships to TsDynDataRelationship'; EXEC sp_rename N'[dbo].[ToSIC_EAV_EntityRelationships]', N'TsDynDataRelationship'; END -- 12.2. Rename column AttributeID to AttributeId IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AttributeID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.2. Renaming column AttributeID to AttributeId in TsDynDataRelationship'; EXEC sp_rename N'[dbo].[TsDynDataRelationship].[AttributeID]', N'AttributeId', N'COLUMN'; END -- 12.3. Rename column ParentEntityID to ParentEntityId IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ParentEntityID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.3. Renaming column ParentEntityID to ParentEntityId in TsDynDataRelationship'; EXEC sp_rename N'[dbo].[TsDynDataRelationship].[ParentEntityID]', N'ParentEntityId', N'COLUMN'; END -- 12.4. Rename column ChildEntityID to ChildEntityId IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ChildEntityID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.4. Renaming column ChildEntityID to ChildEntityId in TsDynDataRelationship'; EXEC sp_rename N'[dbo].[TsDynDataRelationship].[ChildEntityID]', N'ChildEntityId', N'COLUMN'; END -- 12.5. Rename the primary key constraint PK_ToSIC_EAV_EntityRelationships to PK_TsDynDataRelationship IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_EntityRelationships' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.5. Renaming PK_ToSIC_EAV_EntityRelationships to PK_TsDynDataRelationship'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_EntityRelationships]', N'PK_TsDynDataRelationship', N'OBJECT'; END -- 12.6. Renaming FK FK_ToSIC_EAV_EntityRelationships_TsDynDataAttribute to FK_TsDynDataRelationship_TsDynDataAttribute IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_EntityRelationships_TsDynDataAttribute' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.6. Renaming FK FK_ToSIC_EAV_EntityRelationships_TsDynDataAttribute to FK_TsDynDataRelationship_TsDynDataAttribute'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_EntityRelationships_TsDynDataAttribute]', N'FK_TsDynDataRelationship_TsDynDataAttribute', N'OBJECT'; END -- 12.7. Renaming FK FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ParentEntities to FK_TsDynDataRelationship_TsDynDataEntityParent IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ParentEntities' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.7. Renaming FK FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ParentEntities to FK_TsDynDataRelationship_TsDynDataEntityParent'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ParentEntities]', N'FK_TsDynDataRelationship_TsDynDataEntityParent', N'OBJECT'; END -- 12.8. Renaming FK FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ChildEntities to FK_TsDynDataRelationship_TsDynDataEntityChild IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ChildEntities' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... 12.8. Renaming FK FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ChildEntities to FK_TsDynDataRelationship_TsDynDataEntityChild'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_EntityRelationships_ToSIC_EAV_ChildEntities]', N'FK_TsDynDataRelationship_TsDynDataEntityChild', N'OBJECT'; END -- 12.9. Adding index IX_TsDynDataRelationship_ParentEntityId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataRelationship_ParentEntityId' AND object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) AND OBJECT_ID('[dbo].[TsDynDataRelationship]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'ParentEntityId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataRelationship]')) -- Ensure column exists BEGIN PRINT '... 12.9. Adding index IX_TsDynDataRelationship_ParentEntityId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataRelationship_ParentEntityId] ON [dbo].[TsDynDataRelationship] ([ParentEntityId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 12.10. Adding index IX_TsDynDataRelationship_ChildEntityId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataRelationship_ChildEntityId' AND object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) AND OBJECT_ID('[dbo].[TsDynDataRelationship]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'ChildEntityId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataRelationship]')) -- Ensure column exists BEGIN PRINT '... 12.10. Adding index IX_TsDynDataRelationship_ChildEntityId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataRelationship_ChildEntityId] ON [dbo].[TsDynDataRelationship] ([ChildEntityId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- *** 12b. Rename ToSIC_EAV_Values to TsDynDataValue and related objects PRINT '12b. Renaming table ToSIC_EAV_Values to TsDynDataValue and related objects'; -- 12b.1. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionCreated IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionCreated' AND parent_object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.1. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionCreated'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionCreated]; END -- 12b.2. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionModified IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionModified' AND parent_object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.2. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionModified'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionModified]; END -- 12b.3. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted' AND parent_object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.3. Dropping FK FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP CONSTRAINT [FK_ToSIC_EAV_Values_TsDynDataTransactionDeleted]; END -- 12b.4. Drop old complex index IX_EAV_Values1 from ToSIC_EAV_Values (as they included TransactionId columns) IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_EAV_Values1' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.4. Dropping Index IX_EAV_Values1'; DROP INDEX [IX_EAV_Values1] ON [dbo].[ToSIC_EAV_Values]; END -- 12b.5. Drop old complex index IX_EAV_Values2 from ToSIC_EAV_Values (as they included TransactionId columns) IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_EAV_Values2' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.5. Dropping Index IX_EAV_Values2'; DROP INDEX [IX_EAV_Values2] ON [dbo].[ToSIC_EAV_Values]; END -- 12b.6. Dropping Index IX_ToSIC_EAV_Values_TransactionIdCreated IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdCreated' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.6. Dropping Index IX_ToSIC_EAV_Values_TransactionIdCreated'; DROP INDEX [IX_ToSIC_EAV_Values_TransactionIdCreated] ON [dbo].[ToSIC_EAV_Values]; END -- 12b.7. Dropping Index IX_ToSIC_EAV_Values_TransactionIdModified IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdModified' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.7. Dropping Index IX_ToSIC_EAV_Values_TransactionIdModified'; DROP INDEX [IX_ToSIC_EAV_Values_TransactionIdModified] ON [dbo].[ToSIC_EAV_Values]; END -- 12b.8. Dropping Index IX_ToSIC_EAV_Values_TransactionIdDeleted IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Values_TransactionIdDeleted' AND object_id = OBJECT_ID('[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.8. Dropping Index IX_ToSIC_EAV_Values_TransactionIdDeleted'; DROP INDEX [IX_ToSIC_EAV_Values_TransactionIdDeleted] ON [dbo].[ToSIC_EAV_Values]; END -- 12b.9. Dropping column TransactionIdCreated from ToSIC_EAV_Values IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.9. Dropping column TransactionIdCreated from ToSIC_EAV_Values'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP COLUMN [TransactionIdCreated]; END -- 12b.10. Dropping column TransactionIdModified from ToSIC_EAV_Values IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.10. Dropping column TransactionIdModified from ToSIC_EAV_Values'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP COLUMN [TransactionIdModified]; END -- 12b.11. Dropping column TransactionIdDeleted from ToSIC_EAV_Values IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = Object_ID(N'[dbo].[ToSIC_EAV_Values]')) BEGIN PRINT '... 12b.11. Dropping column TransactionIdDeleted from ToSIC_EAV_Values'; ALTER TABLE [dbo].[ToSIC_EAV_Values] DROP COLUMN [TransactionIdDeleted]; END -- 12b.12. Renaming table ToSIC_EAV_Values to TsDynDataValue IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Values' AND type = 'U') BEGIN PRINT '... 12b.12. Renaming table ToSIC_EAV_Values to TsDynDataValue'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Values]', N'TsDynDataValue'; END -- 12b.12b. Renaming column ValueID to ValueId in TsDynDataValue IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ValueID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.12b.Renaming column ValueID to ValueId in TsDynDataValue'; EXEC sp_rename N'[dbo].[TsDynDataValue].[ValueID]', N'ValueId', N'COLUMN'; END -- 12b.14. Renaming column EntityID to EntityId in TsDynDataValue IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'EntityID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.14. Renaming column EntityID to EntityId in TsDynDataValue'; EXEC sp_rename N'[dbo].[TsDynDataValue].[EntityID]', N'EntityId', N'COLUMN'; END -- 12b.15. Renaming column AttributeID to AttributeId in TsDynDataValue IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'AttributeID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.15. Renaming column AttributeID to AttributeId in TsDynDataValue (defensive)'; EXEC sp_rename N'[dbo].[TsDynDataValue].[AttributeID]', N'AttributeId', N'COLUMN'; END -- 12b.16. Renaming PK_ToSIC_EAV_Values to PK_TsDynDataValue IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Values' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.16. Renaming PK_ToSIC_EAV_Values to PK_TsDynDataValue'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Values]', N'PK_TsDynDataValue', N'OBJECT'; END -- 12b.17. Renaming FK FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Values to FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Values' AND parent_object_id = OBJECT_ID('[dbo].[ToSIC_EAV_ValuesDimensions]')) BEGIN PRINT '... 12b.17. Renaming FK FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Values to FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Values]', N'FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue', N'OBJECT'; END -- 12b.18. Renaming FK FK_ToSIC_EAV_Values_ToSIC_EAV_Entities to FK_TsDynDataValue_TsDynDataEntity IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_ToSIC_EAV_Entities' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.18. Renaming FK FK_ToSIC_EAV_Values_ToSIC_EAV_Entities to FK_TsDynDataValue_TsDynDataEntity'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_ToSIC_EAV_Entities]', N'FK_TsDynDataValue_TsDynDataEntity', N'OBJECT'; END -- 12b.19. Renaming FK FK_ToSIC_EAV_Values_TsDynDataAttribute to FK_TsDynDataValue_TsDynDataAttribute IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Values_TsDynDataAttribute' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.19. Renaming FK FK_ToSIC_EAV_Values_TsDynDataAttribute to FK_TsDynDataValue_TsDynDataAttribute'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Values_TsDynDataAttribute]', N'FK_TsDynDataValue_TsDynDataAttribute', N'OBJECT'; END -- 12b.20. Adding index IX_TsDynDataValue_EntityId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataValue_EntityId' AND object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) AND OBJECT_ID('[dbo].[TsDynDataValue]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'EntityId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.20. Adding index IX_TsDynDataValue_EntityId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_EntityId] ON [dbo].[TsDynDataValue] ([EntityId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 12b.21. Adding index IX_TsDynDataValue_AttributeId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataValue_AttributeId' AND object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) AND OBJECT_ID('[dbo].[TsDynDataValue]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'AttributeId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.21. Adding index IX_TsDynDataValue_AttributeId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_AttributeId] ON [dbo].[TsDynDataValue] ([AttributeId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 12b.22. Adding index IX_TsDynDataValue_AttributeId_EntityId IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataValue_AttributeId_EntityId' AND object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) AND OBJECT_ID('[dbo].[TsDynDataValue]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'AttributeId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'EntityId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.22. Adding index IX_TsDynDataValue_AttributeId_EntityId'; CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_AttributeId_EntityId] ON [dbo].[TsDynDataValue] ([AttributeId] ASC, [EntityId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- 12b.23. Adding index IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value' AND object_id = OBJECT_ID('[dbo].[TsDynDataValue]')) AND OBJECT_ID('[dbo].[TsDynDataValue]', 'U') IS NOT NULL AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'EntityId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'AttributeId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'ValueId' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) AND EXISTS (SELECT * FROM sys.columns WHERE Name = 'Value' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValue]')) BEGIN PRINT '... 12b.23. Adding index IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value'; CREATE NONCLUSTERED INDEX [IX_TsDynDataValue_EntityId_AttributeId_ValueId_Include_Value] ON [dbo].[TsDynDataValue] ([EntityId] ASC, [AttributeId] ASC, [ValueId] ASC) INCLUDE([Value]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- *** 14. Renaming table ToSIC_EAV_Dimensions to TsDynDataDimension and related objects PRINT '14. Renaming table ToSIC_EAV_Dimensions to TsDynDataDimension and related objects'; -- 14.1. Rename table ToSIC_EAV_Dimensions to TsDynDataDimension IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_Dimensions' AND type = 'U') BEGIN PRINT '... 14.1. Renaming table ToSIC_EAV_Dimensions to TsDynDataDimension'; EXEC sp_rename N'[dbo].[ToSIC_EAV_Dimensions]', N'TsDynDataDimension'; END -- 14.2. Rename column DimensionID to DimensionId in TsDynDataDimension IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'DimensionID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.2. Renaming column DimensionID to DimensionId in TsDynDataDimension'; EXEC sp_rename N'[dbo].[TsDynDataDimension].[DimensionID]', N'DimensionId', N'COLUMN'; END -- 14.3. Rename Primary Key constraint for TsDynDataDimension IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_Dimensions' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.3. Renaming PK_ToSIC_EAV_Dimensions to PK_TsDynDataDimension'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_Dimensions]', N'PK_TsDynDataDimension', N'OBJECT'; END -- 14.4. Renaming FK FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Dimensions1 to FK_TsDynDataDimension_TsDynDataDimension IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Dimensions1' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.4. Renaming FK FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Dimensions1 to FK_TsDynDataDimension_TsDynDataDimension'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Dimensions_ToSIC_EAV_Dimensions1]', N'FK_TsDynDataDimension_TsDynDataDimension', N'OBJECT'; END -- 14.5. Renaming FK FK_ToSIC_EAV_Dimensions_TsDynDataZone to FK_TsDynDataDimension_TsDynDataZone IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_Dimensions_TsDynDataZone' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.5. Renaming FK FK_ToSIC_EAV_Dimensions_TsDynDataZone to FK_TsDynDataDimension_TsDynDataZone'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_Dimensions_TsDynDataZone]', N'FK_TsDynDataDimension_TsDynDataZone', N'OBJECT'; END -- 14.6. Renaming Default Constraint DF_ToSIC_EAV_Dimensions_Active to DF_TsDynDataDimension_Active IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_Dimensions_Active' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.6. Renaming Default Constraint DF_ToSIC_EAV_Dimensions_Active to DF_TsDynDataDimension_Active'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_Dimensions_Active]', N'DF_TsDynDataDimension_Active', N'OBJECT'; END -- 14.7. Renaming Index IX_ToSIC_EAV_Dimensions_ZoneId to IX_TsDynDataDimension_ZoneId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ToSIC_EAV_Dimensions_ZoneId' AND object_id = OBJECT_ID('[dbo].[TsDynDataDimension]')) BEGIN PRINT '... 14.7. Renaming Index IX_ToSIC_EAV_Dimensions_ZoneId to IX_TsDynDataDimension_ZoneId'; EXEC sp_rename N'[dbo].[TsDynDataDimension].[IX_ToSIC_EAV_Dimensions_ZoneId]', N'IX_TsDynDataDimension_ZoneId', N'INDEX'; END -- *** 15. Renaming table ToSIC_EAV_ValuesDimensions to TsDynDataValueDimension and related objects PRINT '15. Renaming table ToSIC_EAV_ValuesDimensions to TsDynDataValueDimension and related objects'; -- 15.1. Rename table ToSIC_EAV_ValuesDimensions to TsDynDataValueDimension IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ToSIC_EAV_ValuesDimensions' AND type = 'U') BEGIN PRINT '... 15.1. Renaming table ToSIC_EAV_ValuesDimensions to TsDynDataValueDimension'; EXEC sp_rename N'[dbo].[ToSIC_EAV_ValuesDimensions]', N'TsDynDataValueDimension'; END -- 15.2. Rename column ValueID to ValueId in TsDynDataValueDimension IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'ValueID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.2. Renaming column ValueID to ValueId in TsDynDataValueDimension'; EXEC sp_rename N'[dbo].[TsDynDataValueDimension].[ValueID]', N'ValueId', N'COLUMN'; END -- 15.3. Rename column DimensionID to DimensionId in TsDynDataValueDimension IF EXISTS (SELECT * FROM sys.columns WHERE Name COLLATE Latin1_General_CS_AS = N'DimensionID' AND Object_ID = Object_ID(N'[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.3. Renaming column DimensionID to DimensionId in TsDynDataValueDimension'; EXEC sp_rename N'[dbo].[TsDynDataValueDimension].[DimensionID]', N'DimensionId', N'COLUMN'; END -- 15.4. Rename Primary Key constraint for TsDynDataValueDimension IF EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'PK_ToSIC_EAV_ValuesDimensions' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.4. Renaming PK_ToSIC_EAV_ValuesDimensions to PK_TsDynDataValueDimension'; EXEC sp_rename N'[dbo].[PK_ToSIC_EAV_ValuesDimensions]', N'PK_TsDynDataValueDimension', N'OBJECT'; END -- 15.5. Renaming FK FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Dimensions to FK_TsDynDataValueDimension_TsDynDataDimension IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Dimensions' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.5. Renaming FK FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Dimensions to FK_TsDynDataValueDimension_TsDynDataDimension'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_ValuesDimensions_ToSIC_EAV_Dimensions]', N'FK_TsDynDataValueDimension_TsDynDataDimension', N'OBJECT'; END -- 15.6. Renaming FK FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue to FK_TsDynDataValueDimension_TsDynDataValue IF EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.6. Renaming FK FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue to FK_TsDynDataValueDimension_TsDynDataValue'; EXEC sp_rename N'[dbo].[FK_ToSIC_EAV_ValuesDimensions_TsDynDataValue]', N'FK_TsDynDataValueDimension_TsDynDataValue', N'OBJECT'; END -- 15.7. Renaming Default Constraint DF_ToSIC_EAV_ValuesDimensions_ReadOnly to DF_TsDynDataValueDimension_ReadOnly IF EXISTS (SELECT * FROM sys.default_constraints WHERE name = 'DF_ToSIC_EAV_ValuesDimensions_ReadOnly' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataValueDimension]')) BEGIN PRINT '... 15.7. Renaming Default Constraint DF_ToSIC_EAV_ValuesDimensions_ReadOnly to DF_TsDynDataValueDimension_ReadOnly'; EXEC sp_rename N'[dbo].[DF_ToSIC_EAV_ValuesDimensions_ReadOnly]', N'DF_TsDynDataValueDimension_ReadOnly', N'OBJECT'; END -- *** 16. TransactionId column => TransId migration script for all tables PRINT '16. TransactionId column => TransId migration script for all tables'; -- 16.1. Processing table TsDynDataApp -- 16.1.1. Rename column TransactionIdCreated to TransCreatedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.1. Renaming column TsDynDataApp.TransactionIdCreated to TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[TransactionIdCreated]', N'TransCreatedId', N'COLUMN'; END -- 16.1.2. Rename column TransactionIdModified to TransModifiedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.2. Renaming column TsDynDataApp.TransactionIdModified to TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[TransactionIdModified]', N'TransModifiedId', N'COLUMN'; END -- 16.1.3. Rename column TransactionIdDeleted to TransDeletedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.3. Renaming column TsDynDataApp.TransactionIdDeleted to TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[TransactionIdDeleted]', N'TransDeletedId', N'COLUMN'; END -- 16.1.4. Rename index IX_TsDynDataApp_TransactionIdCreated to IX_TsDynDataApp_TransCreatedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdCreated' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransCreatedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.4. Renaming index IX_TsDynDataApp_TransactionIdCreated to IX_TsDynDataApp_TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[IX_TsDynDataApp_TransactionIdCreated]', N'IX_TsDynDataApp_TransCreatedId', N'INDEX'; END -- 16.1.5. Rename index IX_TsDynDataApp_TransactionIdModified to IX_TsDynDataApp_TransModifiedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdModified' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransModifiedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.5. Renaming index IX_TsDynDataApp_TransactionIdModified to IX_TsDynDataApp_TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[IX_TsDynDataApp_TransactionIdModified]', N'IX_TsDynDataApp_TransModifiedId', N'INDEX'; END -- 16.1.6. Rename index IX_TsDynDataApp_TransactionIdDeleted to IX_TsDynDataApp_TransDeletedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransactionIdDeleted' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataApp_TransDeletedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataApp]')) BEGIN PRINT '... 16.1.6. Renaming index IX_TsDynDataApp_TransactionIdDeleted to IX_TsDynDataApp_TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataApp].[IX_TsDynDataApp_TransactionIdDeleted]', N'IX_TsDynDataApp_TransDeletedId', N'INDEX'; END -- 16.2. Processing table TsDynDataAttribute -- 16.2.1. Rename column TransactionIdCreated to TransCreatedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.1. Renaming column TsDynDataAttribute.TransactionIdCreated to TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[TransactionIdCreated]', N'TransCreatedId', N'COLUMN'; END -- 16.2.2. Rename column TransactionIdModified to TransModifiedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.2. Renaming column TsDynDataAttribute.TransactionIdModified to TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[TransactionIdModified]', N'TransModifiedId', N'COLUMN'; END -- 16.2.3. Rename column TransactionIdDeleted to TransDeletedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.3. Renaming column TsDynDataAttribute.TransactionIdDeleted to TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[TransactionIdDeleted]', N'TransDeletedId', N'COLUMN'; END -- 16.2.4. Rename index IX_TsDynDataAttribute_TransactionIdCreated to IX_TsDynDataAttribute_TransCreatedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransactionIdCreated' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransCreatedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.4. Renaming index IX_TsDynDataAttribute_TransactionIdCreated to IX_TsDynDataAttribute_TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_TsDynDataAttribute_TransactionIdCreated]', N'IX_TsDynDataAttribute_TransCreatedId', N'INDEX'; END -- 16.2.5. Rename index IX_TsDynDataAttribute_TransactionIdModified to IX_TsDynDataAttribute_TransModifiedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransactionIdModified' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransModifiedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.5. Renaming index IX_TsDynDataAttribute_TransactionIdModified to IX_TsDynDataAttribute_TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_TsDynDataAttribute_TransactionIdModified]', N'IX_TsDynDataAttribute_TransModifiedId', N'INDEX'; END -- 16.2.6. Rename index IX_TsDynDataAttribute_TransactionIdDeleted to IX_TsDynDataAttribute_TransDeletedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransactionIdDeleted' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataAttribute_TransDeletedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataAttribute]')) BEGIN PRINT '... 16.2.6. Renaming index IX_TsDynDataAttribute_TransactionIdDeleted to IX_TsDynDataAttribute_TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataAttribute].[IX_TsDynDataAttribute_TransactionIdDeleted]', N'IX_TsDynDataAttribute_TransDeletedId', N'INDEX'; END -- 16.3. Processing table TsDynDataContentType -- 16.3.1. Rename column TransactionIdCreated to TransCreatedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.1. Renaming column TsDynDataContentType.TransactionIdCreated to TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[TransactionIdCreated]', N'TransCreatedId', N'COLUMN'; END -- 16.3.2. Rename column TransactionIdModified to TransModifiedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.2. Renaming column TsDynDataContentType.TransactionIdModified to TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[TransactionIdModified]', N'TransModifiedId', N'COLUMN'; END -- 16.3.3. Rename column TransactionIdDeleted to TransDeletedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.3. Renaming column TsDynDataContentType.TransactionIdDeleted to TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[TransactionIdDeleted]', N'TransDeletedId', N'COLUMN'; END -- 16.3.4. Rename index IX_TsDynDataContentType_TransactionIdCreated to IX_TsDynDataContentType_TransCreatedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransactionIdCreated' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransCreatedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.4. Renaming index IX_TsDynDataContentType_TransactionIdCreated to IX_TsDynDataContentType_TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_TsDynDataContentType_TransactionIdCreated]', N'IX_TsDynDataContentType_TransCreatedId', N'INDEX'; END -- 16.3.5. Rename index IX_TsDynDataContentType_TransactionIdModified to IX_TsDynDataContentType_TransModifiedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransactionIdModified' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransModifiedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.5. Renaming index IX_TsDynDataContentType_TransactionIdModified to IX_TsDynDataContentType_TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_TsDynDataContentType_TransactionIdModified]', N'IX_TsDynDataContentType_TransModifiedId', N'INDEX'; END -- 16.3.6. Rename index IX_TsDynDataContentType_TransactionIdDeleted to IX_TsDynDataContentType_TransDeletedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransactionIdDeleted' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataContentType_TransDeletedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataContentType]')) BEGIN PRINT '... 16.3.6. Renaming index IX_TsDynDataContentType_TransactionIdDeleted to IX_TsDynDataContentType_TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataContentType].[IX_TsDynDataContentType_TransactionIdDeleted]', N'IX_TsDynDataContentType_TransDeletedId', N'INDEX'; END -- 16.4. Processing table TsDynDataEntity -- 16.4.1. Rename column TransactionIdCreated to TransCreatedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.1. Renaming column TsDynDataEntity.TransactionIdCreated to TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[TransactionIdCreated]', N'TransCreatedId', N'COLUMN'; END -- 16.4.2. Rename column TransactionIdModified to TransModifiedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.2. Renaming column TsDynDataEntity.TransactionIdModified to TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[TransactionIdModified]', N'TransModifiedId', N'COLUMN'; END -- 16.4.3. Rename column TransactionIdDeleted to TransDeletedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.3. Renaming column TsDynDataEntity.TransactionIdDeleted to TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[TransactionIdDeleted]', N'TransDeletedId', N'COLUMN'; END -- 16.4.4. Rename index IX_TsDynDataEntity_TransactionIdCreated to IX_TsDynDataEntity_TransCreatedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransactionIdCreated' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransCreatedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.4. Renaming index IX_TsDynDataEntity_TransactionIdCreated to IX_TsDynDataEntity_TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_TsDynDataEntity_TransactionIdCreated]', N'IX_TsDynDataEntity_TransCreatedId', N'INDEX'; END -- 16.4.5. Rename index IX_TsDynDataEntity_TransactionIdModified to IX_TsDynDataEntity_TransModifiedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransactionIdModified' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransModifiedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.5. Renaming index IX_TsDynDataEntity_TransactionIdModified to IX_TsDynDataEntity_TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_TsDynDataEntity_TransactionIdModified]', N'IX_TsDynDataEntity_TransModifiedId', N'INDEX'; END -- 16.4.6. Rename index IX_TsDynDataEntity_TransactionIdDeleted to IX_TsDynDataEntity_TransDeletedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransactionIdDeleted' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataEntity_TransDeletedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataEntity]')) BEGIN PRINT '... 16.4.6. Renaming index IX_TsDynDataEntity_TransactionIdDeleted to IX_TsDynDataEntity_TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataEntity].[IX_TsDynDataEntity_TransactionIdDeleted]', N'IX_TsDynDataEntity_TransDeletedId', N'INDEX'; END -- 16.5. Processing table TsDynDataZone -- 16.5.1. Rename column TransactionIdCreated to TransCreatedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdCreated' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransCreatedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.1. Renaming column TsDynDataZone.TransactionIdCreated to TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[TransactionIdCreated]', N'TransCreatedId', N'COLUMN'; END -- 16.5.2. Rename column TransactionIdModified to TransModifiedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdModified' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransModifiedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.2. Renaming column TsDynDataZone.TransactionIdModified to TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[TransactionIdModified]', N'TransModifiedId', N'COLUMN'; END -- 16.5.3. Rename column TransactionIdDeleted to TransDeletedId IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransactionIdDeleted' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.3. Renaming column TsDynDataZone.TransactionIdDeleted to TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[TransactionIdDeleted]', N'TransDeletedId', N'COLUMN'; END -- 16.5.4. Rename index IX_TsDynDataZone_TransactionIdCreated to IX_TsDynDataZone_TransCreatedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdCreated' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransCreatedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.4. Renaming index IX_TsDynDataZone_TransactionIdCreated to IX_TsDynDataZone_TransCreatedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[IX_TsDynDataZone_TransactionIdCreated]', N'IX_TsDynDataZone_TransCreatedId', N'INDEX'; END -- 16.5.5. Rename index IX_TsDynDataZone_TransactionIdModified to IX_TsDynDataZone_TransModifiedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdModified' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransModifiedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.5. Renaming index IX_TsDynDataZone_TransactionIdModified to IX_TsDynDataZone_TransModifiedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[IX_TsDynDataZone_TransactionIdModified]', N'IX_TsDynDataZone_TransModifiedId', N'INDEX'; END -- 16.5.6. Rename index IX_TsDynDataZone_TransactionIdDeleted to IX_TsDynDataZone_TransDeletedId IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransactionIdDeleted' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) AND NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataZone_TransDeletedId' AND object_id = OBJECT_ID(N'[dbo].[TsDynDataZone]')) BEGIN PRINT '... 16.5.6. Renaming index IX_TsDynDataZone_TransactionIdDeleted to IX_TsDynDataZone_TransDeletedId'; EXEC sp_rename N'[dbo].[TsDynDataZone].[IX_TsDynDataZone_TransactionIdDeleted]', N'IX_TsDynDataZone_TransDeletedId', N'INDEX'; END -- 17. Adding new table type TsDynDataIntList -- 2025-05-12, stv, test alternative strategy to load values -- DROP TYPE IF EXISTS [dbo].[TsDynDataIntList]; -- --IF TYPE_ID(N'[dbo].[TsDynDataIntList]') IS NULL --BEGIN -- PRINT '... 17.1. Creating new table type TsDynDataIntList for TVP'; -- CREATE TYPE [dbo].[TsDynDataIntList] AS TABLE -- ( -- Id int NOT NULL -- ); --END -- PRINT '*** Finished migration script.'; GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/20.00.05.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO -- ===================================================================== -- Switch default value from GETDATE() to GETUTCDATE() on [dbo].[TsDynDataTransaction].[Timestamp] if the current default uses GETDATE() -- ===================================================================== DECLARE @Definition nvarchar(max); SELECT @Definition = dc.definition FROM sys.default_constraints dc JOIN sys.columns c ON c.default_object_id = dc.object_id JOIN sys.tables t ON t.object_id = c.object_id JOIN sys.schemas s ON s.schema_id = t.schema_id WHERE s.name = 'dbo' AND t.name = 'TsDynDataTransaction' AND c.name = 'Timestamp' AND dc.name = 'DF_TsDynDataTransaction_Timestamp'; IF @Definition IS NOT NULL AND UPPER(REPLACE(@Definition, ' ', '')) LIKE '%GETDATE()%' BEGIN ALTER TABLE [dbo].[TsDynDataTransaction] DROP CONSTRAINT [DF_TsDynDataTransaction_Timestamp]; ALTER TABLE [dbo].[TsDynDataTransaction] ADD CONSTRAINT [DF_TsDynDataTransaction_Timestamp] DEFAULT (GETUTCDATE()) FOR [Timestamp]; END GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/21.00.00.SqlDataProvider ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- make sure sql rolls back automatically in case of error. SET XACT_ABORT ON GO -- ===================================================================== -- Ensure TsDynDataHistory exists and has ParentRef (eg. "app-42") -- ===================================================================== -- Add ParentRef column on existing installations IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ParentRef' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataHistory]')) AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... Adding column [ParentRef] to [dbo].[TsDynDataHistory]'; ALTER TABLE [dbo].[TsDynDataHistory] ADD [ParentRef] [nvarchar](250) NULL; END -- Add indexes for ParentRef IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataHistory_ParentRef' AND object_id = OBJECT_ID('[dbo].[TsDynDataHistory]')) AND OBJECT_ID('[dbo].[TsDynDataHistory]', 'U') IS NOT NULL BEGIN PRINT '... Adding index IX_TsDynDataHistory_ParentRef'; CREATE NONCLUSTERED INDEX [IX_TsDynDataHistory_ParentRef] ON [dbo].[TsDynDataHistory] ([ParentRef] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; END -- ===================================================================== -- TsDynDataRelationship: add ChildExternalId to support undelete -- ===================================================================== -- Add ChildExternalId column on existing installations IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ChildExternalId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataRelationship]')) AND OBJECT_ID('[dbo].[TsDynDataRelationship]', 'U') IS NOT NULL BEGIN PRINT '... Adding column [ChildExternalId] to [dbo].[TsDynDataRelationship]'; ALTER TABLE [dbo].[TsDynDataRelationship] ADD [ChildExternalId] [uniqueidentifier] NULL; END -- Remove TransDeletedId (was a short-lived experiment) IF OBJECT_ID('[dbo].[TsDynDataRelationship]', 'U') IS NOT NULL BEGIN IF EXISTS ( SELECT * FROM sys.foreign_keys WHERE name = 'FK_TsDynDataRelationship_TsDynDataTransactionDeleted' AND parent_object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]') ) BEGIN PRINT '... Dropping FK FK_TsDynDataRelationship_TsDynDataTransactionDeleted'; ALTER TABLE [dbo].[TsDynDataRelationship] DROP CONSTRAINT [FK_TsDynDataRelationship_TsDynDataTransactionDeleted]; END IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_TsDynDataRelationship_TransDeletedId' AND object_id = OBJECT_ID('[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... Dropping index IX_TsDynDataRelationship_TransDeletedId'; DROP INDEX [IX_TsDynDataRelationship_TransDeletedId] ON [dbo].[TsDynDataRelationship]; END IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'TransDeletedId' AND Object_ID = OBJECT_ID(N'[dbo].[TsDynDataRelationship]')) BEGIN PRINT '... Dropping column [TransDeletedId] from [dbo].[TsDynDataRelationship]'; ALTER TABLE [dbo].[TsDynDataRelationship] DROP COLUMN [TransDeletedId]; END END GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/Migrate.SqlDataProvider ================================================ -- =================================== -- 2sxc upgrade: rename packages, definitions & selected settings -- 1) Package and module definitions IF EXISTS (SELECT 1 FROM dbo.Packages WHERE [Name] IN ('2SexyContent','2SexyContent-App')) BEGIN DECLARE @SxcModuleDefId INT, @SxcAppModuleDefId INT, @DelSxcModuleDefId INT, @DelSxcAppModuleDefId INT; SET @SxcModuleDefId = (SELECT TOP 1 ModuleDefID FROM dbo.ModuleDefinitions WHERE DefinitionName IN ('2sxc')); SET @SxcAppModuleDefId = (SELECT TOP 1 ModuleDefID FROM dbo.ModuleDefinitions WHERE DefinitionName IN ('2sxc-app')); SET @DelSxcModuleDefId = (SELECT TOP 1 ModuleDefID FROM dbo.ModuleDefinitions WHERE DefinitionName IN ('2Sexy Content')); SET @DelSxcAppModuleDefId = (SELECT TOP 1 ModuleDefID FROM dbo.ModuleDefinitions WHERE DefinitionName IN ('2Sexy Content App')); UPDATE dbo.Modules SET ModuleDefID = @SxcModuleDefId WHERE ModuleDefID = @DelSxcModuleDefId; UPDATE dbo.Modules SET ModuleDefID = @SxcAppModuleDefId WHERE ModuleDefID = @DelSxcAppModuleDefId; DELETE FROM dbo.Packages WHERE [Name] IN ('2SexyContent','2SexyContent-App'); DELETE FROM dbo.ModuleDefinitions WHERE DefinitionName IN ('2Sexy Content', '2Sexy Content App'); END GO -- 2) PortalSettings: specific key rename UPDATE dbo.PortalSettings SET SettingName = 'TsDynDataZoneId' WHERE SettingName = 'ToSIC_SexyContent_ZoneID'; -- 3) ModuleSettings: multiple specific key renames UPDATE dbo.ModuleSettings SET SettingName = 'TsDynDataApp' WHERE SettingName = 'ToSIC_SexyContent_AppName'; UPDATE dbo.ModuleSettings SET SettingName = 'TsDynDataContentGroup' WHERE SettingName = 'ToSIC_SexyContent_ContentGroupGuid'; UPDATE dbo.ModuleSettings SET SettingName = 'TsDynDataPreview' WHERE SettingName = 'ToSIC_SexyContent_PreviewTemplateId'; -- 4) TabModuleSettings: same renames as ModuleSettings UPDATE dbo.TabModuleSettings SET SettingName = 'TsDynDataApp' WHERE SettingName = 'ToSIC_SexyContent_AppName'; UPDATE dbo.TabModuleSettings SET SettingName = 'TsDynDataContentGroup' WHERE SettingName = 'ToSIC_SexyContent_ContentGroupGuid'; UPDATE dbo.TabModuleSettings SET SettingName = 'TsDynDataPreview' WHERE SettingName = 'ToSIC_SexyContent_PreviewTemplateId'; GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/RequireLatest.SqlDataProvider ================================================ -- This SQL file is used for the in 2sxc package (in .dnn manifest file) for all other modules, which must not be installed or upgraded if the 2sxc module fails to install DECLARE @requireLatestVersion NVARCHAR(20) = '20.00.05', @installedVersion NVARCHAR(20); SELECT @installedVersion = ISNULL( (SELECT [Version] FROM Packages WHERE [Name] = N'2sxc'), '99.99.99' ) -- skip further execution if requireLatestVersion > installedVersion IF ( TRY_CAST(PARSENAME(@requireLatestVersion, 3) AS INT) > TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) OR ( TRY_CAST(PARSENAME(@requireLatestVersion, 3) AS INT) = TRY_CAST(PARSENAME(@installedVersion, 3) AS INT) AND ( TRY_CAST(PARSENAME(@requireLatestVersion, 2) AS INT) > TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) OR ( TRY_CAST(PARSENAME(@requireLatestVersion, 2) AS INT) = TRY_CAST(PARSENAME(@installedVersion, 2) AS INT) AND TRY_CAST(PARSENAME(@requireLatestVersion, 1) AS INT) > TRY_CAST(PARSENAME(@installedVersion, 1) AS INT) ) ) ) ) BEGIN RAISERROR(N'Installation Error: The latest 2sxc package includes multiple modules, and the 2sxc module (20.00.05) must be installed first, as other modules in the package depend on it. It appears that something went wrong during the installation. Please review the previous error messages for more details. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************', 16, 1); RETURN; END ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/RequireMinimal.SqlDataProvider ================================================ -- This SQL file is used for the app-module package (in .dnn manifest file) which must not be installed or upgraded if the 2sxc module fails to install DECLARE @RequiredVersion int; SET @RequiredVersion = 15; DECLARE @RequiredVersionIsInstalled int; SELECT TOP 1 @RequiredVersionIsInstalled = CASE WHEN EXISTS(SELECT * FROM {databaseOwner}[{objectQualifier}Packages] WHERE Name IN (N'2SexyContent', N'2sxc') AND CONVERT(int, LEFT([Version], CHARINDEX('.', [Version])-1)) >= @RequiredVersion) THEN CAST (1 AS BIT) ELSE CAST (0 AS BIT) END; If @RequiredVersionIsInstalled = 0 BEGIN RAISERROR(N'2sxc 15 or newer must be installed for the 2sxc module to install. Probably something else went wrong while installing - see previous errors for more information. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************', 16, 1); RETURN; END ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/SqlDataProvider/Uninstall.SqlDataProvider ================================================ -- Remove Tables DROP TABLE IF EXISTS [dbo].[TsDynDataRelationship] GO DROP TABLE IF EXISTS [dbo].[TsDynDataValueDimension] GO DROP TABLE IF EXISTS [dbo].[TsDynDataDimension] GO DROP TABLE IF EXISTS [dbo].[TsDynDataValue] GO DROP TABLE IF EXISTS [dbo].[TsDynDataEntity] GO DROP TABLE IF EXISTS [dbo].[TsDynDataHistory] GO DROP TABLE IF EXISTS [dbo].[TsDynDataAttribute] GO DROP TABLE IF EXISTS [dbo].[TsDynDataAttributeType] GO DROP TABLE IF EXISTS [dbo].[TsDynDataContentType] GO DROP TABLE IF EXISTS [dbo].[TsDynDataTargetType] GO DROP TABLE IF EXISTS [dbo].[TsDynDataApp] GO DROP TABLE IF EXISTS [dbo].[TsDynDataZone] GO DROP TABLE IF EXISTS [dbo].[TsDynDataTransaction] GO ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/license.txt ================================================ 
Everything in 2sxc is free open source 😉

2sxc itself is released under the MIT license. It also uses many other open source components with different open-source licenses, from AGPL to X11. If you want to know more, read our license page.

Be sexy - give back to the community or to those less fortunate. Contribute your work, support others - share the 💖.

And if you really benefit from 2sxc, please become a patron 🦹 - it's a great way to support the project and get some extra benefits.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnPackageBuilder/readme.md ================================================ # Additional files to build the DNN Package This folder just contains things we would remove from the root folder, to be included in the dnn package. We are trying to clean up the main folder, so this is where add-on material should be placed ## Special Cleanup folder This contains a txt file with folders that should be flushed completely on every upgrade. We need this, because the `dist/` folder can change often (compiled JavaScript) so we don't leave behind a bunch of unused JS. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnWebForms/Skins/QuickEdit.ascx ================================================ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="QuickEdit.ascx.cs" Inherits="ToSic.Sxc.Dnn.DnnWebForms.Skins.QuickEdit" %> ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnWebForms/Skins/QuickEdit.ascx.cs ================================================ using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Services; // ReSharper disable UnusedMember.Global namespace ToSic.Sxc.Dnn.DnnWebForms.Skins; public partial class QuickEdit : System.Web.UI.UserControl { private bool _isEdit; protected void Page_Load(object sender, EventArgs e) { _isEdit = DotNetNuke.Security.Permissions.TabPermissionController.HasTabPermission("EDIT"); if (!_isEdit) return; this.GetScopedService() // #RemovedV20 #OldDnnAutoJQuery .Init(Page, /*false,*/ null) .RegisterClientDependencies(Page, true, true, true); } protected void Page_PreRender(object sender, EventArgs e) { // this is temp solution, because it was required for 2sxc module instance created in skin if (!_isEdit) return; this.GetScopedService().AddHeaders(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/DnnWebForms/Skins/QuickEdit.ascx.designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace ToSic.Sxc.Dnn.DnnWebForms.Skins { public partial class QuickEdit { } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/Extensions/Imageflow/License.txt ================================================

ToSic.Imageflow.Dnn extension for DNN

2sic https://www.2sic.com/

Imazen Imageflow

AGPL-3.0 License

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/Extensions/Imageflow/ReleaseNotes.txt ================================================

Imageflow Extension for DNN

Version: 01.12.01

Changelog

  • Updated Imageflow dependencies to version 0.14.0-rc01.
  • Requires DNN version 9.11.00 or higher.
  • Fully compatible with DNN version 10.00.00.

Notes

  • During installation, the extension will automatically unregister the older ImageResizer HTTP module in web.config.
================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/Extensions/ToSic_vCard/vCard.ashx ================================================ <%@ WebHandler Language="C#" Class="VCardHandler" %> using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Web; public class VCardHandler : IHttpHandler { private const string PhotoPathBase = "~"; public void ProcessRequest(HttpContext context) { var card = new VCard { FirstName = context.Request.QueryString["FirstName"], LastName = context.Request.QueryString["LastName"], Organization = context.Request.QueryString["Organization"], JobTitle = context.Request.QueryString["JobTitle"], StreetAddress = context.Request.QueryString["Address"], Zip = context.Request.QueryString["Zip"], City = context.Request.QueryString["City"], CountryName = context.Request.QueryString["Country"], Phone = context.Request.QueryString["Phone"], PhoneCompany = context.Request.QueryString["PhoneCompany"], Mobile = context.Request.QueryString["Mobile"], Email = context.Request.QueryString["Email"], Url = context.Request.QueryString["Url"] }; if (!string.IsNullOrWhiteSpace(context.Request.QueryString["Photo"])) card.PhotoPath = context.Server.MapPath(PhotoPathBase + context.Request.QueryString["Photo"]); var response = context.Response; response.ContentType = "text/vcard"; var fileName = card.FirstName + " " + card.LastName; if (string.IsNullOrWhiteSpace(fileName)) fileName = card.Organization; if (string.IsNullOrWhiteSpace(fileName)) fileName = "contact"; fileName += ".vcf"; // source: http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http string contentDisposition; if (context.Request.Browser.Browser == "IE") // removed version check contentDisposition = "attachment; filename=" + Uri.EscapeDataString(fileName); else if (context.Request.Browser.Browser == "Safari") contentDisposition = "attachment; filename=" + fileName; else contentDisposition = "attachment; filename*=UTF-8''" + Uri.EscapeDataString(fileName); response.AddHeader("Content-Disposition", contentDisposition); //response.AddHeader("Content-Disposition", "attachment; fileName=" + fileName + ".vcf"); var cardString = card.ToString(); var inputEncoding = Encoding.Default; var outputEncoding = Encoding.GetEncoding(28591); var cardBytes = inputEncoding.GetBytes(cardString); var outputBytes = Encoding.Convert(inputEncoding, outputEncoding, cardBytes); response.OutputStream.Write(outputBytes, 0, outputBytes.Length); } public bool IsReusable { get { return false; } } internal class VCard { private const string AddressType = "WORK"; public string FirstName { get; set; } public string LastName { get; set; } public string Organization { get; set; } public string JobTitle { get; set; } public string StreetAddress { get; set; } public string Zip { get; set; } public string City { get; set; } public string CountryName { get; set; } public string Phone { get; set; } public string PhoneCompany { get; set; } public string Mobile { get; set; } public string Email { get; set; } public string Url { get; set; } public string PhotoPath { get; set; } public override string ToString() { var builder = new StringBuilder(); builder.AppendLine("BEGIN:VCARD"); builder.AppendLine("VERSION:2.1"); // Name builder.AppendLine("N;CHARSET=iso-8859-1:" + LastName + ";" + FirstName); // Full name if (string.IsNullOrWhiteSpace(FirstName) && string.IsNullOrWhiteSpace(FirstName)) builder.AppendLine("FN;CHARSET=iso-8859-1:" + Organization); else builder.AppendLine("FN;CHARSET=iso-8859-1:" + FirstName + " " + LastName); // Address builder.Append("ADR;" + AddressType + ";PREF;CHARSET=iso-8859-1:;;"); builder.Append(StreetAddress + ";"); builder.Append(City + ";;"); builder.Append(Zip + ";"); builder.AppendLine(CountryName); // Other data builder.AppendLine("ORG;CHARSET=iso-8859-1:" + Organization); builder.AppendLine("TITLE;CHARSET=iso-8859-1:" + JobTitle); builder.AppendLine("TEL;" + AddressType + ";VOICE;CHARSET=iso-8859-1:" + Phone); if (!string.IsNullOrWhiteSpace(PhoneCompany)) builder.AppendLine("X-MS-TEL;VOICE;COMPANY:" + PhoneCompany); builder.AppendLine("TEL;CELL;VOICE:" + Mobile); builder.AppendLine("URL;" + AddressType + ":" + Url); builder.AppendLine("EMAIL;PREF;INTERNET:" + Email); // Add image if (PhotoPath != null) { builder.AppendLine("PHOTO;ENCODING=BASE64;TYPE=JPEG:"); builder.AppendLine(CreateThumbnail(PhotoPath, 92, 92)); builder.AppendLine(string.Empty); } builder.AppendLine("END:VCARD"); return builder.ToString(); } } internal static string CreateThumbnail(string lcFilename, int lnWidth, int lnHeight) { var loBmp = new Bitmap(lcFilename); int lnNewWidth; int lnNewHeight; // If the image is smaller than a thumbnail if (loBmp.Width < lnWidth && loBmp.Height < lnHeight) { lnNewWidth = loBmp.Width; lnNewHeight = loBmp.Height; } else { decimal lnRatio; if (loBmp.Width > loBmp.Height) { lnRatio = (decimal)lnWidth / loBmp.Width; lnNewWidth = lnWidth; var lnTemp = loBmp.Height * lnRatio; lnNewHeight = (int)lnTemp; } else { lnRatio = (decimal)lnHeight / loBmp.Height; lnNewHeight = lnHeight; var lnTemp = loBmp.Width * lnRatio; lnNewWidth = (int)lnTemp; } } var bmpOut = new Bitmap(lnNewWidth, lnNewHeight); var g = Graphics.FromImage(bmpOut); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight); g.DrawImage(loBmp, 0, 0, lnNewWidth, lnNewHeight); loBmp.Dispose(); byte[] byteArray; using (var stream = new MemoryStream()) { // Save the bitmap as a JPG file with zero quality level compression. // Source: http://msdn.microsoft.com/en-us/library/bb882583.aspx var myEncoderParameters = new EncoderParameters(1); var myEncoder = System.Drawing.Imaging.Encoder.Quality; var myEncoderParameter = new EncoderParameter(myEncoder, 93L); myEncoderParameters.Param[0] = myEncoderParameter; var jgpEncoder = ImageCodecInfo.GetImageDecoders().First(c => c.FormatID == ImageFormat.Jpeg.Guid); bmpOut.Save(stream, jgpEncoder, myEncoderParameters); stream.Close(); byteArray = stream.ToArray(); } return Convert.ToBase64String(byteArray); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/GlobalUsings.cs ================================================ // Global using directives global using System; global using ToSic.Sys.DI; global using ToSic.Sys.Data; global using ToSic.Sys.Logging; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/Instructions/2sxc_App_ByUnknown_NameUnknown.dnn ================================================  This is a 2sxc App for DNN This is a 2sxc App, not a DNN Module. This is a good thing, but you're trying to install it the wrong way :) - pls visit http://2sxc.org/en/help?tag=install-app The App Author App Author http://2sxc.org/ info@2sxc.org true 07.02.00 ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/Instructions/App installation instructions.txt ================================================ This is a App for DNN and runs in 2sxc - an open source module which does everything for you. To install this app, you must first install 2sxc, then upload this ZIP into 2sxc. More: http://2sxc.org/en/help?tag=install-app ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/Instructions/License.txt ================================================ 

read my lips You are trying to install this the wrong way! By installing this, you agree to not install this. You are trying to install this the wrong way! By installing this, you agree to not install this. Ok, you made it this far - I'm not going to stop you, but it won't work. After you realize it, try installing it using 2sxc. In case you're wondering why we're making it so hard: a install-package has no "don't-install-switch". So we have to rely on you reading this to not install it! Love from Liechtenstein (yes, that's a country too) Daniel ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/Instructions/Online help to install this app.url ================================================ [InternetShortcut] URL=http://2sxc.org/en/help?tag=install-app IconFile=http://2sxc.org/Portals/_default/Skins/Microsites2014/images/favicon-2.ico IconIndex=1 ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/Instructions/ReleaseNotes.txt ================================================ 

read my lips You are trying to install this the wrong way! This is a 2sxc-App, something much cooler than a standard DNN-module. And it's easy to add and remove again, and you can install it per portal. So... If you got this far, you should read the help on installing Apps. Do NOT continue, this cannot be installed I'm serious - don't try to install this, it won't work Really, it won't. Just let it be ok? Close this dialog now, install using 2sxc. Love from Switzerland, Daniel & the 2sic team

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ImportExport/readme.md ================================================ ## Sxc folder This folder only contains a special folder called: /ImportExport/Instruction/ Reason is, that these files are always included in an exported App-ZIP. They must be here. Ideally we should move them, but then we would have duplicates on existing installations requiring clean-up, so we leave them for now. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/Properties/AssemblyInfo.cs ================================================ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.WebApi")] [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.Core")] ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/StartUp/DnnDi.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav; using ToSic.Eav.Run.Startup; using ToSic.Razor.StartUp; using ToSic.Sxc.Backend; using ToSic.Sxc.Compatibility; using ToSic.Sxc.DataSources; using ToSic.Sxc.Dnn.Integration; using ToSic.Sxc.Dnn.Startup; using ToSic.Sxc.Run.Startup; namespace ToSic.Sxc.Dnn.StartUp; [ShowApiWhenReleased(ShowApiMode.Never)] public static class DnnDi { private static bool _alreadyRegistered; public static IServiceCollection RegisterServices(IServiceCollection services) { var l = BootLog.Log.Fn("Dnn: Registering Services", timer: true); if (_alreadyRegistered) return OriginalServiceCollection; // If this is called from Dnn 7 - 9.3 it won't have services, so we must create our own // This is because the old Dnn wasn't DI aware services ??= new ServiceCollection(); l.A("Will start with DNN parts"); services .AddDnnPlugins() .AddDnnCore() // TODO: Move core stuff from AddDnn to AddDnnCore and make implementations internal .AddDnnSxcDataSources() .AddDnnDataSources() .AddDnnWebApi() .AddDnnRazor() .AddDnnCompatibility(); l.A("Will start with ADAM and 2sxc parts"); services .AddAdamWebApi() .AddSxcWebApi(); l.A("Will start with 2sxc Code / Engines etc."); services .AddSxcCustom() .AddSxcCode() .AddSxcCodeHotBuild() .AddSxcEngines(); l.A("Will start with 2sxc Core"); services .AddSxcImages() .AddSxcApps() .AddSxcEdit() .AddSxcData() .AddSxcAdam() .AddSxcAdamWork() .AddSxcBlocks() .AddSxcRender() .AddSxcCms() .AddSxcServices() .AddSxcServicesObsolete() .AddSxcWeb() .AddSxcLightSpeed() .AddSxcCodeGen() // Code generation services .AddSxcCore(); l.A("Will start with 2sxc Fallbacks and RazorBlade parts"); services .AddSxcAppsFallbacks() .AddSxcCoreFallbacks() .AddRazorBlade(); l.A("Will start with EAV and WebApi Typed parts"); services .AddEavAll() .AddEavAllFallbacks() .AddEavWebApiTypedAfterEav(); // Remember this for later, when we must start the Static Dependency Injection OriginalServiceCollection = services; _alreadyRegistered = true; l.Done(); return services; } public static IServiceCollection OriginalServiceCollection; public static IServiceCollection AddDnnPlugins(this IServiceCollection services) { // Integrate KOI Dnn-Parts services.TryAddTransient(); return services; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/StartUp/StartupDnn.cs ================================================ using DotNetNuke.Web.Api; using System.Configuration; using System.Web.Hosting; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Sys; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Dnn.Integration; using ToSic.Sxc.Images; using ToSic.Sys.Boot; using ToSic.Sys.Capabilities.Features; using ToSic.Sys.Configuration; using ToSic.Sys.Security.Encryption; namespace ToSic.Sxc.Dnn.StartUp; /// /// This configures .net Core Dependency Injection /// The StartUp is defined as an IServiceRouteMapper. /// This way DNN will auto-run this code before anything else /// // ReSharper disable once UnusedMember.Global [ShowApiWhenReleased(ShowApiMode.Never)] public class StartupDnn : IServiceRouteMapper { /// /// This will be called by DNN when loading the assemblies. /// We just want to trigger the DI-Configure /// /// public void RegisterRoutes(IMapRoute mapRouteManager) => Configure(); private static bool _alreadyConfigured; /// /// Configure IoC for 2sxc. If it's already configured, do nothing. /// public bool Configure() { var l = BootLog.Log.Fn("Dnn: Configuring WebApi Routes", timer: true); // In some cases this may be called 2x - so we must avoid doing it again if (_alreadyConfigured) return l.ReturnFalse(); // Configure Newtonsoft Time zone handling etc. - part of WebApi StartUpDnnWebApi.Configure(); // Getting the service provider in Configure is tricky business, because // of .net core 2.1 bugs // ATM it appears that the service provider will get destroyed after startup, so we MUST get an additional one to use here // 2023-06-15 2dm - making sure that even if we use the global DI, we're always using it in a scope to never bleed global objects var transientSp = DnnStaticDi.GetGlobalScopedServiceProvider(); // now we should be able to instantiate registration of DB var connectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString; var globalConfig = transientSp.Build(); globalConfig.ConnectionString(connectionString); globalConfig.GlobalFolder(HostingEnvironment.MapPath(DnnConstants.SysFolderRootVirtual)!); globalConfig.AssetsVirtualUrl(DnnConstants.SysFolderRootVirtual + "assets/"); globalConfig.SharedAppsFolder("~/Portals/_default/" + AppConstants.AppsRootFolder + "/"); globalConfig.TempAssemblyFolder(HostingEnvironment.MapPath($"~/{FolderConstants.DataFolderProtected}/{FolderConstants.TempAssemblyFolder}/")!); // ".../App_Data/2sxc.bin" globalConfig.CshtmlAssemblyFolder(HostingEnvironment.MapPath($"~/{FolderConstants.DataFolderProtected}/{FolderConstants.CshtmlAssemblyFolder}/")!); // ".../App_Data/2sxc.bin.cshtml" globalConfig.CryptoFolder(HostingEnvironment.MapPath($"~/{FolderConstants.DataFolderProtected}/{FolderConstants.CryptoFolder}/")!); // ".../App_Data/2sxc.crypto" var sxcSysLoader = transientSp.Build(); sxcSysLoader.StartUp(); // Place a copy of the features service on the old static variable // Note: not perfect, it doesn't update on changes // But since we don't want to encourage this old mechanism, it's ok var featuresSvc = transientSp.Build(); SetupOldStaticFeaturesForCompatibility(featuresSvc); // Optional registration of query string rewrite functionality implementation for dnn imageflow module Imageflow.Dnn.StartUp.RegisterQueryStringRewrite(ImageflowRewrite.QueryStringRewrite); // Clean the App_Data/2sxc.bin folder transientSp.Build().CleanTempAssemblyFolder(); _alreadyConfigured = true; return l.ReturnTrue(); } /// /// After the SysLoader got the features, we must attach it to an old API which had was public /// This was used in Mobius etc. to see if features are activated /// public void SetupOldStaticFeaturesForCompatibility(ISysFeaturesService featuresSvc) { #pragma warning disable CS0618 Eav.Configuration.Features.FeaturesFromDi = featuresSvc; #pragma warning restore CS0618 } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/StartUp/StartupDnn9.cs ================================================ using DotNetNuke.DependencyInjection; using Microsoft.Extensions.DependencyInjection; namespace ToSic.Sxc.Dnn.StartUp; /// /// This is the preferred way to start Dependency Injection, but it requires Dnn 9.4+ /// If an older version of Dnn is used, this code will not run /// [ShowApiWhenReleased(ShowApiMode.Never)] public class StartupDnn9 : IDnnStartup { public void ConfigureServices(IServiceCollection services) { // Do standard registration of all services DnnDi.RegisterServices(services); // Give it the Dnn 9 Global Service Provider // This is critical, because we need the global service provider (which will be created after this code runs) // When we do start-up and use singletons. // Otherwise singletons won't be properly registered. // https://github.com/dnnsoftware/Dnn.Platform/blob/9f83285a15d23203cbaad72d62add864ab5b8c7f/DNN%20Platform/DotNetNuke.Web/Common/LazyServiceProvider.cs#L28 IServiceProvider GetPreparedServiceProvider() => typeof(DotNetNuke.Common.Globals) .GetProperty("DependencyProvider", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) ?.GetValue(null) as IServiceProvider; // Now activate the Service Provider, because some Dnn code still needs the static implementation DnnStaticDi.StaticDiReady(GetPreparedServiceProvider); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ToSic.Sxc.Dnn.csproj ================================================  Debug AnyCPU Library Properties ToSic.Sxc.Dnn ToSic.Sxc.Dnn v4.7.2 bin\ bin\ToSic.Sxc.Dnn.xml $(NoWarn);MSB3277; $(NoWarn);MSB4011 runtime runtime runtime runtime runtime runtime runtime runtime 1.5.0.235 runtime; build; native; contentfiles; analyzers; buildtransitive all False koi\bin\Connect.Dnn.Koi.dll False False koi\bin\Connect.Koi.dll False False ..\..\..\Dependencies\Imageflow\Dnn\ToSic.Imageflow.Dnn.dll False False ..\..\..\Dependencies\RazorBlade\Release\net40\ToSic.Razor.Dnn.dll Designer Designer web.config web.config web.config web.config 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) True ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/ToSic.Sxc.Dnn.csproj.DotSettings ================================================  True True ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/Upgrade/readme.md ================================================ # Upgrade Folder Place xml-import files here for future upgrades. This folder used to have a bunch of xml files for upgrading V7 to V8.5.5, but these are all removed in 9.20 as it won't support upgrading these old versions. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx ================================================ <%@ Control Language="C#" AutoEventWireup="true" Inherits="ToSic.Sxc.Dnn.View" Codebehind="View.ascx.cs" %> ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.Errors.cs ================================================ using System.Web.UI; using DotNetNuke.Services.Exceptions; using ToSic.Sxc.Blocks; using ToSic.Sxc.Render.Sys; namespace ToSic.Sxc.Dnn; partial class View { internal bool IsError; /// /// Run some code in a try/catch, and output it nicely if an error is thrown /// /// private TResult TryCatchAndLogToDnn(Func action) { try { return action(); } catch (Exception ex) { IsError = true; try { // 1. Log to DNN Exceptions.ProcessModuleLoadException(this, ex, false); // 2. Try to show nice message on screen // first get a rendering helper - but since BlockBuilder may be null, create a new one var renderingHelper = GetService().Init(Block); var msg = renderingHelper.DesignErrorMessage([ex], true, additionalInfo: $" - ℹ️ CONTEXT: Page: {TabId}; Module: {ModuleId}"); try { if (Block.Context.Permissions.IsContentAdmin) msg = renderingHelper.WrapInContext(msg, instanceId: Block.ParentId, contentBlockId: Block.ContentBlockId, editContext: true, errorCode: BlockBuildingConstants.ErrorGeneral, exsOrNull: [ex]); } catch { /* ignore */ } phOutput.Controls.Add(new LiteralControl(msg)); } catch { phOutput.Controls.Add(new LiteralControl("Something went really wrong in view.ascx - check error logs")); } return default; } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.Logging.cs ================================================ using System.Web.Http; using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn; partial class View { /// /// Html Comment containing the log for the current module /// /// private string HtmlLog() => Log.Dump(" - ", ""); /// /// optional detailed logging /// /// private string GetOptionalDetailedLogToAttach() { try { // if in debug mode and is super-user (or it's been enabled for all), then add to page debug if (Request.QueryString["debug"] == "true") if (UserInfo.IsSuperUser || DnnLogging.EnableLogging(GlobalConfiguration.Configuration.Properties)) return HtmlLog(); } catch { /* ignore */ } return ""; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.Standalone.cs ================================================ using System.Web; namespace ToSic.Sxc.Dnn; partial class View { public bool RenderNaked => _renderNaked ??= Request.QueryString["standalone"] == "true"; private bool? _renderNaked; private void SendStandalone(string renderedTemplate) { Response.Clear(); Response.Write(renderedTemplate); Response.Flush(); Response.SuppressContent = true; LogTimer.Done("Standalone"); HttpContext.Current.ApplicationInstance.CompleteRequest(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.cs ================================================ using DotNetNuke.Entities.Modules; using System.Web.UI; using ToSic.Eav.Web.Sys; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using ToSic.Sxc.Dnn.Features; using ToSic.Sxc.Dnn.Install; using ToSic.Sxc.Dnn.Services; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Render.Sys; using ToSic.Sxc.Render.Sys.RenderBlock; using ToSic.Sxc.Web.Sys.LightSpeed; namespace ToSic.Sxc.Dnn; [ShowApiWhenReleased(ShowApiMode.Never)] public partial class View : PortalModuleBase, IActionable { private static bool _loggedToBootLog; public View() { if (_loggedToBootLog) return; _loggedToBootLog = true; BootLog.Log.A("Dnn: First moment where View was used."); } #region GetService and Service Provider /// /// Get the service provider only once - ideally in Dnn9.4 we will get it from Dnn /// If we would get it multiple times, there are edge cases where it could be different each time! #2614 /// private IServiceProvider ServiceProvider => field ??= DnnStaticDi.CreateModuleScopedServiceProvider(); private TService GetService() => ServiceProvider.Build(Log); #endregion /// /// Block needs to self-initialize when first requested, because it's used in the Actions-Menu builder /// which runs before page-load /// private IBlock Block => _blockGetOnce.Get(Log, () => GetService().BuildBlock(ModuleConfiguration, null), timer: true); private readonly GetOnce _blockGetOnce = new(); private IBlockBuilder BlockBuilder => field ??= GetService().Setup(Block); #region Logging /// /// Get the request logging helper for this request. /// /// /// - Must use ServiceProvider.Build directly, as the `GetService` method would try to use the Log before it's created. /// - delay creating until first use to really just track our time when needed. /// private HttpRequestLoggingScoped RequestLogging => field ??= ServiceProvider.Build>() .New(new() { Segment = "module", RootName = "Sxc.View" }); private ILog Log => field ??= new Log("Sxc.View", RequestLogging.RootLog); /// /// Log Timer to use everywhere we want to track the cumulative time. /// /// /// Time must be false, as it will be started/stopped as needed within the DoInTimer methods. /// protected ILogCall LogTimer => field ??= Log.Fn(timer: false); #endregion /// /// Page Load event /// protected void Page_Load(object sender, EventArgs e) { // Add first logging message which will become the title in the logs RequestLogging.RootLog.A($"Module Title New: '{ModuleConfiguration.ModuleTitle}'"); LogTimer.DoInTimer(() => { var l = Log.Fn(message: nameof(Page_Load), timer: true); // todo: this should be dynamic at some future time, because normally once it's been checked, it wouldn't need checking again var checkPortalIsReady = true; // #RemovedV20 #OldDnnAutoJQuery //bool? requiresPre1025Behavior = null; // null = auto-detect, true/false // get the block early, to see any errors separately - before accessing cache (which also uses the block) var block = TryCatchAndLogToDnn(() => Block); #region Lightspeed try { if (OutputCache.Existing != null) { checkPortalIsReady = false; // #RemovedV20 #OldDnnAutoJQuery //requiresPre1025Behavior = OutputCache.Existing.EnforcePre1025; } } catch { /* ignore */ } #endregion // Always do this, part of the guarantee that everything will work // new mechanism in 10.25 // this must happen in Page-Load, so we know what supporting scripts to add // at this stage of the lifecycle // We moved this to Page_Load because RequestAjaxAntiForgerySupport didn't work in later events // ensure everything is ready and that we know if we should activate the client-dependency TryCatchAndLogToDnn(() => { if (checkPortalIsReady) if (!DnnReadyCheckTurbo.QuickCheckSiteAndAppFoldersAreReady(this, Log)) GetService().EnsureSiteAndAppFoldersAreReady(this, block); // #RemovedV20 #OldDnnAutoJQuery // var blockBuilder = requiresPre1025Behavior == false ? null : BlockBuilder; _dnnClientResources = GetService().Init(Page, /*null,*/ null /*blockBuilder*/); // #RemovedV20 #OldDnnAutoJQuery //_enforcePre1025JQueryLoading = requiresPre1025Behavior ?? _dnnClientResources.NeedsPre1025Behavior(); //if (_enforcePre1025JQueryLoading) // _dnnClientResources.EnforcePre1025Behavior(); return true; }); l.Done(); }); } private DnnClientResources _dnnClientResources; //private bool _enforcePre1025JQueryLoading; /// /// Process View if a Template has been set /// /// /// protected void Page_PreRender(object sender, EventArgs e) { var l = Log.Fn(); var finalMessage = ""; LogTimer.DoInTimer(() => { // #lightspeed var cachedResult = OutputCache.Existing?.Data; var cacheHit = cachedResult != null; if (cacheHit) l.A("Lightspeed hit - will use cached"); IRenderResult renderResult = null; var headersAndScriptsAdded = false; // skip this if something before this caused an error if (!IsError) TryCatchAndLogToDnn(() => { // Try to build the html and everything renderResult = cachedResult; var useLightspeed = OutputCache.IsEnabled; // ?? false; finalMessage = !useLightspeed ? "" : cacheHit ? "⚡⚡" : "⚡⏳"; // Generate Render Result if not already provided by cache renderResult ??= RenderViewAndGatherJsCssSpecs(useLightspeed); // Apply page settings, assets, resources etc. from Render Result try { GetService().Apply(Page, renderResult); } catch { /* ignore */ } // Try to add page specs about the request to the log (new v16.02) RequestLogging.StoreEntry.TryUpdateSpecs(() => new SpecsForLogHistory().BuildSpecsForLogHistory(Block)); // call this after rendering templates, because the template may change what resources are registered _dnnClientResources.AddEverything(renderResult.Features); headersAndScriptsAdded = true; // will be true if we make it this far // If standalone is specified, output just the template without anything else if (RenderNaked) SendStandalone(renderResult.Html); else phOutput.Controls.Add(new LiteralControl(renderResult.Html)); // #Lightspeed var lLightSpeed = Log.Fn(message: "Lightspeed", timer: true); // Do not save cache hits again. Cached entries may already carry compressed HTML, // so saving them again would just trigger another decompress/recompress cycle. if (!cacheHit) // #RemovedV20 #OldDnnAutoJQuery OutputCache.Save(renderResult/*, _enforcePre1025JQueryLoading*/); lLightSpeed.Done(); return true; // dummy result for TryCatchAndLogToDnn }); // if we had an error before, or have one now, re-check assets if (IsError && !headersAndScriptsAdded) _dnnClientResources?.AddEverything(renderResult?.Features); }); // Mini workaround: We must briefly start the timer again, so that the Done() call will stop and propagate the value to the proper place LogTimer.Timer.Start(); LogTimer.Done(IsError ? "⚠️" : finalMessage); l.Done(); } private IRenderResult RenderViewAndGatherJsCssSpecs(bool useLightspeed) { var l = Log.Fn(message: $"module {ModuleId} on page {TabId}", timer: true); var result = new RenderResult(); TryCatchAndLogToDnn(() => { if (RenderNaked) BlockBuilder.WrapInDiv = false; result = (RenderResult)BlockBuilder.Run( true, specs: new() { UseLightspeed = useLightspeed, RenderEngineResult = GetService().GetMessageForRequirements() } ); if (result.Errors?.Any() ?? false) { var warnings = result.Errors .Select(e => BlockBuilder.RenderingHelper.DesignError(e)); result = result with { Html = string.Join("", warnings) + result.Html }; } result = result with { Html = result.Html + GetOptionalDetailedLogToAttach() }; return true; // dummy result for TryCatchAndLogToDnn }); return l.ReturnAsOk(result); } protected IOutputCache OutputCache => field ??= GetService().Init(ModuleId, TabId, Block); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace ToSic.Sxc.Dnn { public partial class View { /// /// phOutput control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.PlaceHolder phOutput; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/View.ascx.menu.cs ================================================ using DotNetNuke.Entities.Modules.Actions; using DotNetNuke.Security; using DotNetNuke.Services.Exceptions; using ToSic.Sys.Users; using ToSic.Sys.Utils; namespace ToSic.Sxc.Dnn; partial class View { #region ModuleActions on THIS DNN-Module /// /// Dnn will create the menu with all actions like edit entity, app settings, etc. /// public ModuleActionCollection ModuleActions => field ??= GetModuleActions(); private ModuleActionCollection GetModuleActions() { var l = Log.Fn(); try { // Don't offer options if it's from another portal if (ModuleConfiguration.PortalID != ModuleConfiguration.OwnerPortalID) return l.Return([]); var result = InitModuleActions(); return l.Return(result); } catch (Exception e) { Exceptions.LogException(e); return l.ReturnAsError([]); } } private ModuleActionCollection InitModuleActions() { var actions = new ModuleActionCollection(); if (Block == null) return actions; var block = Block; var appIsKnown = block.AppId > 0; var viewToUse = block.ViewIsReady ? block.View : null; if (appIsKnown) { // Edit item if (viewToUse?.UseForList == true) actions.Add(GetNextActionID(), LocalizeString("ActionEdit.Text"), "", "", "edit.gif", JsAction("edit", "{ useModuleList: true, index: 0 }"), "test", true, SecurityAccessLevel.Edit, true, false); // Change layout button actions.Add(GetNextActionID(), LocalizeString("ActionChangeLayoutOrContent.Text"), "", "", "action_settings.gif", JsAction("layout"), false, SecurityAccessLevel.Edit, true, false); } var user = GetService(); // Edit Template Button if (user.IsSiteDeveloper && appIsKnown && viewToUse != null) actions.Add(GetNextActionID(), LocalizeString("ActionEditTemplateFile.Text"), ModuleActionType.EditContent, "templatehelp", "edit.gif", JsAction("template-develop"), "test", true, SecurityAccessLevel.Edit, true, false); // App management if (user.IsSiteAdmin && appIsKnown) actions.Add(GetNextActionID(), "Admin" + (block.IsContentApp ? "" : " " + block.AppOrNull?.Name), "", "", "edit.gif", JsAction("app"), "", true, SecurityAccessLevel.Admin, true, false); // Zone management (app list) if (user.IsSiteAdmin) actions.Add(GetNextActionID(), "Apps Management", "AppManagement.Action", "", "action_settings.gif", JsAction("zone"), "", true, SecurityAccessLevel.Admin, true, false); return actions; } private string JsAction(string action, string commandParams = null) { var useParams = commandParams.HasValue() ? ", params: " + commandParams : ""; return "javascript:$2sxc(" + ModuleId + ").cms.run({ action: '" + action + "' " + useParams + " });"; } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/dist/CachedPageBase.cs ================================================ using System.Web; using System.Web.Caching; using DotNetNuke.Entities.Portals; using DotNetNuke.Framework; using ToSic.Eav.ImportExport.Integration; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Render.Sys.JsContext; using ToSic.Sxc.Web.Sys.EditUi; using ToSic.Sys.Utils; using static System.StringComparison; namespace ToSic.Sxc.Dnn.dist; public class CachedPageBase : CDefault // HACK: inherits dnn default.aspx to preserve correct language cookie { private const int UnknownSiteId = -1; private const int UnknownPageId = -1; #region GetService and Service Provider /// /// Get the service provider only once - ideally in Dnn9.4 we will get it from Dnn /// If we would get it multiple times, there are edge cases where it could be different each time! #2614 /// private IServiceProvider ServiceProvider => _serviceProvider.Get(Log, DnnStaticDi.CreateModuleScopedServiceProvider); private readonly GetOnce _serviceProvider = new(); private TService GetService() => ServiceProvider.Build(Log); #endregion #region Logging private ILog Log { get; } = new Log("Sxc.Dnn.CachedPageBase"); private IEnvironmentLogger EnvLogger => _envLogger.Get(Log, GetService); private readonly GetOnce _envLogger = new(); #endregion protected string PageOutputCached(string virtualPath, EditUiResourceSettings settings) { // add to insights-history for analytic GetService().Add("edit-dialog", Log); var l = Log.Fn($"{nameof(virtualPath)}: {virtualPath}"); var html = GetPageHtml(virtualPath); l.A($"html: {html.Length} chars"); var siteId = GetSiteId(); var addOn = $"&{DnnJsApiService.PortalIdParamName}={siteId}"; var pageId = GetPageId(); var siteRoot = GetSiteRoot(pageId, siteId); var editUiResources = GetService(); var assets = editUiResources.GetResources(true, siteId, settings); l.A($"customHeaders: {assets.HtmlHead}"); var dnnJsApi = GetService(); var content = dnnJsApi.GetJsApiJson(pageId: pageId, siteRoot: siteRoot, rvt: null, withPublicKey: WithPublicKey()); l.A($"JsApiJson: {content}"); return l.ReturnAsOk(HtmlDialog.UpdatePlaceholders(html, content, pageId, addOn, assets.HtmlHead, "")); } private string GetPageHtml(string virtualPath) { var l = Log.Fn($"{nameof(virtualPath)}: {virtualPath}"); var key = CacheKey(virtualPath); if (Cache.Get(key) is string html) return l.Return(html,"ok, from cache"); l.A($"not in cache (key:{key})"); var path = GetPath(virtualPath); l.A($"path to file: {path}"); html = File.ReadAllText(path); l.A($"read file: {html.Length} chars"); html = HtmlDialog.CleanImport(html); l.A($"html adjusted: {html.Length} chars"); Cache.Insert(key, html, new CacheDependency(path)); return l.Return(html, "ok, added to cache with cache dependency on file"); } private static string CacheKey(string virtualPath) => $"2sxc-edit-ui-page-{virtualPath}"; private string GetPath(string virtualPath) { var l = Log.Fn($"{nameof(virtualPath)}: {virtualPath}"); var path = Server.MapPath(virtualPath); if (!File.Exists(path)) throw l.Ex(new Exception("File not found: " + path)); return l.ReturnAsOk(path); } private int GetSiteId() { var l = Log.Fn(); // portalId should be provided in query string (because of DNN special handling of aspx pages in DesktopModules) var portalIdString = Request.QueryString[DnnJsApiService.PortalIdParamName]; l.A($"{DnnJsApiService.PortalIdParamName} from query string: {portalIdString}"); var siteId = portalIdString.HasValue() ? Convert.ToInt32(portalIdString) : UnknownSiteId; l.A($"{(siteId == UnknownSiteId ? "unknown" : "")} siteId: {siteId}"); return l.ReturnAsOk(siteId); } private int GetPageId() { var l = Log.Fn(); // pageId should be provided in query string var pageIdString = Request.QueryString[HtmlDialog.PageIdInUrl]; l.A($"{HtmlDialog.PageIdInUrl} from query string: {pageIdString}"); var pageId = pageIdString.HasValue() ? Convert.ToInt32(pageIdString) : UnknownPageId; l.A($"{(pageId == UnknownPageId ? "unknown" : "")} pageId: {pageId}"); return l.ReturnAsOk(pageId); } private bool WithPublicKey() { var l = Log.Fn(); // 'wpk' should be provided in query string var withPublicKeyString = Request.QueryString[HtmlDialog.WithPublicKey]; l.A($"{HtmlDialog.WithPublicKey} from query string: {withPublicKeyString}"); var withPublicKey = withPublicKeyString.HasValue() && Convert.ToBoolean(withPublicKeyString); return l.ReturnAsOk(withPublicKey); } /// /// portalId and pageId context is lost on DesktopModules/ToSic.Sxc/dist/...aspx /// and DNN Framework can not resolve site root, so we need to handle it by ourselves /// /// /// /// private string GetSiteRoot(int pageId, int portalId) { var l = Log.Fn($"{nameof(pageId)}: {pageId}, {nameof(portalId)}: {portalId}"); try { // this is fallback if (pageId == UnknownPageId) return l.ReturnAsError(ServicesFramework.GetServiceFrameworkRoot(), $"fallback, because of unknown {nameof(pageId)}"); if (portalId == UnknownSiteId) { l.A($"fallback, unknown portalId, trying to get it from {nameof(pageId)}"); portalId = PortalController.GetPortalDictionary()[pageId]; l.A($"{nameof(portalId)}: {portalId}"); } var primaryPortalAlias = GetPrimaryPortalAliasBasedOnRequestUrlAndCulture(portalId); l.A($"primaryPortalAlias: {primaryPortalAlias?.HTTPAlias}"); string siteRoot; if (primaryPortalAlias != null) { siteRoot = CleanLeadingPartSiteRoot(primaryPortalAlias.HTTPAlias); } else { siteRoot = ServicesFramework.GetServiceFrameworkRoot(); l.A("portalAlias is null, falling back to ServicesFramework.GetServiceFrameworkRoot()"); } l.A($"siteRoot: {siteRoot}"); if (string.IsNullOrEmpty(siteRoot)) { siteRoot = "/"; l.A("siteRoot is empty, falling back to /"); } return l.ReturnAsOk(siteRoot); } catch (Exception ex) { l.Ex(ex); EnvLogger.LogException(ex); // if all breaks, falling back to a default value return l.ReturnAsError(ServicesFramework.GetServiceFrameworkRoot(), "error, falling back to a default value"); } } private PortalAliasInfo GetPrimaryPortalAliasBasedOnRequestUrlAndCulture(int portalId) { var l = Log.Fn($"{nameof(portalId)}: {portalId}"); //var cultureCode = LocaleController.Instance.GetCurrentLocale(portalId).Code; var cultureCode = Thread.CurrentThread.CurrentCulture.ToString(); l.A($"cultureCode: {cultureCode}"); // Get all aliases for the portal var aliases = PortalAliasController.Instance .GetPortalAliasesByPortalId(portalId) .ToList(); l.A($"aliases: {aliases.Count}"); // Figure out the correct alias based on the current URL and culture // Should also fall back to correct primary if the current one is not found var currentUrl = HttpContext.Current.Request.Url.ToString(); l.A($"figure out the correct alias based on the current URL:{currentUrl} and culture:{cultureCode}."); // try to filter aliases on the current url var aliases2 = aliases.Where(a => currentUrl.IndexOf(a.HTTPAlias, OrdinalIgnoreCase) >= 0).ToList(); if (!aliases2.Any()) { l.A("list of aliases filtered by current url is empty, falling back to filter without current URL"); aliases2 = aliases; // falling back to filter without current URL } aliases2.ForEach(a => l.A($"alias: {a.HTTPAlias}, isPrimary: {a.IsPrimary}, culture: {a.CultureCode}")); var primaryPortalAlias = aliases2 .Where(a => string.Compare(a.CultureCode, cultureCode, OrdinalIgnoreCase) == 0 || string.IsNullOrEmpty(a.CultureCode)) .OrderByDescending(a => a.IsPrimary) .ThenByDescending(a => a.CultureCode) .FirstOrDefault(); l.A($"primaryPortalAlias: {primaryPortalAlias?.HTTPAlias} based on culture:{cultureCode}"); if (primaryPortalAlias == null) { l.A("primaryPortalAlias based on culture is null, falling back to the first primary alias"); // fallback to the first primary first primaryPortalAlias = aliases.FirstOrDefault(a => a.IsPrimary); l.A($"primaryPortalAlias: {primaryPortalAlias?.HTTPAlias}"); } if (primaryPortalAlias == null) { l.A("primaryPortalAlias is null, falling back to the first alias"); // and only if this doesn't exist for random reasons, fallback to first alias primaryPortalAlias = aliases.FirstOrDefault(); l.A($"portalAlias: {primaryPortalAlias?.HTTPAlias}"); } return l.ReturnAsOk(primaryPortalAlias); } private string CleanLeadingPartSiteRoot(string path) { var l = Log.Fn($"{nameof(path)}:{path}"); var index = path.IndexOf('/'); l.A($"position of /: {index}"); return l.ReturnAsOk(index <= 0 ? "/" : path.Substring(index).SuffixSlash()); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/dist/ng-edit/Default.aspx ================================================ <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ToSic.Sxc.Dnn.dist.eavUi.Default" %> ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/dist/ng-edit/Default.aspx.cs ================================================ using ToSic.Sxc.Web.Sys.EditUi; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Dnn.dist.eavUi; public class Default : CachedPageBase { protected void Page_Load(object sender, EventArgs e) { Response.AppendHeader("test-dev", "2sxc"); Response.Write(PageOutputCached("~/DesktopModules/ToSic.Sxc/dist/ng-edit/index-raw.html", EditUiResourceSettings.EditUi)); // HACK: opening editui will change user language in cookie, so disable that //if (Response.Cookies["language"] != null) Response.Cookies.Remove("language"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/dist/quick-dialog/Default.aspx ================================================ <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ToSic.Sxc.Dnn.dist.quick_dialog.Default" %> ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/dist/quick-dialog/Default.aspx.cs ================================================ using ToSic.Sxc.Web.Sys.EditUi; namespace ToSic.Sxc.Dnn.dist.quick_dialog; public class Default : CachedPageBase { protected void Page_Load(object sender, EventArgs e) { Response.AppendHeader("test-dev", "2sxc"); Response.Write(PageOutputCached("~/DesktopModules/ToSic.Sxc/dist/quick-dialog/index-raw.html", EditUiResourceSettings.QuickDialog)); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/koi/License.txt ================================================ 

MIT License

Copyright (c) 2023 by 2sic/2sxc
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/koi/ReleaseNotes.txt ================================================ 

Release Notes of Connect.Koi

This is Connect.Koi - there are no special release notes.

By DNN Connect and 2sic
Visit https://connect-koi.net/ to discover more.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/razorblade/License.txt ================================================ 

MIT License

Copyright (c) 2023 by 2sic/2sxc
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/razorblade/ReleaseNotes.txt ================================================ 

Release Notes of RazorBlade.net v4

This is ToSic - RazorBlade.net

By 2sic
Read the API docs Visit RazorBlade.net on Github to discover more, or try the tutorials.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/razorblade-old/License.txt ================================================ 

MIT License

Copyright (c) 2019 by DNN Connect and 2sic/2sxc
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/razorblade-old/ReleaseNotes.txt ================================================ 

Release Notes of Razor Blade

This is Connect - Razor Blade

By the DNN Connect Community and 2sic
Visit Razor Blade on Github to discover more, or try the tutorial app from github.

================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/web-Deploy.config ================================================  ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn/web.config ================================================ ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Data.DynamicEntity.Toolbar/OldDynamicEntityFeatures.cs ================================================ #if NETFRAMEWORK using ToSic.Eav.Data; using ToSic.Razor.Markup; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Data; using ToSic.Sxc.Data.Sys; using ToSic.Sxc.Data.Sys.CodeDataFactory; using ToSic.Sxc.Data.Sys.Factory; using ToSic.Sxc.Edit.Toolbar.Sys; using ToSic.Sxc.Services; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Compatibility; /// /// Helper so that the old DynamicEntity can get a toolbar /// internal class OldDynamicEntityFeatures : IOldDynamicEntityFeatures { public System.Web.IHtmlString GenerateOldToolbar(ICodeDataFactory cdf, IEntity entity) { // 2025-05-13 2dm old code, must ensure that this code doesn't need the IBlockContext //var userMayEdit = Cdf.BlockOrNull?.Context.Permissions.IsContentAdmin ?? false; // If we're not in a running context, of which we know the permissions, no toolbar // Internally also verifies that we have a context (otherwise it's false), so no toolbar var userMayEdit = ((CodeDataFactory)cdf).BlockOrNull?.Context.Permissions.IsContentAdmin ?? false; if (!userMayEdit) return new System.Web.HtmlString(""); if (cdf.CompatibilityLevel > CompatibilityLevels.MaxLevelForEntityDotToolbar) throw new("content.Toolbar is deprecated in the new RazorComponent. Use @Edit.TagToolbar(content) or @Edit.Toolbar(content) instead. See https://go.2sxc.org/EditToolbar"); var toolbar = new ItemToolbar(entity).ToolbarAsTag; return new System.Web.HtmlString(toolbar); } public IRawHtmlString Render(ICodeDataFactory cdf, ICanBeItem target) { if (cdf.CompatibilityLevel > CompatibilityLevels.MaxLevelForEntityDotRender) throw new("content.Render() is deprecated in the new RazorComponent. Use GetService<ToSic.Sxc.Services.IRenderService>().One(content) instead."); return cdf.GetService().One(target); } } #endif ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Eav/ToSic.Eav.Data.MetadataFor.cs ================================================ // 2019-11-13 2dm - introduced this, because we moved metadatafor to Metadata (backwards compatibility) // it's used by others, like on https://stackoverflow.com/questions/55814403/2sxc-web-api-create-content-item-metadata-for-adam-asset // ReSharper disable once CheckNamespace using ToSic.Eav.Metadata.Targets; // ReSharper disable once CheckNamespace namespace ToSic.Eav.Data; public class MetadataFor: Target; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Eav.Configuration/FeatureIds.cs ================================================ using ToSic.Sys.Capabilities.Features; // ReSharper disable once CheckNamespace namespace ToSic.Eav.Configuration; /// /// Note: these values are possibly used in published Apps - not often, but it's possible. /// The apps would use this to check if one of the older features existed. /// Just make sure we don't use them in our code. /// [PrivateApi("this should probably never be public, as we want to rename things at will")] [Obsolete] public class FeatureIds { // Important: these names are public - don't ever change them public static Guid PublicForms => BuiltInFeatures.PublicEditForm.Guid; public static Guid PublicUpload => BuiltInFeatures.PublicUploadFiles.Guid; public static Guid UseAdamInWebApi => BuiltInFeatures.SaveInAdamApi.Guid; public static Guid PermissionCheckUserId => BuiltInFeatures.PermissionCheckUsers.Guid; public static Guid PermissionCheckGroups => BuiltInFeatures.PermissionCheckGroups.Guid; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Eav.Configuration/IFeaturesService.cs ================================================  // ReSharper disable once CheckNamespace namespace ToSic.Eav.Configuration; /// /// Features lets your code find out what system features are currently enabled/disabled in the environment. /// It's important to detect if the admin must activate certain features to let your code do it's work. /// /// /// This replaces the older static Features accessor - please only use this from now on /// [PrivateApi("was published in previous versions of 2sxc, so we must keep this available, but don't plan on providing it any more")] public interface IFeaturesService { /// /// Checks if a feature is enabled /// /// The feature Guid /// true if the feature is enabled bool Enabled(Guid guid); /// /// Checks if a list of features are enabled, in case you need many features to be activated. /// /// list/array of Guids /// true if all features are enabled, false if any one of them is not bool Enabled(IEnumerable guids); /// /// Informs you if the enabled features are valid or not - meaning if they have been countersigned by the 2sxc features system. /// As of now, it's not enforced, but in future it will be. /// /// true if the features were signed correctly bool Valid { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Eav.Configuration/ToSic.Eav.Configuration.Features.cs ================================================ using ToSic.Sys.Capabilities.Features; // ReSharper disable once CheckNamespace namespace ToSic.Eav.Configuration; /// /// This in an old API for determining if a system feature is enabled. Some will continue to work, but you should not use them. /// /// Prefer to use the IFeatureService instead /// [Obsolete("Obsolete in 2sxc 12 - please use the IFeaturesService instead")] [PrivateApi("this is just fyi, hidden since 2022-01-04")] public static class Features { /// /// Informs you if the enabled features are valid or not - meaning if they have been countersigned by the 2sxc features system. /// As of now, it's not enforced, but in future it will be. /// /// true if the features were signed correctly [PrivateApi] [Obsolete("Deprecated in 2sxc 12 - use IFeatures.Valid")] public static bool Valid => LibSysFeaturesService.ValidInternal; public static ISysFeaturesService FeaturesFromDi { get; internal set; }= null; /// /// Checks if a feature is enabled /// /// The feature Guid /// true if the feature is enabled [Obsolete("Do not use anymore, get the IFeaturesService for this. Will not remove for a long time, because in use in public Apps like Mobius")] public static bool Enabled(Guid guid) => FeaturesFromDi.IsEnabled(guid); /// /// Checks if a list of features are enabled, in case you need many features to be activated. /// /// list/array of Guids /// true if all features are enabled, false if any one of them is not [Obsolete("Do not use anymore, get the IFeaturesService for this. Will not remove for a long time, because in use in public Apps like Mobius")] public static bool Enabled(IEnumerable guids) => FeaturesFromDi.IsEnabled(guids); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Eav.Configuration/ToSic.Eav.Configuration.FeaturesService.Compatibility.cs ================================================ using ToSic.Sys.Capabilities.Features; // ReSharper disable once CheckNamespace namespace ToSic.Eav.Configuration; /// /// Implementation for an old API which was used in some Dnn Apps /// Once it works, we will move it do Dnn only, so it won't work in Oqtane. /// internal class FeaturesServiceCompatibility(ISysFeaturesService featsInternal) : IFeaturesService { public bool Enabled(Guid guid) => featsInternal.IsEnabled(guid); public bool Enabled(IEnumerable guids) => featsInternal.IsEnabled(guids); public bool Valid => featsInternal.Valid; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/StartUpCompatibility.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav.Configuration; using ToSic.Sxc.Data.Sys; using ToSic.Sxc.Services; namespace ToSic.Sxc.Compatibility; internal static class StartUpCompatibility { /// /// Add obsolete interfaces which had previously been supported /// /// /// public static IServiceCollection AddDnnCompatibility(this IServiceCollection services) { services.TryAddTransient(); services.TryAddTransient(); // Helper so that the old DynamicEntity can get a toolbar services.TryAddTransient(); return services; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Sxc/OldDataToDictionaryWrapper.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataFormats.EavLight; using ToSic.Eav.DataSource; using ToSic.Sxc.Data.Sys.Convert; namespace ToSic.Sxc.Compatibility.Sxc; /// /// This is for compatibility - old code had a Sxc.Serializer.Prepare code which should still work /// // Important: Changed Dictionary... to IDictionary in 12.04 2021-08-29 - may cause issues, but probably shouldn't [Obsolete] [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public class OldDataToDictionaryWrapper { public OldDataToDictionaryWrapper(bool userMayEdit, IConvertToEavLight innerConverter) { _converter = innerConverter; if (_converter is ConvertToEavLightWithCmsInfo serializerWithEdit) serializerWithEdit.WithEdit = userMayEdit; } private readonly IConvertToEavLight _converter; public IEnumerable> Prepare(IEnumerable dynamicList) => _converter.Convert(dynamicList); public IDictionary Prepare(ICanBeEntity dynamicEntity) => _converter.Convert(dynamicEntity); public IDictionary> Prepare(IDataSource source, IEnumerable streams = null) => _converter.Convert(source, streams); public IDictionary> Prepare(IDataSource source, string streams) => _converter.Convert(source, streams); public IEnumerable> Prepare(IDataStream stream) => _converter.Convert(stream); public IEnumerable> Prepare(IEnumerable entities) => _converter.Convert(entities); // Removed in v20 //public IEnumerable> Prepare(IEnumerable entities) // => _converter.Convert(entities as IEnumerable); public IDictionary Prepare(IEntity entity) => _converter.Convert(entity); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Compatibility/Sxc/SxcHelper.cs ================================================ using ToSic.Eav.DataFormats.EavLight; namespace ToSic.Sxc.Compatibility.Sxc; /// /// This is for compatibility - old code had a Sxc.Serializer.Prepare code which should still work /// [Obsolete] [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public class SxcHelper(bool editAllowed, IConvertToEavLight innerConverter) { public OldDataToDictionaryWrapper Serializer => field ??= new(editAllowed, innerConverter); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Eav.Conversion.EntitiesToDictionary.cs ================================================ // ReSharper disable once CheckNamespace namespace ToSic.Eav.Conversion; /// /// Deprecated since v12, announced for removal in v15, removed in v20. /// [PrivateApi("Made private in v12.04, as it shouldn't be used in razor - but previously it was in some apps so we must assume it's in use")] [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public class EntitiesToDictionary { public EntitiesToDictionary() => throw new NotSupportedException(ToSic.Eav.Factory.GenerateMessage("ToSic.Eav.Conversion.EntitiesToDictionary", "https://go.2sxc.org/brc-13-conversion")); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Eav.Factory.cs ================================================ // ReSharper disable once CheckNamespace namespace ToSic.Eav; /// /// Deprecated since v13, announced for removal in v15, removed in v20. /// [PrivateApi("Up to v19 used to PublicApi(Careful - obsolete!)")] [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public class Factory { internal static string GenerateMessage(string fullNameSpace, string link) => $"The old '{fullNameSpace}' API has been deprecated since v13 and announced for removal in v15. They were removed in v20. " + $"For guidance, see {link}."; [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public static T Resolve() => throw new NotSupportedException(GenerateMessage("ToSic.Eav.Factory.Resolve()", "https://go.2sxc.org/brc-13-eav-factory")); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.ContentBlocks.Render.cs ================================================ #if NETFRAMEWORK // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.ContentBlocks; /// /// Deprecated since v13, announced for removal in v15, removed in v20. /// Remove this entire class (which currently just shows warnings) EOY 2025. /// [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public static class Render { [Obsolete] public static string One(object context, object noParamOrder = default, object item = null, string field = null, Guid? newGuid = null) => throw new(ToSic.Sxc.Blocks.Render.GenerateMessage("ToSic.SexyContent.ContentBlocks.One()")); [Obsolete] public static string All(object context, object noParamOrder = default, string field = null, string merge = null) => throw new(ToSic.Sxc.Blocks.Render.GenerateMessage("ToSic.SexyContent.ContentBlocks.All()")); } #endif ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.DataSources.DnnSqlDataSource.cs ================================================ // #RemoveV20 - the new class auto-supports the old name; only code use will break //using ToSic.Eav.DataSources; //// ReSharper disable once CheckNamespace //namespace ToSic.SexyContent.DataSources; //// Todo: leave this helper class/message in till 2sxc 09.00, then either extract into an own DLL //// - we might also write some SQL to update existing pipelines, but it's not likely to have been used much... //// - and otherwise im might be in razor-code, which we couldn't auto-update //[Obsolete("This class was moved / to the ToSic.Sxc.Dnn.DataSources namespace, use that instead.")] //public class DnnSqlDataSource(Sql.MyServices services) // : Sxc.Dnn.DataSources.DnnSql(services); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.Engines.InstancePurposes.cs ================================================ //#if NETFRAMEWORK //// This is included for compatibility //// It was changed in 2sxc 10.20. 01, but some code in the wild probably uses this for comparison. //// old docs like https://github.com/2sic/2sxc/wiki/razor-sexycontentwebpage.instancepurpose used this namespaces //// ReSharper disable once CheckNamespace //namespace ToSic.SexyContent.Engines //{ // [Obsolete] // [ShowApiWhenReleased(ShowApiMode.Never)] // public enum InstancePurposes // { // WebView = 0, // IndexingForSearch = 1, // } //} //#endif ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource.cs ================================================ // #RemoveV20 - the new class auto-supports the old name; only code use will break //using ToSic.Eav.DataSources; //// ReSharper disable once CheckNamespace //namespace ToSic.SexyContent.Environment.Dnn7.DataSources; //// Todo: leave this helper class/message in till 2sxc 09.00, then either extract into an own DLL //// - we might also write some SQL to update existing pipelines, but it's not likely to have been used much... //// - and otherwise im might be in razor-code, which we couldn't auto-update //[PrivateApi] //[ShowApiWhenReleased(ShowApiMode.Never)] //[Obsolete("This class was moved / to ToSic.Sxc.Dnn.DataSources.DnnSql, use that instead.")] //public class DnnSqlDataSource(Sql.MyServices services) // : Sxc.Dnn.DataSources.DnnSql(services); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource.cs ================================================ // #RemoveV20 - the new class auto-supports the old name; only code use will break //using ToSic.Eav.Data.Build; //using ToSic.Sxc.Dnn.DataSources; //// ReSharper disable once CheckNamespace //namespace ToSic.SexyContent.Environment.Dnn7.DataSources; //// Todo: leave this helper class/message in till 2sxc 09.00, then either extract into an own DLL //// - we might also write some SQL to update existing pipelines, but it's not likely to have been used much... //// - and otherwise im might be in razor-code, which we couldn't auto-update //[PrivateApi] //[ShowApiWhenReleased(ShowApiMode.Never)] //[Obsolete("This class was moved / to ToSic.Sxc.Dnn.DataSources.DnnUserProfile, use that instead.")] //public class DnnUserProfileDataSource(DnnUserProfile.MyServices services, IDataFactory dataFactory) // : DnnUserProfile(services); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.SexyContent.Environment.Dnn7.Factory.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Context; using ToSic.Sxc.Render.Sys.RenderBlock; using IApp = ToSic.Sxc.Apps.IApp; // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.Environment.Dnn7; /// /// Deprecated since v13, announced for removal in v15, removed in v20. /// [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public static class Factory { [Obsolete] public static IBlockBuilder SxcInstanceForModule(int modId, int pageId) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); [Obsolete] public static IBlockBuilder SxcInstanceForModule(ModuleInfo moduleInfo) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); [Obsolete] public static IBlockBuilder SxcInstanceForModule(IModule moduleInfo) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); [Obsolete] public static IDynamicCode CodeHelpers(IBlockBuilder blockBuilder) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); /// /// get a full app-object for accessing data of the app from outside /// /// [Obsolete] public static IApp App(int appId, bool unusedButKeepForApiStability = false, bool showDrafts = false) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); /// /// get a full app-object for accessing data of the app from outside /// /// [Obsolete] public static IApp App(int zoneId, int appId, bool unusedButKeepForApiStability = false, bool showDrafts = false) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); [Obsolete] public static IApp App(int appId, PortalSettings ownerPortalSettings, bool unusedButKeepForApiStability = false, bool showDrafts = false) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); [Obsolete] public static IApp App(int zoneId, int appId, PortalSettings ownerPortalSettings, bool unusedButKeepForApiStability = false, bool showDrafts = false) => throw new NotSupportedException(Sxc.Dnn.Factory.GenerateMessage()); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Blocks.Render.cs ================================================  // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Blocks; /// /// Deprecated since v12, announced for removal in v15, removed in v20. /// [PrivateApi] [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public class Render { internal static string GenerateMessage(string fullNameSpace) => $"The old {fullNameSpace} API has been deprecated since v12 and announced for removal in v15. They were removed in v20. " + $"Please use the @Kit.Render.One(...)/All(...) instead. " + $"For guidance, see https://go.2sxc.org/brc-20-static-render"; [Obsolete] public static string One(object parent, object noParamOrder = default, object item = null, string field = null, object newGuid = null) => throw new(GenerateMessage("ToSic.Sxc.Blocks.One()")); [Obsolete] public static string All(object parent, object noParamOrder = default, string field = null, string apps = null, int max = 100, string merge = null) => throw new(GenerateMessage("ToSic.Sxc.Blocks.All()")); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Conversion.DataToDictionary.cs ================================================ // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Conversion; /// /// Deprecated since v13, announced for removal in v15, removed in v20. /// [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public class DataToDictionary { [Obsolete] public DataToDictionary() => throw new NotSupportedException(ToSic.Eav.Factory.GenerateMessage("ToSic.Sxc.Conversion.DataToDictionary", "https://go.2sxc.org/brc-13-conversion")); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Dnn.Factory.cs ================================================ using System.Runtime.CompilerServices; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Dnn; /// /// Deprecated since v13, announced for removal in v15, removed in v20. /// [Obsolete] [ShowApiWhenReleased(ShowApiMode.Never)] public static class Factory { internal static string GenerateMessage([CallerMemberName] string cName = default) => $"The old {nameof(Factory)}.{cName}() API has been deprecated since v13 and announced for removal in v15. They were removed in v20. " + $"Please use Dependency Injection and the IRenderService or IDynamicCodeService instead. " + $"For guidance, see https://go.2sxc.org/brc-20-dnn-factory"; [Obsolete] public static object CmsBlock(int pageId, int modId) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object CmsBlock(int pageId, int modId, object parentLog) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object CmsBlock(object moduleInfo) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object CmsBlock(object module, object parentLog = null) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object DynamicCode(object blockBuilder) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object App(int appId, bool unusedButKeepForApiStability = false, bool showDrafts = false, object parentLog = null) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object App(int zoneId, int appId, bool unusedButKeepForApiStability = false, bool showDrafts = false, object parentLog = null) => throw new NotSupportedException(GenerateMessage()); [Obsolete] public static object App(int appId, object ownerPortalSettings, bool unusedButKeepForApiStability = false, bool showDrafts = false, object parentLog = null) => throw new NotSupportedException(GenerateMessage()); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Services.ILogService.cs ================================================ // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Services; /// /// Obsolete, use instead. /// Note: 2024-04-22 2dm - believe this could be internal, but not 100% sure /// [ShowApiWhenReleased(ShowApiMode.Never)] public interface ILogService: ISystemLogService; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/CompatibilityStopped/ToSic.Sxc.Services.LogService.cs ================================================ using ToSic.Sxc.Dnn.Services; using ToSic.Sys.Code.InfoSystem; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Services; /// /// Obsolete, use instead /// internal class LogServiceUsingOldInterface: DnnSystemLogService { public LogServiceUsingOldInterface(CodeInfoService codeInfos) { throw new("The ToSic.Sxc.Services.ILogServices is deprecated / removed. Please use ToSic.Sxc.Services.ISystemLogService instead."); //codeInfos.Warn(V16To18("ToSic.Sxc.Services.ILogService", message: "Use ToSic.Sxc.Services.ISystemLogService instead")); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Custom.Dnn/Code12.cs ================================================ using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; // ReSharper disable once CheckNamespace namespace Custom.Dnn; /// /// This is the base class for custom code (.cs) files in your Apps. /// By inheriting from this base class, you will automatically have the context like the App object etc. available. /// [PublicApi] [ShowApiWhenReleased(ShowApiMode.Never)] // #DocsButNotForIntellisense public abstract class Code12 : DynamicCode12, IHasDnn { /// public IDnnContext Dnn => (ExCtxOrNull as IHasDnn)?.Dnn; [PrivateApi] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel12; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Adam/DnnAdam.cs ================================================ using ToSic.Sxc.Adam; using ToSic.Sxc.Adam.Sys; namespace ToSic.Sxc.Dnn.Adam; /// /// Casting helpers so DNN code can work with the file / folder in the DNN signature /// internal static class DnnAdam { internal static File AsDnn(this IFile file) { if (file == null) return null; if (file is not File recast) throw new("Tried to cast IFile to internal type, failed"); return recast; } internal static Folder AsDnn(this IFolder folder) { if (folder == null) return null; if (folder is not Folder recast) throw new("Tried to cast IFolder to internal type, failed"); return recast; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Adam/DnnAdamFileSystem.cs ================================================ using DotNetNuke.Services.FileSystem; using System.Configuration; using System.Data.SqlClient; using System.Web.Configuration; using ToSic.Eav.Apps.Sys; using ToSic.Sxc.Adam; using ToSic.Sxc.Adam.Sys; using ToSic.Sxc.Adam.Sys.FileSystem; using ToSic.Sxc.Adam.Sys.Manager; namespace ToSic.Sxc.Dnn.Adam; internal class DnnAdamFileSystem() : ServiceBase("Dnn.FilSys"), IAdamFileSystem { #region Constructor / DI / Init public void Init(AdamManager adamManager) { var l = Log.Fn(); AdamManager = adamManager; l.Done(); } protected AdamManager AdamManager; #endregion #region FileSystem Settings public int MaxUploadKb() => (ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection) ?.MaxRequestLength ?? 1; #endregion #region Files private readonly IFileManager _dnnFiles = FileManager.Instance; //public File GetFile(int fileId) //{ // var file = _dnnFiles.GetFile(fileId); // return DnnToAdam(file); //} public IFile GetFile(AdamAssetIdentifier fileId) { var id = ((AdamAssetId)fileId).SysId; var file = _dnnFiles.GetFile(id); return DnnToAdam(file); } public void Rename(IFile file, string newName) { var l = Log.Fn($"{nameof(file)}:{file.Id}, {nameof(newName)}: {newName}"); var dnnFile = _dnnFiles.GetFile(file.AsDnn().SysId); _dnnFiles.RenameFile(dnnFile, newName); l.Done(); } public void Delete(IFile file) { var l = Log.Fn($"file: {file.Id}", timer: true); var dnnFile = _dnnFiles.GetFile(file.AsDnn().SysId); // 2025-06 For unknown reasons this suddenly breaks; same DNN, some 2sxc code // Says file is in use, but if we debug-step-through, it works; seems to be timing Retry.RetryOnException(() => _dnnFiles.DeleteFile(dnnFile), l, repeat: 10, delay: 200, silent: false); l.Done(); } public IFile Add(IFolder parent, Stream body, string fileName, bool ensureUniqueName) { var l = Log.Fn($"..., {fileName}, {ensureUniqueName}"); if (ensureUniqueName) fileName = FindUniqueFileName(parent, fileName); var dnnFolder = _dnnFolders.GetFolder(parent.AsDnn().SysId); var dnnFile = _dnnFiles.AddFile(dnnFolder, Path.GetFileName(fileName), body); var file = GetFile(AdamAssetIdentifier.Create(dnnFile.FileId)); return l.ReturnAsOk(file); } /// /// When uploading a new file, we must verify that the name isn't used. /// If it is used, walk through numbers to make a new name which isn't used. /// /// /// /// private string FindUniqueFileName(IFolder parentFolder, string fileName) { var l = Log.Fn($"..., {fileName}"); var dnnFolder = _dnnFolders.GetFolder(parentFolder.AsDnn().SysId); var name = Path.GetFileNameWithoutExtension(fileName); var ext = Path.GetExtension(fileName); for (var i = 1; i < AdamConstants.MaxSameFileRetries && _dnnFiles.FileExists(dnnFolder, Path.GetFileName(fileName)); i++) fileName = $"{name}-{i}{ext}"; return l.ReturnAsOk(fileName); } #endregion #region Folders private readonly IFolderManager _dnnFolders = FolderManager.Instance; public bool FolderExists(string path) { var l = Log.Fn($"path:{path}"); return l.ReturnAsOk(_dnnFolders.FolderExists(AdamManager.Site.Id, path)); } public void AddFolder(string path) { var l = Log.Fn($"path:{path}"); try { _dnnFolders.AddFolder(AdamManager.Site.Id, path); l.Done("ok"); } catch (SqlException) { // don't do anything - this happens when multiple processes try to add the folder at the same time // like when two fields in a dialog cause the web-api to create the folders in parallel calls // see also https://github.com/2sic/2sxc/issues/811 l.Done("error in DNN SQL, probably folder already exists"); } catch (FolderAlreadyExistsException) { // Dnn reports it already exists - it shouldn't have got here because that was checked before // but I guess depending on the DNN version this isn't 100% reliable l.Done("Dnn says folder already exists"); } catch (NullReferenceException) { // also catch this, as it's an additional exception which also happens in the AddFolder when a folder already existed l.Done("error, probably folder already exists"); } } public void Rename(IFolder folder, string newName) { var l = Log.Fn($"folder:{folder.Id}, newName:{newName}"); var fld = _dnnFolders.GetFolder(folder.AsDnn().SysId); _dnnFolders.RenameFolder(fld, newName); l.Done(); } public void Delete(IFolder folder) { var l = Log.Fn($"folder:{folder.Id}"); _dnnFolders.DeleteFolder(folder.AsDnn().SysId); l.Done(); } public IFolder Get(string path) { var l = Log.Fn($"path:{path}"); return l.ReturnAsOk(DnnToAdam(_dnnFolders.GetFolder(AdamManager.Site.Id, path))); } public List GetFolders(IFolder folder) { var l = Log.Fn>($"folder:{folder.Id}"); var fldObj = GetDnnFolder(folder.AsDnn().SysId); if (fldObj == null) return l.Return([], ""); var firstList = _dnnFolders.GetFolders(fldObj); var folders = firstList?.Select(DnnToAdam).ToList() ?? []; return l.Return(folders, $"{folders.Count}"); } //public Folder GetFolder(int folderId) // => DnnToAdam(GetDnnFolder(folderId)); public IFolder GetFolder(AdamAssetIdentifier folderId) => DnnToAdam(GetDnnFolder(((AdamAssetId)folderId).SysId)); #endregion #region Dnn typed calls private IFolderInfo GetDnnFolder(int folderId) => _dnnFolders.GetFolder(folderId); public List GetFiles(IFolder folder) { var l = Log.Fn>($"folder:{folder.Id}"); var fldObj = _dnnFolders.GetFolder(folder.AsDnn().SysId); // sometimes the folder doesn't exist for whatever reason if (fldObj == null) return l.Return([], ""); // try to find the files var firstList = _dnnFolders.GetFiles(fldObj); var files = firstList?.Select(DnnToAdam).ToList() ?? []; return l.Return(files, $"{files.Count}"); } #endregion #region DnnToAdam private const string ErrorDnnObjectNull = "Tried to create Adam object but the original is invalid. " + "Probably the DNN file system is out of sync. " + "Re-Sync in the DNN files recursively (in Admin - Files) and the error should go away. "; public string GetUrl(string folderPath) => AdamManager.Site.ContentPath + folderPath; private IFolder DnnToAdam(IFolderInfo dnnFolderInfo) { var l = Log.Fn>($"folderName: {dnnFolderInfo.FolderName}"); if (dnnFolderInfo == null) throw l.Done(new ArgumentNullException(nameof(dnnFolderInfo), ErrorDnnObjectNull)); var typed = new Folder(AdamManager) { Path = dnnFolderInfo.FolderPath, SysId = dnnFolderInfo.FolderID, ParentSysId = dnnFolderInfo.ParentID, Name = dnnFolderInfo.DisplayName, Created = dnnFolderInfo.CreatedOnDate, Modified = dnnFolderInfo.LastModifiedOnDate, Url = GetUrl(dnnFolderInfo.FolderPath), // AdamManager.Site.ContentPath + dnnFolderInfo.FolderPath, PhysicalPath = dnnFolderInfo.PhysicalPath, }; if (AdamManager.UseTypedAssets) return l.Return(typed, "typed"); var dyn = FolderDynamic.Create(AdamManager, typed); return l.Return(dyn, "dynamic"); } private IFile DnnToAdam(IFileInfo dnnFileInfo) { var l = Log.Fn>($"fileName: {dnnFileInfo.FileName}"); if (dnnFileInfo == null) throw l.Done(new ArgumentNullException(nameof(dnnFileInfo), ErrorDnnObjectNull)); var typed = new File(AdamManager) { FullName = dnnFileInfo.FileName!, Extension = dnnFileInfo.Extension, Size = dnnFileInfo.Size, SysId = dnnFileInfo.FileId, Folder = dnnFileInfo.Folder, ParentSysId = dnnFileInfo.FolderId, Path = dnnFileInfo.RelativePath, Created = dnnFileInfo.CreatedOnDate, Modified = dnnFileInfo.LastModifiedOnDate, Name = Path.GetFileNameWithoutExtension(dnnFileInfo.FileName), Url = dnnFileInfo.StorageLocation == 0 ? $"{AdamManager.Site.ContentPath}{dnnFileInfo.Folder}{dnnFileInfo.FileName}" : FileLinkClickController.Instance.GetFileLinkClick(dnnFileInfo), PhysicalPath = dnnFileInfo.PhysicalPath, }; if (AdamManager.UseTypedAssets) return l.Return(typed, "typed"); var dyn = FileDynamic.Create(AdamManager, typed); return l.Return(dyn, "dynamic"); } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Cms/DnnModuleSettings.cs ================================================ using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; namespace ToSic.Sxc.Dnn.Cms; internal class ModuleSettingsHelper { public ModuleInfo ModuleInfo { get; set; } public ModuleSettingsHelper(int instanceId) { ModuleInfo = ModuleController.Instance.GetModule(instanceId, Null.NullInteger, true); } public string GetModuleSetting(string settingName, string defaultValue) { if (ModuleInfo.ModuleSettings.ContainsKey(settingName)) return (string) ModuleInfo.ModuleSettings[settingName]; return defaultValue; } public void SetModuleSetting(string settingName, string settingValue) { if (ModuleInfo.ModuleSettings.ContainsKey(settingName)) ModuleInfo.ModuleSettings[settingName] = settingValue; else ModuleInfo.ModuleSettings.Add(settingName, settingValue); ModuleController.Instance.UpdateModule(ModuleInfo); } public void DeleteModuleSetting(string settingName) { if (ModuleInfo.ModuleSettings.ContainsKey(settingName)) { ModuleInfo.ModuleSettings.Remove(settingName); ModuleController.Instance.UpdateModule(ModuleInfo); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Cms/DnnModuleUpdater.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Services.Localization; using ToSic.Eav.Apps; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Apps.Sys.Work; using ToSic.Eav.Context; using ToSic.Eav.Context.Sys.ZoneMapper; using ToSic.Eav.Data; using ToSic.Eav.Metadata.Sys; using ToSic.Sxc.Apps.Sys.Work; using ToSic.Sxc.Blocks; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Context; using ToSic.Sxc.Integration.Modules; namespace ToSic.Sxc.Dnn.Cms; // TODO: @STV - this looks very similar to the Oqtane implementation // Probably best to make a base class and de-duplicate. internal class DnnModuleUpdater( GenWorkPlus workViews, IZoneMapper zoneMapper, IAppsCatalog appsCatalog, ISite site) : ServiceBase("Dnn.MapA2I", connect: [workViews, appsCatalog, site, zoneMapper]), IPlatformModuleUpdater { public void SetAppId(IModule instance, int? appId) { var l = Log.Fn($"SetAppIdForInstance({instance.Id}, -, appid: {appId})"); // Reset temporary template ClearPreview(instance.Id); // ToDo: Should throw exception if a real BlockConfiguration exists // note: this is the correct zone, even if the module is shared from another portal, because the Site is prepared correctly var zoneId = site.ZoneId; if (appId is KnownAppsConstants.AppIdEmpty or null) UpdateInstanceSettingForAllLanguages(instance.Id, ModuleSettingNames.AppName, null, Log); else { var appName = appsCatalog.AppNameId(new AppIdentity(zoneId, appId.Value)); UpdateInstanceSettingForAllLanguages(instance.Id, ModuleSettingNames.AppName, appName, Log); } // Change to 1. available preferable default template if app has been set if (appId.HasValue) { var appIdentity = new AppIdentity(zoneId, appId.Value); var templateGuid = workViews.New(appIdentity).GetAll() .OrderByDescending(v => v.Metadata.HasType(KnownDecorators.IsDefaultDecorator)) // first sort by IsDefaultDecorator DESC .ThenBy(v => v.Name) // than by Name ASC .FirstOrDefault(t => !t.IsHidden)?.Guid; if (templateGuid.HasValue) SetPreview(instance.Id, templateGuid.Value); } l.Done(); } protected void ClearPreview(int instanceId) { Log.A($"ClearPreviewTemplate(iid: {instanceId})"); UpdateInstanceSettingForAllLanguages(instanceId, ModuleSettingNames.PreviewView, null, Log); } public void SetContentGroup(int instanceId, bool blockExists, Guid guid) { Log.A($"SetContentGroup(iid: {instanceId}, {nameof(blockExists)}: {blockExists}, guid: {guid})"); // Remove Preview because it's not needed as soon Content is inserted ClearPreview(instanceId); // Update blockConfiguration Guid for this module if (blockExists) UpdateInstanceSettingForAllLanguages(instanceId, ModuleSettingNames.ContentGroup, guid.ToString(), Log); } /// /// Saves a temporary templateId to the module's settings /// This templateId will be used until a ContentGroup exists /// public void SetPreview(int instanceId, Guid previewView) { var moduleController = new ModuleController(); var settings = moduleController.GetModule(instanceId).ModuleSettings; // Do not allow saving the temporary template id if a ContentGroup exists for this module if (settings[ModuleSettingNames.ContentGroup] != null) throw new("Preview template id cannot be set for a module that already has content."); UpdateInstanceSettingForAllLanguages(instanceId, ModuleSettingNames.PreviewView, previewView.ToString(), Log); } public void UpdateTitle(IBlock block, IEntity titleItem) { Log.A("update title"); var languages = zoneMapper.CulturesWithState(block.Context.Site); // Find Module for default language var moduleController = new ModuleController(); var originalModule = moduleController.GetModule(block.Context.Module.Id); foreach (var dimension in languages) { if (!originalModule.IsDefaultLanguage) originalModule = originalModule.DefaultLanguageModule; try // this can sometimes fail, like if the first item is null - https://github.com/2sic/2sxc/issues/817 { // Break if default language module is null if (originalModule == null) return; // Get Title value of Entity in current language var titleValue = titleItem.Title[dimension.Code].ToString(); // Find module for given Culture var moduleByCulture = moduleController.GetModuleByCulture(originalModule.ModuleID, originalModule.TabID, block.Context.Site.Id, DotNetNuke.Services.Localization.LocaleController.Instance.GetLocale(dimension.Code)); // Break if no title module found if (moduleByCulture == null || titleValue == null) return; moduleByCulture.ModuleTitle = System.Net.WebUtility.HtmlEncode(titleValue); moduleController.UpdateModule(moduleByCulture); } catch { /* ignored */ } } } #region Settings /// /// Update a setting for all language-versions of a module /// public static void UpdateInstanceSettingForAllLanguages(int instanceId, string key, string value, ILog log) { log.A($"UpdateInstanceSettingForAllLanguages(iid: {instanceId}, key: {key}, val: {value})"); var moduleController = new ModuleController(); // Find this module in other languages and update contentGroupGuid var originalModule = moduleController.GetModule(instanceId); var languages = LocaleController.Instance.GetLocales(originalModule.PortalID); if (!originalModule.IsDefaultLanguage && originalModule.DefaultLanguageModule != null) originalModule = originalModule.DefaultLanguageModule; foreach (var language in languages) { // Find module for given Culture var moduleByCulture = moduleController.GetModuleByCulture(originalModule.ModuleID, originalModule.TabID, originalModule.PortalID, language.Value); // Break if no module found if (moduleByCulture == null) continue; if (value == null) moduleController.DeleteModuleSetting(moduleByCulture.ModuleID, key); else moduleController.UpdateModuleSetting(moduleByCulture.ModuleID, key, value); } } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Cms/DnnPagePublishing.cs ================================================ using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Tabs; using ToSic.Eav.Apps.Sys.Work; using ToSic.Eav.Context; using ToSic.Eav.Data; using ToSic.Eav.Data.Sys.Entities; using ToSic.Eav.DataSource; using ToSic.Eav.Sys; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using ToSic.Sxc.Cms.Publishing.Sys; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Data.Sys.Decorators; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.Run; using ServiceBase = ToSic.Sys.Services.ServiceBase; namespace ToSic.Sxc.Dnn.Cms; internal partial class DnnPagePublishing( LazySvc moduleAndBlockBuilder, GenWorkDb entPublish) : ServiceBase("Dnn.Publsh", connect: [moduleAndBlockBuilder, entPublish]), IPagePublishing { public void DoInsidePublishing(IContextOfSite context, Action action) { var possibleContextOfBlock = context as IContextOfBlock; var enabled = possibleContextOfBlock?.Publishing.ForceDraft ?? false; var instanceId = possibleContextOfBlock?.Module.Id ?? EavConstants.IdNotInitialized; var userId = (context.User as DnnUser)?.GetContents().UserID ?? EavConstants.IdNotInitialized; Log.A($"DoInsidePublishing(module:{instanceId}, user:{userId}, enabled:{enabled})"); if (enabled) { var moduleVersionSettings = new ModuleVersions(instanceId, Log); // Get an new version number and submit it to DNN // The submission must be made every time something changes, because a "discard" could have happened // in the meantime. TabChangeTracker.Instance.TrackModuleModification( moduleVersionSettings.ModuleInfo, moduleVersionSettings.IncreaseLatestVersion(), userId ); } var versioningActionInfo = new VersioningActionInfo(); action.Invoke(versioningActionInfo); Log.A("/DoInsidePublishing"); } public int GetLatestVersion(int instanceId) { var moduleVersionSettings = new ModuleVersions(instanceId, Log); var ver = moduleVersionSettings.GetLatestVersion(); Log.A($"GetLatestVersion(m:{instanceId}) = ver:{ver}"); return ver; } public int GetPublishedVersion(int instanceId) { var moduleVersionSettings = new ModuleVersions(instanceId, Log); var pubVersion = moduleVersionSettings.GetPublishedVersion(); Log.A($"GetPublishedVersion(m:{instanceId}) = pub:{pubVersion}"); return pubVersion; } public void Publish(int instanceId, int version) { var l = Log.Fn($"Publish(m:{instanceId}, v:{version})"); try { // publish all entities of this content block var dnnModule = ModuleController.Instance.GetModule(instanceId, Null.NullInteger, true); // must find tenant through module, as the Portal-Settings.Current is null in search mode var cb = moduleAndBlockBuilder.Value.BuildBlock(dnnModule, null); l.A($"found dnn mod {cb.Context.Module.Id}, tenant {cb.Context.Site.Id}, cb exists: {cb.ContentGroupExists}"); if (cb.ContentGroupExists) { l.A("cb exists"); // Add content entities IEnumerable list = new List(); list = TryToAddStream(list, cb.Data, DataSourceConstants.StreamDefaultName); list = TryToAddStream(list, cb.Data, "ListContent"); list = TryToAddStream(list, cb.Data, "PartOfPage"); // ReSharper disable PossibleMultipleEnumeration // Find related presentation entities var attachedPresItems = list .Select(e => e.GetDecorator()?.Presentation) .Where(p => p != null); l.A($"adding presentation item⋮{attachedPresItems.Count()}"); list = list.Concat(attachedPresItems); // ReSharper restore PossibleMultipleEnumeration var ids = list.Where(e => !e.IsPublished).Select(e => e.EntityId).ToList(); // publish BlockConfiguration as well - if there already is one if (cb.ConfigurationIsReady) { l.A($"add group id:{cb.Configuration.Id}"); ids.Add(cb.Configuration.Id); } l.A(Log.Try(() => $"will publish id⋮{ids.Count} ids:[{ string.Join(",", ids.Select(i => i.ToString()).ToArray()) }]")); if (ids.Any()) entPublish.New(cb.Context.AppReaderRequired).Publish(ids.ToArray()); else l.A("no ids found, won\'t publish items"); } // Set published version new ModuleVersions(instanceId, Log).PublishLatestVersion(); l.Done("publish completed"); } catch (Exception ex) { DnnLogging.LogToDnn("exception", "publishing", Log, force: true); DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); l.Done(ex); throw; } } private IEnumerable TryToAddStream(IEnumerable list, IDataSource data, string key) { var cont = data.GetStream(key, nullIfNotFound: true)?.List.ToImmutableOpt(); Log.A($"TryToAddStream(..., ..., key:{key}), found:{cont != null} add⋮{cont?.Count ?? 0}" ); if (cont != null) list = list.Concat(cont); return list; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Cms/DnnPagePublishingSettings.cs ================================================ using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using ToSic.Sxc.Cms.Publishing.Sys; using ToSic.Sxc.Dnn.Features; using ToSic.Sxc.Services; namespace ToSic.Sxc.Dnn.Cms; internal class DnnPagePublishingGetSettings(IFeaturesService featuresService) : PagePublishingGetSettingsBase(DnnConstants.LogName) { protected override PublishingMode LookupRequirements(int moduleId) { Log.A($"Requirements(mod:{moduleId}) - checking first time (others will be cached)"); try { // TODO V14 - probably we can set ignoreCache to false then, as it's probably just a workaround for an old bug var mod = ModuleController.Instance.GetModule(moduleId, Null.NullInteger, true); var versioningEnabled = TabChangeSettings.Instance.IsChangeControlEnabled(mod.PortalID, mod.TabID); if (!versioningEnabled) return PublishingMode.DraftOptional; if (!new PortalSettings(mod.PortalID).UserInfo.IsSuperUser) return PublishingMode.DraftRequired; return PublishingMode.DraftRequired; } catch { Log.A("Requirements had exception!"); throw; } } #region SwitchableService public override string NameId => DnnConstants.LogName + "PublishingSettings"; public override int Priority => (int)PagePublishingPriorities.Platform; /// /// It's viable if it has not been turned off, which is the default /// /// public override bool IsViable() => featuresService.IsEnabled(DnnBuiltInFeatures.DnnPageWorkflow.NameId); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Cms/DnnPagePublishing_ModuleSettings.cs ================================================ using DotNetNuke.Entities.Modules; namespace ToSic.Sxc.Dnn.Cms; partial class DnnPagePublishing { internal class ModuleVersions: HelperBase { private const string LatestVersionSettingsKey = "LatestVersion"; private const string PublishedVersionSettingsKey = "PublishedVersion"; private readonly ModuleSettingsHelper _settingsHelper; public ModuleInfo ModuleInfo => _settingsHelper.ModuleInfo; public ModuleVersions(int instanceId, ILog parentLog): base(parentLog, "Dnn.ModVer") { _settingsHelper = new(instanceId); } public int GetPublishedVersion() => int.Parse(_settingsHelper.GetModuleSetting(PublishedVersionSettingsKey, "0")); public int GetLatestVersion() => int.Parse(_settingsHelper.GetModuleSetting(LatestVersionSettingsKey, "0")); public int IncreaseLatestVersion() { var version = GetLatestVersion() + 1; _settingsHelper.SetModuleSetting(LatestVersionSettingsKey, version.ToString()); return version; } public void PublishLatestVersion() { // 2017-09-13 must check maybe don't do anything, because // this setting is already published by DNN when releasing the module _settingsHelper.SetModuleSetting(PublishedVersionSettingsKey, GetLatestVersion().ToString()); } public void DeleteLatestVersion() => _settingsHelper.SetModuleSetting(LatestVersionSettingsKey, GetPublishedVersion().ToString()); public bool IsLatestVersionPublished() => GetLatestVersion() == GetPublishedVersion(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Code/DnnDynamicCodeRootTT.cs ================================================ using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Services.Sys; using ToSic.Sxc.Sys.ExecutionContext; using ExecutionContext = ToSic.Sxc.Sys.ExecutionContext.ExecutionContext; namespace ToSic.Sxc.Dnn.Code; [PrivateApi] internal class DnnExecutionContext(ExecutionContext.Dependencies services) : ExecutionContext(services, DnnConstants.LogName), IHasDnn where TModel : class where TServiceKit : ServiceKit { /// /// Dnn context with module, page, portal etc. /// public IDnnContext Dnn => field ??= GetService(reuse: true); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Code/DnnDynamicCodeService.cs ================================================ using System.Web; using System.Web.UI; using ToSic.Sxc.Dnn.Services; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Services.Sys.DynamicCodeService; using ToSic.Sxc.Sys.Render.PageContext; using ToSic.Sxc.Web.Sys.PageService; using ToSic.Sys.Users; namespace ToSic.Sxc.Dnn.Code; /// /// Dnn implementation /// goal is that we can hook into certain page lifecycle events to ensure changes /// happen to the page when necessary /// internal class DnnDynamicCodeService: DynamicCodeService { public record MyScopedServices( LazySvc PageServiceShared, LazySvc PageChangeSummary, LazySvc DnnPageChanges, LazySvc DnnClientResources) : DependenciesRecord(connect: [PageServiceShared, PageChangeSummary, DnnPageChanges, DnnClientResources]); public DnnDynamicCodeService(Dependencies services) : base(services, $"{DnnConstants.LogName}.DynCdS") { _scopedServices = ScopedServiceProvider.Build().ConnectServices(Log); _user = services.User; Page = HttpContext.Current?.Handler as Page; if (Page != null) Page.PreRender += Page_PreRender; } private readonly MyScopedServices _scopedServices; private readonly LazySvc _user; private void Page_PreRender(object sender, EventArgs e) { var l = Log.Fn(); var user = _user.Value; var changes = _scopedServices.PageChangeSummary.Value.FinalizeAndGetAllChanges( moduleId: 0, // ignore module Id, we don't expect any caching info here _scopedServices.PageServiceShared.Value, new(), user.IsContentAdmin ); _scopedServices.DnnPageChanges.Value.Apply(Page, changes); // #RemovedV20 #OldDnnAutoJQuery var dnnClientResources = _scopedServices.DnnClientResources.Value.Init(Page, /*false,*/ null); dnnClientResources.AddEverything(changes?.Features); l.Done(); } public Page Page; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Code/DnnExecutionContext.cs ================================================ using ToSic.Sxc.Services.Sys; using ExecutionContext = ToSic.Sxc.Sys.ExecutionContext.ExecutionContext; namespace ToSic.Sxc.Dnn.Code; /// /// The basic DnnDynamicCode without explicitly typed model / kit /// [PrivateApi] internal class DnnExecutionContext(ExecutionContext.Dependencies services) : DnnExecutionContext(services); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Code/IHasDnn.cs ================================================ using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn.Code; /// /// This interface extends the IAppAndDataHelpers with the DNN Context. /// It's important, because if 2sxc also runs on other CMS platforms, then the Dnn Context won't be available, so it's in a separate interface. /// [PublicApi] public interface IHasDnn { /// /// The DNN context. Has various objects to access the Dnn Page, etc. /// IDnnContext Dnn { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/AppCodeCompilerNetFull.cs ================================================ using Microsoft.CodeDom.Providers.DotNetCompilerPlatform; using System.CodeDom.Compiler; using System.Reflection; using System.Text; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Compile; using ToSic.Sys.Configuration; using ToSic.Sys.Locking; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Code; [PrivateApi] internal class AppCodeCompilerNetFull( IHostingEnvironmentWrapper hostingEnvironment, IReferencedAssembliesProvider referencedAssembliesProvider, IGlobalConfiguration globalConfiguration, SourceCodeHasher sourceCodeHasher, AssemblyDiskCache diskCache) : AppCodeCompiler(globalConfiguration, sourceCodeHasher, connect: [hostingEnvironment, referencedAssembliesProvider, sourceCodeHasher, diskCache]) { private const int LoadRetryDelayMs = 100; private const int LoadRetryTimeoutMs = 3000; /// /// Get the App Code. The code is segmented into many smaller try/catch blocks to better identify where errors happen. /// /// /// /// public override AssemblyResult GetAppCode(string relativePath, HotBuildSpecWithSharedSuffix spec) { var l = Log.Fn($"{nameof(relativePath)}: '{relativePath}'; {spec}", timer: true); // Step 1: Get source files string sourceRootPath; string[] sourceFiles; try { // Resolve source files sourceRootPath = NormalizeFullPath(hostingEnvironment.MapPath(relativePath)); sourceFiles = GetSourceFiles(sourceRootPath); if (sourceFiles.Length == 0) return l.Return(new(), "no source files"); } catch (Exception ex) { return ReturnAsError(ex, phaseName: "get names and files"); } // Step 2: Get target paths string symbolsPath, assemblyPath, dllName; try { // Target locations (symbolsPath, assemblyPath) = GetAssemblyLocations(spec, sourceRootPath); dllName = Path.GetFileName(assemblyPath); } catch (Exception ex) { return ReturnAsError(ex, phaseName: "get paths"); } // Step 3: Compile CompilerResults compilerResults; try { // Build or reuse compiled assembly. Always lock around the filesystem access to avoid // overlapping readers while the compiler is still writing or an anti-virus temporarily // blocks the file. var assemblyLock = CompileAssemblyLocks.Get(assemblyPath); var lockManager = new TryLockTryDo(assemblyLock); var result = lockManager.Call( conditionToGenerate: () => ShouldGenerate(assemblyPath), generator: () => CompileAssemblyFromAppCodeFolder(sourceFiles, assemblyPath, relativePath, spec), cacheOrFallback: () => LoadCachedAssemblyWithRetry(assemblyPath, l)); compilerResults = result.Result; } catch (Exception ex) { return ReturnAsError(ex, phaseName: "compile"); } // Step 4: Return results, log and handle errors try { var dicInfos = new Dictionary { ["DllName"] = dllName, ["Files"] = sourceFiles.Length.ToString(), ["Errors"] = compilerResults.Errors.HasErrors.ToString(), ["Assembly"] = compilerResults.Errors.HasErrors ? "null" : compilerResults.CompiledAssembly?.FullName ?? "null", ["AssemblyPath"] = assemblyPath, ["SymbolsPath"] = symbolsPath, }; // Success if (!compilerResults.Errors.HasErrors) { LogAllTypes(compilerResults.CompiledAssembly); return l.ReturnAsOk(new(assembly: compilerResults.CompiledAssembly) { AssemblyLocations = [symbolsPath, assemblyPath], Infos = dicInfos, }); } // Errors and warnings var errorMessages = GetErrorMessages(compilerResults, l); return l.ReturnAsError(new() { ErrorMessages = errorMessages, Infos = dicInfos, }, errorMessages); } catch (Exception ex) { return ReturnAsError(ex, phaseName: "final"); } AssemblyResult ReturnAsError(Exception ex, string phaseName) { l.Ex(ex); var errorMessage = $"Error in phase '{phaseName}': Can't compile '{AppCodeDll}' in {Path.GetFileName(relativePath)}. Details are logged into insights. {ex.Message}"; return l.ReturnAsError(new() { ErrorMessages = errorMessage, }, $"in phase: {phaseName}"); } } private static string GetErrorMessages(CompilerResults compilerResults, ILogCall l) { // first return all errors and then all warnings var errorsSb = new StringBuilder(); var warningsSb = new StringBuilder(); foreach (CompilerError ce in compilerResults.Errors) { var msg = $"{(ce.IsWarning ? "Warning" : "Error")} ({ce.ErrorNumber}): {ce.ErrorText} in '{ce.FileName}' (Line: {ce.Line}, Column: {ce.Column})."; if (ce.IsWarning) { l.W(msg); warningsSb.AppendLine(msg); } else { l.E(msg); errorsSb.AppendLine(msg); } } var errors = errorsSb.Append(warningsSb).ToString(); return errors; } private CompilerResults CompileAssemblyFromAppCodeFolder(string[] sourceFiles, string assemblyFilePath, string relativePath, HotBuildSpec spec) { var l = Log.Fn($"{nameof(sourceFiles)}: {sourceFiles.Length}; {nameof(assemblyFilePath)}: '{assemblyFilePath}'", timer: true); // Save to disk so it can be loaded by runtime var parameters = new CompilerParameters(null, assemblyFilePath) { GenerateInMemory = false, GenerateExecutable = false, IncludeDebugInformation = true, CompilerOptions = DnnRoslynConstants.CompilerOptions, }; // Referenced assemblies parameters.ReferencedAssemblies.AddRange(referencedAssembliesProvider.Locations(relativePath, spec).ToArray()); using var codeProvider = new CSharpCodeProvider(); var compilerResults = codeProvider.CompileAssemblyFromFile(parameters, sourceFiles); return compilerResults.Errors.HasErrors ? l.ReturnAsError(compilerResults) : l.ReturnAsOk(compilerResults); } private CompilerResults LoadCachedAssemblyWithRetry(string assemblyPath, ILogCall parentLog) { var l = parentLog.Fn($"load from path: '{assemblyPath}'"); // Use shared AssemblyDiskCache.LoadWithRetry instead of manual retry logic var assembly = diskCache.LoadWithRetry( assemblyPath, loadAssembly: Assembly.LoadFrom, retryDelayMs: LoadRetryDelayMs, timeoutMs: LoadRetryTimeoutMs); var result = new CompilerResults(new()) { PathToAssembly = assemblyPath, CompiledAssembly = assembly, }; return l.Return(result, $"loaded cached assembly"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/AssemblyExtensions.cs ================================================ using System.Reflection; using System.Web.Configuration; namespace ToSic.Sxc.Dnn.Compile { public static class AssemblyExtensions { // for assembly references public static Assembly WithPolicy(this Assembly assembly) => // apply binding redirections from web.config Assembly.ReflectionOnlyLoad(System.AppDomain.CurrentDomain.ApplyPolicy(assembly.FullName)); public static Assembly WithPolicy(this AssemblyInfo ai) => // apply binding redirections from web.config Assembly.ReflectionOnlyLoad(System.AppDomain.CurrentDomain.ApplyPolicy(ai.Assembly)); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/DnnRoslynConstants.cs ================================================ using ToSic.Sxc.Code.Sys.HotBuild; namespace ToSic.Sxc.Dnn.Compile; /// /// Contains constants used for Roslyn compilation in the DNN context. /// These constants define default compiler options, language versions, and other settings. /// internal class DnnRoslynConstants { /// /// Compiler options used during Roslyn compilation. /// - /optimize-: Disables compiler optimizations to make debugging easier. /// - /warnaserror-: Treats warnings as warnings (not errors), allowing the build to succeed even with warnings. /// - {CompilerOptionLanguageVersion}: Specifies the C# language version to use (e.g., "preview"). /// - {DefaultDisableWarnings}: Suppresses specific warnings defined in the DNN web.config. /// - {CompilerOptionDefine}: Defines preprocessor symbols (e.g., DEBUG, NETFRAMEWORK). /// public const string CompilerOptions = $"/optimize- /warnaserror- {DefaultDisableWarnings} {CompilerOptionLanguageVersion} {CompilerOptionDefine}"; /// /// Compiler warnings to suppress, as specified in the default DNN web.config file. /// These warnings are typically related to obsolete or deprecated APIs. /// private const string DefaultDisableWarnings = "/nowarn:1659;1699;1701;612;618"; /// /// Compiler option to specify the language version. /// This is constructed using the . /// private const string CompilerOptionLanguageVersion = $"/langversion:{RoslynConstants.LanguageVersion}"; // "8" till 2025-08-20; /// /// Defines the preprocessor symbols to be used during compilation. /// These symbols allow conditional compilation for different build configurations and platforms. /// Examples: /// - NETFRAMEWORK: Indicates targeting the .NET Framework (used for DNN). /// private const string DefineConstants = "NETFRAMEWORK"; /// /// Compiler option to define preprocessor symbols. /// This is constructed using the . /// private const string CompilerOptionDefine = $"/define:{DefineConstants}"; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/HostingEnvironmentWrapper.cs ================================================ namespace ToSic.Sxc.Dnn.Compile; /// /// wrapper around HostingEnvironment /// /// to mock the wrapper in unit tests [PrivateApi] public class HostingEnvironmentWrapper : IHostingEnvironmentWrapper { /// Maps a virtual path to a physical path on the server. /// The virtual path (absolute or relative). /// The physical path on the server specified by . public string MapPath(string virtualPath) => System.Web.Hosting.HostingEnvironment.MapPath(virtualPath); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/IHostingEnvironmentWrapper.cs ================================================ namespace ToSic.Sxc.Dnn.Compile; [PrivateApi] public interface IHostingEnvironmentWrapper { string MapPath(string virtualPath); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/IReferencedAssembliesProvider.cs ================================================ using ToSic.Sxc.Code.Sys.HotBuild; namespace ToSic.Sxc.Dnn.Compile; [PrivateApi] public interface IReferencedAssembliesProvider { List Locations(string virtualPath, HotBuildSpec spec); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/IRoslynBuildManager.cs ================================================ using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; namespace ToSic.Sxc.Dnn.Compile; public interface IRoslynBuildManager { AssemblyResult GetCompiledAssembly(CodeFileInfo codeFileInfo, string className, HotBuildSpec spec); /// /// Manage template compilations, cache the assembly and returns the generated type. /// /// /// /// The generated type for razor cshtml. Type GetCompiledType(CodeFileInfo codeFileInfo, HotBuildSpec spec); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/ReferencedAssembliesProvider.cs ================================================ using System.Collections.Concurrent; using System.Reflection; using System.Web.Compilation; using System.Web.Configuration; using System.Web.Hosting; using ToSic.Sxc.Code.Sys.HotBuild; using static System.StringComparer; namespace ToSic.Sxc.Dnn.Compile; [PrivateApi] public class ReferencedAssembliesProvider( DependenciesLoader dependenciesLoader, AssemblyResolver assemblyResolver, LazySvc extensionReference) : ServiceBase("Sxc.RefAP", connect: [dependenciesLoader, assemblyResolver, extensionReference]), IReferencedAssembliesProvider { // cache of referenced assemblies per virtual path private static readonly ConcurrentDictionary> ReferencedAssembliesCache = new(InvariantCultureIgnoreCase); public List Locations(string virtualPath, HotBuildSpec spec) { var l = Log.Fn>($"for: '{virtualPath}'"); if (ReferencedAssembliesCache.TryGetValue(virtualPath, out var cachedResult)) return l.Return(new(cachedResult), "cached, re-wrapped in new list"); var lTimer = Log.Fn("timer for AppRef", timer: true); var referencedAssemblies = new List(AppReferencedAssemblies()); lTimer.Done(); // include assemblies from compilation section in web.config hierarchy lTimer = Log.Fn("timer for Web Configuration Manager", timer: true); var compilationSection = (CompilationSection)WebConfigurationManager.GetSection("system.web/compilation", virtualPath); foreach (AssemblyInfo assembly in compilationSection.Assemblies) ReferenceAssembly(referencedAssemblies, assembly.Assembly); lTimer.Done(); // include assemblies from `\AppCode\Extensions\[extension-name]\compile.json` lTimer = Log.Fn("timer for Extensions Reference Assemblies", timer: true); EnsureExtensionsReferenceAssemblies(referencedAssemblies, virtualPath); lTimer.Done(); lTimer = Log.Fn("timer for Dependencies", timer: true); if (spec != null) { // TODO: need to invalidate this cache (_referencedAssembliesCache, _assemblyResolver, ...) if there is change in Dependencies folder var (dependencies, _) = dependenciesLoader.TryGetOrFallback(spec); assemblyResolver.AddAssemblies(dependencies); // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (dependencies != null) foreach (var dependency in dependencies) referencedAssemblies.Add(dependency.Location); } lTimer.Done(); // deduplicate referencedAssemblies by filename, keep last duplicate referencedAssemblies = referencedAssemblies //.Where(IsValidAssembly) .GroupBy(Path.GetFileName) .Select(g => g.Last()) .ToList(); ReferencedAssembliesCache.TryAdd(virtualPath, referencedAssemblies); return l.Return(new(referencedAssemblies), "created, re-wrapped in new list"); } private void ReferenceAssembly(ICollection referencedAssemblies, string assemblyName) { if (assemblyName.IsEmpty()) return; var normalized = ExtensionCompileReferenceService.NormalizeAssemblyName(assemblyName); if (HasAssembly(referencedAssemblies, $"{normalized}.dll")) return; // Process your assembly information here try { referencedAssemblies.Add(Assembly.ReflectionOnlyLoad(normalized).Location); } catch { // sink } } private void EnsureExtensionsReferenceAssemblies(ICollection referencedAssemblies, string virtualPath) { //foreach (var assemblyName in GetExtensionsReferenceAssemblyNames) // referencedAssemblies.Add(Assembly.ReflectionOnlyLoad(assemblyName).Location); var physicalPath = MapVirtualPath(virtualPath); if (physicalPath.IsEmpty()) return; var referenceReader = extensionReference.Value; foreach (var reference in referenceReader.GetReferences(physicalPath, netFramework: true)) { if (ExtensionCompileReferenceService.IsAssemblyName(reference.Value)) { ReferenceAssembly(referencedAssemblies, reference.Value); continue; } var resolvedPath = referenceReader.ResolveReferencePath(reference); if (resolvedPath.IsEmpty() || !File.Exists(resolvedPath)) { Log.W($"Extension reference '{reference.Value}' in '{reference.ExtensionFolder}' not found or unreadable."); continue; } referencedAssemblies.Add(resolvedPath); } } private static string MapVirtualPath(string virtualPath) { if (virtualPath.IsEmpty()) return string.Empty; try { return HostingEnvironment.MapPath(virtualPath); } catch { return string.Empty; } } private static bool HasAssembly(IEnumerable referencedAssemblies, string fileName) => referencedAssemblies.Any(path => string.Equals(Path.GetFileName(path), fileName, StringComparison.InvariantCultureIgnoreCase)); //private static readonly string[] GetExtensionsReferenceAssemblyNames = //{ // "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" //}; ///// ///// We need to skip invalid assemblies to not break compile process ///// ///// ///// //private static bool IsValidAssembly(string filePath) //{ // try // { // Assembly.ReflectionOnlyLoadFrom(filePath); // return true; // } // catch // { // return false; // } //} // static cached, because in case of dll change app will restart itself private static IReadOnlyList AppReferencedAssemblies() => _appReferenceAssemblies ??= BuildManager.GetReferencedAssemblies().Cast().Select(assembly => assembly/*.WithPolicy()*/.Location).ToList().AsReadOnly(); private static IReadOnlyList _appReferenceAssemblies; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/Sys/AppJsonExtensions.cs ================================================ using ToSic.Eav.Apps.Sys.AppJson; namespace ToSic.Sxc.Dnn.Compile.Sys; [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public static class AppJsonExtensions { /// /// Check that the app is configured in app.json to always use Roslyn compiler /// /// /// /// public static bool DnnCompilerAlwaysUseRoslyn(this IAppJsonConfigurationService appJsonService, int appId) => appJsonService.GetAppJson(appId)?.DotNet?.Compiler?.Equals("roslyn", StringComparison.OrdinalIgnoreCase) == true; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/Sys/CodeCompilerNetFull.cs ================================================ using System.Web.Compilation; using ToSic.Eav.Apps.Sys.AppJson; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; namespace ToSic.Sxc.Dnn.Compile.Sys; [PrivateApi] internal class CodeCompilerNetFull( IServiceProvider serviceProvider, IRoslynBuildManager roslynBuildManager, LazySvc sourceAnalyzer, LazySvc appJson) : CodeCompiler(serviceProvider, connect: [roslynBuildManager, sourceAnalyzer, appJson]) { public override AssemblyResult GetAssembly(string relativePath, string className, HotBuildSpec spec) { var l = Log.Fn($"{nameof(relativePath)}: '{relativePath}'; {nameof(className)}: '{className}'; {spec}", timer: true); AssemblyResult ReportError(Exception ex, string additionalInfo) { var errorMessage = $"Can't compile '{className}' in {Path.GetFileName(relativePath)}. Details are logged into insights. {additionalInfo}" + ex.Message; return new() { ErrorMessages = errorMessage, }; } try { // TODO: SHOULD OPTIMIZE so the file doesn't need to read multiple times var codeFileInfo = sourceAnalyzer.Value.TypeOfVirtualPath(relativePath); try { if (appJson.Value.DnnCompilerAlwaysUseRoslyn(spec.AppId) || codeFileInfo.IsHotBuildSupported()) return l.Return(roslynBuildManager.GetCompiledAssembly(codeFileInfo, className, spec), "Ok, RoslynBuildManager"); } catch (Exception ex) { return l.ReturnAsError(ReportError(ex, "using Roslyn compiler")); } try { return l.Return(new(BuildManager.GetCompiledAssembly(relativePath)), "Ok, BuildManager"); } catch (Exception ex) { return l.ReturnAsError(ReportError(ex, "using BuildManager")); } } catch (Exception ex) { return l.ReturnAsError(ReportError(ex, "")); } } protected override (Type Type, string ErrorMessage) GetCsHtmlType(string relativePath) { var compiledType = BuildManager.GetCompiledType(relativePath); var errMsg = compiledType == null ? $"Couldn't create instance of {relativePath}. Compiled type == null" : null; return (compiledType, errMsg); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Compile/SysFeatureHelperRoslynCompiler.cs ================================================ namespace ToSic.Sxc.Dnn.Compile; [PrivateApi] internal class RoslynCompilerCapability { internal static bool CheckCsharpLangVersion(int version) => CsharpLangVersions.Contains(value: version); private static int[] CsharpLangVersions => _csharpLangVersions ??= GetCsharpLangVersions(); private static volatile int[] _csharpLangVersions; /// /// Goal is that it can tell if the newer CodeDom library has been installed or not /// used to build a config in the App, so the app can warn if a feature is missing /// /// /// /// This is optimized version, it is just checking for "/bin/roslyn/Microsoft.CodeAnalysis.CSharp.dll" file. /// Older version where checking for Microsoft.CodeAnalysis.CSharp.LanguageVersion enum, but has performance problems /// while using reflection on tmp loaded assembly in new application domain that can be unloaded, /// also used a double-check locking pattern to ensure thread safety and performance. /// private static int[] GetCsharpLangVersions() => (!File.Exists(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin", "roslyn", "Microsoft.CodeAnalysis.CSharp.dll"))) ? [] : [ 0, 1, 2, 3, 4, 5, 6, 7, 701, // 0x000002BD 702, // 0x000002BE 703, // 0x000002BF 800, // 0x00000320 2147483645, // LatestMajor - 0x7FFFFFFD 2147483646, // Preview - 0x7FFFFFFE 2147483647, // Latest - 0x7FFFFFFF ]; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnContext.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using DotNetNuke.Entities.Users; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Context.Sys.Module; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Sys.ExecutionContext; namespace ToSic.Sxc.Dnn.Context; internal class DnnContext : IDnnContext, INeedsExecutionContext { /// /// Build DNN Helper /// Note that the context can be null, in which case it will have no module context, and default to the current portal /// public void ConnectToRoot(IExecutionContext exCtx) { var moduleContext = exCtx.GetContextOfBlock()?.Module; Module = (moduleContext as Module)?.GetContents(); // note: this may be a bug, I assume it should be Module.OwnerPortalId Portal = PortalSettings.Current ?? (Module != null ? new PortalSettings(Module.PortalID): null); } public ModuleInfo Module { get; private set; } public TabInfo Tab => Portal?.ActiveTab; public PortalSettings Portal { get; private set; } public UserInfo User => Portal.UserInfo; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnISiteExtensions.cs ================================================ using DotNetNuke.Common; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Context; namespace ToSic.Sxc.Dnn.Context; internal static class DnnISiteExtensions { internal static string SharedAppsRootRelative(this ISite site) => Path.Combine(Globals.HostPath, AppConstants.AppsRootFolder); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnModule.cs ================================================ using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; using ToSic.Eav.Apps; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Sys; using ToSic.Sxc.Blocks; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Context; using ToSic.Sxc.Context.Sys.Module; using ISite = ToSic.Eav.Context.ISite; namespace ToSic.Sxc.Dnn.Context; /// /// The DNN implementation of a Block Container (a Module). /// [ShowApiWhenReleased(ShowApiMode.Never)] [PrivateApi("this is just internal, external users don't really have anything to do with this")] public class DnnModule(IAppsCatalog appsCatalog, LazySvc appFinderLazy, ISite site) : Module("Dnn.Contnr", connect: [appsCatalog, appFinderLazy, site]) { #region Constructors and DI /// /// We don't use a Constructor because of DI /// So you must always call Init /// public new DnnModule Init(ModuleInfo item) { var l = Log.Fn($"{item?.ModuleID}"); base.Init(item); return l.ReturnAsOk(this); } /// /// We don't use a Constructor because of DI /// So you must always call Init /// public override IModule Init(int moduleId) { var l = Log.Fn($"{moduleId}"); var mod = ModuleController.Instance.GetModule(moduleId, Null.NullInteger, false); Init(mod); return l.ReturnAsOk(this); } #endregion /// public override int Id => UnwrappedModule?.ModuleID ?? EavConstants.NullId; /// public override bool IsContent => (UnwrappedModule?.DesktopModule.ModuleName ?? "2sxc") == "2sxc"; /// public override IBlockIdentifier BlockIdentifier { get { if (field != null) return field; if (UnwrappedModule == null) return null; // find ZoneId, AppId and prepare settings for next values // note: this is the correct zone, even if the module is shared from another portal, because the Site is prepared correctly var zoneId = site.ZoneId; var (appId, appNameId) = GetInstanceAppIdAndName(zoneId); var settings = UnwrappedModule.ModuleSettings; // find block identifier Guid.TryParse(settings[ModuleSettingNames.ContentGroup]?.ToString(), out var blockGuid); // Check if we have preview-view identifier - for blocks which don't exist yet var previewTemplateString = settings[ModuleSettingNames.PreviewView]?.ToString(); var overrideView = !string.IsNullOrEmpty(previewTemplateString) ? Guid.Parse(previewTemplateString) : new(); // Create identifier return field = new BlockIdentifier(zoneId, appId, appNameId, blockGuid, overrideView); } } private (int AppId, string AppNameId) GetInstanceAppIdAndName(int zoneId) { var l = Log.Fn<(int, string)>($"{zoneId}"); var module = UnwrappedModule ?? throw new("instance is not ModuleInfo"); var msg = $"get appid from instance for Z:{zoneId} Mod:{module.ModuleID}"; if (IsContent) { var appId = appsCatalog.DefaultAppIdentity(zoneId).AppId; return l.Return((appId, "Content"), $"{msg} - use Default app: {appId}"); } if (module.ModuleSettings.ContainsKey(ModuleSettingNames.AppName)) { var guid = module.ModuleSettings[ModuleSettingNames.AppName].ToString(); var appId = appFinderLazy.Value.FindAppId(zoneId, guid); return l.Return((appId, guid), $"{msg} AppG:{guid} = app:{appId}"); } Log.A($"{msg} not found = null"); return l.Return((KnownAppsConstants.AppIdEmpty, KnownAppsConstants.AppNameIdEmpty), "not found"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnPage.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using ToSic.Eav.Sys; using ToSic.Sxc.Context.Sys.Page; using ToSic.Sxc.Web.Sys.Http; namespace ToSic.Sxc.Dnn.Context; /// /// A Dnn Page which will be auto-initialized on creation /// Important for scenarios where we don't have a module to fill in the details /// internal class DnnPage: Page { public DnnPage(LazySvc httpLazy) : base(httpLazy) { InitPageIdAndUrl(PortalSettings.Current?.ActiveTab, null); } internal string InitPageIdAndUrl(TabInfo activeTab, int? pageId) { Init(pageId ?? activeTab?.TabID ?? EavConstants.NullId); // the FullUrl will throw an error in DNN search scenarios try { // skip during search (usual HttpContext is missing for search) if (System.Web.HttpContext.Current != null) Url = activeTab?.FullUrl.TrimLastSlash(); else return "no http-context, can't add page"; } catch { /* ignore */ } return Url; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnSite.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using DotNetNuke.Services.Localization; using System.Web; using System.Web.Hosting; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Context.Sys.Site; using ToSic.Eav.Context.Sys.ZoneCulture; using ToSic.Eav.Context.Sys.ZoneMapper; using ToSic.Eav.Sys; using ToSic.Sxc.Sys.Integration.Paths; using ToSic.Sxc.Web.Sys.Url; using ToSic.Sys.Capabilities.Features; using static ToSic.Eav.Context.Sys.ZoneCulture.IZoneCultureResolverExtensions; using ISite = ToSic.Eav.Context.ISite; namespace ToSic.Sxc.Dnn.Context; /// /// This is a DNN implementation of a Tenant-object. /// internal sealed class DnnSite: Site, IZoneCultureResolverProWIP { #region Constructors and DI /// /// DI Constructor, will get the current portal settings /// #TodoDI not ideal yet, as PortalSettings.current is still retrieved from global /// public DnnSite(LazySvc zoneMapperLazy, LazySvc linkPathsLazy, LazySvc featuresSvc) : base(DnnConstants.LogName, connect: [featuresSvc, zoneMapperLazy, linkPathsLazy]) { _featuresSvc = featuresSvc; _zoneMapperLazy = zoneMapperLazy; _linkPathsLazy = linkPathsLazy; TryInitPortal(null); } private readonly LazySvc _zoneMapperLazy; private readonly LazySvc _linkPathsLazy; private readonly LazySvc _featuresSvc; private ILinkPaths LinkPaths => _linkPathsLazy.Value; /// public override ISite Init(int siteId, ILog parentLogOrNull) => TryInitPortal(new(siteId), parentLogOrNull); #endregion #region Swap new Portal Settings into this object internal DnnSite TryInitPortal(PortalSettings settings, ILog parentLogOrNull = default) { AttachToExternalLog(parentLogOrNull); var l = Log.Fn(); UnwrappedSite = KeepBestPortalSettings(settings); // reset language info to be sure to get it from the latest source _currentCulture.Reset(Log); _currentCodeFallbacks.Reset(Log); _defaultLanguage = null; _zoneId = null; return l.Return(this, $"Site Id {Id}"); } internal DnnSite TryInitModule(ModuleInfo module, ILog extLog) { AttachToExternalLog(extLog); var l = extLog.Fn($"Owner Site: {module?.OwnerPortalID}, Current Site: {module?.PortalID}"); if (module == null) return l.Return(this, "no module"); if (module.OwnerPortalID < 0) return l.Return(this, "no change, owner < 0"); var modulePortalSettings = new PortalSettings(module.OwnerPortalID); TryInitPortal(modulePortalSettings); return l.Return(this, "ok"); } private void AttachToExternalLog(ILog extLogOrNull) { if (extLogOrNull != null && extLogOrNull != Log) this.LinkLog(extLogOrNull, forceConnect: true); } /// /// Very special helper to work around a DNN issue /// Reason is that PortalSettings.Current is always "perfect" and also contains root URLs and current Page /// Other PortalSettings may not contain this (partially populated objects) /// In case we're requesting a DnnTenant with incomplete PortalSettings /// we want to correct this here /// /// /// private static PortalSettings KeepBestPortalSettings(PortalSettings settings, ILog extLogOrNull = null) { var l = extLogOrNull.Fn(); // in case we don't have an HTTP Context with current portal settings, don't try anything if (PortalSettings.Current == null) return l.Return(settings, "null, use given"); // If we don't have settings, or they point to the same portal, then use that if (settings == null) return l.Return(PortalSettings.Current, "null, use current"); if (settings == PortalSettings.Current) return l.Return(PortalSettings.Current, "is current, use current"); if (settings.PortalId == PortalSettings.Current.PortalId) return l.Return(PortalSettings.Current, "id=current, use current"); // fallback: use supplied settings return l.Return(settings, "use new settings"); } #endregion #region Culture / Languages /// public override string DefaultCultureCode => (_defaultLanguage ??= UnwrappedSite?.DefaultLanguage?.ToLowerInvariant()) ?? string.Empty; private string _defaultLanguage; public override string CurrentCultureCode => _currentCulture.Get(GetCurrentCultureCode); private readonly GetOnce _currentCulture = new(); private string GetCurrentCultureCode() { var l = Log.Fn(); // First check if we know more about the site var portal = UnwrappedSite; if (portal == null /* paranoid */) return l.ReturnNull("no portal"); var aliasCulture = portal.PortalAlias?.CultureCode ?? ""; if (aliasCulture.HasValue()) { var aliasCult = aliasCulture.ToLowerInvariant(); return l.Return(aliasCult, $"{nameof(portal.PortalAlias)}: {aliasCult}"); } // if alias is unknown, then we might be in search mode or something var result = portal.CultureCode?.ToLowerInvariant(); return l.Return(result, $"Portal.CultureCode: {result}"); } public List CultureCodesWithFallbacks => _currentCodeFallbacks.Get(GetCultureCodesWithFallbacks); private readonly GetOnce> _currentCodeFallbacks = new(); private List GetCultureCodesWithFallbacks() { var l = Log.Fn>(); // 2023-08-31 2dm - new code, as it could contain risks, use try/catch/null to default try { // If the feature is not enabled, return null so up-stream can handle defaults if (!_featuresSvc.Value.IsEnabled(BuiltInFeatures.LanguagesAdvancedFallback.Guid)) return l.ReturnNull("feature not enabled"); var lc = LocaleController.Instance; if (lc == null) return l.ReturnNull("no locale controller"); var list = new List(); // Top priority is current and fallbacks of it // 2025-09-15 2dm: Dnn seems to do something wrong during WebApi calls. // Internally it wants to prefer the `language` querystring param, // but if it doesn't have it, then in a WebApi call it seems to not correctly take the current portal alias culture. // So we can't use `GetCurrentLocale` but need to use `GetLocaleOrCurrent` with the current culture code. var languageQuery = HttpContext.Current?.Request?.QueryString?["language"]; // null-safe when no HTTP context var current = !string.IsNullOrEmpty(languageQuery) ? lc.GetCurrentLocale(Id) // This will use the querystring param if available, or work in Razor, but not in WebApi : lc.GetLocaleOrCurrent(Id, CurrentCultureCode ?? DefaultCultureCode ?? System.Globalization.CultureInfo.CurrentCulture.Name); // Use known codes or thread culture when no HTTP context if (current != null) { var currentCode = current.Code; l.A($"{nameof(currentCode)}: {currentCode}"); ListBuildAddCodeIfNew(list, currentCode); // Try to add fallbacks, and fallbacks of fallbacks... var fallback = current.FallBackLocale; for (var i = 0; i < 3 && fallback != null; i++) { ListBuildAddCodeIfNew(list, fallback.Code); fallback = fallback.FallBackLocale; } } // Always add the defaults as well var def = lc.GetDefaultLocale(Id); if (def != null) { var defCode = def.Code; l.A($"{nameof(defCode)}: {defCode}"); ListBuildAddCodeIfNew(list, defCode); // Default should never have another fallback; it's the default! } // If the list is empty, return null so upstream can fallback return list.Any() ? l.Return(list, $"got: {list.Count}") : l.ReturnNull("no list"); } catch { return l.ReturnAsError(null); } } #endregion // ReSharper disable once InheritdocInvalidUsage /// public override int Id => UnwrappedSite?.PortalId ?? EavConstants.NullId; /// public override string Name => UnwrappedSite.PortalName; public override string Url { get { if (field != null) return field; // PortalAlias in DNN is without protocol, so we need to add it from current request for consistency // also without trailing slash var parts = new UrlParts(LinkPaths.GetCurrentRequestUrl()); return field = $"{parts.Protocol}{UrlRoot}"; } } /// /// /// /// /// Important special case: if the PortalSettings are not from the PortalSettings.Current, then the /// PortalAlias are null!!! /// I believe this should only matter in very special cases /// Like when showing a module from another portal - in which case we don't need that alias /// but the current one. Just keep this in mind in case anything ever breaks. /// public override string UrlRoot => _urlRoot ??= UnwrappedSite?.PortalAlias?.HTTPAlias ?? PortalSettings.Current?.PortalAlias?.HTTPAlias ?? "err-portal-alias-not-loaded"; private string _urlRoot; [PrivateApi] public override string AppsRootPhysical => Path.Combine(UnwrappedSite.HomeDirectory, AppConstants.AppsRootFolder); [PrivateApi] public override string AppAssetsLinkTemplate => AppsRootPhysical + "/" + AppConstants.AppFolderPlaceholder; [PrivateApi] public override string AppsRootPhysicalFull => HostingEnvironment.MapPath(AppsRootPhysical); /// public override string ContentPath => UnwrappedSite.HomeDirectory; public override int ZoneId { get { if(_zoneId != null) return _zoneId.Value; // check if id is negative; 0 is a valid tenant id if (Id < 0) return (_zoneId = EavConstants.NullId).Value; _zoneId = _zoneMapperLazy.Value.GetZoneId(Id); return _zoneId.Value; } } private int? _zoneId; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Context/DnnUser.cs ================================================ using System.Web.Security; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Users; using ToSic.Sxc.Cms.Users.Sys; using ToSic.Sxc.Dnn.Run; using ToSic.Sys.Users; using ToSic.Sys.Users.Permissions; namespace ToSic.Sxc.Dnn.Context; internal class DnnUser(LazySvc dnnSecurity) : ServiceBase("dnnUsr", connect: [dnnSecurity]), IUser { private string GetUserIdentityToken () { var userId = Id; var token = userId == -1 ? SxcUserConstants.Anonymous : $"{DnnConstants.UserTokenPrefix}{userId}"; return token; } public Guid Guid => Membership.GetUser()?.ProviderUserKey is Guid realGuid ? realGuid : default; public string IdentityToken => GetUserIdentityToken(); public List Roles => _roles.Get(BuildRoleList); private readonly GetOnce> _roles = new(); public bool IsSystemAdmin => DnnUserInfo?.IsSuperUser ?? false; public bool IsSiteAdmin => EffectivePermissions?.IsSiteAdmin ?? false; public bool IsContentAdmin => EffectivePermissions?.IsContentAdmin ?? false; public bool IsContentEditor => EffectivePermissions?.IsContentEditor ?? false; public bool IsSiteDeveloper => IsSystemAdmin; private EffectivePermissions EffectivePermissions => _adminPermissions ??= DnnUserInfo.NullOrGetWith(userInfo => dnnSecurity.Value.UserMayAdminThis(userInfo)); private EffectivePermissions _adminPermissions; private UserInfo DnnUserInfo => _user.Get(() => PortalSettings.Current?.UserInfo); private readonly GetOnce _user = new(); public UserInfo GetContents() => DnnUserInfo; private static List BuildRoleList() { var psCurrent = PortalSettings.Current; if (psCurrent == null) return []; var portalId = psCurrent.PortalId; var user = psCurrent.UserInfo; if (user == null) return []; var rc = new DotNetNuke.Security.Roles.RoleController(); return user.Roles .Select(r => rc.GetRoleByName(portalId, r)) .Where(r => r != null) .Select(r => r.RoleID) .ToList(); } public int Id => DnnUserInfo?.UserID ?? Null.NullInteger; public bool IsAnonymous => Id == -1; public string Username => DnnUserInfo?.Username ?? ""; public string Name => DnnUserInfo?.DisplayName ?? ""; public string Email => DnnUserInfo?.Email ?? ""; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DataProviders/DnnPagesDsProvider.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using DotNetNuke.Security.Permissions; using ToSic.Sxc.Cms.Pages.Sys; using ToSic.Sxc.DataSources.Sys.Pages; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.DataSources; [PrivateApi] internal class DnnPagesDsProvider() : PagesDataSourceProvider("Dnn.Pages") { private const int DnnNoParent = -1; private const int DnnLevelOffset = 1; public override List GetPagesInternal( NoParamOrder npo = default, bool includeHidden = default, bool includeDeleted = default, bool includeAdmin = default, bool includeSystem = default, bool includeLinks = default, bool requireViewPermissions = true, bool requireEditPermissions = true) { var l = Log.Fn>($"PortalId: {PortalSettings.Current?.PortalId ?? -1}"); List pages; try { var siteId = PortalSettings.Current?.PortalId ?? -1; const bool addDummyNoneSpecifiedPage = false; pages = TabController.GetPortalTabs(siteId, 0, addDummyNoneSpecifiedPage, includeHidden, includeDeleted, includeLinks); } catch (Exception ex) { l.Ex(ex); return l.Return([], "error"); } if (pages == null || !pages.Any()) return l.Return([], "null/empty"); try { IEnumerable filtered = pages; // Apply filters as needed if (!includeAdmin) filtered = filtered.Where(x => !x.IsSystem); if (!includeSystem) filtered = filtered.Where(x => !x.IsSuperTab); if (requireViewPermissions) filtered = filtered.Where(TabPermissionController.CanViewPage); if (requireEditPermissions) filtered = filtered.Where(TabPermissionController.CanAdminPage); var final = filtered.ToList(); var result = final .Select(p => new PageModelRaw { Id = p.TabID, Guid = p.UniqueId, Title = p.Title.UseFallbackIfNoValue(p.TabName), Name = p.TabName, ParentId = p.ParentId == DnnNoParent ? NoParent : p.ParentId, Path = p.TabPath.FlattenMultipleForwardSlashes(), Url = p.FullUrl.TrimLastSlash(), Created = p.CreatedOnDate, Modified = p.LastModifiedOnDate, IsNavigation = p.IsVisible, // note: renamed in 19.01 to `IsNavigation` from `Visible` // New 15.01 IsClickable = !p.DisableLink, HasChildren = p.HasChildren, IsDeleted = p.IsDeleted, Level = p.Level + DnnLevelOffset, Order = p.TabOrder, // New in 15.02 LinkTarget = (string)p.TabSettings["LinkNewWindow"] == true.ToString() ? "_blank": "", }) .ToList(); return l.Return(result, $"found {result.Count}"); } catch (Exception ex) { l.Ex(ex); return l.Return([], "error"); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DataProviders/DnnRolesDsProvider.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Security.Roles; using ToSic.Sxc.Cms.Users.Sys; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.DataSources; /// /// Deliver a list of roles from the Dnn. /// internal class DnnRolesDsProvider() : ServiceBase("Dnn.Roles"), IUserRolesProvider { public IEnumerable GetRoles() { var l = Log.Fn>(); var siteId = PortalSettings.Current?.PortalId ?? -1; l.A($"Portal Id {siteId}"); try { var dnnRoles = RoleController.Instance.GetRoles(portalId: siteId); if (!dnnRoles.Any()) return l.Return(new List(), "null/empty"); var result = dnnRoles .Select(r => new UserRoleModel { Id = r.RoleID, // Guid = r. Name = r.RoleName, Created = r.CreatedOnDate, Modified = r.LastModifiedOnDate, }) .ToList(); return l.Return(result, "found"); } catch (Exception ex) { l.Ex(ex); return l.Return(new List(), "error"); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DataProviders/DnnSitesDsProvider.cs ================================================ using DotNetNuke.Entities.Portals; using ToSic.Sxc.Cms.Sites.Sys; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.DataSources; [PrivateApi] internal class DnnSitesDsProvider(SitesDataSourceProvider.Dependencies services) : SitesDataSourceProvider(services, "Dnn.Sites") { public override List GetSitesInternal() { var l = Log.Fn>($"PortalId: {PortalSettings.Current?.PortalId ?? -1}"); var portals = PortalController.Instance .GetPortals() .OfType() .ToList(); if (!portals.Any()) return l.Return([], "null/empty"); var result = portals .Select(s => new SiteModel { Id = s.PortalID, Guid = s.GUID, Name = s.PortalName, Url = GetUrl(s.PortalID, s.DefaultLanguage).TrimLastSlash(), DefaultLanguage = s.DefaultLanguage.ToLower() ?? "", Languages = GetLanguages(s.PortalID), Created = s.CreatedOnDate, Modified = s.LastModifiedOnDate, ZoneId = GetZoneId(s.PortalID), ContentAppId = GetDefaultAppId(s.PortalID), PrimaryAppId = GetPrimaryAppId(s.PortalID) }) .ToList(); return l.Return(result, $"found {result.Count}"); } private string GetUrl(int portalId, string cultureCode) { var primaryPortalAlias = PortalAliasController.Instance .GetPortalAliasesByPortalId(portalId) .GetAliasByPortalIdAndSettings(portalId, result: null, cultureCode, settings: new(portalId)); return primaryPortalAlias.HTTPAlias; } //private bool AllowRegistration(int userRegistration) => // userRegistration != (int)Globals.PortalRegistrationType.NoRegistration // && userRegistration != (int)Globals.PortalRegistrationType.PrivateRegistration; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DataProviders/DnnStartUpDataSources.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav.DataSources.Sys; using ToSic.Sxc.Cms.Sites.Sys; using ToSic.Sxc.Cms.Users.Sys; using ToSic.Sxc.DataSources.Sys.Pages; using ToSic.Sxc.Dnn.DataSources; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.DataSources; internal static class DnnStartUpDataSources { public static IServiceCollection AddDnnSxcDataSources(this IServiceCollection services) { // DataSourceProvider model services.TryAddTransient(); services.TryAddTransient(); // info class to ensure SQL knows about default connections services.TryAddTransient(); // General data sources services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); return services; } public static IServiceCollection AddDnnDataSources(this IServiceCollection services) { // General data sources services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); return services; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DataProviders/DnnUsersProvider.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Users; using DotNetNuke.Security.Membership; using DotNetNuke.Security.Roles; using System.Collections; using ToSic.Sxc.Cms.Users; using ToSic.Sxc.Cms.Users.Sys; using ToSic.Sxc.Dnn; using ToSic.Sxc.Dnn.Run; using static DotNetNuke.Common.Utilities.Null; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.DataSources; internal class DnnUsersProvider(LazySvc dnnSecurity) : ServiceBase("Dnn.Users", connect: [dnnSecurity]), IUsersProvider { #region Configuration private UsersGetSpecs _specs; private UsersGetSpecsParsed SpecsParsed => field ??= new(_specs); #endregion public string PlatformIdentityTokenPrefix => DnnConstants.UserTokenPrefix; public IUserModel GetUser(int userId, int siteId) { var user = UserController.Instance.GetUserById(siteId, userId); return user == null ? null : dnnSecurity.Value.CmsUserBuilder(user, siteId); } public IEnumerable GetUsers(UsersGetSpecs specs) { var l = Log.Fn>($"specs:{specs}"); _specs = specs; try { return l.Return(GetUsersInternal(), "found"); } catch (Exception ex) { l.Ex(ex); return l.Return(new List(), "error"); } } private IEnumerable GetUsersInternal() { var l = Log.Fn>(); var siteId = PortalSettings.Current?.PortalId ?? NullInteger; l.A($"Portal Id {siteId}"); try { var dnnUsers = new List(); // Include users if (_specs.UserIds.IsEmpty() && _specs.RoleIds.IsEmpty()) { var dnnAllUsers = new ArrayList(); if (!_specs.IncludeSystemAdmins.EqualsInsensitive(UserConstants.IncludeRequired)) // take all portal users (this should include superusers, but superusers are missing) dnnAllUsers.AddRange(UserController.GetUsers(portalId: siteId, includeDeleted: false, superUsersOnly: false)); if (!_specs.IncludeSystemAdmins.EqualsInsensitive(UserConstants.IncludeForbidden)) // append all superusers dnnAllUsers.AddRange(UserController.GetUsers(portalId: -1, includeDeleted: false, superUsersOnly: true)); dnnUsers.AddRange(dnnAllUsers.Cast().ToList()); } else { // UserIds dnnUsers.AddRange(SpecsParsed.UserIdFilter.Except(SpecsParsed.ExcludeUserIdsFilter) .Select(userId => UserController.GetUserById(siteId, userId))); dnnUsers.AddRange(SpecsParsed.UserGuidFilter.Except(SpecsParsed.ExcludeUserGuidsFilter) .Select(membershipUserKey => GetUserByMembershipUserKey(siteId, membershipUserKey))); // RoleIds dnnUsers.AddRange(SpecsParsed.RolesFilter.Except(SpecsParsed.ExcludeRolesFilter) .SelectMany(roleId => GetUsersByRoleId(siteId, roleId))); } // Exclude users dnnUsers = dnnUsers.Distinct().Where(user => !ExcludeUser(user)).ToList(); if (!dnnUsers.Any()) return l.Return([], "null/empty"); var users = dnnUsers //.Where(user => !user.IsDeleted) .Select(u => dnnSecurity.Value.CmsUserBuilder(u, siteId)) .ToList(); return l.Return(users, "found"); } catch (Exception ex) { l.Ex(ex); return l.Return([], "error"); } } private bool ExcludeUser(UserInfo user) { if (user == null) return true; if (SpecsParsed.ExcludeUserIdsFilter.Contains(user.UserID)) return true; if (SpecsParsed.ExcludeUserGuidsFilter.Contains(dnnSecurity.Value.UserGuid(user))) return true; if (SpecsParsed.ExcludeRolesFilter.Any(roleId => user.IsInRole(RoleController.Instance.GetRoleById(user.PortalID, roleId).RoleName))) return true; if (_specs.IncludeSystemAdmins.EqualsInsensitive(UserConstants.IncludeForbidden) && user.IsSuperUser) return true; if (_specs.IncludeSystemAdmins.EqualsInsensitive(UserConstants.IncludeRequired) && !user.IsSuperUser) return true; return false; } private static IList GetUsersByRoleId(int siteId, int roleId) => UserController.Instance .GetUsersAdvancedSearch( portalId: siteId, userId: NullInteger, filterUserId: NullInteger, filterRoleId: roleId, relationTypeId: NullInteger, isAdmin: false, pageIndex: 0, pageSize: NullInteger, sortColumn: null, sortAscending: true, propertyNames: null, propertyValues: null ) .ToList(); private static UserInfo GetUserByMembershipUserKey(int portalId, Guid membershipUserKey) { var masterPortalId = PortalController.GetEffectivePortalId(portalId); var user = MembershipProvider.Instance().GetUserByProviderUserKey(masterPortalId, membershipUserKey.ToString()); if (user != null) user.PortalID = portalId; return user; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DnnSql.cs ================================================ using ToSic.Eav.DataSource.Sys; using ToSic.Eav.DataSource.VisualQuery; using ToSic.Eav.DataSources; namespace ToSic.Sxc.Dnn.DataSources; /// /// Retrieves data from SQL, specifically using the DNN Connection String /// [PublicApi] [VisualQuery( NiceName = "Dnn SQL", UiHint = "Data from the Dnn database", Icon = DataSourceIcons.DynamicForm, Type = DataSourceType.Source, NameId = "b9df1b84-7b50-418c-a476-1ce49193cd77", NameIds = [ "ToSic.Sxc.Dnn.DataSources.DnnSql, ToSic.Sxc.Dnn", "ToSic.SexyContent.DataSources.DnnSqlDataSource, ToSic.SexyContent", "ToSic.SexyContent.Environment.Dnn7.DataSources.DnnSqlDataSource, ToSic.SexyContent" ], HelpLink = "https://github.com/2sic/2sxc/wiki/DotNet-DataSource-DnnSqlDataSource", ConfigurationType = "|Config ToSic.SexyContent.DataSources.DnnSqlDataSource")] public class DnnSql : Sql { [PrivateApi] public DnnSql(Dependencies services) : base(services) { ConnectionStringName = DnnSqlPlatformInfo.SiteSqlServer; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DnnSqlPlatformInfo.cs ================================================ using ToSic.Eav.DataSources.Sys; namespace ToSic.Sxc.Dnn.DataSources; public class DnnSqlPlatformInfo: SqlPlatformInfo { // String "SiteSqlServer" isn't available in any constant in DNN internal const string SiteSqlServer = "SiteSqlServer"; public override string DefaultConnectionStringName => SiteSqlServer; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DataSources/DnnUserProfileDataRaw.cs ================================================ using DotNetNuke.Entities.Users; using System.Collections; using System.Collections.Immutable; using ToSic.Eav.Context; using ToSic.Eav.Context.Sys.ZoneMapper; using ToSic.Eav.Data; using ToSic.Eav.Data.Build; using ToSic.Eav.Data.Raw; using ToSic.Eav.Data.Raw.Sys; using ToSic.Eav.Data.Sys; using ToSic.Eav.DataSource; using ToSic.Eav.DataSource.Sys; using ToSic.Eav.DataSource.VisualQuery; using ToSic.Eav.Sys; using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn.DataSources; /// /// Get DNN user profiles as objects of one or many users. /// [PublicApi] [VisualQuery( NiceName = "Dnn User Profiles", UiHint = "Users profiles of specified users in Dnn", Icon = DataSourceIcons.Face, Type = DataSourceType.Source, NameId = "34bbcbee-72cd-483f-8c42-c2e696b21b14", ConfigurationType = "|Config ToSic.SexyContent.DataSources.DnnUserProfileDataSource", NameIds = [ "ToSic.Sxc.Dnn.DataSources.DnnUserProfile, ToSic.Sxc.Dnn", "ToSic.SexyContent.Environment.Dnn7.DataSources.DnnUserProfileDataSource, ToSic.SexyContent" ] )] public class DnnUserProfile : CustomDataSourceAdvanced { #region Configuration-properties /// /// The user id list of users to retrieve, comma-separated /// [Configuration] public string UserIds { get => _userIds ?? Configuration.GetThis(); set => _userIds = value; } private string _userIds; /// /// List of profile-properties to retrieve, comma-separated /// [Configuration(Fallback = "DisplayName,Email,FirstName,LastName,Username")] public string Properties { get => _properties ?? Configuration.GetThis(); set => _properties = value; } private string _properties; /// /// Gets or sets the Name of the ContentType to simulate /// [Configuration(Field = "ContentTypeName", Fallback = DnnUserProfileDataRaw.TypeName)] public string ContentType { get => _contentType ?? Configuration.GetThis(); set => _contentType = value; } private string _contentType; /// /// Gets or sets the Name of the Title Attribute of the DNN-UserInfo /// [Configuration(Field = "TitleFieldName", Fallback = "DisplayName")] public string TitleField { get => _titleField ?? Configuration.GetThis(); set => _titleField = value; } private string _titleField; #endregion #region Constructor / DI public new record Dependencies(CustomDataSourceAdvanced.Dependencies ParentServices, ISite Site, IZoneMapper ZoneMapper, LazySvc DnnSecurity) : DependenciesRecord(connect: [Site, ZoneMapper, DnnSecurity]); public DnnUserProfile(Dependencies services) : base(services.ParentServices, "Dnn.Profile", connect: [services]) { _services = services; ProvideOut(GetList); } private readonly Dependencies _services; #endregion private IImmutableList GetList() { var l = Log.Fn>(); Configuration.Parse(); var realTenant = _services.Site.Id != EavConstants.NullId ? _services.Site : _services.ZoneMapper.SiteOfApp(AppId); l.A($"realTenant {realTenant.Id}"); var properties = Properties.CsvToArrayWithoutEmpty(); var portalId = realTenant.Id; // read all user Profiles ArrayList users; if (!UserIds.HasValue() || UserIds == "disabled") // note: 'disabled' was the default text in Convert.ToInt32(n)).ToArray(); users = []; foreach (var user in userIds.Select(userId => UserController.GetUserById(portalId, userId))) users.Add(user); } l.A($"users: {users.Count}"); // convert Profiles to Entities var results = new List(); foreach (UserInfo user in users) { var dnnUserProfile = new DnnUserProfileDataRaw { Id = user.UserID, Guid = _services.DnnSecurity.Value.UserGuid(user), Name = GetDnnProfileValue(user, TitleField.ToLowerInvariant()) }; // add Profile-Properties foreach (var property in properties) dnnUserProfile.Properties.Add(property, GetDnnProfileValue(user, property)); results.Add(dnnUserProfile); } l.A($"results: {results.Count}"); var userProfileDataFactory = DataFactory.SpawnNew(options: DnnUserProfileDataRaw.Options with { TypeName = ContentType?.NullIfNoValue() }); return l.Return(userProfileDataFactory.Create(results), "ok"); } private static string GetDnnProfileValue(UserInfo user, string property) { string value; switch (property.ToLowerInvariant()) { case "displayname": value = user.DisplayName; break; case "email": value = user.Email; break; case "firstname": value = user.FirstName; break; case "lastname": value = user.LastName; break; case "username": value = user.Username; break; default: value = user.Profile.GetPropertyValue(property); break; } return value; } } /// /// Internal class to hold all the information about the user profile, /// until it's converted to an IEntity in the DataSource. /// /// For detailed documentation, check the docs of the underlying objects: /// /// * TODO: /// * TODO: /// Important: this is an internal object. /// We're just including in in the docs to better understand where the properties come from. /// We'll probably move it to another namespace some day. /// /// /// Make sure the property names never change, as they are critical for the created Entity. /// [InternalApi_DoNotUse_MayChangeWithoutNotice] public class DnnUserProfileDataRaw : IRawEntity { internal const string TypeName = "UserProfile"; internal static DataFactoryOptions Options = new() { TypeName = TypeName, TitleField = nameof(Name) }; public int Id { get; set; } public Guid Guid { get; set; } public string Name { get; set; } // aka DisplayName public DateTime Created { get; set; } public DateTime Modified { get; set; } public Dictionary Properties { get; } = new(); /// /// Data but without Id, Guid, Created, Modified /// [PrivateApi] public IDictionary Attributes(RawConvertOptions options) => new Dictionary(Properties) { { AttributeNames.TitleNiceName, Name }, { nameof(Name), Name }, }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnBusinessController.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Services.Search.Entities; using ToSic.Sxc.Cms.Publishing.Sys; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.Install; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.Search; namespace ToSic.Sxc.Dnn; /// /// This is the connector-class which DNN consults when it needs to know things about a module /// It's used in the background, not when the page is loading /// public class DnnBusinessController : ModuleSearchBase, IHasLog { #region Constructor (not DI) /// /// Constructor overload for DotNetNuke /// (BusinessController needs a parameterless constructor) /// public DnnBusinessController() => Log = new Log("DNN.BusCon", null, "starting"); public ILog Log { get; } #endregion #region Service Providing /// /// Get the service provider only once - ideally in Dnn9.4 we will get it from Dnn /// If we would get it multiple times, there are edge cases where it could be different each time! #2614 /// private IServiceProvider ServiceProvider => _serviceProvider.Get(DnnStaticDi.GetPageScopedServiceProvider); private readonly GetOnce _serviceProvider = new(); #endregion #region DNN Interface Members - search, upgrade, versionable private IPagePublishing Publishing { get { if (field != null) return Publishing; // if publishing is used, make sure it's in the log-history field = ServiceProvider.Build(Log); ServiceProvider.Build().Add("dnn-publishing", Log); return field; } } public int GetLatestVersion(int instanceId) => Publishing.GetLatestVersion(instanceId); public int GetPublishedVersion(int instanceId) => Publishing.GetPublishedVersion(instanceId); public void PublishVersion(int instanceId, int version) { Log.A($"publish m#{instanceId}, v:{version}"); Publishing.Publish(instanceId, version); try { DnnLogging.LogToDnn("Publishing", "ok", Log, force: true); } catch { // ignore } } public void DeleteVersion(int instanceId, int version) => Log.A("delete version is not supported"); public int RollBackVersion(int instanceId, int version) { Log.A("DNN tried to rollback version " + version + ", but 2sxc does not support this."); // Return the currently published version, because this is what the module's state is after this operation return Publishing.GetPublishedVersion(instanceId); } /// /// This is part of the IUpgradeable of DNN /// /// /// public string UpgradeModule(string version) { var l = Log.Fn($"upgrade module - start for v:{version}"); var installer = ServiceProvider.Build(Log); var res = installer.UpgradeModule(version, true); Log.A($"result:{res}"); DnnLogging.LogToDnn("Upgrade", "ok", Log, force: true); // always log, this often causes hidden problems return l.ReturnAndLog(res); } public override IList GetModifiedSearchDocuments(ModuleInfo moduleInfo, DateTime beginDate) { try { return ServiceProvider.Build(Log) .GetModifiedSearchDocuments(((DnnModule)ServiceProvider.Build(Log)).Init(moduleInfo), beginDate); } catch (Exception e) { DnnEnvironmentLogger.AddSearchExceptionToLog(moduleInfo, e, nameof(DnnBusinessController)); return new List(); } } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnConstants.cs ================================================ namespace ToSic.Sxc.Dnn; public class DnnConstants { public const string LogName = "Dnn"; public const string ModuleNameContent = "2sxc"; public const string ModuleNameApp = "2sxc-app"; public const string SysFolderRootVirtual = "~/desktopmodules/tosic.sxc/"; // This is the new folder where 2sxc v20+ is installed in DNN public const string OldSysFolderRootVirtual = "~/desktopmodules/tosic_sexycontent/"; // This is the old folder where 2sxc before v20 was installed in DNN internal const string LogDirectory = SysFolderRootVirtual + "Upgrade/Log/"; public const string DnnContextKey = "DnnContext"; /// /// The ID in the current HTTP request for storing the EAV log object /// public const string EavLogKey = "EavLog"; /// /// Application Setting key to enable extended logging /// public const string AdvancedLoggingEnabledKey = "2sxc-enable-extended-logging"; /// /// Application Setting key to ensure extended logging will expire /// public const string AdvancedLoggingTillKey = "2sxc-extended-logging-expires"; /// /// AntiForgery token header name /// public const string AntiForgeryTokenHeaderName = "RequestVerificationToken"; /// /// Prefix for user identity token /// public const string UserTokenPrefix = "dnn:userid="; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnEnvironmentLogger.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Services.Exceptions; using ToSic.Eav.ImportExport.Integration; using ToSic.Sxc.Dnn.Search; namespace ToSic.Sxc.Dnn; public class DnnEnvironmentLogger: IEnvironmentLogger { public void LogException(Exception ex) => Exceptions.LogException(ex); #region Diagnostics stuff public static int SearchErrorsMax = 10; public static int SearchErrorsCount { get; set; } #endregion public static void AddSearchExceptionToLog(ModuleInfo moduleInfo, Exception e, string nameOfSource) { var errCount = SearchErrorsCount++; // ignore errors after 10 if (errCount > SearchErrorsMax) return; if (errCount == SearchErrorsMax) { Exceptions.LogException(new SearchIndexException(moduleInfo, new( $"Hit {SearchErrorsMax} SearchIndex exceptions in 2sxc modules, will stop reporting them to not flood the error log. \n" + $"To start reporting again up to {SearchErrorsMax} just restart the application. \n" + $"To show more errors change 'ToSic.Sxc.Dnn.{nameof(DnnBusinessController)}.{nameof(SearchErrorsMax)}' to a higher number in some code of yours like in a temporary razor view. " + $"Note that in the meantime, the count may already be higher. You can always get that from {nameof(SearchErrorsCount)}."), nameOfSource, errCount, SearchErrorsMax)); return; } Exceptions.LogException(new SearchIndexException(moduleInfo, e, nameOfSource, errCount, SearchErrorsMax)); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnModuleAndBlockBuilder.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using ToSic.Eav.Context.Sys.Site; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using ToSic.Sxc.Context; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Dnn.Context; namespace ToSic.Sxc.Dnn; internal class DnnModuleAndBlockBuilder( Generator moduleGenerator, Generator contextGenerator, Generator blockGenerator) : ModuleAndBlockBuilder(blockGenerator, DnnConstants.LogName, connect: [moduleGenerator, contextGenerator]) { private ILog ParentLog => (Log as Log)?.Parent ?? Log; public override IModule GetModule(int pageId, int moduleId) { var l = Log.Fn($"{nameof(pageId)}: {pageId}, {nameof(moduleId)}: {moduleId}"); var moduleInfo = new ModuleController().GetModule(moduleId, pageId, false); l.A($"Page Id on DNN Module: {moduleInfo.TabID} - should be {pageId}"); ThrowIfModuleIsNull(pageId, moduleId, moduleInfo); var module = ((DnnModule)moduleGenerator.New()).Init(moduleInfo); return l.Return(module, $"Page Id on IModule: {module.BlockIdentifier} - should be {pageId}"); } protected override IContextOfBlock GetContextOfBlock(IModule module, int? pageId) => GetContextOfBlock((module as DnnModule)?.GetContents(), pageId); protected override IContextOfBlock GetContextOfBlock(TPlatformModule module, int? pageId) { if (module == null) throw new ArgumentNullException(nameof(module)); if (module is not ModuleInfo dnnModule) throw new ArgumentException("Given data is not a module"); Log.A($"Module: {dnnModule.ModuleID}"); var initializedCtx = InitDnnSiteModuleAndBlockContext(dnnModule, pageId); return initializedCtx; } private IContextOfBlock InitDnnSiteModuleAndBlockContext(ModuleInfo dnnModule, int? pageId) { var l = Log.Fn($"{nameof(pageId)}: {pageId}, {nameof(dnnModule.ModuleID)}: {dnnModule.ModuleID}"); var context = contextGenerator.New(); l.A($"Will try-swap module info of {dnnModule.ModuleID} into site"); ((DnnSite)context.Site).TryInitModule(dnnModule, ParentLog); l.A("Will init module"); ((DnnModule)context.Module).Init(dnnModule); return l.ReturnAsOk(InitPageOnly(context, pageId)); } private IContextOfBlock InitPageOnly(IContextOfBlock context, int? pageId) { var l = Log.Fn($"{nameof(pageId)}: {pageId}"); // Collect / assemble page information var activeTab = (context.Site as Site)?.GetContents()?.ActiveTab; var page = (DnnPage)context.Page; var url = page.InitPageIdAndUrl(activeTab, pageId); return l.Return(context, url); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnStaticDi.cs ================================================ using Microsoft.Extensions.DependencyInjection; using System.Web; namespace ToSic.Sxc.Dnn; /// /// This is a temporary helper for Dnn 7+ to help with dependency injection which is /// patched unto Dnn. /// public static class DnnStaticDi { private static Func _getGlobalDnnServiceProvider; public static void StaticDiReady(Func spFunc = null) => _getGlobalDnnServiceProvider = spFunc ?? throw new("Can't start Static DI for old Dnn, because the ServiceCollection is null."); /// /// This is a special internal resolver for static objects /// Should only be used with extreme caution, as downstream objects /// May need more scope-specific stuff, why may be missing /// /// /// [PrivateApi] [Obsolete("Avoid using at all cost - only DNN and test-code may use this!")] public static T StaticBuild(ILog parentLog = null) => GetPageScopedServiceProvider().Build(parentLog); /// /// Dictionary key for keeping the Scoped Injection Service Provider in the Http-Context /// /// /// In v13 we changed key to one used in DNN9 DI instead old one "eav-scoped-serviceprovider" /// private static readonly Type ServiceScopeKey = typeof(IServiceScope); public static IServiceProvider GetGlobalScopedServiceProvider() => GetGlobalServiceProvider().CreateScope().ServiceProvider; [PrivateApi("Very internal, to use at startup, so singletons are not lost")] private static IServiceProvider GetGlobalServiceProvider() => Sp.Get(() => _getGlobalDnnServiceProvider?.Invoke() ?? throw new("can't access global DNN service provider")); private static readonly GetOnce Sp = new(); [PrivateApi("This is just a temporary solution - shouldn't be used long term")] public static IServiceProvider GetPageScopedServiceProvider() { // Because 2sxc runs inside DNN as a webforms project and not asp.net core mvc, we have // to make sure the service-provider object is disposed correctly. If we don't do this, // connections to the database are kept open, and this leads to errors like "SQL timeout: // "All pooled connections were in use". https://github.com/2sic/2sxc/issues/1200 // Work-around for issue https://github.com/2sic/2sxc/issues/1200 // Scope service-provider based on request var httpCtx = HttpContext.Current; if (httpCtx == null) return GetGlobalServiceProvider().CreateScope().ServiceProvider; // This only runs in Dnn 7.4.2 - Dnn 9.3, because Dnn 9.4 provides this in the http context if (!httpCtx.Items.Contains(ServiceScopeKey)) { httpCtx.Items[ServiceScopeKey] = GetGlobalServiceProvider().CreateScope(); // Make sure service provider is disposed after request finishes httpCtx.AddOnRequestCompleted(context => ((IDisposable)context.Items[ServiceScopeKey])?.Dispose()); } return httpCtx.Items[ServiceScopeKey] is IServiceScope scope ? scope.ServiceProvider : null; } [PrivateApi] public static IServiceProvider CreateModuleScopedServiceProvider() { var pageSp = GetPageScopedServiceProvider(); var moduleSp = pageSp.CreateScope().ServiceProvider; // In the module scope, we initialize the scoped PageScope Accessor and give it the parent scope // This is necessary for it to be able to give page-scoped objects moduleSp.Build().InitPageOfModule(pageSp); return moduleSp; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DnnSxcSettings.cs ================================================ using ToSic.Eav.Sys; namespace ToSic.Sxc.Dnn; internal class DnnSxcSettings { /// /// Special user groups to determine if admins can really admin /// public static readonly string[] DnnGroupsSxcAdmins = [ "2sxc designers", // Old, original name since ca. 2sxc 4+ "2sxcAdministrators", // New in v13.03 - to replace the old name for clarity ]; public const string DnnAdminRoleDefaultName = "Administrators"; /// /// Content Editors Advanced Role Name. /// /// /// AdvancedPermissionProvider in DNN v10 /// public const string DnnContentEditors = "Content Editors"; /// /// Content Managers Advanced Role Name. /// /// /// AdvancedPermissionProvider in DNN v10 /// public const string DnnContentManagers = "Content Managers"; public static class Installation { // This list is just used to run code-upgrades in DNN // So we only need the versions which do have code upgrades - which is very uncommon // todo: Maybe this list can somehow be extracted from the module manifest or placed there... internal static readonly string[] UpgradeVersionList = [ // new installer of 2sxc v20 doesn't upgrade versions before v15, so removed all those versions "15.00.00", "15.02.00", "20.00.00", "20.00.01", EavSystemInfo.VersionString, ]; // this is the last version which must run server-side change-code // it's not sql-code, as the SqlDataProvider files are imported by DNN, not by our code internal const string LastVersionWithServerChanges = "20.00.01"; internal const string LastVersionWithDnnDbChanges = "21.00.00"; // just fyi, not used anywhere } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/DynamicCode.cs ================================================ using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn; // ReSharper disable once UnusedMember.Global /// /// This is a base class for custom code files with context.
/// If you create a class file for dynamic use and inherit from this, then the compiler will automatically add objects like Link, Dnn, etc. /// The class then also has AsDynamic(...) and AsList(...) commands like a normal razor page. ///
[PublicApi] public abstract class DynamicCode : Sxc.Code.DynamicCode, IHasDnn { /// public IDnnContext Dnn => (ExCtxOrNull as IHasDnn)?.Dnn; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/DnnBuiltInFeatures.cs ================================================ using ToSic.Sys.Capabilities.Features; namespace ToSic.Sxc.Dnn.Features; internal partial class DnnBuiltInFeatures { public static void Register(FeaturesCatalog cat) => cat.Register( DnnPageWorkflow ); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/DnnBuiltInFeatures_CorePlus.cs ================================================ using ToSic.Sys.Capabilities.Features; namespace ToSic.Sxc.Dnn.Features; partial class DnnBuiltInFeatures { public static readonly Feature DnnPageWorkflow = new() { NameId = "DnnPageWorkflow", Guid = new("da68d954-5220-4f9c-a485-86f16b98629a"), Name = "Support for Dnn / Evoq Page Workflow", IsPublic = false, Ui = false, Description = "Enables support for Page Workflow in Evoq; on by default. It seems that in Evoq ca. v9.4+ it has become buggy. So you can disable it now. ", Security = FeaturesCatalogRules.Security0Neutral, LicenseRules = BuiltInFeatures.ForCorePlusEnabled }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/DnnRequirements.cs ================================================ using ToSic.Eav.Metadata.Requirements.Sys; using ToSic.Sxc.Engines; using ToSic.Sys.Capabilities.SysFeatures; using ToSic.Sys.Requirements; namespace ToSic.Sxc.Dnn.Features; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnRequirements(IRequirementsService requirements) : EngineRequirementsBase("Eng.DnnReq", connect: [requirements]) { internal bool RequirementsMet() => !RequirementsStatus().SafeAny(); private ICollection RequirementsStatus() => requirements.UnfulfilledRequirements([SysFeatureSuggestions.CSharp08]); internal RenderEngineResult GetMessageForRequirements() { var l = Log.Fn(); if (RequirementsMet()) return l.ReturnNull("all seems ok"); var result = BuildRenderEngineResult(RequirementsStatus()); return l.Return(result, "error"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/SysFeatureDetectorBlazor.cs ================================================ using ToSic.Sys.Capabilities.SysFeatures; using static ToSic.Sys.Capabilities.SysFeatures.SysFeatureSuggestions; namespace ToSic.Sxc.Dnn.Features; internal class SysFeatureDetectorBlazor() : SysFeatureDetector(Blazor with { Name = Blazor.Name + " (not available in Dnn)" }, false); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/SysFeatureDetectorCSharpInDnn.cs ================================================ using ToSic.Sys.Capabilities.SysFeatures; using static ToSic.Sys.Capabilities.SysFeatures.SysFeatureSuggestions; using static ToSic.Sxc.Dnn.Compile.RoslynCompilerCapability; namespace ToSic.Sxc.Dnn.Features; internal class SysFeatureDetectorCSharp6() : SysFeatureDetector(CSharp06 with { Name = " required for 2sxc 17" }) { public override bool IsEnabled => _isEnabledCache ??= CheckCsharpLangVersion(6); // C# 6 private static bool? _isEnabledCache; } internal class SysFeatureDetectorCSharp7() : SysFeatureDetector(CSharp07 with { Name = $"{CSharp07.Name} required for 2sxc 17" }) { public override bool IsEnabled => _isEnabledCache ??= CheckCsharpLangVersion(703); // C# 7.3; private static bool? _isEnabledCache; } internal class SysFeatureDetectorCSharp8() : SysFeatureDetector(CSharp08 with { Name = $"{CSharp08.Name} required for 2sxc 17" }) { public override bool IsEnabled => _isEnabledCache ??= CheckCsharpLangVersion(800); // C# 8; - code is 800 private static bool? _isEnabledCache; } internal class SysFeatureDetectorCSharp9() : SysFeatureDetector(CSharp09 with { Name = $"{CSharp09.Name} (not available in Dnn)" }); internal class SysFeatureDetectorCSharp10() : SysFeatureDetector(CSharp10 with { Name = $"{CSharp10.Name} (not available in Dnn)" }); internal class SysFeatureDetectorCSharp11() : SysFeatureDetector(CSharp11 with { Name = $"{CSharp11.Name} (not available in Dnn)" }); internal class SysFeatureDetectorCSharp12() : SysFeatureDetector(CSharp12 with { Name = $"{CSharp12.Name} (not available in Dnn)" }); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Features/SysFeatureDnn.cs ================================================ using ToSic.Sys.Capabilities.Features; using ToSic.Sys.Capabilities.SysFeatures; namespace ToSic.Sxc.Dnn.Features; // ReSharper disable once UnusedMember.Global - since it's used by reflection internal class SysFeatureDnn() : SysFeatureDetector(DefStatic, true) { private static readonly SysFeature DefStatic = new() { NameId = "Dnn", Guid = new("00cb8d98-bfac-4a18-b7de-b1237498f183"), Name = "Dnn", LicenseRules = BuiltInLicenseRules.SystemEnabled, }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/ImportExport/DnnImportExportEnvironment.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.FileSystem; using ToSic.Eav.Persistence.Sys.Logging; using ToSic.Sxc.Sys.Integration; namespace ToSic.Sxc.Dnn.ImportExport; internal class DnnImportExportEnvironment : SxcImportExportEnvironmentBase { #region Constructors /// /// DI Constructor /// public DnnImportExportEnvironment(Dependencies services) : base(services, "Dnn.ImExEn") { } #endregion /// /// /// Copy all files from SourceFolder to DestinationFolder /// /// /// The portal-relative path where the files should be copied to public override List TransferFilesToSite(string sourceFolder, string destinationFolder) { var l = Log.Fn>($"{sourceFolder}, {destinationFolder}"); var messages = new List(); var files = Directory.GetFiles(sourceFolder, "*.*"); var dnnFileManager = FileManager.Instance; var dnnFolderManager = FolderManager.Instance; var siteId = Site.Id; if (!dnnFolderManager.FolderExists(siteId, destinationFolder)) { l.A($"Must create {destinationFolder} in site {siteId}"); dnnFolderManager.AddFolder(siteId, destinationFolder); } var folderInfo = dnnFolderManager.GetFolder(siteId, destinationFolder); void MassLog(string msg, Exception exception) { l.A(msg); if (exception == null) return; messages.Add(exception is InvalidFileExtensionException ? new(msg, Message.MessageTypes.Error) : new Message(msg, Message.MessageTypes.Warning)); Exceptions.LogException(exception); } foreach (var sourceFilePath in files) { var destinationFileName = Path.GetFileName(sourceFilePath); l.A($"Try to copy '{sourceFilePath}' to '{destinationFileName}'"); if (!dnnFileManager.FileExists(folderInfo, destinationFileName)) { try { using var stream = File.OpenRead(sourceFilePath); var fileInfo = dnnFileManager.AddFile(folderInfo, destinationFileName, stream, false); MassLog($"Transferred '{destinationFileName}', dnn-id is now {fileInfo?.FileId}", null); } catch (InvalidFileExtensionException e) { MassLog($"Error: '{destinationFileName}' not copied because the file extension is not allowed.", e); } catch (Exception e) { MassLog($"Error: Can't copy '{destinationFileName}' because of an unknown error. " + "It's likely that your files and folders are not in sync with DNN, usually re-syncing will fix the issue.", e); } } else messages.Add(new("File '" + destinationFileName + "' not copied because it already exists", Message.MessageTypes.Warning)); } // Call the method recursively to handle subdirectories foreach (var sourceFolderPath in Directory.GetDirectories(sourceFolder)) { l.A($"subfolder:{sourceFolderPath}"); var newDestinationFolder = Path.Combine(destinationFolder, sourceFolderPath.Replace(sourceFolder, "") .TrimStart('\\')) .Replace('\\', '/'); TransferFilesToSite(sourceFolderPath, newDestinationFolder); } return l.ReturnAsOk(messages); } public override Version TenantVersion => typeof(PortalSettings).Assembly.GetName().Version; #region stuff we need for Import public override void MapExistingFilesToImportSet(Dictionary filesAndPaths, Dictionary fileIdMap) { var l = Log.Fn($"files: {filesAndPaths.Count}, map size: {fileIdMap.Count}"); var siteId = Site.Id; var fileManager = FileManager.Instance; var folderManager = FolderManager.Instance; foreach (var file in filesAndPaths) { var fileId = file.Key; var relativePath = file.Value; var fileName = Path.GetFileName(relativePath); var directory = Path.GetDirectoryName(relativePath)?.Replace('\\', '/'); if (directory == null) { l.A($"Warning: File '{relativePath}', folder doesn't exist on drive"); continue; } if (!folderManager.FolderExists(siteId, directory)) { l.A($"Warning: File '{relativePath}', folder doesn't exist in DNN DB"); continue; } var folderInfo = folderManager.GetFolder(siteId, directory); if (!fileManager.FileExists(folderInfo, fileName)) { l.A($"Warning: File '{relativePath}', file doesn't exist in DNN DB"); continue; } var fileInfo = fileManager.GetFile(folderInfo, fileName); fileIdMap.Add(fileId, fileInfo.FileId); l.A($"Map: {fileId} will be {fileInfo.FileId} ({relativePath})"); } l.Done(); } public override void CreateFoldersAndMapToImportIds(Dictionary foldersAndPath, Dictionary folderIdCorrectionList, List importLog) { var l = Log.Fn($"folders and paths: {foldersAndPath.Count}"); var siteId = Site.Id; var folderManager = FolderManager.Instance; foreach (var folder in foldersAndPath) try { if (string.IsNullOrEmpty(folder.Value)) { l.A($"{folder.Key} / {folder.Value} is empty"); continue; } var directory = Path.GetDirectoryName(folder.Value)?.Replace('\\', '/'); if (directory == null) { l.A($"Parent folder of folder {folder.Value} doesn't exist"); continue; } // if not exist, create - important because we need for metadata assignment var exists = folderManager.FolderExists(siteId, directory); var folderInfo = !exists ? folderManager.AddFolder(siteId, directory) : folderManager.GetFolder(siteId, directory); folderIdCorrectionList.Add(folder.Key, folderInfo.FolderID); l.A($"Folder original #{folder.Key}/{folder.Value} - exists:{exists} placed in folder #{folderInfo.FolderID}"); } catch (Exception) { var msg = $"Had problem with folder '{folder.Key}' path '{folder.Value}' - you'll have to figure out yourself if this is a problem"; l.A(msg); importLog.Add(new(msg, Message.MessageTypes.Warning)); } l.Done($"done - final count {folderIdCorrectionList.Count}"); } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/ImportExport/DnnXmlExporter.cs ================================================ using DotNetNuke.Services.FileSystem; using ToSic.Eav.Apps; using ToSic.Eav.Context; using ToSic.Eav.ImportExport.Sys; using ToSic.Eav.ImportExport.Sys.Xml; using ToSic.Sxc.Adam.Sys; using ToSic.Sxc.Adam.Sys.Manager; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.ExportImport.Sys; using FileManager = DotNetNuke.Services.FileSystem.FileManager; namespace ToSic.Sxc.Dnn.ImportExport; internal class DnnXmlExporter( AdamManager adamManager, ISxcCurrentContextService ctxService, XmlSerializer xmlSerializer, IAppsCatalog appsCat) : SxcXmlExporter(xmlSerializer, appsCat, ctxService, DnnConstants.LogName, connect: [adamManager]) { #region Constructor / DI private readonly IFileManager _dnnFiles = FileManager.Instance; protected override void PostContextInit(IContextOfApp appContext) { adamManager.Init(appCtx: appContext, compatibility: CompatibilityLevels.CompatibilityLevel10); } #endregion public override void AddFilesToExportQueue() { // Add Adam Files To Export Queue var exportList = new AdamExportListHelper(adamManager); var adamIds = exportList.AppFiles; adamIds.ForEach(AddFileAndFolderToQueue); // also add folders in adam - because empty folders may also have metadata assigned var adamFolders = exportList.AppFolders; adamFolders.ForEach(ReferencedFolderIds.Add); } protected override void AddFileAndFolderToQueue(int fileNum) { try { ReferencedFileIds.Add(fileNum); // also try to remember the folder try { var file = _dnnFiles.GetFile(fileNum); ReferencedFolderIds.Add(file.FolderId); } catch { // don't do anything, because if the file doesn't exist, its FOLDER should also not land in the queue } } catch { // don't do anything, because if the file doesn't exist, it should also not land in the queue } } protected override string ResolveFolderId(int folderId) { var folderController = FolderManager.Instance; var folder = folderController.GetFolder(folderId); return folder?.FolderPath; } protected override TenantFileItem ResolveFile(int fileId) { var fileController = FileManager.Instance; var file = fileController.GetFile(fileId); return new() { Id = fileId, RelativePath = file?.RelativePath.Replace('/', '\\'), Path = file?.PhysicalPath }; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnEnvironmentInstaller.cs ================================================ using ToSic.Eav.Apps.Sys.AppJson; using ToSic.Sxc.Sys.Integration.Installation; using ToSic.Sys.Configuration; namespace ToSic.Sxc.Dnn.Install; internal partial class DnnEnvironmentInstaller : ServiceBase, IEnvironmentInstaller { public static bool SaveUnimportantDetails = true; private readonly DnnInstallLogger _installLogger; private readonly LazySvc _globalConfiguration; private readonly LazySvc _appJsonService; /// /// Instance initializers... /// public DnnEnvironmentInstaller(ILogStore logStore, DnnInstallLogger installLogger, LazySvc globalConfiguration, LazySvc appJsonService) : base("Dnn.InstCo", connect: [appJsonService, installLogger, globalConfiguration]) { _appJsonService = appJsonService; _installLogger = installLogger; _globalConfiguration = globalConfiguration; logStore.Add(LogNames.LogStoreInstallation, Log); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnEnvironmentInstaller_IsRunning.cs ================================================ using DotNetNuke.Entities.Portals; using System.Web.Hosting; using static ToSic.Sxc.Dnn.DnnSxcSettings.Installation; namespace ToSic.Sxc.Dnn.Install; partial class DnnEnvironmentInstaller { public string UpgradeMessages() { // Upgrade success check - show message if upgrade did not run successfully if (UpgradeComplete(false)) return null; return IsUpgradeRunning ? "It looks like an upgrade is currently running. Please wait for the operation to complete, the upgrade may take a few minutes." : PortalSettings.Current.UserInfo.IsSuperUser ? "Module upgrade did not complete (read more). " + "Click to complete:
complete upgrade" : "Module upgrade did not complete successfully. Please login as host user to finish the upgrade."; } private bool UpgradeComplete(bool alwaysLogToFile) => UpgradeCompleteCache.Get(() => IsUpgradeComplete(LastVersionWithServerChanges, alwaysLogToFile, "- first check")); private static readonly GetOnce UpgradeCompleteCache = new(); private bool IsUpgradeComplete(string version, bool alwaysLogToFile, string note = "") { var l = Log.Fn(message: $"{note} Log to file even if all is ok: {alwaysLogToFile}", timer: true); var logger = new DnnInstallLoggerForVersion(_installLogger, version); // 2023-03-23 2dm // Previously this created a file on every startup, because it logged trying to find the status. // This sometimes resulted in exceptions simply because the file was locked - so to avoid this // I'll stop logging to the file by default // This should also reduce the amount of files created in the log file. // The only downside is that we cannot easily see how often the server restarted. var complete = false; try { var versionFilePath = HostingEnvironment.MapPath($"{DnnConstants.LogDirectory}{version}.resources"); l.A($"Checking upgrade marker: '{versionFilePath}'"); if (alwaysLogToFile) logger.LogUnimportant($"Check upgrade marker file {note}"); complete = File.Exists(versionFilePath); if (alwaysLogToFile || !complete) { logger.LogAuto($"Upgrade marker {(complete ? "exists" : "not found")}: '{versionFilePath}'"); logger.LogUnimportant($"Upgrade complete: {complete}"); } } catch (Exception ex) { l.Ex(ex); try { logger.LogAuto("Error checking upgrade marker file (install status unknown)"); } catch { /* ignore */ } } return l.ReturnAndLog(complete); } // cache the status private static bool? _running; /// /// Set / Check if it's running, by storing the static info but also creating/releasing a lock-file /// We need the lock file in case another system would try to read the status, which doesn't share /// this running static instance /// private bool IsUpgradeRunning { get { var l = Log.Fn($"Cached value set: {_running.HasValue}"); var result = _running ??= new DnnFileLock().IsSet; return l.ReturnAndLog(result); } set { var logger = new DnnInstallLoggerForVersion(_installLogger, ""); logger.LogAuto($"Upgrade running flag => {value}"); try { var fileLock = new DnnFileLock(); if (value) fileLock.Set(); else fileLock.Release(); } catch (Exception ex) { logger.LogAuto($"Upgrade running flag => {value} (error: {ex.GetType().Name}: {ex.Message})"); throw; } _running = value; logger.LogAuto($"Upgrade running flag => {value} (done)"); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnEnvironmentInstaller_Manual.cs ================================================ using System.Web; using static ToSic.Sxc.Dnn.DnnSxcSettings.Installation; namespace ToSic.Sxc.Dnn.Install; partial class DnnEnvironmentInstaller { public bool ResumeAbortedUpgrade() { var l = Log.Fn(); if (IsUpgradeRunning) { l.A("Upgrade is still running"); throw l.Done(new Exception("There seems to be an upgrade running - please wait. If you still see this message after 3-4 minutes, please restart the web application.")); } var logger = new DnnInstallLoggerForVersion(_installLogger, ""); logger.LogUnimportant("FinishAbortedUpgrade starting"); logger.LogAuto("Will handle " + UpgradeVersionList.Length + " versions"); // Run upgrade again for all versions that do not have a corresponding logfile foreach (var upgradeVersion in UpgradeVersionList) { var complete = IsUpgradeComplete(upgradeVersion, true, "- check for FinishAbortedUpgrade"); logger.LogAuto($"Upgrade marker for {upgradeVersion}: {(complete ? "exists" : "not found")}"); if (!complete) UpgradeModule(upgradeVersion, false); } logger.LogUnimportant("FinishAbortedUpgrade done"); _installLogger.CloseLogFiles(); // Restart application HttpRuntime.UnloadAppDomain(); return l.ReturnTrue("ok"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnEnvironmentInstaller_UpgradeModule.cs ================================================ using DotNetNuke.Collections; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Controllers; using System.Configuration; using System.Data.SqlClient; using System.Web.Hosting; using ToSic.Eav.Sys; using ToSic.Sys.Configuration; using Exception = System.Exception; namespace ToSic.Sxc.Dnn.Install; partial class DnnEnvironmentInstaller { internal string UpgradeModule(string version, bool closeWhenDone) { var l = Log.Fn($"{nameof(version)}: {version}, {nameof(closeWhenDone)}: {closeWhenDone}"); var logger = new DnnInstallLoggerForVersion(_installLogger, version); // if upgrade has to run if (!OldFolderExists() && (new Version(version) <= new Version(20, 0, 0))) { logger.LogAuto("Upgrade skipped because clean Install detected (installation of everything until and including 20.00.00 has been done by 00.00.01.SqlDataProvider)"); _installLogger.LogVersionCompletedToPreventRerunningTheUpgrade(version); return version; } logger.LogUnimportant("UpgradeModule starting"); // Abort upgrade if it's already done - if version is 01.00.00, the module has probably been uninstalled - continue in this case. if (/*version != "01.00.00" &&*/ IsUpgradeComplete(version, true, "- Check on Start UpgradeModule")) { logger.LogAuto("Upgrade already completed for this version (marker exists); skipping"); if (closeWhenDone) _installLogger.CloseLogFiles(); return l.ReturnAndLog(version); } logger.LogAuto("Upgrade status check OK (marker not found yet, so upgrade should run)"); l.A("Will check if IsUpgradeRunning"); if (IsUpgradeRunning) { logger.LogAuto("Another upgrade process appears to be running, will abort"); throw new("2sxc upgrade for version " + version + " started, but the upgrade is already running. Aborting upgrade."); } logger.LogAuto("Upgrade running check OK (no concurrent upgrade detected)"); IsUpgradeRunning = true; logger.LogAuto("----- Upgrade to " + version + " started -----"); try { switch (version) { case "01.00.00": MigrateUpgradeFolder(logger); AddObsoleteFile(logger); AddObsolete2SxcJs(logger); break; // case "15.00.00": // moved to 15.02 because of we accidentally skipped upgrades in 15.01 - see bug #2997 // case "15.02.00": // originally moved to here, but the Settings.Installation.LastVersionWithServerChanges had not been upgraded // this results in no file being created for 15.02, so the "IsUpgradeComplete" always fails case "15.02.00": // Set to 15.04 because otherwise the log file is not created if you already have a 15.02+ (necessary to verify UpgradeComplete) MigrateOldDataFoldersAndRelatedV15_02_00(logger); DataTimelineCleaningDataAndChangeSchemaForCJsonV15_02_00(logger); break; case "20.00.00": MigrateSystemCustomFolderV20_00_00(logger); break; case "20.00.01": MigrateAppExtensionsFolderV20_00_01(logger); break; // Do v21, 22 etc. here before v23 // In future v23, remove the old /DesktopModules/ToSic_SexyContent folder completely case "23.00.00": DeleteFolderToSic_SexyContent_ObsoleteV23Future(logger, version); break; // case "20.xx.xx": // IMPORTANT: when you add a new case, make sure you // 1. upgrade the version number on Settings.Installation.LastVersionWithServerChanges!!! // 2. add it to the Settings.Installation.UpgradeVersionList // If you don't do these two things, various problems will appear } logger.LogUnimportant("version-list check / switch done"); // Increase ClientDependency version upon each upgrade (System and all Portals) // prevents browsers caching old JS and CSS files for editing, which could cause several errors // only set this on the last upgraded version, to prevent crazy updating the client-resource-cache while upgrading if (version == EavSystemInfo.VersionString) { IncreaseClientDependencyVersion(logger); // Reset Upgrade complete so it's regenerated UpgradeCompleteCache.Reset(); var getNewStatus = UpgradeComplete(true); logger.LogAuto($"updated upgrade-complete status to {getNewStatus}"); } _installLogger.LogVersionCompletedToPreventRerunningTheUpgrade(version); logger.LogAuto("----- Upgrade to " + version + " completed -----"); } catch (Exception e) { logger.LogAuto("Upgrade failed - " + e.Message); throw; } finally { IsUpgradeRunning = false; } logger.LogAuto("UpgradeModule done / returning"); if (closeWhenDone) _installLogger.CloseLogFiles(); return l.ReturnAndLog(version); } private bool OldFolderExists() => _isUpgrade ??= Directory.Exists(HostingEnvironment.MapPath(DnnConstants.OldSysFolderRootVirtual).TrimLastSlash()); private bool? _isUpgrade; private string OldSysFolderRootFullPath(DnnInstallLoggerForVersion logger) => _oldSysFolderRootFullPath ??= GetOldSysFolder(logger); private static string _oldSysFolderRootFullPath; private void DataTimelineCleaningDataAndChangeSchemaForCJsonV15_02_00(DnnInstallLoggerForVersion logger) { // ToSic_EAV_DataTimeline cleaning data and change schema for CJson try { const string sql150000 = @" -- remove trigger generated data from 'ToSIC_EAV_DataTimeline' in batches IF OBJECT_ID('dbo.ToSIC_EAV_DataTimeline', 'U') IS NOT NULL BEGIN WHILE (SELECT COUNT(*) FROM [dbo].[ToSIC_EAV_DataTimeline] WHERE [SourceTable] IN ('ToSIC_EAV_Values', 'ToSIC_EAV_EntityRelationships', 'ToSIC_EAV_ValuesDimensions')) > 0 BEGIN ;WITH CTE AS ( SELECT TOP 100000 * FROM [dbo].[ToSIC_EAV_DataTimeline] WHERE [SourceTable] IN ('ToSIC_EAV_Values', 'ToSIC_EAV_EntityRelationships', 'ToSIC_EAV_ValuesDimensions') ) DELETE FROM CTE; END; -- drop NewData column from 'ToSIC_EAV_DataTimeline' IF EXISTS (SELECT * FROM sys.columns WHERE Name = 'NewData' AND Object_ID = OBJECT_ID('ToSIC_EAV_DataTimeline')) BEGIN ALTER TABLE ToSIC_EAV_DataTimeline DROP COLUMN NewData; END; -- add CJson column to 'ToSIC_EAV_DataTimeline' IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = 'CJson' AND Object_ID = OBJECT_ID('ToSIC_EAV_DataTimeline')) BEGIN ALTER TABLE ToSIC_EAV_DataTimeline ADD CJson varbinary(max) NULL; END; END;"; using var sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString); sqlConnection.Open(); using var sqlCommand150000 = new SqlCommand(sql150000, sqlConnection); sqlCommand150000.CommandTimeout = 0; // disable sql execution command timeout on sql server sqlCommand150000.ExecuteNonQuery(); logger.LogAuto("Data cleaning and schema change for CJson completed successfully."); } catch (Exception e) { logger.LogAuto($"Error during timeline data cleaning - {e.Message}"); } } private void MigrateOldDataFoldersAndRelatedV15_02_00(DnnInstallLoggerForVersion logger) { try { // move app.json template from old to new location _appJsonService.Value.MoveAppJsonTemplateFromOldToNewLocation(); // migrate old .data-custom folder var globalFolder = _globalConfiguration.Value.GlobalFolder(); var oldDataCustomFolder = Path.Combine(Path.Combine(globalFolder, ".data-custom")); var dataCustomFolder = _globalConfiguration.Value.DataCustomFolder(); if (Directory.Exists(oldDataCustomFolder) && !Directory.Exists(dataCustomFolder)) { Directory.Move(oldDataCustomFolder, dataCustomFolder); logger.LogAuto($"Old .data-custom folder migrated to new location: '{dataCustomFolder}'"); } // migrate old .databeta folder var oldDataBetaFolder = Path.Combine(Path.Combine(globalFolder, ".databeta")); var dataBetaFolder = _globalConfiguration.Value.DataBetaFolder(); if (Directory.Exists(oldDataBetaFolder) && !Directory.Exists(dataBetaFolder)) { Directory.Move(oldDataBetaFolder, dataBetaFolder); logger.LogAuto($"Old .databeta folder migrated to new location: '{dataBetaFolder}'"); } } catch (Exception e) { logger.LogAuto($"Error during migration of old data folders - {e.Message}"); } } private string GetOldSysFolder(DnnInstallLoggerForVersion logger) { var oldSysFolderRootFullPath = HostingEnvironment.MapPath(DnnConstants.OldSysFolderRootVirtual).TrimLastSlash(); try { if (Directory.Exists(oldSysFolderRootFullPath)) { logger.LogAuto("Old system folder."); return oldSysFolderRootFullPath; } logger.LogAuto("Old system folder does not exist."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}\n" + $"{e.Source}\n" + $"{e.InnerException?.Message}"); } return oldSysFolderRootFullPath; } private void AddObsoleteFile(DnnInstallLoggerForVersion logger) { var obsoleteFilename = "OBSOLETE.txt"; try { // add OBSOLETE.txt with appropriate text - remove folder in v21 var obsoleteFilePath = Path.Combine(OldSysFolderRootFullPath(logger), obsoleteFilename); if (!File.Exists(obsoleteFilePath)) { var obsoleteText = $"This folder is OBSOLETE as of 2sxc v20.\n" + $"It will be removed in v23.\n" + $"The folder was marked as obsolete on {DateTime.Now:yyyy-MM-dd HH:mm:ss} for backup purposes, but it is no longer in use.\n"; File.WriteAllText(obsoleteFilePath, obsoleteText); logger.LogAuto($"{obsoleteFilename} created with text:\n{obsoleteText}"); } else logger.LogAuto($"{obsoleteFilename} already exists, nothing to do."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}."); } } private void AddObsolete2SxcJs(DnnInstallLoggerForVersion logger) { var obsoleteFilename = @"js\2sxc.api.min.js"; try { // add 2sxc.api.min.js appropriate text - remove folder in v21 var obsoleteFilePath = Path.Combine(OldSysFolderRootFullPath(logger), obsoleteFilename); if (File.Exists(obsoleteFilePath)) { var obsoleteText = $@"// IMPORTANT: This file is obsolete and will be deleted in a future 2sxc release. // You are using '2sxc.api.min.js' from the old, obsolete folder: // 'DesktopModules/ToSIC_SexyContent/js/2sxc.api.min.js' // Please update your code to use the new path: // 'DesktopModules/ToSic.Sxc/js/2sxc.api.min.js' // For more info, see: https://docs.2sxc.org/abyss/releases/history/v20/breaking.html // This notice was created on {DateTime.Now:yyyy-MM-dd HH:mm:ss}. (function() {{ alert('''2sxc.api.min.js'' is obsolete and will be removed soon.\n\nUpdate your code to use:\n''DesktopModules/ToSic.Sxc/js/2sxc.api.min.js'''); }})(); "; File.WriteAllText(obsoleteFilePath, obsoleteText); // overwrite existing content logger.LogAuto($"'{obsoleteFilename}' overwrite existing content with text:\n{obsoleteText}"); } else logger.LogAuto($"'{obsoleteFilename}' not exists, nothing to do."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}."); } } private void MigrateSystemCustomFolderV20_00_00(DnnInstallLoggerForVersion logger) { try { var oldSystemCustomFolder = Path.Combine( OldSysFolderRootFullPath(logger), FolderConstants.DataFolderProtected, FolderConstants.DataSubFolderSystemCustom ); var systemCustomFolder = _globalConfiguration.Value.DataCustomFolder(); if (Directory.Exists(oldSystemCustomFolder)) { Helpers.DirectoryCopy(oldSystemCustomFolder, systemCustomFolder, true); logger.LogAuto($"Old '{FolderConstants.DataSubFolderSystemCustom}' folder migrated to new location: " + systemCustomFolder); } else logger.LogAuto($"Old '{FolderConstants.DataSubFolderSystemCustom}' folder does not exist."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}"); } } // Migrate the 'system' (AppExtensions) folder private void MigrateAppExtensionsFolderV20_00_01(DnnInstallLoggerForVersion logger) { try { var oldAppExtensionsFolder = Path.Combine( OldSysFolderRootFullPath(logger), FolderConstants.AppExtensionsLegacyFolder ); var newAppExtensionsFolder = Path.Combine( _globalConfiguration.Value.GlobalFolder(), FolderConstants.AppExtensionsLegacyFolder ); if (Directory.Exists(oldAppExtensionsFolder)) { Helpers.DirectoryCopy(oldAppExtensionsFolder, newAppExtensionsFolder, true); logger.LogAuto($"Old '{FolderConstants.AppExtensionsLegacyFolder}' folder migrated to new location: {newAppExtensionsFolder}"); RenameAllOldDataSubfolders(logger, newAppExtensionsFolder); } else logger.LogAuto($"Old '{FolderConstants.AppExtensionsLegacyFolder}' folder does not exist."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}"); } } // Rename all old '.data' subfolders to 'App_Data' that are in appExtension subfolders in 'system' folder private void RenameAllOldDataSubfolders(DnnInstallLoggerForVersion logger, string newAppExtensionsFolder) { logger.LogAuto($"Start renaming in app extensions subfolders from '{FolderConstants.DataFolderProtected}' to '{FolderConstants.DataFolderProtected}'"); new DirectoryInfo(newAppExtensionsFolder).GetDirectories() .SelectMany(appExtensionDirectory => appExtensionDirectory.GetDirectories(FolderConstants.DataFolderOld)) .ForEach(oldDotDataDirectory => RenameOldDotDataToAppData(logger, oldDotDataDirectory)); logger.LogAuto($"Finish renaming in app extensions subfolders from '{FolderConstants.DataFolderProtected}' to '{FolderConstants.DataFolderProtected}'"); } // Rename old '.data' folder to 'App_Data' private void RenameOldDotDataToAppData(DnnInstallLoggerForVersion logger, DirectoryInfo oldDotDataDirectory) { var destDirName = Path.Combine(oldDotDataDirectory.Parent!.FullName, FolderConstants.DataFolderProtected); try { if (!Directory.Exists(destDirName)) { oldDotDataDirectory.MoveTo(destDirName); logger.LogAuto($"Renamed: '{oldDotDataDirectory.FullName}'"); } else { // fallback strategy if directory already exists Helpers.DirectoryCopy(oldDotDataDirectory.FullName, destDirName, true); oldDotDataDirectory.Delete(true); logger.LogAuto($"Coped and deleted: '{oldDotDataDirectory.FullName}'"); } } catch (Exception ex) { logger.LogAuto($"Error during renaming: '{oldDotDataDirectory.FullName}' - {ex.Message}"); } } private void MigrateUpgradeFolder(DnnInstallLoggerForVersion logger) { try { const string upgrade = "Upgrade"; var oldUpgradeFolder = Path.Combine( OldSysFolderRootFullPath(logger), upgrade ); var upgradeFolder = Path.Combine( _globalConfiguration.Value.GlobalFolder(), upgrade ); if (Directory.Exists(oldUpgradeFolder)) { Helpers.DirectoryCopy(oldUpgradeFolder, upgradeFolder, true); logger.LogAuto($"Old system '{upgrade}' folder migrated to new location: " + upgradeFolder); } else logger.LogAuto($"Old system '{upgrade}' folder does not exist."); } catch (Exception e) { logger.LogAuto($"Error during migration - {e.Message}"); } } /// /// Clean up special /system folder which was moved in v20 and is obsolete now. /// At v20 we don't remove everything, so people can still find their code if they had anything custom. /// But we will do a clean-up in v23 or later. /// /// /// private void DeleteFolderToSic_SexyContent_ObsoleteV23Future(DnnInstallLoggerForVersion logger, string version) { var oldSysFolderRootFullPath = HostingEnvironment.MapPath(DnnConstants.OldSysFolderRootVirtual).TrimLastSlash(); logger.LogAuto($"Attempting to delete old system folder: '{oldSysFolderRootFullPath}'."); try { if (Directory.Exists(oldSysFolderRootFullPath)) { Directory.Delete(oldSysFolderRootFullPath, true); logger.LogAuto($"Old system folder deleted successfully."); } else { logger.LogAuto($"Old system folder does not exist, nothing to delete."); } } catch (Exception e) { logger.LogAuto($"Error during deletion of old system folder - {e.Message}"); } } private void IncreaseClientDependencyVersion(DnnInstallLoggerForVersion logger) { logger.LogAuto("ClientResourceManager- seems to be last item in version-list, will clear"); HostController.Instance.IncrementCrmVersion(true); DataCache.ClearCache(); logger.LogAuto("ClientResourceManager- done clearing"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnFileLock.cs ================================================ using System.Web.Hosting; namespace ToSic.Sxc.Dnn.Install; internal class DnnFileLock { internal string LockFileName => HostingEnvironment.MapPath(DnnConstants.LogDirectory + "lock.resources"); internal string LockFolder => HostingEnvironment.MapPath(DnnConstants.LogDirectory); private static readonly object LockObj = new(); private static FileStream _lockFile; // Acquire lock internal FileStream Set() { lock (LockObj) { return _lockFile ??= new(LockFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); } } // Close and dispose lock internal void Release() { lock (LockObj) { _lockFile?.Close(); _lockFile?.Dispose(); _lockFile = null; } try { // try delete File.Delete(LockFileName); } catch { // ignored } } internal bool IsSet { get { Directory.CreateDirectory(LockFolder); // create if it doesn't exist (doesn't need checking beforehand) var lockFilePath = LockFileName; if (!File.Exists(lockFilePath)) return false; try { using (var stream = new FileStream(lockFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) { // FileStream opened successfully, meaning the file is not locked } File.Delete(lockFilePath); } catch (IOException) { // The file is unavailable because it is: // - being processed by another thread // - does not exist (has already been processed) return true; } return false; } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnInstallLogger.cs ================================================ using System.Text; using System.Web.Hosting; using static System.IO.Directory; namespace ToSic.Sxc.Dnn.Install; internal class DnnInstallLogger: ServiceBase { private readonly bool _saveUnimportantDetails; public DnnInstallLogger(): base("Dnn.InstLg") { var l = Log.Fn(); _saveUnimportantDetails = DnnEnvironmentInstaller.SaveUnimportantDetails; l.A($"{nameof(_saveUnimportantDetails)}: {_saveUnimportantDetails}"); l.Done(); } internal void CloseLogFiles() { var l = Log.Fn($"Closing: {DateTime.Now.Ticks}"); if (_fileStreamWriterCached == null) return; _fileStreamWriterCached.Close(); _fileStreamWriterCached.Dispose(); _fileStreamWriterCached = null; l.Done(); } private StreamWriter FileStreamWriter => _fileStreamWriterCached ??= OpenLogFiles(0); private StreamWriter _fileStreamWriterCached; internal StreamWriter OpenLogFiles(int attempts) { var l = Log.Fn($"Opening: {DateTime.Now.Ticks}; {nameof(attempts)}: {attempts}"); EnsureLogDirectoryExists(); var logFileNameBase = DnnConstants.LogDirectory + DateTime.UtcNow.ToString(@"yyyy-MM-dd HH-mm-ss-fffffff") + "-" + System.Diagnostics.Process.GetCurrentProcess().Id + "-" + AppDomain.CurrentDomain.Id + (attempts == 0 ? "" : $"-{attempts}"); var logFileName = HostingEnvironment.MapPath($"{logFileNameBase}.log.resources")!; l.A($"{nameof(logFileName)}: {logFileName}"); StreamWriter streamWriter = null; try { var fileHandle = new FileStream(logFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); streamWriter = new(fileHandle); } catch (Exception ex) { l.Ex(ex); l.A($"{nameof(streamWriter)} is null : {streamWriter is null}"); if (streamWriter != null) { streamWriter.Close(); streamWriter.Dispose(); streamWriter = null; } l.A($"Will try again, current attempt count is {attempts}"); if (attempts < 3) return OpenLogFiles(++attempts); } return l.Return(streamWriter); } internal void LogStep(string version, string message, bool isImportant = true) { var l = Log.Fn($"{nameof(version)} '{version}': {message}"); var niceLine = FormatLogMessage(version, message); if (!isImportant && !_saveUnimportantDetails) return; FileStreamWriter.WriteLine(niceLine); FileStreamWriter.Flush(); l.Done(); } private string FormatLogMessage(string version, string message) => DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss") + " " + version + " - " + message; internal void LogVersionCompletedToPreventRerunningTheUpgrade(string version) { var l = Log.Fn(); EnsureLogDirectoryExists(); var logFilePath = HostingEnvironment.MapPath(DnnConstants.LogDirectory + version + ".resources")!; if (!File.Exists(logFilePath)) File.AppendAllText(logFilePath, DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fffffffzzz"), Encoding.UTF8); l.Done(); } private static void EnsureLogDirectoryExists() => CreateDirectory(HostingEnvironment.MapPath(DnnConstants.LogDirectory)!); internal void DeleteAllLogFiles() { if (!Exists(HostingEnvironment.MapPath(DnnConstants.LogDirectory))) return; var files = new List(GetFiles(HostingEnvironment.MapPath(DnnConstants.LogDirectory)!)); foreach (var x in files) { try { File.Delete(x); } catch { /* ignore */ } } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnInstallLoggerForVersion.cs ================================================ using System.Runtime.CompilerServices; namespace ToSic.Sxc.Dnn.Install; internal class DnnInstallLoggerForVersion(DnnInstallLogger logger, string version) { public void LogAuto(string message, [CallerMemberName] string cname = null) => logger.LogStep(version, message, true); public void LogUnimportant(string message, [CallerMemberName] string cname = null) => logger.LogStep(version, $"{cname} - {message}", false); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnPlatformAppInstaller.cs ================================================ using ToSic.Eav.Apps; using ToSic.Eav.Apps.Sys.Work; using ToSic.Eav.Context; using ToSic.Sxc.Apps.Sys.Installation; using ToSic.Sxc.Apps.Sys.Work; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.WebApi.Sys.ExternalLinks; namespace ToSic.Sxc.Dnn.Install; internal class DnnPlatformAppInstaller( LazySvc appsCatalog, GenWorkPlus workViews, LazySvc remoteRouterLazy) : ServiceBase("Dnn.AppIns", connect: [workViews, appsCatalog, remoteRouterLazy]), IPlatformAppInstaller { public string GetAutoInstallPackagesUiUrl(ISite site, IModule module, bool forContentApp) { var l = Log.Fn(); var moduleInfo = (module as DnnModule)?.GetContents(); var portal = (site as DnnSite)?.GetContents(); if (moduleInfo == null || portal == null) throw l.Done(new ArgumentException("missing portal/module")); // new: check if it should allow this // it should only be allowed, if the current situation is either // Content - and no views exist (even invisible ones) // App - and no apps exist - this is already checked on client side, so I won't include a check here if (forContentApp) try { var primaryAppId = appsCatalog.Value.DefaultAppIdentity(site.ZoneId); // we'll usually run into errors if nothing is installed yet, so on errors, we'll continue var contentViews = workViews.New(primaryAppId).GetAll(); if (contentViews.Any()) return null; } catch { /* ignore */ } var gettingStartedSrc = remoteRouterLazy.Value.LinkToDestination( ExternalSxcDestinations.AutoConfigure, site, module.Id, appSpecsOrNull: null, forContentApp ); // Set src to iframe return l.ReturnAsOk(gettingStartedSrc); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/DnnReadyCheckTurbo.cs ================================================ using DotNetNuke.Entities.Modules; using System.Collections.Concurrent; using ToSic.Eav.Apps.Sys; using ToSic.Sxc.Apps.Sys; using ToSic.Sxc.Blocks.Sys; namespace ToSic.Sxc.Dnn.Install; /// /// Helper class to ensure that an app is ready. /// It will have to do various file accesses - so once it knows a module is ready, it will cache the result. /// internal class DnnReadyCheckTurbo(LazySvc appFolderInitializerLazy) : ServiceBase("Dnn.PreChk", connect: [appFolderInitializerLazy]) { /// /// Fast static check to see if the check had previously completed. /// /// /// public static bool QuickCheckSiteAndAppFoldersAreReady(PortalModuleBase module, ILog log) { var l = log.Fn($"module: {module.ModuleId}; page: {module.TabId}"); return CachedModuleResults.TryGetValue(module.ModuleId, out var exists) && exists ? l.ReturnTrue("quick-check: ready") : l.ReturnFalse("deep-check: not ready, must do extensive check"); } /// /// Verify that the portal is ready, otherwise show a good error /// public bool EnsureSiteAndAppFoldersAreReady(PortalModuleBase module, IBlock block) { var l = Log.Fn(timer: true, message: $"module {module.ModuleId} on page {module.TabId}"); if (CachedModuleResults.TryGetValue(module.ModuleId, out var exists) && exists) return l.ReturnTrue("Previous check completed, will skip"); // throw better error if SxcInstance isn't available // not sure if this doesn't have side effects... if (block == null) throw l.Done(new Exception("Error - can't find 2sxc instance configuration. " + "Probably trying to show an app or content that has been deleted or not yet installed. " + "You may also have EnterpriseCMS features enabled but are missing the license activation (but this is super rare). ")); // check things if it's a module of this portal (ensure everything is ok, etc.) var isSharedModule = module.ModuleConfiguration.PortalID != module.ModuleConfiguration.OwnerPortalID; if (isSharedModule) return l.ReturnFalse("skip, shared"); // If the block is referencing data, then also check that the app folder exists if (block.AppIsReady) { l.A("Will check if site is ready and app folder exists"); EnsureSiteIsConfiguredAndTemplateFolderExists(module, block); // If no exception was raised inside, everything is fine - must cache CachedModuleResults.AddOrUpdate(module.ModuleId, true, (_, _) => true); } else l.A("skip, content-block not ready"); return l.ReturnTrue("ok"); } /// /// Returns true if the Portal HomeDirectory Contains the 2sxc Folder and this folder contains the web.config and a Content folder /// private void EnsureSiteIsConfiguredAndTemplateFolderExists(PortalModuleBase module, IBlock block) { var l = Log.Fn($"module {module.ModuleId} on page {module.TabId}"); var sxcFolder = new DirectoryInfo(block.Context.Site.AppsRootPhysicalFull); var contentFolder = new DirectoryInfo(Path.Combine(sxcFolder.FullName, KnownAppsConstants.ContentAppFolder)); if (!(sxcFolder.Exists && contentFolder.Exists)) { // configure it var tm = appFolderInitializerLazy.Value; tm.EnsureTemplateFolderExists(block.Context.AppReaderRequired.Specs.Folder, false); } l.Done($"Completed init App {block.AppId}"); } internal static ConcurrentDictionary CachedModuleResults = new(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Install/Helpers.cs ================================================ namespace ToSic.Sxc.Dnn.Install; internal class Helpers { /// /// Copy a Directory recursive /// /// Source: http://msdn.microsoft.com/en-us/library/bb762914(v=vs.110).aspx internal static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs) { try { // Get the subdirectories for the specified directory. var dir = new DirectoryInfo(sourceDirName); if (!dir.Exists) { throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourceDirName); } // If the destination directory doesn't exist, create it. if (!Directory.Exists(destDirName)) { Directory.CreateDirectory(destDirName); } // Get the files in the directory and copy them to the new location. var files = dir.GetFiles(); foreach (var file in files) { var temppath = Path.Combine(destDirName, file.Name); // Skip if the file already exists in destination if (File.Exists(temppath)) { continue; } try { file.CopyTo(temppath, false); } catch (IOException) { // If copy fails (e.g., if file was created between our check and copy), // just continue with the next file continue; } } // If copying subdirectories, copy them and their contents to new location. if (copySubDirs) { foreach (var subdir in dir.GetDirectories()) { var temppath = Path.Combine(destDirName, subdir.Name); DirectoryCopy(subdir.FullName, temppath, copySubDirs); } } } catch (UnauthorizedAccessException) { // Handle access denied errors gracefully // This could be logged or handled according to your requirements throw; } catch (Exception) { // Handle other unexpected errors // This could be logged or re-thrown according to your requirements throw; } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/LookUp/DnnLookUpEngineResolver.cs ================================================ using DotNetNuke.Entities.Portals; using ToSic.Eav.Context.Sys.ZoneCulture; using ToSic.Eav.LookUp; using ToSic.Eav.LookUp.Sources; using ToSic.Eav.LookUp.Sys; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.LookUp.Sys; using ToSic.Sxc.Web.Sys.Http; using static ToSic.Sxc.LookUp.Sys.LookUpConstants; namespace ToSic.Sxc.Dnn.LookUp; /// /// Retrieves the current engine for a specific module.
/// Internally it asks DNN for the current Property-Access objects and prepares them for use in EAV. ///
internal class DnnLookUpEngineResolver(IZoneCultureResolver cultureResolver, LazySvc httpLazy, LazySvc> builtInSources) : LookUpEngineResolverBase(builtInSources, "Dnn.LookUp", connect: [cultureResolver, httpLazy]) { protected override LookUpEngine BuildLookupEngine(int moduleId) { var l = Log.Fn($"{nameof(moduleId)}:{moduleId}"); return PortalSettings.Current == null ? l.Return(base.BuildLookupEngine(moduleId), "no context, use base") : l.Return(BuildDnnBasedLookupEngine(PortalSettings.Current, moduleId), "with site"); } [PrivateApi] public LookUpEngine LookUpEngineOfPortalSettings(PortalSettings portalSettings, int moduleId) { var l = Log.Fn($"{nameof(moduleId)}: {moduleId}"); //// if we already have a list of shared sources, return that //// as the sources don't change per request, but per module if (TryReuseFromCache(moduleId, out var cached)) return l.Return(cached, $"reuse {cached.Sources} sources"); var lookupEngine = BuildDnnBasedLookupEngine(portalSettings, moduleId); return l.ReturnAsOk(AddToCache(moduleId, lookupEngine)); } [PrivateApi] private LookUpEngine BuildDnnBasedLookupEngine(PortalSettings portalSettings, int moduleId) { var l = Log.Fn($"{nameof(moduleId)}: {moduleId}"); // Otherwise build using Dnn Built-In Sources and HttpSources and more var dnnUsr = portalSettings.UserInfo; var dnnCult = cultureResolver.SafeCurrentCultureInfo(); var dnn = new DnnTokenReplace(moduleId, portalSettings, dnnUsr); var stdSources = dnn.PropertySources; var lookUps = stdSources .Select(s => new LookUpInDnnPropertyAccess(s.Key, s.Value, dnnUsr, dnnCult) as ILookUp) .ToList(); // must already add, as we'll later check if some specific ones exist var httpAndDiAdditions = AddHttpAndDiSources(lookUps); var sources = lookUps.Concat(httpAndDiAdditions).ToList(); //var lookupEngine = new LookUpEngine(Log, sources: sources); //AddHttpAndDiSources(/*lookupEngine,*/ lookUps).DoIfNotNull(lookupEngine.Add); // Expand the Lookup for "module" to also have an "id" property var additions = new List(); if (sources.HasSource(SourceModule)) { var original = sources.GetSource(SourceModule)!; var modAdditional = new LookUpInDictionary(SourceModule, new Dictionary { { KeyId, original.Get(OldDnnModuleId) } }); additions.Add(new LookUpInLookUps(SourceModule, [modAdditional, original])); } // Create the lookup for "site" based on the "portal" and only give it "id" & "guid" if (sources.HasSource(OldDnnSiteSource)) additions.Add(new LookUpInDictionary(SourceSite, new Dictionary { { KeyId, sources.GetSource(OldDnnSiteSource)!.Get(OldDnnSiteId) }, { KeyGuid, $"{DotNetNuke.Common.Globals.GetPortalSettings()?.GUID}" } })); // Create the lookup for "page" based on the "tab" and only give it "id" & "guid" if (sources.HasSource(OldDnnPageSource)) additions.Add(new LookUpInDictionary(SourcePage, new Dictionary { { KeyId, sources.GetSource(OldDnnPageSource)!.Get(OldDnnPageId) }, { KeyGuid, $"{DotNetNuke.Common.Globals.GetPortalSettings()?.ActiveTab?.UniqueId}" } })); //lookupEngine.Add(additions); // 2024-05-06 2dm - this code never had an effect, so I believe I can assume // ...that it hasn't worked for a very long time, so I'll comment out to clean up EOY 2024 //// Add "form" source if it's not already there, and we have a request.Form //// request is sometimes null (e.g. in DNN scheduled task) //// Note that "Form" is only available on Dnn, not on Oqtane //if (!lookupEngine.HasSource("form") && httpLazy.Value.Request?.Form != null) // additions.Add(new LookUpInNameValueCollection("form", httpLazy.Value.Request.Form)); var lookupEngine = new LookUpEngine(Log, sources: [.. sources, .. additions]); // Note: Not implemented in Dnn: "Tenant" source return l.ReturnAsOk(lookupEngine); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/LookUp/DocsPlaceholder.cs ================================================ namespace ToSic.Sxc.Dnn.LookUp; /// [PublicApi] public class DocsPlaceholder: DocumentationPlaceholder; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/LookUp/LookUpInDnnPropertyAccess.cs ================================================ using System.Globalization; using DotNetNuke.Entities.Users; using DotNetNuke.Services.Tokens; using ToSic.Eav.LookUp.Sources; namespace ToSic.Sxc.Dnn.LookUp; /// /// Translator component which creates a LookUp object and internally accesses /// DNN PropertyAccess objects (which DNN uses for the same concept as LookUp) /// internal class LookUpInDnnPropertyAccess(string name, IPropertyAccess source, UserInfo user, CultureInfo localization) : LookUpBase(name, $"LookUp in Dnn PropertyAccess source of type {source?.GetType().Name}") { public override string Get(string key, string format) { var blnNotFound = false; var result = source.GetProperty(key, format, localization, user, Scope.DefaultSettings, ref blnNotFound); return blnNotFound ? string.Empty : result; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/LookUp/TokenReplaceDnn.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Users; using DotNetNuke.Services.Tokens; using DotNetNuke.Common.Utilities; namespace ToSic.Sxc.Dnn.LookUp; /// /// This class is mainly here to deliver all standard DNN-token lists to 2sxc. /// So it mainly initializes the normal DNN Token provider and offers a property called Property-Access which then contains all value-resolvers /// [PrivateApi("not for public use, it's an internal class just needed to retrieve DNN stuff")] internal sealed class DnnTokenReplace : TokenReplace { /// /// /// public DnnTokenReplace(int instanceId, PortalSettings ps, UserInfo userInfo) : base(Scope.DefaultSettings, "", ps, userInfo, instanceId == 0 ? Null.NullInteger : instanceId) { ModuleId = instanceId; PortalSettings = ps; try { // The first replace also initializes it... // So this must be executed, otherwise the list doesn't get built // But we've seen cases where something fails in here, hence the try/catch ReplaceTokens("InitializePropertySources"); } catch { // In DNN 9.11 we have some issues which seem to error in the Token Lookup // But the reason is not clear. // So ATM we just ignore. /* ignore */ //throw; } //try //{ // var minfo = TestModuleInfo; // TestReplaceTokens("test"); // ReplaceTokens("test"); //} //catch //{ // throw; //} } /// /// Make the protected PropertySource available to outside... /// public Dictionary PropertySources => PropertySource; //public ModuleInfo TestModuleInfo //{ // get // { // if (ModuleId > int.MinValue && (_moduleInfo == null || _moduleInfo.ModuleID != ModuleId)) // _moduleInfo = PortalSettings == null || PortalSettings.ActiveTab == null ? ServiceLocator.Instance.GetModule(ModuleId, Null.NullInteger, true) : ServiceLocator.Instance.GetModule(ModuleId, PortalSettings.ActiveTab.TabID, false); // return _moduleInfo; // } // set => _moduleInfo = value; //} //private ModuleInfo _moduleInfo; //private string TestReplaceTokens(string sourceText) //{ // if (sourceText == null) // return string.Empty; // StringBuilder stringBuilder = new StringBuilder(); // foreach (Match match in TokenizerRegex.Matches(sourceText)) // { // string objectName = match.Result("${object}"); // if (!string.IsNullOrEmpty(objectName)) // { // if (objectName == "[") // objectName = "no_object"; // string propertyName = match.Result("${property}"); // string format = match.Result("${format}"); // string str1 = match.Result("${ifEmpty}"); // string str2 = replacedTokenValue(objectName, propertyName, format); // if (!string.IsNullOrEmpty(str1) && string.IsNullOrEmpty(str2)) // str2 = str1; // stringBuilder.Append(str2); // } // else // stringBuilder.Append(match.Result("${text}")); // } // return stringBuilder.ToString(); //} } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Pages/DnnPages.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Tabs; using ToSic.Sxc.Blocks; namespace ToSic.Sxc.Dnn.Pages; /// /// Temporary solutions - minor service which ATM is only used in WebAPI. /// Goal is that this will be more standardized and work across all platforms. /// So when we do that, this should implement that interface and become internal. /// internal class DnnPages(ILog parentLog) : HelperBase(parentLog, "Dnn.Pages") { internal List AllModulesWithContent(int portalId) { var l = Log.Fn>($"{portalId}"); var mc = ModuleController.Instance; var tabC = TabController.Instance; // create an array with all modules var modules2Sxc = mc.GetModulesByDefinition(portalId, DnnConstants.ModuleNameContent) .ToArray() .Cast() .ToList(); var dnnMod2SxcApp = mc.GetModulesByDefinition(portalId, DnnConstants.ModuleNameApp) .ToArray() .Cast() .ToList(); var all = modules2Sxc.Union(dnnMod2SxcApp).ToList(); Log.A($"Mods for Content: {modules2Sxc.Count}, App: {dnnMod2SxcApp.Count}, Total: {all.Count}"); // filter the results var allMods = all .Where(m => m.DefaultLanguageModule == null) .Where(m => m.ModuleSettings.ContainsKey(ModuleSettingNames.ContentGroup)) .ToList(); var result = allMods.Select(m => new ModuleWithContent { Module = m, ContentGroup = Guid.TryParse(m.ModuleSettings[ModuleSettingNames.ContentGroup].ToString(), out var g) ? g : Guid.Empty, Page = tabC.GetTab(m.TabID, portalId) }) .Where(set => set.ContentGroup != Guid.Empty) .ToList(); return l.Return(result, $"{allMods.Count}"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Pages/ModuleWithContent.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Tabs; namespace ToSic.Sxc.Dnn.Pages; internal class ModuleWithContent { public Guid ContentGroup; public ModuleInfo Module; public TabInfo Page; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnEnvironmentPermission.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Security; using DotNetNuke.Security.Permissions; using ToSic.Eav.Environment.Sys.Permissions; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Context.Sys.Module; namespace ToSic.Sxc.Dnn.Run; internal class DnnEnvironmentPermission() : EnvironmentPermission(DnnConstants.LogName) { public string CustomPermissionKey = ""; // "CONTENT"; /// /// The DNN module on the container /// /// /// In some cases the container is a ContainerNull object without ModuleInfo, so we must really do null-checks /// protected ModuleInfo Module => _module.Get( () => ((Context as IContextOfBlock)?.Module as Module)?.GetContents()); private readonly GetOnce _module = new(); public override bool VerifyConditionOfEnvironment(string condition) { var l = Log.Fn($"condition: {condition}"); var fullPrefix = (SalPrefix + ".").ToLowerInvariant(); if (!condition.StartsWith(fullPrefix, StringComparison.InvariantCultureIgnoreCase)) return l.ReturnFalse("unknown condition: false"); var salWord = condition.Substring(fullPrefix.Length); var sal = (SecurityAccessLevel)Enum.Parse(typeof(SecurityAccessLevel), salWord); // check anonymous - this is always valid, even if not in a module context if (sal == SecurityAccessLevel.Anonymous) return l.ReturnTrue("anonymous, always true"); // check within module context if (Module != null) { // TODO: STV WHERE DOES THE MODULE COME FROM? // IT APPEARS THAT IT'S MISSING IN NORMAL REST CALLS var result = ModulePermissionController.HasModuleAccess(sal, CustomPermissionKey, Module); return l.Return(result, $"module: {result}"); } l.A("trying to check permission " + fullPrefix + ", but don't have module in context"); return l.ReturnFalse("can't verify: false"); } protected override bool UserIsModuleAdmin() { var l = Log.Fn(); return l.ReturnAsOk(Module != null && ModulePermissionController.CanAdminModule(Module)); } protected override bool UserIsModuleEditor() { var l = Log.Fn(); if (Module == null) return false; // This seems to throw errors during search :( try { // skip during search (usual HttpContext is missing for search) if (System.Web.HttpContext.Current == null) return l.ReturnFalse(); var isEditor = ModulePermissionController.HasModuleAccess(SecurityAccessLevel.Edit, "", Module) || ModulePermissionController.CanEditModuleContent(Module); return l.ReturnAndLog(isEditor); } catch (Exception e) { l.Ex(e); return l.ReturnFalse("error"); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnLogging.cs ================================================ using System.Collections.Concurrent; using System.Web.Http; using DotNetNuke.Services.Log.EventLog; using ToSic.Eav.Sys; namespace ToSic.Sxc.Dnn.Run; internal static class DnnLogging { public const int MaxDuration = 10; public static void LogToDnn(string key, string message, ILog log = null, IDnnContext dnnContext = null, bool force = false) { if (!force || !EnableLogging(GlobalConfiguration.Configuration.Properties)) return; // note: this code has a lot of try/catch, to ensure that most of it works and that // it doesn't interfere with other functionality try { var logInfo = new LogInfo { LogTypeKey = EventLogController.EventLogType.ADMIN_ALERT.ToString() }; // the initial message should come first, as it's visible in the summary if(!string.IsNullOrEmpty(message)) logInfo.AddProperty(key, message); AttachDnnStateIfPossible(dnnContext, logInfo); (log as Log)?.Entries.ForEach(e => logInfo.AddProperty(e.Source, e.Message)); new EventLogController().AddLog(logInfo); } catch { TryToReportLoggingFailure("logging"); } } /// /// try to at least report, that something failed /// /// public static void TryToReportLoggingFailure(string source) { try { new EventLogController().AddLog("2sxc logging", $"failed to add log from {source}, something in the logging failed", EventLogController.EventLogType.ADMIN_ALERT); } catch { /* ignore */ } } private static void AttachDnnStateIfPossible(IDnnContext dnn, LogInfo logInfo) { try { if (dnn != null) { logInfo.LogUserName = dnn.User?.DisplayName ?? EavConstants.NullNameId; logInfo.LogUserID = dnn.User?.UserID ?? -1; logInfo.LogPortalID = dnn.Portal.PortalId; logInfo.AddProperty("Module Id", dnn.Module?.ModuleID.ToString() ?? EavConstants.NullNameId); } } catch { /* ignore */ } } public static bool EnableLogging(ConcurrentDictionary props) { if (props == null) return false; if (!props.TryGetValue(DnnConstants.AdvancedLoggingEnabledKey, out var enabled)) return false; if (enabled is not true) return false; if (!props.TryGetValue(DnnConstants.AdvancedLoggingTillKey, out var till)) return false; return till is DateTime dtmTill && dtmTill.CompareTo(DateTime.Now) > 0; } /// /// Activate extended logging for a specific duration /// /// /// public static string ActivateForDuration(int duration) { if (duration > MaxDuration) duration = MaxDuration; var prop = GlobalConfiguration.Configuration.Properties; prop.GetOrAdd(DnnConstants.AdvancedLoggingEnabledKey, duration > 0); var timeout = DateTime.Now.AddMinutes(duration); prop.AddOrUpdate(DnnConstants.AdvancedLoggingTillKey, timeout, (_, _) => timeout); return $"Extended logging activated for {duration} minutes to {timeout}"; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnPlatformContext.cs ================================================ using DotNetNuke.Application; using ToSic.Sxc.Context; using ToSic.Sxc.Context.Sys.Platform; using ToSic.Sys.Capabilities.Platform; namespace ToSic.Sxc.Dnn.Run; internal class DnnPlatformContext: Platform, IPlatformInfo { public override PlatformType Type => PlatformType.Dnn; public override Version Version => DotNetNukeContext.Current.Application.Version; string IPlatformInfo.Identity => DotNetNuke.Entities.Host.Host.GUID; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnSecurity.cs ================================================ using System.Web.Security; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Users; using DotNetNuke.Security.Permissions; using DotNetNuke.Security.Roles; using ToSic.Sxc.Cms.Users.Sys; using ToSic.Sys.Users.Permissions; using static ToSic.Sxc.Dnn.DnnSxcSettings; namespace ToSic.Sxc.Dnn.Run; // TODO: probably change this to use an interface so we can make it internal [ShowApiWhenReleased(ShowApiMode.Never)] [PrivateApi] public class DnnSecurity(LazySvc roleController) : ServiceBase("dnnSec", connect: [roleController]) { /// /// Returns true if a DotNetNuke User Group "2sxc Designers" / "2sxcAdministrators" exists /// /// /// private bool PortalHasExplicitAdminGroups(int portalId) => DnnGroupsSxcAdmins.Any(grpName => PortalHasGroup(portalId, grpName)); private bool IsExplicitAdmin(UserInfo user) => !IsNullOrAnonymous(user) && DnnGroupsSxcAdmins.Any(user.IsInRole); private bool PortalHasGroup(int portalId, string groupName) => roleController.Value.GetRoleByName(portalId, groupName) != null; private bool IsNullOrAnonymous(UserInfo user) => user == null || user.UserID == -1; internal EffectivePermissions UserMayAdminThis(UserInfo user) { // Null-Check if (IsNullOrAnonymous(user)) return new(false); // Super always AppAdmin if (user.IsSuperUser) return new(true); var portal = PortalSettings.Current; // Skip the remaining tests if the portal isn't known if (portal == null) return new(false); var dnnPermissionProvider = PermissionProvider.Instance(); if (!dnnPermissionProvider.IsPortalEditor()) return new(false); // Non-SuperUsers must be PortalEditor AND in the group SxcAppAdmins var hasSpecialGroup = PortalHasExplicitAdminGroups(portal.PortalId); if (hasSpecialGroup && IsExplicitAdmin(user)) return new(true); // If the special group doesn't exist, then the admin-state (which is true - since he got here) is valid // or if the special group exist, then all administrators will be treated as ContentAdmins (has fewer permissions). if (user.IsInRole(portal.AdministratorRoleName ?? DnnAdminRoleDefaultName)) return new(isSiteAdmin: !hasSpecialGroup, isContentAdmin: true); // ... for "Content Managers" if (user.IsInRole(DnnContentManagers)) return new(false, true); // ... for "Content Editors" if (user.IsInRole(DnnContentEditors)) return new(false, false, true, true); // this should not happen return new(false); } private List UserRoles(UserInfo user, int? portalId = null) => IsNullOrAnonymous(user) ? [] : user.Roles .Select(r => RoleController.Instance.GetRoleByName(portalId ?? user.PortalID, r)) .Where(r => r != null) .Select(r => new UserRoleModel { Id = r.RoleID, Name = r.RoleName, Created = r.CreatedOnDate, Modified = r.LastModifiedOnDate, }) .ToList(); internal Guid UserGuid(UserInfo user) => Membership.GetUser(user.Username)?.ProviderUserKey as Guid? ?? Guid.Empty; internal string UserIdentityToken(UserInfo user) => IsNullOrAnonymous(user) ? SxcUserConstants.Anonymous : DnnConstants.UserTokenPrefix + user.UserID; internal UserModel CmsUserBuilder(UserInfo user, int siteId) { var adminInfo = UserMayAdminThis(user); return new() { Id = user.UserID, Guid = UserGuid(user), NameId = UserIdentityToken(user), Roles = UserRoles(user, portalId: siteId), IsSystemAdmin = user.IsSuperUser, IsSiteAdmin = adminInfo.IsSiteAdmin, IsContentAdmin = adminInfo.IsContentAdmin, IsContentEditor = adminInfo.IsContentEditor, IsAnonymous = IsNullOrAnonymous(user), Created = user.CreatedOnDate, Modified = user.LastModifiedOnDate, // Username = user.Username, Email = user.Email, Name = user.DisplayName }; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnValueConverter.cs ================================================ using DotNetNuke.Abstractions; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.FileSystem; using DotNetNuke.Services.Localization; using ToSic.Eav.Context; using ToSic.Eav.Data.Sys.ValueConverter; using ToSic.Sxc.Adam.Sys.Security; using ToSic.Sys.Capabilities.Features; namespace ToSic.Sxc.Dnn.Run; /// /// The DNN implementation of the which converts "file:22" or "page:5" to the url, /// [PrivateApi("Hide implementation - not useful for external documentation")] internal class DnnValueConverter( ISite site, LazySvc featuresLazy, LazySvc> siteFromPageLazy, LazySvc navigationManager) : ValueConverterBase($"{DnnConstants.LogName}.ValCnv", connect: [site, featuresLazy, siteFromPageLazy, navigationManager]) { public const string CurrentLanguage = "current"; #region DI Constructor private int PageSiteId => siteFromPageLazy.Value.Value.Id; // PortalId from page di scope #endregion /// public override string ToReference(string value) => TryToResolveOneLinkToInternalDnnCode(value); /// public override string ToValue(string reference, Guid itemGuid = default) => TryToResolveCodeToLink(itemGuid, reference); /// /// Will take a link like http:\\... to a file or page and try to return a DNN-style info like /// Page:35 or File:43003 /// /// /// /// note: this can always use the current context, because this should happen /// when saving etc. - which is always expected to happen in the owning portal /// /// private string TryToResolveOneLinkToInternalDnnCode(string potentialFilePath) { // Try file reference var fileInfo = FileManager.Instance.GetFile(site.Id, potentialFilePath) // PortalId from module di scope ?? FileManager.Instance.GetFile(PageSiteId, potentialFilePath); // PortalId from page di scope (module sharing on different site) if (fileInfo != null) return PrefixFile + Separator + fileInfo.FileId; // Try page / tab ID var tabController = new TabController(); var tabInfo = tabController.GetTabsByPortal(site.Id).Select(tab => tab.Value) .FirstOrDefault(tab => tab.TabPath == potentialFilePath)// PortalId from module di scope ?? tabController.GetTabsByPortal(PageSiteId).Select(tab => tab.Value) .FirstOrDefault(tab => tab.TabPath == potentialFilePath);// PortalId from page di scope (module sharing on different site) return tabInfo != null ? PrefixPage + Separator + tabInfo.TabID : potentialFilePath; } protected override void LogConversionExceptions(string originalValue, Exception e) { var wrappedEx = new Exception("Error when trying to lookup a friendly url of \"" + originalValue + "\"", e); Exceptions.LogException(wrappedEx); } protected override string ResolveFileLink(int linkId, Guid itemGuid) { var fileInfo = FileManager.Instance.GetFile(linkId); if (fileInfo == null) return null; #region special handling of issues in case something in the background is broken // there are cases where the PortalSettings will be null or something, and in these cases the serializer would break down // so this is to just ensure that if it can't be converted, it'll just fall back to default try { var filePath = Path.Combine(new PortalSettings(fileInfo.PortalId).HomeDirectory ?? "", fileInfo.RelativePath ?? ""); // return linkclick url for secure and other not standard folder locations var result = fileInfo.StorageLocation == 0 ? filePath : FileLinkClickController.Instance.GetFileLinkClick(fileInfo); // optionally do extra security checks (new in 10.02) if (!featuresLazy.Value.IsEnabled(BuiltInFeatures.AdamRestrictLookupToEntity.Guid)) return result; // check if it's in this item. We won't check the field, just the item, so the field is "" return !AdamSecurity.PathIsInItemAdam(itemGuid, "", filePath) ? null : result; } catch { return null; } #endregion } protected override string ResolvePageLink(int id) => ResolvePageLink(id, CurrentLanguage, []); /// /// Resolve URL to Page with TabId, but handles more situations than DNN framework: /// - supports module sharing scenarios, when module is on different portal /// - return localized page TabId, instead of requested TabId /// /// TabId to page /// "current" is required to ensure expected behavior (to try to find current language localized TabId) /// query string parameters /// return string url to page internal string ResolvePageLink(int id, string language = null, params string[] additionalParameters) { var tabController = new TabController(); var tabInfo = tabController.GetTab(id, site.Id) // PortalId from module di scope ?? tabController.GetTab(id, PageSiteId); // PortalId from page di scope (module sharing on different site) if (tabInfo == null) return null; var psCurrent = PortalSettings.Current; var psPage = psCurrent; // Get full PortalSettings (with portal alias) if module sharing is active if (psCurrent != null && psCurrent.PortalId != tabInfo.PortalID) psPage = PortalSettingsForNavigateUrl(tabInfo.PortalID); if (psPage == null) return null; // try to change TabID to localized version when language == CurrentLanguage if (language == CurrentLanguage && tabInfo.CultureCode != "" && psCurrent != null && tabInfo.CultureCode != psCurrent.CultureCode) { var cultureTabInfo = tabController .GetTabByCulture(tabInfo.TabID, tabInfo.PortalID, LocaleController.Instance.GetLocale(psCurrent.CultureCode)); if (cultureTabInfo != null) tabInfo = cultureTabInfo; } // Exception in AdvancedURLProvider because ownerPortalSettings.PortalAlias is null return navigationManager.Value.NavigateURL(tabInfo.TabID, psPage, "", additionalParameters); } private static PortalSettings PortalSettingsForNavigateUrl(int portalId) { var psPage = new PortalSettings(portalId); // PortalAlias is required for NavigateURL in AdvancedURLProvider, // but sometimes is missing (module sharing) if (psPage.PortalAlias == null) psPage.PortalAlias = PortalAliasForNavigateUrl(portalId); return psPage; } private static PortalAliasInfo PortalAliasForNavigateUrl(int portalId) => PortalAliasController.Instance.GetPortalAliasesByPortalId(portalId) .FirstOrDefault(alias => alias.IsPrimary); // get primary alias } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/DnnZoneMapper.cs ================================================ using DotNetNuke.Entities.Portals; using DotNetNuke.Services.Localization; using ToSic.Eav.Apps; using ToSic.Eav.Apps.Sys.Work; using ToSic.Eav.Context; using ToSic.Eav.Context.Sys; using ToSic.Eav.Context.Sys.ZoneMapper; using ToSic.Sxc.Cms; using ToSic.Sxc.Dnn.Context; using ToSic.Sys.Locking; namespace ToSic.Sxc.Dnn.Run; internal class DnnZoneMapper(Generator site, LazySvc zoneCreatorLazy, IAppsCatalog appsCatalog) : ZoneMapperBase(appsCatalog, "DNN.ZoneMp", connect: [site, zoneCreatorLazy]) { /// /// /// Will get the EAV ZoneId for the current tenant /// Always returns a valid value, as it will otherwise create one if it was missing /// ...if the tenant/portal exists /// /// /// public override int GetZoneId(int siteId) { // Additional protection against invalid portalId if (siteId < 0) throw new ArgumentException("Can't get zone for invalid portal ID: " + siteId); // Attempt to retrieve existing Zone ID var existingZoneId = GetExistingZoneId(siteId); if (existingZoneId.HasValue) return existingZoneId.Value; // Use TryLockTryDo to prevent race condition during zone creation var zoneIdResult = _zoneCreateLocker.Call( conditionToGenerate: () => !GetExistingZoneId(siteId).HasValue, generator: () => CreateNewZone(siteId), cacheOrFallback: () => { // Retrieve existing Zone ID if it was created by another thread var fallbackZoneId = GetExistingZoneId(siteId); if (fallbackZoneId.HasValue) return fallbackZoneId.Value; throw new InvalidOperationException("Failed to retrieve or create Zone ID."); }); return zoneIdResult.Result; } // Instance of TryLockTryDo for synchronization private readonly TryLockTryDo _zoneCreateLocker = new(); private static int? GetExistingZoneId(int siteId) { var portalSettings = PortalController.Instance.GetPortalSettings(siteId); if (portalSettings.TryGetValue(SiteSettingNames.SiteKeyForZoneId, out var value) && int.TryParse(value, out var zoneId)) return zoneId; return null; } private int CreateNewZone(int siteId) { var portalInfo = new PortalSettings(siteId); var newZoneId = zoneCreatorLazy.Value.Create($"{portalInfo.PortalName} (Portal {siteId})"); PortalController.UpdatePortalSetting(siteId, SiteSettingNames.SiteKeyForZoneId, newZoneId.ToString()); return newZoneId; } public override ISite SiteOfZone(int zoneId) { var l = Log.Fn($"{zoneId}"); var portalController = PortalController.Instance; var portals = portalController.GetPortals(); l.A($"Sites/Portals Count: {portals.Count}"); var found = portals .Cast() .Select(p => { var pSettings = portalController.GetPortalSettings(p.PortalID); if (!pSettings.TryGetValue(SiteSettingNames.SiteKeyForZoneId, out var portalZoneId)) return null; if (!int.TryParse(portalZoneId, out var zid)) return null; return zid == zoneId ? new PortalSettings(p) : null; }) .FirstOrDefault(f => f != null); return found == null ? l.ReturnNull("not found") : l.Return(((DnnSite)site.New()).TryInitPortal(found, Log), $"found {found.PortalId}"); } /// public override List CulturesWithState(ISite ofSite) { if (_supportedCultures != null) return _supportedCultures; var availableEavLanguages = AppsCatalog.Zone(ofSite.ZoneId).Languages; var defaultLanguageCode = ofSite.DefaultCultureCode; return _supportedCultures = LocaleController.Instance.GetLocales(ofSite.Id) .Select(c => new SiteLanguageState( c.Value.Code, c.Value.Text, availableEavLanguages.Any(a => a.Active && a.Matches(c.Value.Code)))) .OrderByDescending(c => c.Code == defaultLanguageCode) .ThenBy(c => c.Code) .Cast() .ToList(); } private List _supportedCultures; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Run/IDnnContext.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Tabs; using DotNetNuke.Entities.Users; namespace ToSic.Sxc.Dnn.Run; // Internal note: this is being used publicly, so as we phase it out, make sure the Namespace etc. doesn't change! /// /// Provides information about the current context within DNN. /// This only applies to 2sxc running inside DNN, not inside another platform. /// /// This object is the root `Dnn` object, used mainly in older Razor. /// If possible, try to use `CmsContext` instead. /// /// /// It is currently on `ToSic.Sxc.Run.IDnnContext` but we plan to move it elsewhere /// [PublicApi("This is DNN only, if possibly, try to use the hybrid CmsContext (v14) / MyContext (v16+) instead.")] public interface IDnnContext { /// /// The current DNN ModuleInfo - Dnn specific and with all the specials of the Dnn APIs. /// /// If possible, try to use [CmsContext.Module](xref:ToSic.Sxc.Context.ICmsModule) instead. /// ModuleInfo Module { get; } /// /// The current DNN TabInfo (page). /// We also don't like the name Tab, but that's the DNN convention. /// /// If possible, try to use [CmsContext.Page](xref:ToSic.Sxc.Context.ICmsPage) instead. /// TabInfo Tab { get; } /// /// The current DNN Portal Settings. /// /// If possible, try to use [CmsContext.Site](xref:ToSic.Sxc.Context.ICmsSite) instead. /// PortalSettings Portal { get; } /// /// The current DNN User. /// /// If possible, try to use [CmsContext.User](xref:ToSic.Sxc.Context.ICmsUser) instead. /// UserInfo User { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Search/SearchController.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Services.Search.Entities; using System.Text.RegularExpressions; using System.Web; using ToSic.Eav.Apps.Sys; using ToSic.Eav.Apps.Sys.Caching; using ToSic.Eav.Context; using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Eav.Sys; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using ToSic.Sxc.Blocks.Sys.Views; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Context; using ToSic.Sxc.Context.Sys.Module; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.LookUp; using ToSic.Sxc.Engines; using ToSic.Sxc.Polymorphism.Sys; using ToSic.Sxc.Search; using ToSic.Sxc.Sys.ExecutionContext; using static System.StringComparer; namespace ToSic.Sxc.Dnn.Search; /// /// This will construct data for the search indexer in DNN. /// It's created once for each module which will be indexed /// /// /// ATM it's DNN only (because Oqtane doesn't have search indexing) /// But the code is 99% clean, so it would be easy to split into dnn/Oqtane versions once ready. /// The only difference seems to be exception logging. /// internal class SearchController( AppsCacheSwitch appsCache, Generator codeCompiler, Generator exCtxFactory, Generator siteGenerator, LazySvc moduleAndBlockBuilder, LazySvc dnnLookUpEngineResolver, EngineFactory engineFactory, LazySvc logStore, PolymorphConfigReader polymorphism) : ServiceBase("DNN.Search", connect: [ appsCache, codeCompiler, exCtxFactory, siteGenerator, engineFactory, dnnLookUpEngineResolver, moduleAndBlockBuilder, logStore, polymorphism ]) { /// /// Initialize all values which are needed - or return a text with the info why we must stop. /// For example, check if the block is in a ready state to provide data. /// /// /// private string InitAllAndVerifyIfOk(IModule module) { var l = Log.Fn(); // Start by getting the module info DnnModule = (module as Module)?.GetContents(); l.A($"start search for mod#{DnnModule?.ModuleID}"); if (DnnModule == null) return l.ReturnAsOk("no module"); // This changes site in whole scope DnnSite = ((DnnSite)siteGenerator.New()).TryInitModule(DnnModule, Log); // New Context because Portal-Settings.Current is null var appId = module.BlockIdentifier.AppId; if (appId is AppConstants.AppIdNotFound or EavConstants.NullId) return l.ReturnAsOk("no app id"); // Ensure cache builds up with correct primary language // In case it's not loaded yet appsCache.Value.Load(module.BlockIdentifier.PureIdentity(), DnnSite.DefaultCultureCode, appsCache.AppLoaderTools); Block = moduleAndBlockBuilder.Value.BuildBlock(DnnModule, null); if (!Block.DataIsReady || !Block.ViewIsReady) return "no data or view"; if (Block.View.SearchIndexingDisabled) return "search disabled"; // new in 12.02 // Attach DNN Lookup Providers so query-params like [DateTime:Now] or [Portal:PortalId] will work AttachDnnLookUpsToData(Block.Data, DnnSite, DnnModule); // Get all streams to index var streamsToIndex = GetStreamsToIndex(); if (!streamsToIndex.Any()) return l.ReturnAsOk("no streams to index"); // Figure out the current edition - if none, stop here // New 2023-03-20 - if the view comes with a preset edition, it's an ajax-preview which should be respected _edition = polymorphism.UseViewEditionOrGet(Block); // Convert DNN SearchDocuments from 2sxc SearchInfos SearchItems = BuildInitialSearchInfos(streamsToIndex, DnnModule); // all ok - return null so upstream knows no errors return l.ReturnNull(); } /// The DnnModule will be initialized, and must exist for the search-index to provide data. public ModuleInfo DnnModule; /// The DnnSite will be initialized, and must exist for the search-index to provide data. public DnnSite DnnSite; /// The Block will be initialized, and must exist for the search-index to provide data. public IBlock Block; /// The SearchItems will be initialized, and must exist for the search-index to provide data. public Dictionary> SearchItems; private string _edition; /// /// Get search info for each dnn module containing 2sxc data /// /// public IList GetModifiedSearchDocuments(IModule module, DateTime beginDate) { var l = Log.Fn>(); // Turn off logging into history by default - the template code can reactivate this if desired var logWithPreserve = Log as Log; logWithPreserve?.Preserve = false; // Log with infos, to ensure errors are caught var exitMessage = InitAllAndVerifyIfOk(module); if (exitMessage != null) return l.Return([], exitMessage); var view = Block.View!; try { var useCustomViewController = !string.IsNullOrWhiteSpace(view.ViewController); // new in 12.02 l.A($"Use new Custom View Controller: {useCustomViewController}"); if (useCustomViewController) { /* New mode in 12.02 using a custom ViewController */ var customizeSearch = CreateAndInitViewController(DnnSite, Block); if (customizeSearch == null) return l.Return([], "exit"); // Call CustomizeSearch in a try/catch l.A("execute CustomizeSearch"); customizeSearch.CustomizeSearch(SearchItems, Block.Context.Module, beginDate); l.A("Executed CustomizeSearch"); } // 2026-01-27 2dm v21 - old search implementation has been deprecated in v20 //else //{ // /* Old mode v06.02 - 12.01 using the Engine or Razor which customizes */ // // Build the engine, as that's responsible for calling inner search stuff // var engine = engineFactory.CreateEngine(view); // engine.Init(Block); //} } catch (Exception e) { return l.Return(LogErrorForExit(e, DnnModule), "error, so return nothing to ensure we don't bleed unexpected infos"); } // At the of the code, add it to insights / history. This must happen at the end. // It will only be preserved, if the inner code ran a Log.Preserve = true; if (logWithPreserve?.Preserve ?? false) logStore.Value.Add("dnn-search", Log); // reduce load by only keeping recently modified items var searchDocuments = KeepOnlyChangesSinceLastIndex(beginDate, SearchItems); return l.Return(searchDocuments, $"{searchDocuments.Count}"); } private List LogErrorForExit(Exception e, ModuleInfo modInfo) { DnnEnvironmentLogger.AddSearchExceptionToLog(modInfo, e, nameof(SearchController)); Log.Ex(e); return []; } /// /// Reduce load by only keeping recently modified items /// /// /// /// private static List KeepOnlyChangesSinceLastIndex(DateTime beginDate, Dictionary> searchInfoDictionary) { var searchDocuments = new List(); foreach (var searchInfoList in searchInfoDictionary) { // Filter by Date - take only SearchDocuments that changed since beginDate var searchDocumentsToAdd = searchInfoList.Value.Where(p => p.ModifiedTimeUtc >= beginDate.ToUniversalTime()) .Select(p => (SearchDocument) p); searchDocuments.AddRange(searchDocumentsToAdd); } return searchDocuments; } /// /// Convert DNN SearchDocuments from 2sxc SearchInfos /// private Dictionary> BuildInitialSearchInfos(KeyValuePair[] streamsToIndex, ModuleInfo dnnModule) { var l = Log.Fn>>(); var language = dnnModule.CultureCode; var searchInfoDictionary = new Dictionary>(); foreach (var stream in streamsToIndex) { var entities = stream.Value.List.ToListOpt(); var searchInfoList = searchInfoDictionary[stream.Key] = []; var additions = entities .Select(entity => new SearchItem { Entity = entity, Url = "", Description = "", Body = GetJoinedAttributes(entity, language), Title = entity.Title?[language]?.ToString() ?? "(no title)", ModifiedTimeUtc = (entity.Modified == DateTime.MinValue ? DateTime.Now.Date.AddHours(DateTime.Now.Hour) : entity.Modified).ToUniversalTime(), UniqueKey = "2sxc-" + dnnModule.ModuleID + "-" + (entity.EntityGuid != new Guid() ? entity.EntityGuid.ToString() : stream.Key + "-" + entity.EntityId), IsActive = true, TabId = dnnModule.TabID, PortalId = dnnModule.PortalID }) .ToListOpt(); searchInfoList.AddRange(additions); } return l.Return(searchInfoDictionary, $"{searchInfoDictionary.Count}"); } /// /// Attach DNN Lookup Providers so query-params like [DateTime:Now] or [Portal:PortalId] will work /// private void AttachDnnLookUpsToData(IDataSource dataSource, DnnSite site, ModuleInfo dnnModule) { if (dataSource.Configuration?.LookUpEngine == null) return; Log.A("Will try to attach dnn providers to DataSource LookUps"); try { var getLookups = dnnLookUpEngineResolver.Value; var dnnLookUps = (getLookups as DnnLookUpEngineResolver)?.LookUpEngineOfPortalSettings(site.GetContents(), dnnModule.ModuleID); ((LookUpEngine) dataSource.Configuration.LookUpEngine).Link(dnnLookUps); } catch (Exception e) { // Log but keep going, as it's bad, but the lookups may not be important for this module Log.Ex(e); } } /// /// Get original streams and if the settings restrict which ones to keep, apply that. /// private KeyValuePair[] GetStreamsToIndex() { var l = Log.Fn[]>(); // Check if we should filter the streams - new in 12.02 var streamsToKeep = Block.View.SearchIndexingStreams .Split(',') .Select(s => s.Trim()) .Where(s => !string.IsNullOrEmpty(s)) .ToArray(); // Decide what streams to keep - new in 12.02 var streamsToIndex = Block.Data.Out .Where(p => p.Key != ViewParts.Presentation && p.Key != ViewParts.ListPresentation) .ToArray(); if (streamsToKeep.Any()) streamsToIndex = streamsToIndex .Where(s => streamsToKeep.Contains(s.Key, InvariantCultureIgnoreCase)) .ToArray(); return l.Return(streamsToIndex, $"{streamsToIndex.Length}"); } private ICustomizeSearch CreateAndInitViewController(ISite site, IBlock block) { var l = Log.Fn(); // 1. Get and compile the view.ViewController var path = Path .Combine(Block.View.IsShared ? site.SharedAppsRootRelative() : site.AppsRootPhysical, block.Context.AppReaderRequired.Specs.Folder) .ForwardSlash(); l.A($"compile ViewController class on path: {path}/{Block.View.ViewController}"); var spec = new HotBuildSpec(block.AppId, _edition, block.App.Name); l.A($"prepare spec: {spec}"); var instance = codeCompiler.New().InstantiateClass(virtualPath: block.View.ViewController, spec: spec, className: null, relativePath: path, throwOnError: true); l.A("got instance of compiled ViewController class"); // 2. Check if it implements ToSic.Sxc.Search.ICustomizeSearch - otherwise just return the empty search results as shown above if (instance is not ICustomizeSearch customizeSearch) return l.ReturnNull("exit, class do not implements ICustomizeSearch"); // 3. Make sure it has the full context if it's based on DynamicCode (like Code12) if (instance is INeedsExecutionContext instanceWithContext) { l.A($"attach DynamicCode context to class instance"); var parentDynamicCodeRoot = exCtxFactory.New().New(new() { OwnerOrNull = null, BlockOrNull = block, ParentLog = Log, CompatibilityFallback = CompatibilityLevels.CompatibilityLevel10, }); instanceWithContext.ConnectToRoot(parentDynamicCodeRoot); } return l.Return(customizeSearch, "instance ok"); } private string StripHtmlAndHtmlDecode(string text) => HttpUtility.HtmlDecode(Regex.Replace(text, "<.*?>", string.Empty)); /// /// Gets a string that represents all entities joined with a comma , separator /// Does just include String and Number fields /// /// /// /// private string GetJoinedAttributes(IEntity entity, string language) { return string.Join(", ", entity.Attributes .Where(x => x.Value.Type == ValueTypes.String || x.Value.Type == ValueTypes.Number) .Select(x => x.Value[language]) .Where(a => a != null) .Select(a => StripHtmlAndHtmlDecode(a.ToString())) .Where(x => !string.IsNullOrEmpty(x))) + " "; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Search/SearchIndexException.cs ================================================ using DotNetNuke.Entities.Modules; namespace ToSic.Sxc.Dnn.Search; /// /// Special search exception, so these exceptions can be handled in a special way if necessary. /// [InternalApi_DoNotUse_MayChangeWithoutNotice("this is just fyi")] internal class SearchIndexException(ModuleInfo module, Exception innerException, string source, int count, int max) : Exception( $"Search: Error #{count} of {max} in '{source}' while indexing module {module.ModuleID} on tab {module.TabID}, portal {module.PortalID}", innerException); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Search/SearchItem.cs ================================================ using DotNetNuke.Services.Search.Entities; using ToSic.Eav.Data; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Search; /// /// A search item which is passed around before handed over to the indexing system /// [PublicApi] public class SearchItem : SearchDocument, ISearchItem { public IEntity Entity { get; set; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Search/readme.md ================================================ # Search - for DNN This is the search interface / implementation for DNN only. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Services/DnnLinkService.cs ================================================ using DotNetNuke.Abstractions; using ToSic.Eav.Data.Sys.ValueConverter; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Images.Sys; using ToSic.Sxc.Services; using ToSic.Sxc.Services.Link.Sys; using ToSic.Sxc.Sys.Integration.Paths; namespace ToSic.Sxc.Dnn.Services; /// /// The DNN implementation of the . /// [PrivateApi("This implementation shouldn't be visible")] internal class DnnLinkService( ImgResizeLinker imgLinker, LazySvc dnnValueConverterLazy, LazySvc linkPathsLazy, LazySvc navigationManager) : LinkServiceBase(imgLinker, linkPathsLazy, connect: [dnnValueConverterLazy, navigationManager]) { [PrivateApi] private IDnnContext Dnn => field ??= ExCtx.GetService(); [PrivateApi] private DnnValueConverter DnnValueConverter => field ??= dnnValueConverterLazy.Value as DnnValueConverter; protected override string ToApi(string api, string parameters = null) => Api(path: CombineApiWithQueryString(api.TrimPrefixSlash(), parameters)); protected override string ToPage(int? pageId, string parameters = null, string language = null) { if (pageId.HasValue) { var url = DnnValueConverter.ResolvePageLink(pageId.Value, language, parameters); if (!string.IsNullOrEmpty(url)) return url; } var currentPageUrl = parameters == null ? Dnn.Tab.FullUrl : navigationManager.Value.NavigateURL(Dnn.Tab.TabID, "", parameters); // NavigateURL returns absolute links return CurrentPageUrlWithEventualHashError(pageId, currentPageUrl); } private string Api(NoParamOrder npo = default, string path = null) { if (string.IsNullOrEmpty(path)) return string.Empty; path = path.ForwardSlash(); path = path.TrimPrefixSlash(); if (path.PrefixSlash().ToLowerInvariant().Contains("/app/")) throw new ArgumentException("Error, path shouldn't have \"app\" part in it. It is expected to be relative to application root."); if (!path.PrefixSlash().ToLowerInvariant().Contains("/api/")) throw new ArgumentException("Error, path should have \"api\" part in it."); var apiRoot = DnnJsApiService.GetApiRoots().AppApiRoot.TrimLastSlash(); var relativePath = $"{apiRoot}/app/{AppFolder}/{path}"; return relativePath; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Services/DnnLogService.cs ================================================ using DotNetNuke.Services.Log.EventLog; using ToSic.Sxc.Services; namespace ToSic.Sxc.Dnn.Services; internal class DnnSystemLogService : ISystemLogService, ILogService // for compatibility { public void Add(string title, string message) { var logInfo = new LogInfo { LogTypeKey = EventLogController.EventLogType.ADMIN_ALERT.ToString() }; logInfo.AddProperty(title, message); EventLogController.Instance.AddLog(logInfo); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Services/DnnMailService.cs ================================================ using System.Configuration; using System.Net; using System.Net.Mail; using DotNetNuke.Entities.Host; using ToSic.Sxc.Services.Mail.Sys; using ToSic.Sys.Users; namespace ToSic.Sxc.Dnn.Services; internal class DnnMailService(LazySvc userLazy) : MailServiceBase(userLazy) { protected override SmtpClient SmtpClient() { var smtpServer = Host.SMTPServer; if (string.IsNullOrEmpty(smtpServer)) throw new ConfigurationErrorsException(DotNetNuke.Services.Localization.Localization.GetString("SMTPConfigurationProblem")); try { var client = new SmtpClient(); var strArray = smtpServer.Split(':'); client.Host = strArray[0]; client.Port = strArray.Length > 1 ? Convert.ToInt32(strArray[1]) : 25; client.ServicePoint.MaxIdleTime = Host.SMTPMaxIdleTime; client.ServicePoint.ConnectionLimit = Host.SMTPConnectionLimit; var smtpAuthentication = Host.SMTPAuthentication; var smtpUsername = Host.SMTPUsername; var smtpPassword = Host.SMTPPassword; switch (smtpAuthentication) { case "1": if (!string.IsNullOrEmpty(smtpUsername) && !string.IsNullOrEmpty(smtpPassword)) { client.UseDefaultCredentials = false; client.Credentials = (ICredentialsByHost)new NetworkCredential(smtpUsername, smtpPassword); break; } break; case "2": client.UseDefaultCredentials = true; break; } client.EnableSsl = Host.EnableSMTPSSL; return client; } catch (Exception ex) { throw new ConfigurationErrorsException(DotNetNuke.Services.Localization.Localization.GetString("SMTPConfigurationProblem"), ex); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Services/DnnPageChanges.cs ================================================ using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.Client.Providers; using System.Web; using System.Web.UI; using ToSic.Razor.Blade; using ToSic.Razor.Dnn; using ToSic.Razor.Markup; using ToSic.Sxc.Render.Sys; using ToSic.Sxc.Services; using ToSic.Sxc.Sys.Configuration; using ToSic.Sxc.Sys.Render.PageContext; using ToSic.Sxc.Sys.Render.PageFeatures; using ToSic.Sxc.Web.Sys.ClientAssets; using ToSic.Sxc.Web.Sys.ContentSecurityPolicy; using static ToSic.Sxc.Render.Sys.Output.ClientAssetConstants; namespace ToSic.Sxc.Dnn.Services; internal class DnnPageChanges(LazySvc featuresService, Generator pageCspGenerator) : ServiceBase($"{DnnConstants.LogName}.PgeCng", connect: [featuresService, pageCspGenerator]) { public int Apply(Page page, IRenderResult renderResult) { var l = Log.Fn("Will apply PageChanges"); if (renderResult == null) return 0; var dnnPage = new DnnHtmlPage(); AttachAssets(renderResult.Assets, page); var count = Apply(dnnPage, renderResult.PageChanges); var headChanges = ApplyToHead(dnnPage, renderResult.HeadChanges); var resourceFeatures = ResourceFeatures(dnnPage, renderResult.FeaturesFromResources); try { var httpHeaderChanges = ApplyHttpHeaders(page, renderResult); count += httpHeaderChanges; } catch { /* ignore BETA feature */ } l.A("Will apply Header Status-Code changes if needed"); ApplyHttpStatus(page, renderResult); count += headChanges + resourceFeatures; return l.Return(count, $"Applied {count} changes"); } private int Apply(DnnHtmlPage dnnPage, IList props) { var l = Log.Fn($"{props.Count} props"); // 2022-05-03 2dm - don't think the props are ever null, requiring access to the shared data // props = props ?? PageServiceShared.GetPropertyChangesAndFlush(Log); foreach (var p in props) switch (p.Property) { case PageProperties.Base: dnnPage.AddBase(p.Value); break; case PageProperties.Title: dnnPage.Title = Helpers.UpdateProperty(dnnPage.Title, p); break; case PageProperties.Description: dnnPage.Description = Helpers.UpdateProperty(dnnPage.Description, p); break; case PageProperties.Keywords: dnnPage.Keywords = Helpers.UpdateProperty(dnnPage.Keywords, p); break; } var count = props.Count; return l.Return(count, $"{count}"); } private static int ResourceFeatures(DnnHtmlPage dnnPage, IList feats) { // New in 12.04 - Add features which have HTML only // In the page the code would be like this (v14): // Kit.Page.Activate("fancybox4"); // This will add a header for the sources of these features foreach (var f in feats) dnnPage.AddToHead(Tag.Custom(f.Html)); return feats.Count; } private int ApplyToHead(DnnHtmlPage dnnPage, IList headChanges) { // Note: we're not implementing replace etc. in DNN // ATM there's no reason to, maybe some other time //var headChanges = PageServiceShared.GetHeadChangesAndFlush(); foreach (var h in headChanges) dnnPage.AddToHead(h.Tag as TagBase); return headChanges.Count; } private int ApplyHttpHeaders(Page page, IRenderResult result) { var l = Log.Fn(); var httpHeaders = result.HttpHeaders; // Register CSP changes for applying once all modules have been prepared // Note that in cached scenarios, CspEnabled is true, but it may have been turned off since if (result.CspEnabled && featuresService.Value.IsEnabled(SxcFeatures.ContentSecurityPolicy.NameId)) PageCsp(result.CspEnforced).Add(result.CspParameters ?? []); if (page?.Response == null) return l.Return(0, "error, HttpResponse is null"); if (page.Response.HeadersWritten) return l.Return(0, "error, to late for adding http headers"); if (httpHeaders.SafeNone()) return l.Return(0, "ok, no headers to add"); foreach (var httpHeader in httpHeaders) { if (string.IsNullOrWhiteSpace(httpHeader.Name)) continue; Log.A($"add http header: {httpHeader.Name}:{httpHeader.Value}"); // TODO: The CSP header can only exist once // So to do this well, we'll need to merge them in future, // Ideally combining the existing one with any additional ones added here page.Response.Headers[httpHeader.Name] = httpHeader.Value; } return l.ReturnAsOk(httpHeaders.Count); } private CspOfPage PageCsp(bool enforced) { var key = "2sxcPageLevelCsp"; // If it's already registered, then the add-on-sending has already been added too // So we shouldn't repeat it, just return the cache which will be used later if (HttpContext.Current.Items.Contains(key)) return (CspOfPage)HttpContext.Current.Items[key]; // Not yet registered. Create, and register for on-end of request var pageLevelCsp = pageCspGenerator.New();// new CspOfPage(); HttpContext.Current.Items[key] = pageLevelCsp; // Register event to attach headers once the request is done and all Apps have registered their Csp HttpContext.Current.Response.AddOnSendingHeaders(context => { try { var headers = pageLevelCsp.CspHttpHeader(); if (headers != null) context.Response.Headers[pageLevelCsp.HeaderName(enforced)] = headers; } catch { /* ignore */ } }); return pageLevelCsp; } private void ApplyHttpStatus(Page page, IRenderResult result) { try { if (page?.Response == null || result?.HttpStatusCode == null) return; } catch (Exception ex) { // FIX: handles "Response is not available in this context." in edge case for 404 page in DNN // https://github.com/2sic/2sxc/issues/2986 Log.Ex(ex); return; } var code = result.HttpStatusCode.Value; Log.A($"Custom status code '{code}'. Will set and also {nameof(page.Response.TrySkipIisCustomErrors)}"); page.Response.StatusCode = code; // Skip IIS & upstream redirects to a custom 404 so the Dnn page is preserved page.Response.TrySkipIisCustomErrors = true; if (result.HttpStatusMessage == null) return; Log.A($"Custom status Description '{result.HttpStatusMessage}'."); page.Response.StatusDescription = result.HttpStatusMessage; } public void AttachAssets(IList ass, Page page) => ass.ToList().ForEach(a => { if (a.IsJs) ClientResourceManager.RegisterScript(page, a.Url, a.Priority, DnnProviderName(a.PosInPage), a.HtmlAttributes); else ClientResourceManager.RegisterStyleSheet(page, a.Url, a.Priority, DnnProviderName(a.PosInPage)); }); private static string DnnProviderName(string position) => position.ToLowerInvariant() switch { AddToBody => DnnBodyProvider.DefaultName, AddToHead => DnnPageHeaderProvider.DefaultName, AddToBottom => DnnFormBottomProvider.DefaultName, _ => "" }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Services/DnnRenderService.cs ================================================ using System.Web; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Render.Sys; using Page = System.Web.UI.Page; namespace ToSic.Sxc.Dnn.Services; internal class DnnRenderService : RenderService { private readonly LazySvc _dnnPageChanges; private readonly LazySvc _dnnClientResources; private readonly Generator _context; public DnnRenderService( Dependencies services, LazySvc dnnPageChanges, LazySvc dnnClientResources, Generator context ) : base(services) { ConnectLogs([ _dnnPageChanges = dnnPageChanges, _dnnClientResources = dnnClientResources, _context = context ]); } public override IRenderResult Module(int pageId, int moduleId, NoParamOrder npo = default, object data = null) { var l = Log.Fn($"{nameof(pageId)}: {pageId}, {nameof(moduleId)}: {moduleId}"); var result = base.Module(pageId, moduleId, npo, data); // this code should be executed in PreRender of page (ensure when calling) or it is too late if (HttpContext.Current?.Handler is Page dnnHandler) // detect if we are on the page if (_context.New().Module.BlockIdentifier == null) // find if is in module (because in module it's already handled) DnnPageProcess(dnnHandler, result); return l.ReturnAsOk(result); } private void DnnPageProcess(Page dnnPage, IRenderResult result) { _dnnPageChanges.Value.Apply(dnnPage, result); // #RemovedV20 #OldDnnAutoJQuery _dnnClientResources.Value.Init(dnnPage, /*null,*/ null).AddEverything(result.Features); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Startup/DnnBootFeaturesRegistration.cs ================================================ using ToSic.Sxc.Dnn.Features; using ToSic.Sys.Boot; using ToSic.Sys.Capabilities.Features; namespace ToSic.Sxc.Dnn.StartUp; internal class DnnBootFeaturesRegistration(FeaturesCatalog featuresCatalog) : BootProcessBase("DnnFts", bootPhase: BootPhase.Registrations, connect: [featuresCatalog]), IBootProcess { /// /// Register Dnn features before loading /// public override void Run() => DnnBuiltInFeatures.Register(featuresCatalog); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Startup/StartUpDnnCore.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav.Context; using ToSic.Eav.Context.Sys.ZoneCulture; using ToSic.Eav.Context.Sys.ZoneMapper; using ToSic.Eav.Data.Sys.ValueConverter; using ToSic.Eav.ImportExport.Integration; using ToSic.Eav.ImportExport.Sys.XmlExport; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam.Sys.FileSystem; using ToSic.Sxc.Apps.Sys.Installation; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using ToSic.Sxc.Cms.Publishing.Sys; using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Adam; using ToSic.Sxc.Dnn.Cms; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Compile; using ToSic.Sxc.Dnn.Compile.Sys; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.Features; using ToSic.Sxc.Dnn.ImportExport; using ToSic.Sxc.Dnn.Install; using ToSic.Sxc.Dnn.LookUp; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.Search; using ToSic.Sxc.Dnn.Services; using ToSic.Sxc.Dnn.StartUp; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.Integration.Modules; using ToSic.Sxc.Render.Sys.JsContext; using ToSic.Sxc.Render.Sys.Output; using ToSic.Sxc.Services; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sxc.Sys.Integration.Installation; using ToSic.Sxc.Web.Sys.Http; using ToSic.Sys.Boot; using ToSic.Sys.Capabilities.Platform; using ToSic.Sys.Security.Permissions; using ToSic.Sys.Users; using ExecutionContext = ToSic.Sxc.Sys.ExecutionContext.ExecutionContext; namespace ToSic.Sxc.Dnn.Startup; internal static class StartUpDnnCore { public static IServiceCollection AddDnnCore(this IServiceCollection services) { // Core Runtime Context Objects services.TryAddScoped(); services.TryAddScoped(); // Make sure that ISite and IZoneCultureResolver use the same singleton! services.TryAddScoped(); // this must come first! services.TryAddScoped(x => x.GetRequiredService()); // Module cannot yet be scoped, until we have a per-module scope at some time services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); // Dnn Only services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); // New v14 services.TryAddTransient(typeof(ExecutionContext<,>), typeof(DnnExecutionContext<,>)); // ADAM services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); // new in 11.07 - exception logger services.TryAddTransient(); // new in 11.08 - provide Razor Engine and platform services.TryAddSingleton(); // add page publishing services.TryAddTransient(); // v13 option to not use page publishing... #SwitchServicePagePublishingResolver #2749 services.AddTransient(); // new in v12 - .net specific code compiler services.TryAddTransient(); services.TryAddTransient(); // new in v12.02 - RazorBlade DI services.TryAddScoped(); services.TryAddTransient(); services.TryAddScoped(); // v16.01 services.TryAddScoped(); // v16.01 // v12.04 - proper DI for SearchController services.TryAddTransient(); // v12.05 custom Http for Dnn which only keeps the URL parameters really provided, and not the internally generated ones services.TryAddTransient(); // v12.05 services.TryAddTransient(); services.TryAddTransient(); // v13 services.TryAddTransient(); // v13.12 services.AddTransient(); // must be Add, not TryAdd // v14 services.TryAddTransient(); services.TryAddTransient(); // new v15 services.TryAddTransient(); // v15 - move ready check turbo into a service services.TryAddTransient(); //services.TryAddScoped(); // v17 - Assembly compilation and caching infrastructure services.TryAddSingleton(); services.TryAddTransient(); services.TryAddTransient(); //v17.01 services.TryAddTransient(); // v20.03 - Shared assembly disk cache infrastructure (for both Razor and AppCode) services.TryAddTransient(); return services; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Web/DnnBlockResourceExtractor.cs ================================================ using DotNetNuke.Web.Client; using ToSic.Sxc.Render.Sys.Output; using ToSic.Sxc.Render.Sys.ResourceExtractor; using ToSic.Sxc.Sys.Render.PageContext; namespace ToSic.Sxc.Dnn.Web; internal class DnnBlockResourceExtractor(IPageServiceShared pageServiceShared) : BlockResourceExtractor(pageServiceShared) { private const bool DebugDetails = true; protected override ClientAssetsExtractSettings DefaultSettings => _settings.Get(() => new( extractAll: false, cssPriority: (int)FileOrder.Css.DefaultPriority, jsPriority: (int)FileOrder.Js.DefaultPriority)); private readonly GetOnce _settings = new(); protected override (string Template, bool Include2sxcJs) ExtractFromHtml(string html, ClientAssetsExtractSettings settings) { var l = Log.Fn<(string, bool)>(); var include2SxcJs = false; // Handle Client Dependency injection html = ExtractExternalScripts(html, ref include2SxcJs, settings, logDetails: DebugDetails); // 2025-09-04 2dm having some difficulties, want to log details // Handle Scripts html = ExtractStyles(html, settings); return l.ReturnAsOk((html, include2SxcJs)); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Web/DnnClientResources.cs ================================================ using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Web.Client; using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.Client.Providers; using System.Web.UI; using ToSic.Eav.Sys; using ToSic.Sxc.Dnn.Features; using ToSic.Sxc.Render.Sys.RenderBlock; using ToSic.Sxc.Sys.Render.PageFeatures; using ToSic.Sxc.Web.Sys.Url; namespace ToSic.Sxc.Dnn.Web; internal class DnnClientResources(DnnJsApiHeader dnnJsApiHeader, DnnRequirements dnnRequirements) : ServiceBase($"{DnnConstants.LogName}.JsCss", connect: [dnnJsApiHeader, dnnRequirements]) { // #RemovedV20 #OldDnnAutoJQuery public DnnClientResources Init(Page page, /*bool? forcePre1025Behavior,*/ IBlockBuilder blockBuilder) { //_forcePre1025Behavior = forcePre1025Behavior; _page = page; _blockBuilder = blockBuilder; return this; } private IBlockBuilder _blockBuilder; private Page _page; //private bool? _forcePre1025Behavior; internal IList Features => field ??= _blockBuilder?.Run(true, specs: new())?.Features ?? new List(); public IList AddEverything(IList features = null) { var l = Log.Fn>(); // temporary solution, till the features are correctly activated in the block // auto-detect BlockBuilder params features ??= Features; // normal scripts var editJs = features.Contains(SxcPageFeatures.JsCmsInternal); var readJs = features.Contains(SxcPageFeatures.JsCore); var editCss = features.Contains(SxcPageFeatures.ToolbarsInternal); if (!readJs && !editJs && !editCss && !features.Any()) return l.Return(features, "nothing to add"); l.A("user is editor, or template requested js/css, will add client material"); // register scripts and css RegisterClientDependencies(_page, readJs, editJs, editCss, features); // New in 11.11.02 - DNN has a strange behavior where the current language isn't known till PreRender // so we have to move adding the header to here. // MustAddHeaders may have been set earlier by the engine, or now by the various js added l.A($"{nameof(MustAddHeaders)}={MustAddHeaders}"); if (MustAddHeaders) dnnJsApiHeader.AddHeaders(); return l.ReturnAsOk(features); } // #RemovedV20 #OldDnnAutoJQuery ///// ///// new in 10.25 - by default jQuery isn't loaded any more ///// but older razor templates might still expect it ///// and any other old behaviour, incl. no-view defined, etc. should activate compatibility ///// //public void EnforcePre1025Behavior() //{ // var l = Log.Fn("Activate Anti-Forgery for compatibility with old behavior"); // ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); // MustAddHeaders = true; // l.Done(); //} // #RemovedV20 #OldDnnAutoJQuery ///// ///// new in 10.25 - by default now jQuery isn't loaded! ///// but any old behaviour, incl. no-view defined, etc. should activate compatibility ///// ///// //public bool NeedsPre1025Behavior() => _forcePre1025Behavior // ?? (dnnRequirements.RequirementsMet() ? (_blockBuilder?.GetEngine() as IEngineDnnOldCompatibility)?.OldAutoLoadJQueryAndRvt : null) // ?? true; public void RegisterClientDependencies(Page page, bool readJs, bool editJs, bool editCss, IList overrideFeatures = null) { var l = Log.Fn($"-, {nameof(readJs)}:{readJs}, {nameof(editJs)}:{editJs}, {nameof(editCss)}:{editCss}"); var features = overrideFeatures ?? Features; var root = DnnConstants.SysFolderRootVirtual; root = page.ResolveUrl(root); var ver = EavSystemInfo.VersionWithStartUpBuild; const int priority = (int)FileOrder.Js.DefaultPriority - 2; // add edit-mode CSS if (editCss) RegisterCss(page, $"{root}{SxcPageFeatures.ToolbarsInternal.UrlInDist}"); // add read-js if (readJs || editJs) { l.A("add $2sxc api and headers"); RegisterJs(page, ver, $"{root}{SxcPageFeatures.JsCore.UrlInDist}", true, priority); MustAddHeaders = true; } // add edit-js (commands, manage, etc.) if (editJs) { l.A("add 2sxc edit api; also needs anti-forgery"); // note: the inpage only works if it's not in the head, so we're adding it below RegisterJs(page, ver, $"{root}{SxcPageFeatures.JsCmsInternal.UrlInDist}", false, priority + 1); } if (features.Contains(SxcPageFeatures.JQuery)) JavaScript.RequestRegistration(CommonJs.jQuery); if (features.Contains(SxcPageFeatures.TurnOn)) RegisterJs(page, ver, $"{root}{SxcPageFeatures.TurnOn.UrlInDist}", true, priority + 10); if (features.Contains(SxcPageFeatures.CmsWysiwyg)) RegisterCss(page, $"{root}{SxcPageFeatures.CmsWysiwyg.UrlInDist}"); l.Done(); } #region DNN Bug with Current Culture // We must add the _js header but we must wait beyond the initial page-load until Pre-Render // Because for reasons unknown DNN (at least in V7.4+ but I think also in 9) doesn't have // the right PortalAlias and language set until then. // before that it assumes the PortalAlias is a the default alias, even if the url clearly shows another language private bool MustAddHeaders { get; set; } #endregion #region add scripts / css with bypassing the official ClientResourceManager private static void RegisterJs(Page page, string version, string path, bool toHead, int priority) { if (string.IsNullOrWhiteSpace(path)) return; var url = UrlHelpers.QuickAddUrlParameter(path, "v", version); if (toHead) ClientResourceManager.RegisterScript(page, url, priority, DnnPageHeaderProvider.DefaultName); else page.ClientScript.RegisterClientScriptInclude(typeof(Page), path, url); } private static void RegisterCss(Page page, string path) => ClientResourceManager.RegisterStyleSheet(page, path); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Web/DnnHttp.cs ================================================ using System.Collections.Specialized; using ToSic.Sxc.Web.Sys.Http; namespace ToSic.Sxc.Dnn.Web; /// /// Special class to provide HttpRequest parameters in DNN /// /// It needs this, because DNN automatically creates invisible parameters like tabid=323 and language=en-US /// But if we want to create a link to the same page again, then this would result in wrong paths. /// internal class DnnHttp: HttpHybrid { public override NameValueCollection QueryStringParams { get { if (field != null) return field; // This would be the better way, but it doesn't work, because DNN will often create paths like // /value/27 instead of ?value=27 //var separator = Request.RawUrl.IndexOf('?'); //if (separator == -1) return _queryStringValues = new NameValueCollection(); //var queryPart = Request.RawUrl.Substring(separator); //var lightList = HttpUtility.ParseQueryString(queryPart); var rewrapped = new NameValueCollection(base.QueryStringParams); return field = FilterOutDnnParams(rewrapped); } } private NameValueCollection FilterOutDnnParams(NameValueCollection original) { const string tabId = "TabId"; const string language = "language"; const string skinSrc = "SkinSrc"; // auto-added // DNN adds these automatically, but does it with exactly this spelling, so that's the only one we'll catch original.Remove(tabId); original.Remove(language); original.Remove(skinSrc); return original; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Web/DnnJsApiHeader.cs ================================================ using DotNetNuke.Common; using ToSic.Razor.Blade; using ToSic.Sxc.Render.Sys.JsContext; namespace ToSic.Sxc.Dnn.Web; internal class DnnJsApiHeader(IJsApiService dnnJsApiService, ILog parentLog = null) : HelperBase(parentLog, "Dnn.JsApiH") { public bool AddHeaders() { var l = Log.Fn(); // ensure we only do this once if (MarkAddedAndReturnIfAlreadyDone()) return l.ReturnFalse("already"); var json = dnnJsApiService.GetJsApiJson(pageId: null, siteRoot: null, rvt: null, withPublicKey: false); if (json == null) return l.ReturnFalse("no path"); #pragma warning disable CS0618 HtmlPage.AddMeta(JsApi.MetaName, json); #pragma warning restore CS0618 return l.ReturnTrue("added"); } private const string KeyToMarkAdded = "2sxcApiHeadersAdded"; private static bool MarkAddedAndReturnIfAlreadyDone() { var alreadyAdded = HttpContextSource.Current.Items.Contains(KeyToMarkAdded); HttpContextSource.Current.Items[KeyToMarkAdded] = true; return alreadyAdded; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn/Web/DnnJsApiService.cs ================================================ using System.Text.Json; using DotNetNuke.Entities.Portals; using DotNetNuke.Framework; using System.Text.RegularExpressions; using System.Web; using System.Web.Helpers; using ToSic.Sxc.Context; using ToSic.Sxc.Render.Sys.JsContext; using ToSic.Sys.Security.Encryption; namespace ToSic.Sxc.Dnn.Web; internal class DnnJsApiService(JsApiCacheService jsApiCache, RsaCryptographyService rsaCryptographyService) : ServiceBase("DnnJsAPi", connect: [jsApiCache, rsaCryptographyService]), IJsApiService { public const string PortalIdParamName = "portalId"; public string GetJsApiJson(int? pageId = null, string siteRoot = null, string rvt = null, bool withPublicKey = false) => JsonSerializer.Serialize(GetJsApi(pageId, siteRoot, rvt, withPublicKey: withPublicKey)); public JsApi GetJsApi(int? pageId, string siteRoot, string rvt, bool withPublicKey) { // pageId and siteRoot are normally null when called from razor, api, custom cs // pageId and siteRoot are provided only in very special case for EditUI in /DesktopModules/.../...aspx return jsApiCache.JsApiJson( platform: PlatformType.Dnn.ToString(), pageId: pageId ?? PortalSettings.Current.ActiveTab.TabID, siteRoot: SiteRootFn, apiRoot: () => GetApiRoots(SiteRootFn()).SiteApiRoot, appApiRoot: () => GetApiRoots(SiteRootFn()).AppApiRoot, uiRoot: () => VirtualPathUtility.ToAbsolute(DnnConstants.SysFolderRootVirtual), rvtHeader: DnnConstants.AntiForgeryTokenHeaderName, rvt: AntiForgeryToken, withPublicKey: withPublicKey, secureEndpointPublicKey: () => rsaCryptographyService.PublicKey, dialogQuery: $"{PortalIdParamName}={PortalSettings.Current.PortalId}" ); string SiteRootFn() => siteRoot ?? ServicesFramework.GetServiceFrameworkRoot(); } internal static (string SiteApiRoot, string AppApiRoot) GetApiRoots(string siteRoot = null) { siteRoot = siteRoot ?? ServicesFramework.GetServiceFrameworkRoot(); var apiRoot = siteRoot + $"api/{JsApi.ExtensionPlaceholder}/"; // appApiRoot is the same as apiRoot - the UI will add "app" to it later on // but app-api root shouldn't contain generic modules-name, as it's always 2sxc var appApiRoot = apiRoot; appApiRoot = appApiRoot.Replace(JsApi.ExtensionPlaceholder, "2sxc"); return (apiRoot, appApiRoot); } private static string AntiForgeryToken() { var tag = AntiForgery.GetHtml().ToString(); return GetAttribute(tag, "value"); } private static string GetAttribute(string tag, string attribute) { return new Regex(@"(?<=\b" + attribute + @"="")[^""]*") .Match(tag).Value; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn940/RegisterWebApiActivator.cs ================================================ using DotNetNuke.Web.Api; using System.Web.Http; using System.Web.Http.Dispatcher; // This is a special workaround for DNN 9.4 // Review the readme.md to understand how and why // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Dnn940; // ReSharper disable once UnusedMember.Global [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public class RegisterWebApiActivator : IServiceRouteMapper { /// /// Put our class activator in front of the standard DNN activator /// /// [ShowApiWhenReleased(ShowApiMode.Never)] public void RegisterRoutes(IMapRoute mapRouteManager) { var config = System.Web.Http.GlobalConfiguration.Configuration; // only override the existing one, if a special one was registered if (config.Services.GetService(typeof(IHttpControllerActivator)) is IHttpControllerActivator dnnActivator) GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WebApiHttpControllerActivator {PreviousActivator = dnnActivator}); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn940/WebApiHttpControllerActivator.cs ================================================ using Microsoft.Extensions.DependencyInjection; using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Dispatcher; using ToSic.Sxc.Dnn; using ToSic.Sxc.WebApi; // This is a special workaround for DNN 9.4 // Review the readme.md to understand how and why // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Dnn940; internal class WebApiHttpControllerActivator : IHttpControllerActivator { public IHttpControllerActivator PreviousActivator { get; set; } public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { // first try to just get it from the DI - if it's there // note that the PreviousActivator doesn't exist // but skip for dynamically compiled controller type from a .cs file with IDynamicWebApi interface // because this Activator can't create instance of controllerType with DI parameters in constructor if (!typeof(IDynamicWebApi).IsAssignableFrom(controllerType)) { var resultFromDnnActivator = PreviousActivator?.Create(request, controllerDescriptor, controllerType); if (resultFromDnnActivator != null) return resultFromDnnActivator; } // If it's not found (null), then it's probably a dynamically compiled type from a .cs file or similar // Such types are never registered in the DI catalog, as they may change on-the-fly. // In this case we must use ActivatorUtilities, which will create the object and if it expects // any DI parameters, they will come from the DependencyInjection as should be best practice //var dnnGlobalDi = DnnStaticDi.GetGlobalServiceProvider(); // 2022-08-11 2dm cleaned up, shouldn't use duplicate code to get dnn internal object var dnnGlobalDi = DnnStaticDi.GetGlobalScopedServiceProvider(); // 2023-06-15 2dm - trying this instead, so we always have a scope and nothing bleeds out var resultFromUtilities = (IHttpController)ActivatorUtilities.CreateInstance(dnnGlobalDi, controllerType); return resultFromUtilities; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Dnn940/readme.md ================================================ # Workaround for DNN 9.4 Breaking Changes This is a special workaround for DNN 9.4 breaking changes. ## How it works Our code does the following 1. the setup-code runs automatically in `RegisterWebApiActivator.cs` - this happens, because our method `RegisterRoutes` is called automatically 1. it checks if we're running DNN 9.4+ 1. if this is the case, it injects our activator `WebApiHttpControllerActivator.cs` and give it the previous activator 1. our activater will 1. try to activate using the DNN mechanisms - because it has the previous activator 1. if that fails (returns null) it will use .net core dependency injection to activate dynamically compiled classes Sidenote: since 2sxc is compiled for DNN 7.4.2+ it doesn't know some of the newer DNN 9 properties. So in this case it uses reflection to finish it's work. ## Why we did this DNN 9.4 added .net core dependency injection - which is great - but they forgot an important use case: dynamically compiled WebApi endpoints. 2sxc uses these in all custom Apps which have their own WebApis. The system is simple, as 2sxc compiles these on the fly and publishes them on HTTP. This works great, and to fix it it would have only needed a simple extra line in DNN. For currently unknown reasons, the DNN core team felt that this breaks dependency injection (to which we strongly disagree). Because of this, we decided to extend DNN to again support dynamically compiled endpoints. ## See also 1. 2sxc github issue on this: https://github.com/2sic/2sxc/issues/1830 1. Discussion on DNN Platform: https://github.com/dnnsoftware/Dnn.Platform/issues/3045 ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/GlobalUsings.cs ================================================ // Global using directives global using System; global using System.Collections.Generic; global using System.Linq; global using ToSic.Sys.Coding; global using ToSic.Sys.DI; global using ToSic.Sys.Documentation; global using ToSic.Sys.Data; global using ToSic.Sys.Logging; global using ToSic.Sys.Services; global using ToSic.Sys.Performance; global using ToSic.Sys.Utils; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/Properties/InternalsVisibleTo.cs ================================================ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn")] [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.WebApi")] [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.Razor")] // Unit tests [assembly: InternalsVisibleTo("ToSic.Dnn.Tests")] [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.SystemTests")] ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/ToSic.Sxc.Dnn.Core.csproj ================================================  Debug AnyCPU Library Properties ToSic.Sxc.Dnn.Core $(NoWarn);MSB3277 $(NoWarn);MSB4011 $(NoWarn);NU1902 runtime runtime runtime runtime runtime runtime runtime runtime runtime ..\..\..\Dependencies\System.Web\System.Web.WebPages.dll False False ..\ToSic.Sxc.Dnn\razorblade\bin\ToSic.Razor.Dnn.dll ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/ToSic.Sxc.Dnn.Core.csproj.DotSettings ================================================  True True ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/ToSic.Sxc.Dnn.csproj.DotSettings ================================================  True True False True False ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Core/ToSic.Sxc.Services/DnnExtensions.cs ================================================ using System.Web; using DotNetNuke.Common.Extensions; using ToSic.Sxc.Dnn; // ReSharper disable once CheckNamespace namespace ToSic.Sxc.Services; /// /// Provides extension methods for DNN Skins (Themes) and Modules. /// It only exists on the Dnn platform, not on Oqtane. /// /// /// Created v14 /// [PublicApi] public static class DnnExtensions { /// /// Helper extension method to get a scoped service on a skin/theme or module. /// /// To call it you must prefix it with `this.` like `this.GetScopedService...` /// /// /// /// /// /// This requires an `HttpContext.Current` to exist, so it will not work within a search controller. /// /// History /// - Created in v14 /// public static T GetScopedService(this System.Web.UI.UserControl skinOrModule) => GetScopedService(); /// /// Get a service from the current HTTP Scope. /// This is the standalone method. /// /// /// /// A service of type `T` - if it can be found. Otherwise it will throw an error. /// /// /// This requires an `HttpContext.Current` to exist, so it will not work within a search controller. /// /// History /// - Created in v14 /// - In v15.03 added special patch so it work on 404 pages where the service provider is broken/not available /// public static T GetScopedService() { var serviceScope = HttpContext.Current.GetScope(); // Check if the service scope is broken (typical on 404 pages) and do workaround // Should be removed once the minimum DNN is upgraded to a version where it is fixed // As of 2022-02-20 DNN 9.11.0 it's still broken return serviceScope == null #pragma warning disable CS0618 ? DnnStaticDi.StaticBuild() // handles edge case for 404 page in DNN where scope is missing, fix https://github.com/2sic/2sxc/issues/2986 #pragma warning restore CS0618 : serviceScope.ServiceProvider.Build(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/DesignTimeCompat/MetadataUpdateAttributes.Compat.cs ================================================ #if NETFRAMEWORK // ReSharper disable once CheckNamespace namespace System.Runtime.CompilerServices { /// /// Symbol-only compatibility attribute for newer Razor design-time / hot-reload metadata emitted by tooling. /// /// /// This does not enable Hot Reload on DNN / .NET Framework. /// It only allows generated design-time code to resolve the expected symbol while editing .cshtml files. /// The type is public because the design-time helper project that compiles the generated Razor code is a different assembly. /// Keep this shim .NET Framework-only to avoid colliding with the real BCL type on modern runtimes. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] public sealed class CreateNewOnMetadataUpdateAttribute : Attribute { } } // ReSharper disable once CheckNamespace namespace System.Reflection.Metadata { /// /// Symbol-only compatibility attribute for metadata update handlers referenced by newer tooling. /// /// /// This shim carries only the type shape required for design-time compilation. /// It does not provide active runtime Hot Reload behavior in DNN / .NET Framework. /// The type is public because generated design-time Razor code is compiled outside this assembly. /// Keep this shim .NET Framework-only to avoid colliding with the real BCL type on modern runtimes. /// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)] public sealed class MetadataUpdateHandlerAttribute : Attribute { /// /// Initializes the compatibility attribute with the handler type expected by generated design-time code. /// public MetadataUpdateHandlerAttribute(Type handlerType) { HandlerType = handlerType; } /// /// Gets the handler type referenced by generated design-time metadata update wiring. /// public Type HandlerType { get; } } } #endif ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/DesignTimeCompat/RazorComponentBase.DesignTimeCompat.cs ================================================ #if NETFRAMEWORK using System.Runtime.CompilerServices; // ReSharper disable once CheckNamespace // ReSharper disable UnusedMember.Global namespace ToSic.Sxc.Web; /// /// Design-time compatibility shim for newer editor-generated Razor classes on .NET Framework. /// /// /// DNN runtime rendering still uses legacy System.Web.Razor code generation, which emits classic /// Execute/Write/WriteLiteral calls through WebPageExecutingBase. /// The members below only exist so VS Code / Roslyn design-time generated classes can bind against /// during analysis of .cshtml files. /// They must not become part of the production execution path. /// If any of them is invoked at runtime, it means the runtime Razor compiler/code generator has drifted into /// an unsupported shape or a non-generated subclass relied on this shim instead of providing real behavior. /// In that case a fail-fast exception is safer than silently rendering wrong HTML. /// public abstract partial class RazorComponentBase { /// /// Newer design-time generated Razor classes may override ExecuteAsync. /// The real DNN runtime path should continue to use legacy Execute-based code generation. /// public virtual Task ExecuteAsync() => throw CreateUnexpectedRuntimeInvocation(); /// /// Bridges classic Razor's abstract Execute contract to the design-time ExecuteAsync pattern. /// If this base implementation is ever reached in production, fail fast with a clear message. /// /// Note that the asp.net Framework implementation only has an abstract `Execute` method, /// which is only added at the last layer during real compile. /// The design-time environment complains about this, so we need to provide a concrete implementation here, even though it should never be called at runtime. /// public override void Execute() => throw CreateUnexpectedRuntimeInvocation(); /// /// Placeholder symbol for newer design-time generated attribute writer calls. /// Legacy DNN runtime code generation should keep using WriteAttribute instead. /// protected virtual void BeginWriteAttribute(string name, string prefix, int prefixOffset, string suffix, int suffixOffset, int attributeValuesCount) => throw CreateUnexpectedRuntimeInvocation(); /// /// Placeholder symbol for newer design-time generated attribute writer calls. /// Legacy DNN runtime code generation should keep using WriteAttribute instead. /// protected virtual void WriteAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) => throw CreateUnexpectedRuntimeInvocation(); /// /// Placeholder symbol for newer design-time generated attribute writer calls. /// Legacy DNN runtime code generation should keep using WriteAttribute instead. /// protected virtual void EndWriteAttribute() => throw CreateUnexpectedRuntimeInvocation(); private InvalidOperationException CreateUnexpectedRuntimeInvocation([CallerMemberName] string memberName = default) => new( $"The design-time compatibility member '{GetType().Name}.{memberName}' was invoked at runtime. " + "This shim exists only to satisfy newer editor-generated Razor code for VS Code IntelliSense on .NET Framework. " + "The DNN runtime should continue using legacy System.Web.Razor code generation (Execute/Write/WriteLiteral and WriteAttribute). " + "If this exception occurs, the runtime Razor compiler/code generator has started emitting unsupported design-time members " + "or a non-generated subclass relied on the compat shim instead of implementing real runtime behavior."); } #endif ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/Dnn8Bugs.cs ================================================ /* This is a special file to handle DNN 8 bugs Background: DNN 8.0.0 delivers a special web.config in the /Portals/ folder, which expects the namespace Dnn.Modules.DynamicContentViewer.Helpers But this namespace doesn't exist in that version of DNN - it's a leftover of previous experiments trying to create a DCC (Dynamic Content Creator) So the razor engine complains. Because of this, I'm adding stuff to these namespaces, just to make sure the namespace actually exists */ // ReSharper disable once CheckNamespace namespace Dnn.Modules.DynamicContentViewer.Helpers; [ShowApiWhenReleased(ShowApiMode.Never)] class Dnn8Bugs; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/RazorPermissions/RazorPermissions.cs ================================================ namespace ToSic.Sxc.Compatibility.RazorPermissions; /// /// This is a compatibility leftover from old code - new code uses Edit.Enabled /// [ShowApiWhenReleased(ShowApiMode.Never)] public class RazorPermissions { internal RazorPermissions(bool editAllowed) => UserMayEditContent = editAllowed; /// /// This property is used publicly, so it must exist /// // ReSharper disable once UnusedMember.Global public bool UserMayEditContent { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/ToSic.Eav.Run.IContainer.Obsolete.cs ================================================  // ReSharper disable once CheckNamespace namespace ToSic.Eav.Run; /// /// This interface is used in the Dnn RazorComponent of v10, so we must still support it. /// The only use case is in an overridable CustomizeSearch, so it is never really called, /// but just defined by a razor page. /// [PrivateApi("Obsolete")] [Obsolete("this was replaced by IModule")] [ShowApiWhenReleased(ShowApiMode.Never)] public interface IContainer; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/ToSic.SexyContent/SexyContentWebPage.cs ================================================ using Custom.Hybrid; using ToSic.Eav.DataFormats.EavLight; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeApiService; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Compatibility.RazorPermissions; using ToSic.Sxc.Compatibility.Sxc; using ToSic.Sxc.Data.Sys.Wrappers; using ToSic.Sxc.Dnn; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; using IApp = ToSic.Sxc.Apps.IApp; // ReSharper disable InheritdocInvalidUsage // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.Razor; /// /// The core page type for delivering a 2sxc page /// Provides context infos like the Dnn object, helpers like Edit and much more. /// [ShowApiWhenReleased(ShowApiMode.Never)] public abstract class SexyContentWebPage : RazorComponentBase, ICreateInstance, IHasDnn, IDynamicCode, IHasCodeHelp { internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); #region Core Properties which should appear in docs /// public override ICodeLog Log => RzrHlp.CodeLog; /// public override IHtmlHelper Html => RzrHlp.Html; #endregion #region Helpers linked through AppAndData Helpers /// public ILinkService Link => CodeApi.Link; [PrivateApi] public dynamic DynamicModel => throw new NotSupportedException($"{nameof(DynamicModel)} not implemented on {nameof(SexyContentWebPage)}. {RazorComponent.NotImplementedUseCustomBase}"); /// public IEditService Edit => CodeApi.Edit; public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; #pragma warning disable 612 /// [PrivateApi("never public, shouldn't be in use elsewhere")] [Obsolete] [field: Obsolete] public SxcHelper Sxc => field ??= new(CodeApi.Block?.Context.Permissions.IsContentAdmin ?? false, GetService()); #pragma warning restore 612 /// /// Old API - probably never used, but we shouldn't remove it as we could break some existing code out there /// [PrivateApi] public IBlock Block => CodeApi.Block; /// public TService GetService() where TService : class => CodeApi.GetService(); [PrivateApi] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel9Old; /// public new IApp App => CodeApi.App; #region Data - with old interface #DataInAddWontWork /// public IDataSource Data => /*(IBlockDataSource)*/CodeApi.Data; //// This is explicitly implemented so the interfaces don't complain //// but actually we're not showing this - in reality we're showing the Old (see above) //IBlockDataSource IAppAndDataHelpers.Data => (IBlockDataSource)_CodeApiSvc.Data; #endregion //// Explicit implementation of expected interface, but it should not work in the normal code //// as the old code sometimes expects Data.Cache.GetContentType ///// //IDataSource IDynamicCode.Data => CodeApi.Data; public RazorPermissions Permissions => new(CodeApi.Block?.Context.Permissions.IsContentAdmin ?? false); #region AsDynamic in many variations /// [Obsolete] public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// [PublicApi("Careful - still Experimental in 12.02")] public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); // todo: only in "old" controller, not in new one /// [Obsolete] public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => CodeApi.Cdf.CodeAsDyn(entityKeyValuePair.Value); /// [Obsolete] public IEnumerable AsDynamic(IDataStream stream) => CodeApi.Cdf.CodeAsDynList(stream.List); /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); /// [Obsolete] public IEnumerable AsDynamic(IEnumerable entities) => CodeApi.Cdf.CodeAsDynList(entities); #endregion #region Future features: AsList / Settings / Resources [PrivateApi] public IEnumerable AsList(object list) => throw new("AsList is a newer feature in 2sxc. To use it, change your template type to " + nameof(Razor12) + " see https://go.2sxc.org/RazorComponent"); [PrivateApi] public dynamic Resources => throw new("Resources is a newer feature in 2sxc. To use it, change your template type to " + nameof(Razor12) + " see https://go.2sxc.org/RazorComponent"); [PrivateApi] public dynamic Settings => throw new("Settings is a newer feature in 2sxc. To use it, change your template type to " + nameof(Razor12) + " see https://go.2sxc.org/RazorComponent"); #endregion #region Not supported, not captured new features (like Convert-Service) - because they would break old code //[PrivateApi] //public IConvertService Convert => throw new NotSupportedException($"{nameof(Convert)} not implemented on {nameof(SexyContentWebPage)}. {RazorComponent.NotImplementedUseCustomBase}"); #endregion #region Compatibility with Eav.Interfaces.IEntity - introduced in 10.10 - Removed in v20 //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(Eav.Interfaces.IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity as IEntity); //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => CodeApi.Cdf.CodeAsDyn(entityKeyValuePair.Value as IEntity); //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public IEnumerable AsDynamic(IEnumerable entities) => CodeApi.Cdf.CodeAsDynList(entities.Cast()); #endregion #region Data Source Stuff /// [Obsolete] public IDataSource CreateSource(string typeName = "", IDataSource inSource = null, ILookUpEngine configurationProvider = null) => new CodeApiServiceObsolete(ExCtx).CreateSource(typeName, inSource, configurationProvider); /// [Obsolete("this is the old implementation with ILookUp Engine, don't think it was ever used publicly because people couldn't create these engines")] public T CreateSource(IDataSource inSource = default, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Content, Header, etc. and List /// public dynamic Content => CodeApi.Content; [Obsolete("use Content.Presentation instead")] [PrivateApi] public dynamic Presentation => CodeApi.Content?.Presentation; /// /// We are blocking this property on purpose, so that people will want to migrate to the new RazorComponent /// [PrivateApi] public dynamic Header => throw new("The header property is a new feature in 2sxc 10.20. " + "To use it, change your template type to inherit from " + nameof(RazorComponent) + " see https://go.2sxc.org/RazorComponent"); #pragma warning disable 618 [Obsolete("Use Header instead")] public dynamic ListContent => CodeApi.Header; [Obsolete("Use Header.Presentation instead")] public dynamic ListPresentation => CodeApi.Header?.Presentation; // #RemovedV20 #Element //[Obsolete("This is an old way used to loop things - shouldn't be used any more - will be removed in a future version")] //[field: Obsolete("don't use any more")] //public List List => field ??= new CodeApiServiceObsolete(ExCtx).ElementList; #pragma warning restore 618 /// public dynamic AsDynamic(string json, string fallback = WrapperConstants.EmptyJson) => throw new("The AsDynamic(string) is a new feature in 2sxc 10.20. To use it, change your template type to inherit from " + nameof(RazorComponent) + " see https://go.2sxc.org/RazorComponent"); #endregion #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); #endregion #region CmsContext /// public ICmsContext CmsContext => CodeApi.CmsContext; #endregion #region CreateInstance [PrivateApi] string IGetCodePath.CreateInstancePath { get; set; } /// public virtual dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => RzrHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion // Added this in v20 to show uses of GetBestValue; but much of it may not be applicable, in which case we should create a separate list for SexyContentWebPage and Dnn.RazorComponent [PrivateApi] List IHasCodeHelp.ErrorHelpers => HelpDbRazor.CompileRazorOrCode12; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Compatibility/ToSic.SexyContent/SexyContentWebPageOfT.cs ================================================ // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.Razor; /// /// this is just a generic variation of SexyContentWebPage /// We need it for the Razor Engine - which in V5+ explicitly expects a generic type /// We have no need for the internal type, so there is no code except for the inheritance /// /// [ShowApiWhenReleased(ShowApiMode.Never)] public abstract class SexyContentWebPage:SexyContentWebPage; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Dnn/Razor12.cs ================================================ using Custom.Razor.Sys; using ToSic.Sxc.Dnn; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; // ReSharper disable once CheckNamespace namespace Custom.Dnn; /// /// The base class for Razor-Components in 2sxc 12+
/// Provides context infos like the Dnn object, helpers like Edit and much more.
///
[PublicApi] public abstract class Razor12 : Hybrid.Razor12, IHasDnn, IRazor12, IDnnRazorCompatibility { /// public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor12.cs ================================================ using Custom.Razor.Sys; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Dnn.Razor; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; using IApp = ToSic.Sxc.Apps.IApp; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// The base class for Hybrid Razor-Components in 2sxc 12
/// Provides context objects like CmsContext, helpers like Edit and much more.
///
[PublicApi] public abstract partial class Razor12 : RazorComponentBase, IRazor12, IHasCodeHelp, ICreateInstance { internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public override HelperResult RenderPage(string path, params object[] data) => RzrHlp.RenderPageNotSupported(); #region Core Properties which should appear in docs /// public override ICodeLog Log => RzrHlp.CodeLog; /// public override IHtmlHelper Html => RzrHlp.Html; #endregion #region Link, Edit, Dnn, App, Data /// public ILinkService Link => CodeApi.Link; /// public IEditService Edit => CodeApi.Edit; /// public TService GetService() where TService : class => CodeApi.GetService(); [PrivateApi] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel12; /// public new IApp App => CodeApi.App; /// public IDataSource Data => CodeApi.Data; #endregion #region AsDynamic in many variations /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// [PublicApi("Careful - still Experimental in 12.02")] public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); #endregion #region AsEntity /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); #endregion #region AsList /// public IEnumerable AsList(object list) => CodeApi.Cdf.CodeAsDynList(list); #endregion #region Convert-Service /// public IConvertService Convert => field ??= CodeApi.Convert; #endregion #region Data Source Stuff /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Content, Header, etc. and List /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); #endregion #region v11 properties CmsContext /// public ICmsContext CmsContext => CodeApi.CmsContext; #endregion #region v12 properties Resources, Settings, Path /// public dynamic Resources => CodeApi.Resources; /// public dynamic Settings => CodeApi.Settings; [PrivateApi("Not yet ready")] public IDevTools DevTools => CodeApi.DevTools; ///// //public string Path => VirtualPath; [PrivateApi] List IHasCodeHelp.ErrorHelpers => HelpDbRazor.CompileRazorOrCode12; #endregion #region CreateInstance /// [PrivateApi] string IGetCodePath.CreateInstancePath { get; set; } /// public virtual dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => RzrHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor12_DynamicModel.cs ================================================ using ToSic.Sxc.Engines.Sys; using ToSic.Sxc.Render.Sys.Specs; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; partial class Razor12: ISetDynamicModel { /// [PublicApi] public dynamic DynamicModel => RzrHlp.DynamicModel; [PrivateApi] void ISetDynamicModel.SetDynamicModel(RenderSpecs viewData) => RzrHlp.SetDynamicModel(viewData); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor12_Obsolete.cs ================================================ using static ToSic.Sxc.Code.Sys.CodeErrorHelp.RazorExceptions; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; // Important Note // The new hybrid implementation doesn't actually need this // But if we add these overloads in an inherited class, they will be preferred to the real working ones // which would result in errors on AsDynamic(some-object) even though it should just work partial class Razor12 { // Obsolete stuff - not supported any more in RazorPage10 - maybe re-activate to show helpful error messages #region Shared Code Block between RazorComponent_Obsolete and ApiController_Obsolete #region Compatibility with Eav.Interfaces.IEntity - introduced in 10.10 - Removed in v20 //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(ToSic.Eav.Interfaces.IEntity entity) // => ExAsDynamicInterfacesIEntity(); //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(KeyValuePair entityKeyValuePair) // => AsDynamicKvpInterfacesIEntity(); //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //[PrivateApi] //public IEnumerable AsDynamic(IEnumerable entities) // => AsDynamicIEnumInterfacesIEntity(); #endregion #region AsDynamic [PrivateApi] [Obsolete("throws error with fix-instructions. Use AsDynamic(IEnumerable...)")] public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => ExAsDynamicKvp(); #endregion #endregion //[PrivateApi("this is the old signature, should still be supported")] // we're not creating an error/overload here, because it may lead to signature issues // where two methods have almost the same signature //public virtual void CustomizeSearch(Dictionary> searchInfos, ModuleInfo moduleInfo, DateTime beginDate) // => throw new Exception($"ListPresentation {NotSupportedIn10}. Use Header.Presentation"); #region Old AsDynamic with correct warnings [PrivateApi] public IEnumerable AsDynamic(IDataStream stream) => ExAsDynamicForList(); [PrivateApi] public IEnumerable AsDynamic(IDataSource source) => ExAsDynamicForList(); [PrivateApi] public IEnumerable AsDynamic(IEnumerable entities) => ExAsDynamicForList(); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor14.cs ================================================ using Custom.Razor.Sys; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Dnn.Razor; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// Base class for v14 Dynamic Razor files. /// Will provide the on property `Kit`. /// This contains all the popular services used in v14, so that your code can be lighter. /// /// /// Important: The property `Convert` which exited on Razor12 was removed. use `Kit.Convert` instead. /// [PublicApi] public abstract partial class Razor14: RazorComponentBase, IRazor14, IHasCodeHelp, ICreateInstance { internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public override HelperResult RenderPage(string path, params object[] data) => RzrHlp.RenderPageNotSupported(); [PrivateApi] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel12; /// public TService GetService() where TService : class => CodeApi.GetService(); public ServiceKit14 Kit => field ??= CodeApi.ServiceKit14; #region Core Properties which should appear in docs /// public override ICodeLog Log => RzrHlp.CodeLog; /// public override IHtmlHelper Html => RzrHlp.Html; #endregion #region Link, Edit /// public ILinkService Link => CodeApi.Link; /// public IEditService Edit => CodeApi.Edit; #endregion #region CmsContext /// public ICmsContext CmsContext => CodeApi.CmsContext; #endregion #region Content, Header, etc. and List /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; /// public IDataSource Data => CodeApi.Data; #endregion #region CreateSource Stuff /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Dev Tools & Dev Helpers [PrivateApi("Not yet ready")] public IDevTools DevTools => CodeApi.DevTools; [PrivateApi] List IHasCodeHelp.ErrorHelpers => HelpDbRazor.CompileRazorOrCode14; #endregion #region CreateInstance [PrivateApi] string IGetCodePath.CreateInstancePath { get; set; } /// public virtual dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => RzrHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); /// [PrivateApi("added in 16.05, but not sure if it should be public")] public dynamic GetCode(string path, NoParamOrder npo = default, string className = default) => RzrHlp.GetCode(path: path, className: className); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor14_AppSetRes.cs ================================================ using ToSic.Sxc.Apps; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; abstract partial class Razor14 { /// public new IApp App => CodeApi.App; /// public dynamic Resources => CodeApi.Resources; /// public dynamic Settings => CodeApi.Settings; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor14_AsConversions.cs ================================================ using ToSic.Sxc.Adam; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; abstract partial class Razor14 { #region AsDynamic in many variations /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); #endregion #region AsEntity /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); #endregion #region AsList /// public IEnumerable AsList(object list) => CodeApi.Cdf.CodeAsDynList(list); #endregion /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/Razor14_DynamicModel.cs ================================================ using ToSic.Sxc.Engines.Sys; using ToSic.Sxc.Render.Sys.Specs; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; // ReSharper disable once UnusedMember.Global abstract partial class Razor14: ISetDynamicModel { /// [PublicApi] public dynamic DynamicModel => RzrHlp.DynamicModel; [PrivateApi] void ISetDynamicModel.SetDynamicModel(RenderSpecs viewData) => RzrHlp.SetDynamicModel(viewData); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/RazorTyped.cs ================================================ using Custom.Razor.Sys; using ToSic.Eav.Models; using ToSic.Sxc.Apps; using ToSic.Sxc.Code.Razor; using ToSic.Sxc.Code.Razor.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Data; using ToSic.Sxc.Dnn.Razor; using ToSic.Sxc.Dnn.Razor.Sys; using ToSic.Sxc.Engines.Sys; using ToSic.Sxc.Render.Sys.Specs; using ToSic.Sxc.Services.Sys; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; using static System.StringComparer; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// Base class for v16 [Typed](xref:NetCode.TypedCode.Index) Razor files. /// Use it to create custom CS code in your App. /// /// It provides the on property `Kit` which contains all the popular services to create amazing stuff. /// /// /// Important: This is very different from Razor12 or Razor14, as it doesn't rely on `dynamic` code. /// Be aware of this since the APIs are very different - see [Typed Code](xref:NetCode.TypedCode.Index). /// [PublicApi] public abstract class RazorTyped: RazorComponentBase, IRazor, ITypedCode16, IHasCodeHelp, IGetCodePath, ISetDynamicModel, ICanUseRoslynCompiler { #region Constructor, Setup, Helpers internal ICodeTypedApiHelper CodeApi => field ??= ExCtx.GetTypedApi(); /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public override HelperResult RenderPage(string path, params object[] data) => RzrHlp.RenderPageNotSupported(); /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel16; /// public TService GetService() where TService : class => CodeApi.GetService(); /// // ReSharper disable once MethodOverloadWithOptionalParameter public TService GetService(NoParamOrder npo = default, string typeName = default) where TService : class => AppCodeGetNamedServiceHelper.GetService(owner: this, CodeHelper.Specs, typeName); /// public ServiceKit16 Kit => field ??= CodeApi.ServiceKit16; internal TypedCode16Helper CodeHelper => field ??= CreateCodeHelper(); /// protected ICodeCustomizer Customize => field ??= CodeApi.GetService(reuse: true); void ISetDynamicModel.SetDynamicModel(RenderSpecs viewData) { _renderSpecs = viewData; // Only overwrite if data is not null if (viewData.Data != null) _overridePageData = viewData.Data; } private RenderSpecs _renderSpecs; private RenderSpecs GetRenderSpecs() { return _renderSpecs ??= PageData.Values.FirstOrDefault(value => value is RenderSpecs) as RenderSpecs; } private object _overridePageData; private TypedCode16Helper CreateCodeHelper() => new( new(ExCtx, true, Path), getRazorModel: () => _overridePageData // the default/only value would be on a 0 key ?? (PageData?.TryGetValue(0, out var zeroData) ?? false ? zeroData as object : null), () => GetRenderSpecs()?.DataDic ?? PageData? .Where(pair => pair.Key is string) .ToDictionary(pair => pair.Key.ToString(), pair => pair.Value, InvariantCultureIgnoreCase) ); #endregion #region Core Properties which should appear in docs /// public override ICodeLog Log => RzrHlp.CodeLog; /// public override IHtmlHelper Html => RzrHlp.Html; /// public dynamic GetCode(string path, NoParamOrder npo = default, string className = default) => RzrHlp.GetCode(path: path, className: className); #endregion #region Link /// public ILinkService Link => CodeApi.Link; #endregion #region New App, Settings, Resources /// public new IAppTyped App => CodeApi.AppTyped; /// public ITypedStack AllResources => CodeHelper.AllResources; /// public ITypedStack AllSettings => CodeHelper.AllSettings; #endregion #region My Data Stuff /// public ITypedItem MyItem => CodeHelper.MyItem; /// public IEnumerable MyItems => CodeHelper.MyItems; /// public ITypedItem MyHeader => CodeHelper.MyHeader; /// public IDataSource MyData => CodeApi.Data; /// public ITypedRazorModel MyModel => CodeHelper.MyModel; #endregion #region MyContext & UniqueKey /// public ICmsContext MyContext => CodeApi.CmsContext; /// public ICmsPage MyPage => CodeApi.CmsContext.Page; /// public ICmsUser MyUser => CodeApi.CmsContext.User; /// public ICmsView MyView => CodeApi.CmsContext.View; /// public string UniqueKey => Kit.Key.UniqueKey; #endregion #region As Conversions /// public ITypedItem AsItem(object data, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsItem(data, new() { ItemIsStrict = propsRequired ?? true })!; /// public IEnumerable AsItems(object list, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsItems(list, new() { ItemIsStrict = propsRequired ?? true }); /// public IEntity AsEntity(ICanBeEntity thing) => CodeApi.Cdf.AsEntity(thing); /// public ITyped AsTyped(object original, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsTyped(original, new() { EntryPropIsRequired = false, ItemIsStrict = propsRequired ?? true }); /// public IEnumerable AsTypedList(object list, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsTypedList(list, new() { EntryPropIsRequired = false, ItemIsStrict = propsRequired ?? true }); /// public ITypedStack AsStack(params object[] items) => CodeApi.Cdf.AsStack(items); /// public T AsStack(params object[] items) where T : class, IModelFromData, new() => CodeApi.Cdf.AsStack(items); #endregion #region Dev Tools & Dev Helpers [PrivateApi("Not yet ready")] public IDevTools DevTools => CodeHelper.DevTools; [PrivateApi] List IHasCodeHelp.ErrorHelpers => HelpDbRazor.Compile16; #endregion #region CreateInstance [PrivateApi] string IGetCodePath.CreateInstancePath { get; set; } #endregion #region As / AsList WIP v17 /// public T As(object source, NoParamOrder npo = default) where T : class, IModelFromData => CodeApi.Cdf.AsCustom(source: source); /// public IEnumerable AsList(object source, NoParamOrder npo = default, bool nullIfNull = default) where T : class, IModelFromData => CodeApi.Cdf.AsCustomList(source: source, npo: npo, nullIfNull: nullIfNull); #endregion #region Experimental Configuration [WorkInProgressApi("not yet public or final, WIP v20.00.0x")] [ShowApiWhenReleased(ShowApiMode.Never)] // [field: AllowNull, MaybeNull] public IRazorConfiguration Configuration => field ??= new RazorConfiguration(GetRenderSpecs(), RzrHlp.Log); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/Hybrid/RazorTyped_TModel.cs ================================================ // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// New base class with custom model. /// The rest of this is identical to . /// /// Model type - like `string` or a class from your `AppCode` /// /// Introduced in v17.03 /// [PublicApi] public abstract class RazorTyped : RazorTyped { /// /// The model for this Razor file. /// Typed according to the `@inherits` statement. /// public TModel Model => CodeHelper.GetModel(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Custom/readme.md ================================================ # ToSic.Sxc.Hybrid for DNN This folder should contain the DNN implementations of the hybrid stuff. ## Notes / Best Practices * We'll create subfolders for managing the code * but all the objects for the custom work should be in the `ToSic.Sxc.Hybrid` namespace don't use sub-namespaces because it just makes the docs harder to read / organize. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/IDnnRazor11.cs ================================================ namespace ToSic.Sxc.Dnn; [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public interface IDnnRazor11 { /// /// Code-Behind of this .cshtml file - located in a file with the same name but ending in .code.cshtml /// dynamic Code { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/IDnnRazorCompatibility.cs ================================================ namespace ToSic.Sxc.Dnn; /// /// Modify any objects on DNN Razor to match the newer .net core conventions. /// [ShowApiWhenReleased(ShowApiMode.Never)] public interface IDnnRazorCompatibility { /// /// Helper for Html.Raw - for creating raw html output which doesn't encode > and <. /// Also has helpers such as `.Partial(...)` /// IHtmlHelper Html { get; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Integration/StartUpDnnRazor.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Sxc.Dnn.Compile; using ToSic.Sxc.Dnn.Razor; using ToSic.Sxc.Dnn.Razor.Sys; using ToSic.Sxc.Engines; namespace ToSic.Sxc.Dnn.Integration; public static class StartUpDnnRazor { public static IServiceCollection AddDnnRazor(this IServiceCollection services) { services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); return services; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/DnnRazorEngine.cs ================================================ using System.Configuration; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Dnn.Razor.Sys; using ToSic.Sxc.Engines; using ToSic.Sxc.Engines.Sys; using ToSic.Sxc.Render.Sys.Output; using ToSic.Sxc.Render.Sys.Specs; namespace ToSic.Sxc.Dnn.Razor; /// /// The razor engine, which compiles / runs engine templates /// /// /// This is the glue-ware to the "Engine". It just ensures API compatibility with the core Engine. /// Internally it will use the DnnRazorCompiler to compile and run the Razor templates. /// /// It also manages the EntryRazorComponent, which is the main Razor component for this engine. /// [PrivateApi("used to be InternalApi_DoNotUse_MayChangeWithoutNotice till v16.09")] [EngineDefinition(Name = "Razor")] [ShowApiWhenReleased(ShowApiMode.Never)] // ReSharper disable once UnusedMember.Global internal class DnnRazorEngine( EngineSpecsService engineSpecsService, IBlockResourceExtractor blockResourceExtractor, EngineAppRequirements engineAppRequirements, DnnRazorCompiler razorCompiler) : ServiceBase("Dnn.RzEng", connect: [engineSpecsService, blockResourceExtractor, engineAppRequirements, razorCompiler]), IRazorEngine { /// public RenderEngineResult Render(IBlock block, RenderSpecs specs) { var l = Log.Fn(timer: true); // Prepare #1: Specs var engineSpecs = engineSpecsService.GetSpecs(block); // Preflight: check if rendering is possible, or throw exceptions... var preFlightResult = engineAppRequirements.CheckExpectedNoRenderConditions(engineSpecs); if (preFlightResult != null) return l.ReturnAsError(preFlightResult); // Prepare #2: after Base.init also init the compiler (requires objects which were set up in base.Init) razorCompiler.SetupCompiler(engineSpecs); // Prepare #3: The entry component RazorComponentBase entryRazorComponent; try { var razorBuild = razorCompiler.InitWebpage(engineSpecs.TemplatePath, exitIfNoHotBuild: false); entryRazorComponent = razorBuild.Instance; } catch (ConfigurationErrorsException exc) // Catch web.config Error on DNNs upgraded to 7 { throw l.Done(new Exception("Configuration Error. Your web.config seems to be wrong in the 2sxc folder.", exc)); } // Render and process / return var renderedTemplate = DnnRenderImplementation(entryRazorComponent, specs); var result = blockResourceExtractor.Process(renderedTemplate); return l.ReturnAsOk(result); } private RenderEngineResultRaw DnnRenderImplementation(RazorComponentBase webpage, RenderSpecs specs) { ILogCall<(TextWriter writer, List exceptions)> l = Log.Fn<(TextWriter, List)>(); var (writer, exceptions) = razorCompiler.Render(webpage, new StringWriter(), specs); return new () { Html = writer.ToString(), ExceptionsOrNull = exceptions }; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/DnnRazorHelper.cs ================================================ using System.Web.Hosting; using Custom.Razor.Sys; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Data.Sys.Wrappers; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Render.Sys.Specs; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; using ToSic.Sys.Exceptions; namespace ToSic.Sxc.Dnn.Razor; [PrivateApi] internal class DnnRazorHelper() : RazorHelperBase("Sxc.RzrHlp") { #region Constructor / Init public DnnRazorHelper Init(RazorComponentBase page) { Page = page; return this; } public RazorComponentBase Page { get; private set; } #endregion #region Error Forwarding internal void ConfigurePage(WebPageBase parentPage, string virtualPath) { // Child pages need to get their context from the Parent // ...but we're not quite sure why :) - maybe this isn't actually needed Page.Context = parentPage.Context; // Return if parent page is not a SexyContentWebPage if (parentPage is not RazorComponentBase typedParent) return; ParentPage = typedParent; // Only call the Page.ConnectToRoot, as it will call-back this objects ConnectToRoot // So don't call: ConnectToRoot(typedParent._DynCodeRoot); Page.ConnectToRoot(typedParent.ExCtx); Log.A($"{nameof(virtualPath)} for Render etc.:{virtualPath}"); } internal RazorComponentBase ParentPage { get; set; } #endregion #region Html Helper internal IHtmlHelper Html => field ??= ExCtx.GetService().Init(Page, this, ExCtx.GetContextOfBlock()?.User.IsSystemAdmin ?? false); #endregion #region RenderPage /// /// RenderPage is disabled in Razor12+ to force designers to use Html.Partial /// internal HelperResult RenderPageNotSupported() => throw new NotSupportedException("RenderPage(...) is not supported in Hybrid Razor. Use Html.Partial(...) instead."); #endregion #region Create Instance protected override string GetCodeNormalizePath(string virtualPath) => Page.NormalizePath(virtualPath); protected override object GetCodeCshtml(string path) { // ReSharper disable once ConvertTypeCheckToNullCheck if (Page is not IHasDnn) throw new ExceptionWithHelp(new CodeHelp { Name = "create-instance-cshtml-only-in-old-code", Detect = null, UiMessage = "CreateInstance(*.cshtml) is not supported in Hybrid Razor. Use .cs files instead." }); var pageAsCode = WebPageBase.CreateInstanceFromVirtualPath(path); var pageAsRcb = pageAsCode as RazorComponentBase; pageAsRcb?.RzrHlp.ConfigurePage(Page, pageAsRcb.VirtualPath); return pageAsCode; } protected override string GetCodeFullPathForExistsCheck(string path) { var l = Log.Fn(path); var fullPath = HostingEnvironment.MapPath(path); return l.ReturnAndLog(fullPath); } #endregion #region DynamicModel and Factory private ICodeDataPoCoWrapperService CodeDataWrapper => _dynJacketFactory.Get(() => ExCtx.GetService()); private readonly GetOnce _dynJacketFactory = new(); /// public dynamic DynamicModel => _dynamicModel ??= CodeDataWrapper.FromDictionary(Page.PageData); private dynamic _dynamicModel; internal void SetDynamicModel(RenderSpecs viewData) { var l = Log.Fn(); _dynamicModel = CodeDataWrapper.DynamicFromObject(viewData.Data, WrapperSettings.Dyn(children: false, realObjectsToo: false)); l.Done(); } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/HtmlHelper.cs ================================================ using System.Web; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Razor.Sys; using ToSic.Sxc.Render.Sys; using ToSic.Sxc.Render.Sys.Specs; using ToSic.Sxc.Web.Sys.LightSpeed; using IFeaturesService = ToSic.Sxc.Services.IFeaturesService; namespace ToSic.Sxc.Dnn.Razor; /// /// Helper in Dnn to replace the HtmlHelper for the `@Html.Raw()` or `@Html.Partial()` /// [PrivateApi] internal class HtmlHelper( LazySvc codeErrService, LazySvc featureSvc, LazySvc codeAnalysis, Generator renderingHelperGenerator) : ServiceBase("Dnn.HtmHlp", connect: [codeErrService, featureSvc, codeAnalysis, renderingHelperGenerator]), IHtmlHelper { public HtmlHelper Init(RazorComponentBase page, DnnRazorHelper helper, bool isSystemAdmin) { _page = page; _helper = helper; _errorHelper = new(page, isSystemAdmin, helper, featureSvc, codeAnalysis, codeErrService, renderingHelperGenerator); return this; } private RazorComponentBase _page; private DnnRazorHelper _helper; private HtmlHelperErrorHelper _errorHelper; private HtmlHelperTimeKeeper TimeKeeper { get; } = new(); /// public IHtmlString Raw(object stringHtml) => stringHtml switch { null => new HtmlString(""), string s => new HtmlString(s), IHtmlString h => h, _ => throw _helper.Add(new ArgumentException($@"Html.Raw does not support type '{stringHtml.GetType().Name}'.", nameof(stringHtml))) }; /// /// This should duplicate the way .net core does RenderPage - and should become the standard way of doing it in 2sxc /// /// /// /// public IHtmlString Partial(string relativePath, object data = default) { // Figure out the real path, and make sure it's lower case // so the ID in a cache remains the same no matter how it was called var normalizedPath = _page.NormalizePath(relativePath).ToLowerInvariant(); var l = Log.Fn($"{nameof(relativePath)}: '{relativePath}', {nameof(normalizedPath)}: '{normalizedPath}', {nameof(data)}: {data != null}", timer: true); var fullTime = TimeKeeper.Start(normalizedPath); // Prepare RenderSpecs with data, since it may be needed to check if caching is relevant // Do it like this, to avoid multiple conversions of the same data var renderSpecs = new RenderSpecs { Data = data }; var cacheHelper = new RazorPartialCachingHelper(_page.ExCtx.GetAppId(), normalizedPath, renderSpecs.DataDic, _page.ExCtx, featureSvc.Value, Log); var cached = cacheHelper.TryGetFromCache(); if (cached != null) { cacheHelper.PageService.ReplayCachedChanges((RenderResult)cached); return l.Return(new HtmlString(cached.Html), "Returning cached result"); } try { // Attach any specs which the cshtml may need and possibly modify to configure caching renderSpecs = renderSpecs with { PartialSpecs = cacheHelper.RenderPartialSpecsForRazor }; // This will get a HelperResult object, which is often not executed yet var result = RenderWithRoslynOrClassic(relativePath, normalizedPath, renderSpecs); // In case we should throw a nice error, we must get the HTML now, to possibly cause the error and show an alternate message // This will also not allow partial caching if (!_errorHelper.ThrowPartialError) return l.Return(result); // We want to capture the rendering of the result, so we can show nice errors and cache the result if needed. // We must create another render result, to delay our work. // Otherwise, the Razor-Engine may do some strange things and not show anything at all (instead of the error) var wrappedResult = new HelperResult(writer => { try { fullTime.Start(); var asString = result.ToHtmlString(); writer.Write(asString); // Use Write instead of WriteLine, to not introduce any extra lines/whitespace fullTime.Stop(); l.A($"Done rendering {normalizedPath}; Length: {asString.Length}; accumulated time for this partial: {fullTime.ElapsedMilliseconds}ms"); // Add to cache - should only run if no exceptions were thrown cacheHelper.SaveToCacheIfEnabled(asString); } catch (Exception renderException) { var nice = _errorHelper.TryToLogAndReWrapError(renderException, relativePath, true); writer.WriteLine(nice); } }); fullTime.Stop(); return l.Return(wrappedResult, $"will add to cache: {cacheHelper.IsFullyEnabled}; accumulated time: {fullTime.ElapsedMilliseconds}ms"); } catch (Exception compileException) { // Ensure our error paths exist, to only report this in the system-logs once //_errorPaths ??= new(InvariantCultureIgnoreCase); var isFirstOccurrence = !_errorHelper.ErrorPaths.Contains(relativePath); _errorHelper.ErrorPaths.Add(relativePath); // Report if first time var nice = _errorHelper.TryToLogAndReWrapError(compileException, relativePath, isFirstOccurrence, "Special exception handling - only show message"); var htmlError = new HtmlString(nice); return l.Return(htmlError, "compile error"); } } /// /// Determine if we should use Roslyn or the classic way of rendering and do it. /// /// /// /// /// private HelperResult RenderWithRoslynOrClassic(string relativePath, string normalizedPath, RenderSpecs renderSpecs) { var useRoslyn = _page is ICanUseRoslynCompiler; var l = Log.Fn($"{nameof(useRoslyn)}: {useRoslyn}"); // We can use Roslyn // Classic setup without Roslyn, use the built-in RenderPage if (!useRoslyn) return l.Return(_page.BaseRenderPage(relativePath, renderSpecs), $"default render {(renderSpecs.Data == null ? "no" : "with")} data"); // Try to compile with Roslyn // Will exit if the child has an old base class which would expect PageData["..."] properties // Because that would be empty https://github.com/2sic/2sxc/issues/3260 var preparations = DnnRazorCompiler.PrepareForRoslyn(_page, normalizedPath, renderSpecs.Data); // Exit if we don't use HotBuild, because then we must revert back to classic render // Reason is that otherwise the PageData property - used on very old classes - would not be populated // Doing this from our compiler is super-hard, because it would use a lot of internal Microsoft APIs if (preparations.SubPage.UsesHotBuild) { var probablyHotBuild = DnnRazorCompiler.ExecuteWithRoslyn(preparations, _page, renderSpecs); //if (probablyHotBuild.UsesHotBuild) return l.Return(probablyHotBuild.Instance, "used HotBuild"); } l.A("Tried to use Roslyn, but detected old base class so will use classic Razor Engine so PageData continues to work."); return l.Return(_page.BaseRenderPage(relativePath, renderSpecs), $"default render {(renderSpecs.Data == null ? "no" : "with")} data"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/HtmlHelperErrorHelper.cs ================================================ using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Render.Sys; using ToSic.Sxc.Sys.Configuration; using ToSic.Sxc.Sys.ExecutionContext; namespace ToSic.Sxc.Dnn.Razor; internal class HtmlHelperErrorHelper(RazorComponentBase page, bool isSystemAdmin, DnnRazorHelper helper, LazySvc featureSvc, LazySvc codeAnalysis, LazySvc codeErrService, Generator renderingHelperGenerator) { internal HashSet ErrorPaths = new(StringComparer.InvariantCultureIgnoreCase); /// /// This exception is usually thrown when a thread is aborted, e.g. by Response.End in classic ASP.NET. /// It happens on Response.Redirect(...) calls. /// private const bool IgnoreThreadAbortException = true; internal string TryToLogAndReWrapError(Exception renderException, string path, bool reportToDnn, string additionalLog = null) { if (IgnoreThreadAbortException && renderException is ThreadAbortException) return "thread aborted; probably Response.Redirect called"; // Important to know: Once this fires, the page will stop rendering more templates if (reportToDnn) page.Log.GetContents().Ex(renderException); if (additionalLog != null) page.Log.GetContents().A(additionalLog); // If it's a compile issue, try to find explicit help for that var pathOfPage = page.NormalizePath(path); var razorType = codeAnalysis.Value.TypeOfVirtualPath(pathOfPage); var exWithHelp = codeErrService.Value.AddHelpForCompileProblems(renderException, razorType); // Show a nice / ugly error depending on user permissions // Note that if anything breaks here, it will just use the normal error - but for what breaks in here // Note that if withHelp already has help, it won't be extended anymore exWithHelp = codeErrService.Value.AddHelpIfKnownError(exWithHelp, page); var block = page.ExCtx.GetBlock(); var renderHelper = renderingHelperGenerator.New().Init(block); var nice = renderHelper.DesignErrorMessage([exWithHelp], true); helper.Add(exWithHelp); return nice; } internal bool ThrowPartialError => _throwPartialError.Get(() => featureSvc.Value.IsEnabled(SxcFeatures.RazorThrowPartial.NameId) || isSystemAdmin && featureSvc.Value.IsEnabled(SxcFeatures.RenderThrowPartialSystemAdmin.NameId)); private readonly GetOnce _throwPartialError = new(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/HtmlHelperTimeKeeper.cs ================================================ using System.Diagnostics; namespace ToSic.Sxc.Dnn.Razor; /// /// Helper to track the total time spent on each partial, especially when a partial is used many, many times (like in lists). /// internal class HtmlHelperTimeKeeper { public Dictionary Partials = new(); public Stopwatch Start(string partialName) { if (!Partials.TryGetValue(partialName, out var sw)) return Partials[partialName] = Stopwatch.StartNew(); sw.Start(); return sw; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/AssemblyDiskCacheService.cs ================================================ using System.Reflection; using ToSic.Eav.Apps; using ToSic.Eav.Apps.Sys.Paths; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sys.Configuration; using ISite = ToSic.Eav.Context.ISite; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Service for persisting and retrieving compiled Razor assemblies from disk cache. /// Implements disk-based caching layer below memory cache for improved restart performance. /// Delegates to shared AssemblyDiskCache for platform-neutral file operations. /// [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public class AssemblyDiskCacheService( LazySvc featureService, IGlobalConfiguration globalConfiguration, AssemblyDiskCache diskCache, AssemblyUtilities assemblyUtilities, AssemblyResolver assemblyResolver, IAppReaderFactory appReadFac, LazySvc appPathsLazy, ISite site) : ServiceBase("Dnn.AsmDskCch", connect: [featureService, globalConfiguration, diskCache, assemblyUtilities, assemblyResolver, appReadFac, appPathsLazy, site]), IAssemblyDiskCacheService { /// /// Attempts to load a cached assembly from disk for the specified template. /// public AssemblyResult TryLoadFromCache( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash, AssemblyResult appCodeDependency, CodeFileInfo codeFileInfo) { var l = Log.Fn($"app:{spec.AppId}, edition:{spec.Edition}, template:{templateRelativePath}", timer: true); // Generate cache key var cachePath = GetCacheFilePath(spec, templateRelativePath, contentHash, appCodeHash); // Ensure assembly resolver can provide AppCode dependencies when the cached assembly is loaded if (appCodeDependency?.Assembly != null) assemblyResolver.AddAssembly(appCodeDependency.Assembly, GetAppRelativePath(spec)); // Load assembly bytes from disk using shared cache service var assembly = diskCache.TryLoadFromCache( cachePath, loadAssembly: assemblyBytes => Assembly.Load(File.ReadAllBytes(assemblyBytes)), featureFlagCheck: IsEnabled); if (assembly == null) return l.ReturnNull(); try { // Create AssemblyResult with MainType and AppCodeDependency populated var className = assemblyUtilities.GetSafeClassName(templateRelativePath); var mainType = assemblyUtilities.FindMainType(assembly, className, isCshtml: true); if (mainType == null) { l.A($"Warning: Could not find main type {className} in assembly"); return l.ReturnNull(); } var result = new AssemblyResult(assembly) { MainType = mainType, AppCodeDependency = appCodeDependency }; return l.Return(result, "Cache hit - loaded from disk"); } catch (Exception ex) { l.Ex(ex); l.A("Error processing cached assembly - will trigger recompilation"); return l.ReturnNull(); } } /// /// Saves a compiled assembly to disk cache for future reuse. /// public bool TrySaveToCache( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash, AssemblyResult assemblyResult) { var l = Log.Fn($"app:{spec.AppId}, edition:{spec.Edition}, template:{templateRelativePath}", timer: true); // Generate cache key var cachePath = GetCacheFilePath(spec, templateRelativePath, contentHash, appCodeHash); // Get source assembly path var sourceAssemblyPath = assemblyResult.Assembly?.Location; // Delegate to shared disk cache service var saved = diskCache.TrySaveToCache( sourceAssemblyPath, cachePath, featureFlagCheck: IsEnabled); return saved ? l.ReturnTrue("saved") : l.ReturnFalse("failed"); } /// /// Builds the full cache file path for the given template/spec combination. /// public string GetCacheFilePath( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash) { var cacheKey = BuildCacheKey(spec, templateRelativePath, contentHash, appCodeHash); return cacheKey.GetFilePath(GetCacheDirectoryPath()); } private CacheKey BuildCacheKey(HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash) => new(spec.AppId, spec.Edition, templateRelativePath, contentHash, appCodeHash, GetAppRelativePath(spec)); private string GetAppRelativePath(HotBuildSpec spec) { if (spec.AppId <= 0) return string.Empty; return appPathsLazy.Value.Get(appReadFac.Get(spec.AppId), site).RelativePath; } /// /// Invalidates (deletes) cached assemblies for a specific template. /// public void InvalidateCache(string templateRelativePath, string edition, string appPath = null) { var l = Log.Fn($"template:{templateRelativePath}"); var cacheDir = GetCacheDirectoryPath(); var normalizedPath = CacheKey.NormalizePath(templateRelativePath, edition, appPath); var searchPattern = $"*-{normalizedPath}-*.dll"; var deletedCount = diskCache.InvalidateCache(cacheDir, searchPattern, SearchOption.AllDirectories); l.A($"Invalidated {deletedCount} cache files for template {templateRelativePath}"); l.Done(); } /// /// Invalidates all cached assemblies for a specific app and edition. /// public void InvalidateAppCache(int appId, string edition) { var l = Log.Fn($"app:{appId}, edition:{edition}"); var cacheDir = GetCacheDirectoryPath(); var appDir = Path.Combine(cacheDir, CacheKey.GetAppFolder(appId, edition)); var deletedCount = Directory.Exists(appDir) ? diskCache.InvalidateCache(appDir, "*.dll", SearchOption.AllDirectories) : 0; l.A($"Invalidated {deletedCount} cache files for app {appId} edition {edition}"); l.Done(); } /// /// Checks if disk caching is enabled based on feature flag. /// public bool IsEnabled() // Not cached - check on every call for runtime toggle support => featureService.Value.IsEnabled(Sxc.Sys.Configuration.SxcFeatures.RazorCacheCompiledToDisk.NameId); /// /// Gets the physical path to the cache directory. /// public string GetCacheDirectoryPath() // App_Data/2sxc.bin.cshtml => globalConfiguration.CshtmlAssemblyFolder(); /// /// Computes SHA256 hash of the given content string. /// /// /// SHA256 is FIPS-compliant and performant for typical template sizes. /// public string ComputeContentHash(string sourceCode) => diskCache.ComputeContentHash(sourceCode); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/AssemblyUtilities.cs ================================================ using System.Reflection; using System.Text; using System.CodeDom.Compiler; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Helper utilities for working with assemblies and class names. /// [PrivateApi] public class AssemblyUtilities() : ServiceBase("Dnn.RzAmUt") { internal const string DefaultNamespace = "RazorHost"; /// /// Find the main type in a generated assembly. /// internal Type FindMainType(Assembly generatedAssembly, string className, bool isCshtml) { var l = Log.Fn($"className: '{className}'; isCshtml: {isCshtml}", timer: true); if (generatedAssembly == null) return l.ReturnAsError(null, "generatedAssembly is null"); var mainType = generatedAssembly.GetType( isCshtml ? $"{DefaultNamespace}.{className}" : className, false, true); if (mainType != null) return l.ReturnAsOk(mainType); l.A("can't find MainType in standard way, fallback #1 - search by classname, ignoring namespace"); foreach (var mainTypeFallback1 in generatedAssembly.GetTypes()) if (mainTypeFallback1.Name.Equals(className, StringComparison.OrdinalIgnoreCase)) return l.ReturnAsOk(mainTypeFallback1); l.A("can't find mainTypeFallback1, fallback #2 - just return first type"); var mainTypeFallback2 = generatedAssembly.GetTypes().FirstOrDefault(); return l.ReturnAsOk(mainTypeFallback2); } /// /// Generate a safe class name from a template file path. /// internal string GetSafeClassName(string templateFullPath) { if (!string.IsNullOrWhiteSpace(templateFullPath)) return "RazorView" + GetSafeString(Path.GetFileNameWithoutExtension(templateFullPath)); return "RazorView" + Guid.NewGuid().ToString("N"); } private string GetSafeString(string input) { var safeChars = input.Where(c => char.IsLetterOrDigit(c) || c == '_').ToArray(); var safeString = new string(safeChars); if (!char.IsLetter(safeString.FirstOrDefault()) && safeString.FirstOrDefault() != '_') safeString = "_" + safeString; return safeString; } /// /// Format compiler errors into a readable error message. /// internal string FormatCompilerErrors(List errors) { var compileErrors = new StringBuilder(); foreach (var error in errors) compileErrors.AppendLine($"Line: {error.Line}, Column: {error.Column}, Error: {error.ErrorText}"); return compileErrors.ToString(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/CSharpCompilerService.cs ================================================ using Microsoft.CodeDom.Providers.DotNetCompilerPlatform; using System.CodeDom.Compiler; using System.Reflection; using ToSic.Sxc.Dnn.Compile; using ToSic.Sys.Caching; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Service responsible for compiling C# code files into assemblies. /// public class CSharpCompilerService( MemoryCacheService memoryCacheService, IAssemblyDiskCacheService diskCacheService) : ServiceBase("Dnn.CsCmpSvc", connect: [memoryCacheService, diskCacheService]) { private const string CSharpCodeProviderCacheKey = "Sxc-Dnn-CSharpCodeProvider"; private const int CSharpCodeProviderCacheMinutes = 5; /// /// Compiles C# source code into an assembly. /// public (Assembly Assembly, List Errors) Compile( string sourceCode, List referencedAssemblies, string outputAssemblyPath = null) { var l = Log.Fn<(Assembly, List)>(timer: true, parameters: $"sourceCode: {sourceCode.Length} chars"); var lTimer = Log.Fn("Compiler Params", timer: true); var compilerParameters = CreateCompilerParameters(referencedAssemblies, outputAssemblyPath); lTimer.Done(); var compiler = GetCSharpCodeProvider(); lTimer = Log.Fn("Compile", timer: true); var compilerResults = compiler.CompileAssemblyFromSource(compilerParameters, sourceCode); lTimer.Done(); if (compilerResults.Errors.Count <= 0) return l.ReturnAsOk((compilerResults.CompiledAssembly, null)); var errorList = compilerResults.Errors.Cast().Where(e => !e.IsWarning).ToList(); return (!errorList.Any()) ? l.ReturnAsOk((compilerResults.CompiledAssembly, null)) : l.ReturnAsError((null, errorList), "error"); } private CSharpCodeProvider GetCSharpCodeProvider() { var l = Log.Fn(timer: true); if (memoryCacheService.TryGet(CSharpCodeProviderCacheKey, out var fromCache)) return l.Return(fromCache, "from cached"); var codeProvider = new CSharpCodeProvider(); memoryCacheService.Set(CSharpCodeProviderCacheKey, codeProvider, p => p.SetSlidingExpiration(CSharpCodeProviderCacheMinutes * 60)); return l.Return(codeProvider, "created new and cached"); } private CompilerParameters CreateCompilerParameters(List referencedAssemblies, string outputAssemblyPath) { var compilerParameters = new CompilerParameters([.. referencedAssemblies]) { GenerateInMemory = !diskCacheService.IsEnabled() && string.IsNullOrEmpty(outputAssemblyPath), IncludeDebugInformation = true, TreatWarningsAsErrors = false, CompilerOptions = DnnRoslynConstants.CompilerOptions, }; if (diskCacheService.IsEnabled() && outputAssemblyPath.HasValue()) { var outDir = Path.GetDirectoryName(outputAssemblyPath); if (outDir.HasValue()) Directory.CreateDirectory(outDir); compilerParameters.OutputAssembly = outputAssemblyPath; compilerParameters.TempFiles = new TempFileCollection(EnsureTempDir()); } return compilerParameters; } private string EnsureTempDir() { var cacheRoot = diskCacheService.GetCacheDirectoryPath(); var tempDir = Path.Combine(cacheRoot, "temp"); if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir); return tempDir; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/CacheKey.cs ================================================ namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Value object representing a disk cache key for compiled Razor assemblies. /// Immutable structure containing all components needed for cache lookup and invalidation. /// /// /// Thread-safe by design (immutable). /// public sealed class CacheKey : IEquatable { /// /// Application identifier /// public int AppId { get; } /// /// App edition (e.g., "live", "staging"). Never null; defaults to "root" if not provided. /// public string Edition { get; } /// /// Normalized template path (sanitized relative path + hash for uniqueness). /// public string NormalizedPath { get; } /// /// SHA256 hash of template source code content /// public string ContentHash { get; } /// /// SHA256 hash of AppCode assembly (includes version info) /// public string AppCodeHash { get; } /// /// Creates a new cache key with the specified components. /// public CacheKey(int appId, string edition, string templatePath, string contentHash, string appCodeHash, string appPath = default) { if (appId <= 0) throw new ArgumentException("AppId must be positive", nameof(appId)); if (string.IsNullOrWhiteSpace(templatePath)) throw new ArgumentNullException(nameof(templatePath)); if (string.IsNullOrWhiteSpace(contentHash)) throw new ArgumentNullException(nameof(contentHash)); if (string.IsNullOrWhiteSpace(appCodeHash)) throw new ArgumentNullException(nameof(appCodeHash)); var normalizedEdition = CacheKeyPathUtils.NormalizeEdition(edition); AppId = appId; Edition = normalizedEdition; NormalizedPath = CacheKeyPathUtils.NormalizePath(templatePath, normalizedEdition, appPath); ContentHash = contentHash; AppCodeHash = appCodeHash; } /// /// Generates the cache key file name in the format: /// {normalizedPath}-{contentHash}-{appCodeHash}.dll /// /// /// views-default-cshtml-6995bfe9-a1b2c3-x9y8z7.dll /// public override string ToString() { // Truncate hashes to first 6 characters for readability var contentHashShort = ContentHash.Length > 6 ? ContentHash.Substring(0, 6) : ContentHash; var appCodeHashShort = AppCodeHash.Length > 6 ? AppCodeHash.Substring(0, 6) : AppCodeHash; return $"{NormalizedPath}-{contentHashShort}-{appCodeHashShort}.dll"; } /// /// Gets the full file system path for this cache key in the specified directory. /// /// Root cache directory path /// Full path to the cached DLL file public string GetFilePath(string cacheDirectory) { if (!cacheDirectory.HasValue()) throw new ArgumentNullException(nameof(cacheDirectory)); var directory = Path.Combine(cacheDirectory, CacheKeyPathUtils.GetAppFolder(AppId, Edition)); return Path.Combine(directory, ToString()); } /// /// Normalizes a template path for use in cache keys. /// /// Original template path (may have mixed case, forward/back slashes) /// Edition segment used to remove the app root portion /// app path /// Normalized path combining the sanitized relative path (trimmed to the app/edition scope) and an 8-character hash /// /// Input: "Views/Default.cshtml" → Output: "views-default-cshtml-6995bfe9" /// public static string NormalizePath(string templatePath, string edition, string appPath = default) => CacheKeyPathUtils.NormalizePath(templatePath, edition, appPath); // API compatibility: keep existing callers working internal static string GetAppFolder(int appId, string edition) => CacheKeyPathUtils.GetAppFolder(appId, edition); #region Equality Members public bool Equals(CacheKey other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return AppId == other.AppId && Edition == other.Edition && NormalizedPath == other.NormalizedPath && ContentHash == other.ContentHash && AppCodeHash == other.AppCodeHash; } public override bool Equals(object obj) => ReferenceEquals(this, obj) || obj is CacheKey other && Equals(other); /// /// Provide a fast, well-distributed hash for CacheKey so it can be used in hash-based collections (Dictionary, HashSet) consistent with Equals. /// /// public override int GetHashCode() { // How it works: // - Seeds with AppId(an int), then mixes in all other fields with a prime multiplier 397 and XOR. // - unchecked avoids overflow exceptions during arithmetic(overflow is fine for hash codes). // - Uses all identity fields: AppId, Edition, NormalizedPath, ContentHash, AppCodeHash. // This matches the Equals implementation, preserving the contract: equal objects must produce equal hash codes. unchecked { var hashCode = AppId; hashCode = (hashCode * 397) ^ Edition.GetHashCode(); hashCode = (hashCode * 397) ^ NormalizedPath.GetHashCode(); hashCode = (hashCode * 397) ^ ContentHash.GetHashCode(); hashCode = (hashCode * 397) ^ AppCodeHash.GetHashCode(); return hashCode; } } public static bool operator ==(CacheKey left, CacheKey right) => Equals(left, right); public static bool operator !=(CacheKey left, CacheKey right) => !Equals(left, right); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/CacheKeyPathUtils.cs ================================================ using System.Security.Cryptography; using System.Text; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Internal helper for computing normalized cache key path segments and hashes. /// Extracted from to keep the class small and SRP-focused. /// internal static class CacheKeyPathUtils { internal const string RootEdition = "root"; internal static string NormalizePath(string templatePath, string edition, string appPath = null) { if (!templatePath.HasValue()) throw new ArgumentNullException(nameof(templatePath)); var normalizedTemplatePath = NormalizePathInt(templatePath); // lower-case, forward slashes, trimmed var normalizedEdition = NormalizeEdition(edition); var normalizedAppPath = NormalizePathInt(appPath); var trimmedForAppScope = TrimToAppScope(normalizedTemplatePath, normalizedEdition, normalizedAppPath); var sanitizedFullPath = SanitizeRelativePath(trimmedForAppScope); var hash = ComputePathHash(normalizedTemplatePath); return $"{sanitizedFullPath}-{hash}"; } internal static string GetAppFolder(int appId, string edition) => $"{appId:0000}-{NormalizeEdition(edition)}"; internal static string NormalizeEdition(string edition) => edition.HasValue() ? SanitizeSegment(edition, RootEdition) : RootEdition; private static string SanitizeSegment(string value, string fallback) { if (!value.HasValue()) return fallback; var invalidChars = Path.GetInvalidFileNameChars(); var cleaned = new string(value.Select(ch => invalidChars.Contains(ch) ? '-' : ch).ToArray()); return cleaned.HasValue() ? cleaned : fallback; } private static string SanitizeRelativePath(string normalizedPath) { var sanitized = normalizedPath .Replace('/', '-') .Replace('\\', '-') .Replace(".cshtml", "-cshtml") .Replace('.', '-') .Replace(' ', '-') .Trim('-'); return SanitizeSegment(sanitized, "template"); } private static string ComputePathHash(string normalizedPath) { var bytes = Encoding.UTF8.GetBytes(normalizedPath); using var sha256 = SHA256.Create(); var hashBytes = sha256.ComputeHash(bytes); var hash = BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant(); return hash.Substring(0, 8); } private static string NormalizePathInt(string path) { if (!path.HasValue()) return null; return path .ForwardSlash() .Trim('/') .ToLowerInvariant(); } private static string TrimToAppScope(string templatePath, string edition, string appPath) { var pathInAppScope = TrimAppRoot(templatePath, appPath); if (edition.HasValue() && !string.Equals(edition, RootEdition, StringComparison.Ordinal)) { var editionPrefix = $"{edition}/"; if (pathInAppScope.StartsWith(editionPrefix, StringComparison.Ordinal)) return pathInAppScope.Substring(editionPrefix.Length); var editionSegment = $"/{edition}/"; var editionIndex = pathInAppScope.IndexOf(editionSegment, StringComparison.Ordinal); if (editionIndex >= 0) return pathInAppScope.Substring(editionIndex + editionSegment.Length); var editionSuffix = $"/{edition}"; if (string.Equals(pathInAppScope, edition, StringComparison.Ordinal) || pathInAppScope.EndsWith(editionSuffix, StringComparison.Ordinal)) return string.Empty; } return pathInAppScope; } private static string TrimAppRoot(string templatePath, string appPath) { if (appPath.HasValue()) { if (templatePath.StartsWith(appPath + "/", StringComparison.Ordinal)) return templatePath.Substring(appPath.Length + 1); if (string.Equals(templatePath, appPath, StringComparison.Ordinal)) return string.Empty; } // fallback const string marker = "/2sxc/"; var markerIndex = templatePath.IndexOf(marker, StringComparison.Ordinal); if (markerIndex < 0) return templatePath; var appFolderStart = markerIndex + marker.Length; var appFolderEnd = templatePath.IndexOf('/', appFolderStart); if (appFolderEnd < 0) return templatePath; // Remove everything up to and including the app folder so the remaining path starts at the edition or deeper folders. return templatePath.Substring(appFolderEnd + 1); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/DnnRazorCompiler.cs ================================================ using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Web; using System.Web.Compilation; using ToSic.Eav.Apps.Sys.AppJson; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Compile; using ToSic.Sxc.Dnn.Compile.Sys; using ToSic.Sxc.Engines; using ToSic.Sxc.Engines.Sys; using ToSic.Sxc.Render.Sys.Specs; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Caching.PiggyBack; using ToSic.Sys.Exceptions; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// The Razor compiler for Razor templates. /// It's used in ca. 3 scenarios: /// /// 1. Render the main razor template of a module - in this case there is no `data` /// - it may use Roslyn or the built-in compiler /// 2. It's then attached to the CodeApiService as a piggyback, so it can be used to render sub-components /// 3. Render sub-components which need Roslyn /// but exit early if Roslyn isn't necessary because of problems /// with `data` being in `PageData` of the RazorComponent. /// [PrivateApi("used to be InternalApi_DoNotUse_MayChangeWithoutNotice till v16.09")] [EngineDefinition(Name = "Razor")] [ShowApiWhenReleased(ShowApiMode.Never)] // ReSharper disable once UnusedMember.Global internal class DnnRazorCompiler( IExecutionContextFactory exCtxFactory, LazySvc errorHelp, LazySvc sourceAnalyzer, LazySvc roslynBuildManager, LazySvc appJson) : ServiceBase("Dnn.RzComp", connect: [exCtxFactory, errorHelp, sourceAnalyzer, roslynBuildManager, appJson]) { protected HotBuildSpec HotBuildSpecs; [PrivateApi] protected IBlock Block; internal void SetupCompiler(EngineSpecs engineSpecs) { HotBuildSpecs = engineSpecs.ToHotBuildSpec(); Block = engineSpecs.Block; } [PrivateApi] private HttpContextBase HttpContextCurrent => _httpContext.Get(() => HttpContext.Current.NullOrGetWith(h => new HttpContextWrapper(h))); private readonly GetOnce _httpContext = new(); [PrivateApi] internal (TextWriter writer, List exceptions) Render(RazorComponentBase page, TextWriter writer, RenderSpecs renderSpecs) { var l = Log.Fn<(TextWriter writer, List exception)>(message: "will render into TextWriter"); try { if (page is ISetDynamicModel setDyn) setDyn.SetDynamicModel(renderSpecs); } catch (Exception e) { l.Ex("Problem with setting dynamic model, error will be ignored.", e); } try { var webPageContext = new WebPageContext(HttpContextCurrent, page, renderSpecs.Data); page.ExecutePageHierarchy(webPageContext, writer, page); } catch (Exception maybeIEntityCast) { var ex = l.Ex(errorHelp.Value.AddHelpIfKnownError(maybeIEntityCast, page)); // Special form of throw to preserve details about the call stack ExceptionDispatchInfo.Capture(ex).Throw(); throw; // fake throw, just so the code shows what happens } return l.Return((writer, page.RzrHlp.ExceptionsOrNull)); } private (TextWriter writer, List exceptions) RenderImplementation(RazorComponentBase webpage, RenderSpecs specs) { ILogCall<(TextWriter writer, List exceptions)> l = Log.Fn<(TextWriter, List)>(); var writer = new StringWriter(); var result = Render(webpage, writer, specs); return l.ReturnAsOk(result); } private RazorBuildTempResult CreateWebPageInstance(string templatePath) { var l = Log.Fn>(templatePath); object page = null; Type compiledType; // TODO: @STV SHOULD OPTIMIZE so the file doesn't need to read multiple times var codeFileInfo = sourceAnalyzer.Value.TypeOfVirtualPath(templatePath); var useHotBuild = appJson.Value.DnnCompilerAlwaysUseRoslyn(HotBuildSpecs.AppId) || codeFileInfo.IsHotBuildSupported(); l.A($"{nameof(HotBuildSpecs)} prepare spec: {HotBuildSpecs}; {nameof(useHotBuild)}: {useHotBuild}"); try { compiledType = useHotBuild ? roslynBuildManager.Value.GetCompiledType(codeFileInfo, HotBuildSpecs) : BuildManager.GetCompiledType(templatePath); } catch (Exception compileEx) { // TODO: ADD MORE compile error help // 1. Read file // 2. Try to find base type - or warn if not found // 3. ... l.A($"Razor Type: {codeFileInfo}"); var ex = l.Ex(errorHelp.Value.AddHelpForCompileProblems(compileEx, codeFileInfo)); // Special form of throw to preserve details about the call stack ExceptionDispatchInfo.Capture(ex).Throw(); throw; // fake throw, just so the code shows what happens } try { if (compiledType == null) return l.ReturnNull("type not found"); page = TypeFactory.CreateInstance(compiledType); var pageObjectValue = RuntimeHelpers.GetObjectValue(page); // seems to do unboxing, why??? return l.ReturnAsOk(new(pageObjectValue, useHotBuild)); } catch (Exception createInstanceException) { var ex = l.Ex(errorHelp.Value.AddHelpIfKnownError(createInstanceException, page)); // Special form of throw to preserve details about the call stack ExceptionDispatchInfo.Capture(ex).Throw(); throw; // fake throw, just so the code shows what happens } } public RazorBuildTempResult InitWebpage(string templatePath, bool exitIfNoHotBuild) { var l = Log.Fn>(); if (string.IsNullOrEmpty(templatePath)) return l.ReturnNull("null path"); // Try to build, but exit if we don't use HotBuild var razorBuild = CreateWebPageInstance(templatePath); if (exitIfNoHotBuild && !razorBuild.UsesHotBuild) return l.Return(new(null, false)); var objectValue = RuntimeHelpers.GetObjectValue(razorBuild.Instance); // ReSharper disable once JoinNullCheckWithUsage if (objectValue == null) throw new InvalidOperationException($"The webpage found at '{templatePath}' was not created."); if (objectValue is not RazorComponentBase pageToInit) throw new ExceptionWithHelp(HelpDbRazor.AutoInheritsMissingAfterV20, new InvalidOperationException($"The webpage at '{templatePath}' must derive from RazorComponentBase.")); pageToInit.Context = HttpContextCurrent; pageToInit.VirtualPath = templatePath; InitHelpers(pageToInit); return l.ReturnAsOk(new(pageToInit, razorBuild.UsesHotBuild)); } private void InitHelpers(RazorComponentBase webPage) { var l = Log.Fn(); // Only generate this for the first / top EntryRazorComponent // All children which are then generated here should re-use that CodeApiService if (_sharedCodeApiService == null) { _sharedCodeApiService = exCtxFactory.New(new() { OwnerOrNull = webPage, BlockOrNull = Block, ParentLog = Log, CompatibilityFallback = CompatibilityLevels.CompatibilityLevel9Old, }); // Since we just created a new CodeApiService, we must add this razor engine to it's piggyback _sharedCodeApiService.GetPiggyBack(nameof(DnnRazorCompiler), () => this); } webPage.ConnectToRoot(_sharedCodeApiService); l.Done(); } /// /// Reused CodeApiService for all Razor pages. /// private IExecutionContext _sharedCodeApiService; #region Helpers for Rendering Sub-Components internal record PrepToExecute( string BestPath, RazorBuildTempResult SubPage, DnnRazorCompiler Compiler); internal static PrepToExecute PrepareForRoslyn(RazorComponentBase parent, string templatePath, object data) { var l = (parent as IHasLog).Log.Fn(); // Find the RazorEngine which MUST be on the CodeApiService PiggyBack, or throw an error var razorCompiler = parent.ExCtx.PiggyBack.GetOrGenerate(nameof(DnnRazorCompiler), DnnRazorCompiler () => null) ?? throw l.Ex(new Exception($"Error finding {nameof(DnnRazorCompiler)}. This is very unexpected.")); var subPage = razorCompiler.InitWebpage(templatePath, true); return l.Return(new(templatePath, subPage, razorCompiler)); } internal static RazorBuildTempResult ExecuteWithRoslyn(PrepToExecute preparations, RazorComponentBase parent, RenderSpecs renderSpecs) { var l = (parent as IHasLog).Log.Fn>(); var (writer, exceptions) = preparations.Compiler.RenderImplementation(preparations.SubPage.Instance, renderSpecs); // Log any exceptions which may have occurred if (exceptions.SafeAny()) exceptions.ForEach(e => l.Ex(e)); return l.ReturnAsOk(new(new(w => w.Write(writer)), true)); } internal static RazorBuildTempResult RenderPartialWithRoslyn(RazorComponentBase parent, string templatePath, object data, RenderSpecs renderSpecs) { var l = (parent as IHasLog).Log.Fn>(); // Find the RazorEngine which MUST be on the CodeApiService PiggyBack, or throw an error var razorCompiler = parent.ExCtx.PiggyBack.GetOrGenerate(nameof(DnnRazorCompiler), DnnRazorCompiler () => null) ?? throw l.Ex(new Exception($"Error finding {nameof(DnnRazorCompiler)}. This is very unexpected.")); // Figure out the real path, and make sure it's lower case // so the ID in a cache remains the same no matter how it was called var path = parent.NormalizePath(templatePath).ToLowerInvariant(); var subPage = razorCompiler.InitWebpage(path, true); // Exit if we don't use HotBuild, because then we must revert back to classic render // Reason is that otherwise the PageData property - used on very old classes - would not be populated // Doing this from our compiler is super-hard, because it would use a lot of internal Microsoft APIs if (!subPage.UsesHotBuild) return l.Return(new(null, false), "exit, not HotBuild"); var (writer, exceptions) = razorCompiler.RenderImplementation(subPage.Instance, renderSpecs); // Log any exceptions which may have occurred if (exceptions.SafeAny()) exceptions.ForEach(e => l.Ex(e)); return l.ReturnAsOk(new(new(w => w.Write(writer)), true)); } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/IAssemblyDiskCacheService.cs ================================================ using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Abstraction for persisting compiled assemblies for Razor/code files. /// public interface IAssemblyDiskCacheService { /// /// Attempts to load a cached assembly from disk for the specified template. /// AssemblyResult TryLoadFromCache( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash, AssemblyResult appCodeDependency, CodeFileInfo codeFileInfo); /// /// Saves a compiled assembly to disk cache for future reuse. /// bool TrySaveToCache( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash, AssemblyResult assemblyResult); /// /// Builds the full cache file path for the given template/spec combination. /// string GetCacheFilePath( HotBuildSpec spec, string templateRelativePath, string contentHash, string appCodeHash); /// /// Invalidates cached assemblies for a specific template path / edition combination. /// void InvalidateCache(string templateRelativePath, string edition, string appPath = null); /// /// Invalidates (deletes) cached assemblies for a specific app and edition. /// void InvalidateAppCache(int appId, string edition); /// /// Checks if disk caching is enabled based on feature flag. /// bool IsEnabled(); /// /// Gets the physical path to the cache directory. /// string GetCacheDirectoryPath(); /// /// Computes SHA256 hash of the given content string. /// string ComputeContentHash(string sourceCode); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/ICanUseRoslynCompiler.cs ================================================  namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Marker interface so the system knows that this is a Razor file which can use Roslyn compiler /// internal interface ICanUseRoslynCompiler; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/RazorBuildTempResult.cs ================================================ namespace ToSic.Sxc.Dnn.Razor.Sys; internal class RazorBuildTempResult(T instance, bool usesHotBuild) { public T Instance { get; set; } = instance; public bool UsesHotBuild { get; set; } = usesHotBuild; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/RazorCompilerService.cs ================================================ using Microsoft.CodeDom.Providers.DotNetCompilerPlatform; using System.CodeDom.Compiler; using System.Reflection; using System.Text.RegularExpressions; using System.Web.Razor; using System.Web.Razor.Generator; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Dnn.Compile; using ToSic.Sys.Caching; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Service responsible for compiling Razor templates (.cshtml) into assemblies. /// public class RazorCompilerService( MemoryCacheService memoryCacheService, IAssemblyDiskCacheService diskCacheService) : ServiceBase("Dnn.RzrCmpSvc", connect: [memoryCacheService, diskCacheService]) { private const string FallbackBaseClass = "System.Web.WebPages.WebPageBase"; private const string CSharpCodeProviderCacheKey = "Sxc-Dnn-CSharpCodeProvider"; private const int CSharpCodeProviderCacheMinutes = 5; internal const string DefaultNamespace = "RazorHost"; /// /// Compiles Razor source code into an assembly. /// public (Assembly Assembly, List Errors) Compile( string sourceCode, List referencedAssemblies, string className, string sourceFileName, string outputAssemblyPath = null) { var l = Log.Fn<(Assembly, List)>(timer: true, parameters: $"sourceCode: {sourceCode.Length} chars"); var baseClass = FindBaseClass(sourceCode); l.A($"Base class: {baseClass}"); var engine = CreateRazorTemplateEngine(className, baseClass, DefaultNamespace); // Generate C# code from Razor template var lTimer = Log.Fn("Generate Code", timer: true); using var reader = new StringReader(sourceCode); var razorResults = engine.GenerateCode(reader, className, DefaultNamespace, sourceFileName); lTimer.Done(); // Compile the template into an assembly var compiler = GetCSharpCodeProvider(); lTimer = Log.Fn("Compile", timer: true); var compilerParameters = CreateCompilerParameters(referencedAssemblies, outputAssemblyPath); var compilerResults = compiler.CompileAssemblyFromDom(compilerParameters, razorResults.GeneratedCode); lTimer.Done(); if (compilerResults.Errors.Count <= 0) return l.ReturnAsOk((compilerResults.CompiledAssembly, null)); var errorList = compilerResults.Errors.Cast().Where(e => !e.IsWarning).ToList(); return (!errorList.Any()) ? l.ReturnAsOk((compilerResults.CompiledAssembly, null)) : l.ReturnAsError((null, errorList), "error"); } private string FindBaseClass(string template) { var l = Log.Fn($"template: {template.Length} chars"); try { var inheritsMatch = Regex.Match(template, @"@inherits\s+(?[\w\.]+)", RegexOptions.Multiline); if (!inheritsMatch.Success) return l.Return(FallbackBaseClass, $"no @inherits found, fallback to '{FallbackBaseClass}'"); var baseClass = inheritsMatch.Groups["BaseName"].Value; if (baseClass.IsEmptyOrWs()) return l.Return(FallbackBaseClass, $"@inherits empty string, fallback to '{FallbackBaseClass}'"); return l.ReturnAsOk(baseClass); } catch (Exception ex) { l.Ex(ex); return l.ReturnAsError(FallbackBaseClass, "error"); } } private RazorTemplateEngine CreateRazorTemplateEngine(string className, string baseClass, string defaultNamespace) { var l = Log.Fn($"className: '{className}'; baseClass: '{baseClass}'", timer: true); var host = new RazorEngineHost(new CSharpRazorCodeLanguage()) { DefaultBaseClass = baseClass, DefaultClassName = className, DefaultNamespace = defaultNamespace }; var context = new GeneratedClassContext( "Execute", "Write", "WriteLiteral", "WriteTo", "WriteLiteralTo", typeof(HelperResult).FullName, "DefineSection") { ResolveUrlMethodName = "ResolveUrl" }; host.GeneratedClassContext = context; // add implicit usings foreach (var ns in ImplicitUsings.ForRazor) host.NamespaceImports.Add(ns); var engine = new RazorTemplateEngine(host); return l.ReturnAsOk(engine); } private CSharpCodeProvider GetCSharpCodeProvider() { var l = Log.Fn(timer: true); if (memoryCacheService.TryGet(CSharpCodeProviderCacheKey, out var fromCache)) return l.Return(fromCache, "from cached"); var codeProvider = new CSharpCodeProvider(); memoryCacheService.Set(CSharpCodeProviderCacheKey, codeProvider, p => p.SetSlidingExpiration(CSharpCodeProviderCacheMinutes * 60)); return l.Return(codeProvider, "created new and cached"); } private CompilerParameters CreateCompilerParameters(List referencedAssemblies, string outputAssemblyPath) { var compilerParameters = new CompilerParameters([.. referencedAssemblies]) { GenerateInMemory = !diskCacheService.IsEnabled() && string.IsNullOrEmpty(outputAssemblyPath), IncludeDebugInformation = true, TreatWarningsAsErrors = false, CompilerOptions = DnnRoslynConstants.CompilerOptions, }; if (diskCacheService.IsEnabled() && !string.IsNullOrEmpty(outputAssemblyPath)) { var outDir = Path.GetDirectoryName(outputAssemblyPath); if (outDir.HasValue()) Directory.CreateDirectory(outDir); compilerParameters.OutputAssembly = outputAssemblyPath; compilerParameters.TempFiles = new TempFileCollection(EnsureTempDir()); } return compilerParameters; } private string EnsureTempDir() { var cacheRoot = diskCacheService.GetCacheDirectoryPath(); var tempDir = Path.Combine(cacheRoot, "temp"); if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir); return tempDir; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/RoslynBuildManager.cs ================================================ using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Compile; using ToSic.Sys.Locking; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Coordinates Razor compilation by delegating heavy work to . /// Ensures caching/locking concerns stay isolated. /// public class RoslynBuildManager( TemplateCacheService cacheService, RoslynCompilationRunner compilationRunner) : ServiceBase("Dnn.RoslynBuildManager", connect: [cacheService, compilationRunner]), IRoslynBuildManager { private static readonly NamedLocks CompileAssemblyLocks = new(); /// /// Manage template compilations, cache the assembly and return the generated type. /// public Type GetCompiledType(CodeFileInfo codeFileInfo, HotBuildSpec spec) => GetCompiledAssembly(codeFileInfo, null, spec)?.MainType; public AssemblyResult GetCompiledAssembly(CodeFileInfo codeFileInfo, string className, HotBuildSpec spec) { var l = Log.Fn($"{codeFileInfo}; {spec};"); var lockObject = CompileAssemblyLocks.Get(codeFileInfo.FullPath!); var cachedResult = cacheService.TryGetFromCache(codeFileInfo, spec); var cacheMissLogged = false; var (result, generated, message) = new TryLockTryDo(lockObject).Call( conditionToGenerate: ShouldGenerate, generator: () => compilationRunner.Compile(codeFileInfo, className, spec), cacheOrFallback: CacheOrFallback); if (!generated) LogCacheFallback(result, message, codeFileInfo, l); return l.Return(result, message); AssemblyResult CacheOrFallback() => cachedResult ?? cacheService.TryGetFromCache(codeFileInfo, spec); bool ShouldGenerate() { if (cachedResult?.MainType != null) return false; cachedResult = cacheService.TryGetFromCache(codeFileInfo, spec); if (cachedResult?.MainType != null) return false; if (!cacheMissLogged) { l.A("Cache miss - will compile template"); cacheMissLogged = true; } return true; } } private static void LogCacheFallback(AssemblyResult result, string message, CodeFileInfo codeFileInfo, ILog l) { l.A("Object retrieved from cache during lock wait"); l.A($"{nameof(result)}: {result}"); l.A($"{nameof(result.MainType)}: {result?.MainType}"); l.A($"{nameof(result.HasAssembly)}: {result?.HasAssembly}"); l.A($"{nameof(message)}: {message}"); l.A($"{nameof(codeFileInfo)}: {codeFileInfo}"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/RoslynCacheFallbackHandler.cs ================================================ using System.CodeDom.Compiler; using System.Reflection; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Handles reuse of existing assemblies when the compiler cannot overwrite locked files. /// public class RoslynCacheFallbackHandler( IAssemblyDiskCacheService diskCacheService, TemplateCacheService cacheService, AssemblyDiskCache diskCache) : ServiceBase("Dnn.RzCacheFb", connect: [diskCacheService, cacheService, diskCache]) { public AssemblyResult TryUseExisting( CodeFileInfo codeFileInfo, HotBuildSpec spec, string className, bool isCshtml, string contentHash, TemplateCacheService.AppCodeCacheInfo appCodeInfo, string outputAssemblyPath, List errors, AssemblyResult appCodeAssemblyResult, Func createResult) { var l = Log.Fn(timer: true); if (errors == null || !IsWriteLockError(errors)) return l.ReturnNull(); var cached = diskCacheService.TryLoadFromCache( spec, codeFileInfo.RelativePath, contentHash, appCodeInfo.Hash, appCodeInfo.AssemblyResult, codeFileInfo); if (cached != null) { l.A($"Compiler couldn't write to '{outputAssemblyPath}' (locked). Using cached assembly (hash match)."); cacheService.AddToCache(codeFileInfo, spec, cached, contentHash, appCodeInfo.Hash, appCodeInfo.AssemblyResult); return l.ReturnAsOk(cached); } if (!outputAssemblyPath.HasValue() || !File.Exists(outputAssemblyPath) || !diskCacheService.IsEnabled()) return l.ReturnNull(); l.A($"Attempting to load locked assembly directly from '{outputAssemblyPath}'."); Assembly loaded; try { loaded = diskCache.LoadWithRetry( outputAssemblyPath, loadAssembly: path => Assembly.Load(File.ReadAllBytes(path))); } catch (Exception ex) { Log.Ex(ex); l.E($"Failed to load locked assembly '{outputAssemblyPath}' via retry helper: {ex.Message}"); return l.ReturnNull(); } //// ReSharper disable once ConditionIsAlwaysTrueOrFalse //if (loaded == null) // return l.ReturnNull(); var result = createResult(loaded); cacheService.AddToCache(codeFileInfo, spec, result, contentHash, appCodeInfo.Hash, appCodeInfo.AssemblyResult); l.A($"Loaded locked assembly from '{outputAssemblyPath}' after write error."); return l.ReturnAsOk(result); } private static bool IsWriteLockError(IEnumerable errors) => errors.Where(e => !e.IsWarning).Any(error => string.Equals(error.ErrorNumber, "CS0016", StringComparison.OrdinalIgnoreCase) || error.ErrorText?.IndexOf("because it is being used by another process", StringComparison.OrdinalIgnoreCase) >= 0 || (error.ErrorText?.IndexOf("Cannot open", StringComparison.OrdinalIgnoreCase) >= 0 && error.ErrorText?.IndexOf("for writing", StringComparison.OrdinalIgnoreCase) >= 0)); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/RoslynCompilationRunner.cs ================================================ using System.Reflection; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Compile; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Handles the heavy lifting of compiling Razor templates and managing cache fallbacks. /// Keeps small and focused on orchestration. /// public class RoslynCompilationRunner( TemplateCacheService cacheService, RazorCompilerService razorCompiler, CSharpCompilerService csharpCompiler, IAssemblyDiskCacheService diskCacheService, IReferencedAssembliesProvider referencedAssembliesProvider, AssemblyUtilities assemblyUtilities, AssemblyResolver assemblyResolver, LazySvc appCodeLoader, RoslynCacheFallbackHandler fallbackHandler) : ServiceBase("Dnn.RzCmpRun", connect: [cacheService, razorCompiler, csharpCompiler, diskCacheService, referencedAssembliesProvider, assemblyUtilities, assemblyResolver, appCodeLoader, fallbackHandler]) { public AssemblyResult Compile(CodeFileInfo codeFileInfo, string className, HotBuildSpec spec) { var l = Log.Fn($"{codeFileInfo}; {spec};", timer: true); var appCodeInfo = cacheService.GetAppCodeCacheInfo(spec); var (referencedAssemblies, appCodeAssemblyResult) = GetReferencedAssemblies(codeFileInfo, spec, appCodeInfo.AssemblyResult); var contentHash = diskCacheService.ComputeContentHash(codeFileInfo.SourceCode); var outputAssemblyPath = GetOutputAssemblyPath(codeFileInfo, spec, contentHash, appCodeInfo.Hash); var pathLowerCase = codeFileInfo.RelativePath!.ToLowerInvariant(); var isCshtml = pathLowerCase.EndsWith(SourceCodeConstants.CsHtmlFileExtension, StringComparison.OrdinalIgnoreCase); if (isCshtml) className = assemblyUtilities.GetSafeClassName(codeFileInfo.FullPath); l.A($"Compiling template. Class: {className}; IsCshtml: {isCshtml}; Output: {outputAssemblyPath}"); var (generatedAssembly, errors) = isCshtml ? razorCompiler.Compile(codeFileInfo.SourceCode, referencedAssemblies, className, codeFileInfo.FullPath, outputAssemblyPath) : csharpCompiler.Compile(codeFileInfo.SourceCode, referencedAssemblies, outputAssemblyPath); if (generatedAssembly == null) { var fallback = fallbackHandler.TryUseExisting( codeFileInfo, spec, className, isCshtml, contentHash, appCodeInfo, outputAssemblyPath, errors, appCodeAssemblyResult, assembly => CreateAssemblyResult(assembly, className, isCshtml, codeFileInfo, appCodeAssemblyResult)); if (fallback != null) return l.ReturnAsOk(fallback); throw l.Ex(new Exception( $"Found {errors.Count} errors compiling '{codeFileInfo.FullPath}' " + $"(length: {codeFileInfo.SourceCode!.Length}, lines: {codeFileInfo.SourceCode.Split('\n').Length}): " + $"{assemblyUtilities.FormatCompilerErrors(errors)}") ); } var assemblyResult = CreateAssemblyResult(generatedAssembly, className, isCshtml, codeFileInfo, appCodeAssemblyResult); cacheService.AddToCache(codeFileInfo, spec, assemblyResult, contentHash, appCodeInfo.Hash, appCodeAssemblyResult); return l.ReturnAsOk(assemblyResult); } private string GetOutputAssemblyPath(CodeFileInfo codeFileInfo, HotBuildSpec spec, string contentHash, string appCodeHash) { var l = Log.Fn(timer: true); if (!diskCacheService.IsEnabled()) return l.ReturnNull(); var outputPath = diskCacheService.GetCacheFilePath(spec, codeFileInfo.RelativePath, contentHash, appCodeHash); if (!outputPath.HasValue()) return l.ReturnNull($"{nameof(outputPath)} is null/empty"); var directoryName = Path.GetDirectoryName(outputPath); if (directoryName.HasValue()) Directory.CreateDirectory(directoryName!); return l.ReturnAsOk(outputPath); } private (List, AssemblyResult) GetReferencedAssemblies(CodeFileInfo codeFileInfo, HotBuildSpec spec, AssemblyResult preloadedAppCode) { var l = Log.Fn<(List, AssemblyResult)>(timer: true); var referencedAssemblies = referencedAssembliesProvider.Locations(codeFileInfo.RelativePath, spec) ?? []; var appCodeAssemblyResult = EnsureAppCodeAssembly(preloadedAppCode, spec); assemblyResolver.AddAssembly(appCodeAssemblyResult?.Assembly); var appCodeAssembly = appCodeAssemblyResult?.Assembly; if (appCodeAssembly?.Location is { } assemblyLocation && !referencedAssemblies.Contains(assemblyLocation, StringComparer.OrdinalIgnoreCase)) { referencedAssemblies.Add(assemblyLocation); l.A($"Added reference to AppCode assembly: {assemblyLocation}"); } return l.ReturnAsOk((referencedAssemblies, appCodeAssemblyResult)); } private AssemblyResult EnsureAppCodeAssembly(AssemblyResult appCodeAssemblyResult, HotBuildSpec spec) { var l = Log.Fn(timer: true); if (appCodeAssemblyResult != null) return l.Return(appCodeAssemblyResult, $"OK, {nameof(appCodeAssemblyResult)} has value."); var (loaded, _) = appCodeLoader.Value.GetAppCode(spec); return l.Return(loaded, $"{nameof(loaded)}"); } private AssemblyResult CreateAssemblyResult(Assembly generatedAssembly, string className, bool isCshtml, CodeFileInfo codeFileInfo, AssemblyResult appCodeAssemblyResult) { var l = Log.Fn(timer: true); var mainType = assemblyUtilities.FindMainType(generatedAssembly, className, isCshtml); l.A($"Main type: {mainType}"); var assemblyResult = new AssemblyResult(generatedAssembly) { SafeClassName = className, MainType = mainType, CacheDependencyId = AssemblyCacheManager.KeyTemplate(codeFileInfo.FullPath!), AppCodeDependency = appCodeAssemblyResult }; return l.ReturnAsOk(assemblyResult); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Razor/Sys/TemplateCacheService.cs ================================================ using System.Reflection; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sys.Caching; namespace ToSic.Sxc.Dnn.Razor.Sys; /// /// Service responsible for managing template cache operations (memory and disk). /// public class TemplateCacheService( AssemblyCacheManager assemblyCacheManager, IAssemblyDiskCacheService diskCacheService, LazySvc appCodeLoader) : ServiceBase("Dnn.TmpCchSvc", connect: [assemblyCacheManager, diskCacheService, appCodeLoader]) { /// /// Try to get cached assembly from memory or disk cache. /// public AssemblyResult TryGetFromCache(CodeFileInfo codeFileInfo, HotBuildSpec spec) { var l = Log.Fn($"{codeFileInfo}"); // Check memory cache first var memoryResult = assemblyCacheManager.TryGetTemplate(codeFileInfo.FullPath!); if (memoryResult?.MainType != null) return l.Return(memoryResult, "from memory cache"); // Memory cache miss - try disk cache l.A("Memory cache miss - checking disk cache"); if (!diskCacheService.IsEnabled()) { l.A("Disk cache disabled via feature flag"); return l.ReturnNull("disk cache disabled"); } // Use the same AppCode snapshot (hash + dependency) for disk lookups and later caching var appCodeInfo = GetAppCodeCacheInfo(spec); var contentHash = diskCacheService.ComputeContentHash(codeFileInfo.SourceCode); var diskResult = diskCacheService.TryLoadFromCache( spec, codeFileInfo.RelativePath, contentHash, appCodeInfo.Hash, appCodeInfo.AssemblyResult, codeFileInfo); if (diskResult == null) return l.ReturnNull("disk cache miss"); l.A($"Disk cache hit for template: {codeFileInfo.RelativePath}"); // Add to memory cache for faster subsequent access AddToMemoryCache(codeFileInfo, diskResult, [codeFileInfo.FullPath], diskResult.AppCodeDependency == null ? null : [diskResult.AppCodeDependency]); return l.Return(diskResult, "from disk cache"); } /// /// Add compiled assembly to memory and disk cache. /// public void AddToCache(CodeFileInfo codeFileInfo, HotBuildSpec spec, AssemblyResult assemblyResult, string contentHash, string appCodeHash, AssemblyResult appCodeAssemblyResult) { var l = Log.Fn($"{codeFileInfo}"); // Add to memory cache var dependencies = appCodeAssemblyResult == null ? null : new ICanBeCacheDependency[] { appCodeAssemblyResult }; AddToMemoryCache(codeFileInfo, assemblyResult, [codeFileInfo.FullPath], dependencies); // Save to disk cache diskCacheService.TrySaveToCache(spec, codeFileInfo.RelativePath, contentHash, appCodeHash, assemblyResult); l.Done(); } /// /// Gets the hash of the AppCode assembly for cache invalidation. /// public string GetAppCodeHash(HotBuildSpec spec) => GetAppCodeCacheInfo(spec).Hash; internal AppCodeCacheInfo GetAppCodeCacheInfo(HotBuildSpec spec) { var l = Log.Fn($"{spec}"); var (appCodeAssemblyResult, _) = appCodeLoader.Value.GetAppCode(spec); var hash = ComputeAppCodeHash(appCodeAssemblyResult?.Assembly); return l.Return(new AppCodeCacheInfo(appCodeAssemblyResult, hash)); } private static string ComputeAppCodeHash(Assembly appCodeAssembly) { if (appCodeAssembly == null) return string.Empty; var assemblyFullName = appCodeAssembly.FullName ?? string.Empty; using var sha256 = System.Security.Cryptography.SHA256.Create(); var bytes = System.Text.Encoding.UTF8.GetBytes(assemblyFullName); var hashBytes = sha256.ComputeHash(bytes); return BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant(); } private void AddToMemoryCache(CodeFileInfo codeFileInfo, AssemblyResult assemblyResult, string[] filePaths, ICanBeCacheDependency[] dependencies = null) { assemblyResult.CacheDependencyId = AssemblyCacheManager.KeyTemplate(codeFileInfo.FullPath!); assemblyCacheManager.Add( cacheKey: assemblyResult.CacheDependencyId, data: assemblyResult, slidingDuration: CacheConstants.DurationRazorAndCode, filePaths: filePaths, dependencies: dependencies ); } public sealed class AppCodeCacheInfo(AssemblyResult assemblyResult, string hash) { public AssemblyResult AssemblyResult { get; } = assemblyResult; public string Hash { get; } = hash; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/RazorCodeManager.cs ================================================ using System.Web; using ToSic.Razor.Blade; #pragma warning disable CS0618 namespace ToSic.Sxc.Dnn; internal class RazorCodeManager(RazorComponentBase parent, ILog parentLog) : HelperBase(parentLog, "Rzr.Code") { public RazorComponentBase Parent = parent; /// /// The compiled code - or null /// private object _code; /// /// Determines if code has been compiled (or at least attempted) /// protected bool BuildComplete; /// /// Copy of any exception thrown when compiling the code /// protected Exception BuildException; /// /// This tries to get the code and will show an exception if not ready. /// public dynamic CodeOrException { get { TryToBuildCode(); if (BuildException == null) return _code; throw ImproveExceptionMessage(BuildException); } } /// /// Internal accessor for the code, which does not throw exceptions but returns a null if not available /// internal dynamic CodeOrNull { get { TryToBuildCode(); return _code; } } /// /// Try to build the code. If something fails, remember the exception in case we need it later. /// private bool TryToBuildCode() { var l = Log.Fn(); if (BuildComplete) return l.Return(true); var codeFile = Parent.VirtualPath.Replace(".cshtml", ".code.cshtml").Backslash().AfterLast("\\"); l.A($"Will try to load code from '{codeFile}"); try { var compiled = Parent.RzrHlp.CreateInstance(codeFile); if (compiled != null && compiled is not RazorComponentCode) throw new( $"Tried to compile the .Code file, but the type is '{compiled.GetType().Name}'. " + $"Expected that it inherits from '{nameof(RazorComponentCode)}'. " + "Please add '@inherits ToSic.Sxc.Dnn.RazorComponentCode' to the beginning of the 'xxx.code.cshtml' file. "); _code = compiled; } catch (Exception e) { BuildException = e; } BuildComplete = true; return l.Return(true, "code completed" + (BuildException == null ? "" : " with BuildExceptions")); } private static Exception ImproveExceptionMessage(Exception innerException) { switch (innerException) { case FileNotFoundException _: return new("Tried to compile matching .Code file - but couldn't find it. \n", innerException); case HttpCompileException _: return new("Error compiling .Code file. \n", innerException); default: return innerException; } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/RazorComponent.cs ================================================ using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Apps; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.Help; namespace ToSic.Sxc.Dnn; /// /// The base class for Razor-Components in 2sxc 10+ to 2sxc 11 - deprecated now
/// Provides context infos like the Dnn object, helpers like Edit and much more.
///
[PublicApi("...but deprecated! use Razor14, RazorTyped or newer")] public abstract partial class RazorComponent : RazorComponentBase, IDynamicCode, IHasDnn, // previous IDnnRazorCompatibility, IDnnRazor11, ICreateInstance, // new IHasCodeHelp { internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; public const string NotImplementedUseCustomBase = "Use a newer base class like Custom.Hybrid.Razor12 or Custom.Dnn.Razor12 to leverage this."; #region Core Properties which should appear in docs /// public override ICodeLog Log => RzrHlp.CodeLog; /// public override IHtmlHelper Html => RzrHlp.Html; #endregion #region Link, Edit, Dnn, App, Data /// public ILinkService Link => CodeApi.Link; /// public IEditService Edit => CodeApi.Edit; /// public TService GetService() where TService : class => CodeApi.GetService(); [PrivateApi] public override int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel10; /// public new IApp App => CodeApi.App; #endregion #region Data - with old interface #DataInAddWontWork [PrivateApi] public IDataSource Data => /*(IBlockDataSource)*/CodeApi.Data; //// This is explicitly implemented so the interfaces don't complain //// but actually we're not showing this - in reality we're showing the Old (see above) //IDataSource IDynamicCode.Data => CodeApi.Data; #endregion #region AsDynamic in many variations /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); #endregion #region AsEntity /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); #endregion #region AsList /// public IEnumerable AsList(object list) => CodeApi.Cdf.CodeAsDynList(list); #endregion #region Data Source Stuff /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Content, Header, etc. and List /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); #endregion #region CmsContext /// public ICmsContext CmsContext => CodeApi.CmsContext; #endregion #region CreateInstance [PrivateApi] string IGetCodePath.CreateInstancePath { get; set; } /// public virtual dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => RzrHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion // Added this in v20 to show uses of GetBestValue; but much of it may not be applicable, in which case we should create a separate list for SexyContentWebPage and Dnn.RazorComponent [PrivateApi] List IHasCodeHelp.ErrorHelpers => HelpDbRazor.CompileRazorOrCode12; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/RazorComponentCode.cs ================================================ namespace ToSic.Sxc.Dnn; /// /// This is the type used by code-behind classes of razor components. /// Use it to move logic / functions etc. into a kind of code-behind razor instead of as part of your view-template. /// [PrivateApi("Made private in v16.02 since it shouldn't be used any more")] [ShowApiWhenReleased(ShowApiMode.Never)] [Obsolete("Shouldn't be used any more, but will continue to work for indefinitely. There are now better ways of doing this")] public abstract class RazorComponentCode: RazorComponent; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/RazorComponent_Code.cs ================================================ namespace ToSic.Sxc.Dnn; abstract partial class RazorComponent { #region Code Behind - a Dnn feature which probably won't exist in Oqtane [PrivateApi] internal RazorCodeManager CodeManager => field ??= new(this, Log?.GetContents()); /// public dynamic Code => CodeManager.CodeOrException; #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Dnn/Web/IHtmlHelper.cs ================================================ using System.Web; namespace ToSic.Sxc.Dnn.Web; /// /// Helper to quickly "raw" some html. /// **Important**: When using Oqtane, the Html object has many more features - check the .net documentation. /// [PublicApi] public interface IHtmlHelper { /// /// Returns a HtmlString which Razor will output as Raw Html. /// /// /// An HtmlString object which will be not be html-encoded when added to a page with @Html.Raw(...) /// IHtmlString Raw(object stringHtml); /// /// Render a razor file to the page. /// This mimics the .net core API Html.Partial() in DNN /// /// path/file of razor, like "../shared/_list-item.cshtml" /// TODO new v16.00 /// IHtmlString Partial(string relativePath, object data = default); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/GlobalUsings.cs ================================================ // Global using directives global using System; global using System.Collections.Generic; global using System.Web.WebPages; global using ToSic.Eav.Data; global using ToSic.Eav.DataSource; global using ToSic.Sys.Coding; global using ToSic.Sys.DI; global using ToSic.Sys.Documentation; global using ToSic.Sys.Data; global using ToSic.Sys.Logging; global using ToSic.Sys.Services; global using ToSic.Sxc.Code; global using ToSic.Sxc.Code.Sys; global using ToSic.Sxc.Context; global using ToSic.Sxc.Dnn.Web; global using ToSic.Sxc.Services; global using ToSic.Sxc.Web; global using ToSic.Sys.Utils; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Properties/AssemblyInfo.cs ================================================ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("ToSic.Sxc.Dnn.SystemTests")] ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/ToSic.Sxc.Dnn.Razor.csproj ================================================  Debug AnyCPU Library Properties ToSic.Sxc ToSic.Sxc.Dnn.Razor $(NoWarn);MSB4011 $(NoWarn);NU1902 Always $(NoWarn);MSB3277 preview runtime ..\..\packages\microsoft.aspnet.razor\3.2.9\lib\net45\System.Web.Razor.dll ..\..\..\Dependencies\System.Web\System.Web.WebPages.dll False False ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/ToSic.Sxc.Dnn.Razor.csproj.DotSettings ================================================  True ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.Razor/Web/RazorComponentBase.cs ================================================ using Custom.Razor.Sys; using ToSic.Sxc.Dnn; using ToSic.Sxc.Dnn.Razor; using ToSic.Sxc.Render.Sys.Specs; using ToSic.Sxc.Sys.ExecutionContext; using IHasLog = ToSic.Sys.Logging.IHasLog; using ILog = ToSic.Sys.Logging.ILog; namespace ToSic.Sxc.Web; /// /// The base page type for razor pages /// It's the foundation for RazorPage and the old SexyContent page /// It only contains internal wiring stuff, so not to be published /// [PrivateApi("internal class only!")] [ShowApiWhenReleased(ShowApiMode.Never)] public abstract partial class RazorComponentBase : WebPageBase, IRazor, IHasCodeLog, IHasLog, IDnnRazorCompatibility, ICompatibilityLevel { #region Constructor / Setup /// /// Special helper to move all Razor logic into a separate class. /// For architecture of Composition over Inheritance. /// [PrivateApi] internal DnnRazorHelper RzrHlp => field ??= new DnnRazorHelper().Init(this); /// /// Internal access to the underlying RenderPage. /// This is needed by the render helper to provide the default behavior /// if we are not using Roslyn /// internal virtual HelperResult BaseRenderPage(string path, RenderSpecs renderSpecs) { var data = renderSpecs.Data; var l = (this as IHasLog).Log.Fn($"{nameof(path)}: '{path}', {nameof(data)}: {data != null}; partialSpecs: {renderSpecs.PartialSpecs}"); // Do the proper RenderPage of the base class, and also pass in the RenderSpecs // because they might be used to communicate caching settings back. return data == null ? l.Return(base.RenderPage(path, new { }, renderSpecs), "default render, no data") : l.Return(base.RenderPage(path, data, renderSpecs), "default render with data"); } /// [PrivateApi] internal IExecutionContext ExCtx { get; private set; } /// [PrivateApi] public void ConnectToRoot(IExecutionContext exCtx) { RzrHlp.ConnectToRoot(exCtx); ExCtx = exCtx; } /// /// Override the base class ConfigurePage, and additionally update internal objects so sub-pages work just like the master /// /// [PrivateApi] protected override void ConfigurePage(WebPageBase parentPage) { base.ConfigurePage(parentPage); RzrHlp.ConfigurePage(parentPage, VirtualPath); } /// /// Must be set on each derived class /// [PrivateApi] public abstract int CompatibilityLevel { get; } #endregion #region Secret Stuff like IHasLog or Compile Helpers /// /// EXPLICIT Log implementation (to ensure that new IHasLog.Log interface is implemented) /// [PrivateApi] ILog IHasLog.Log => RzrHlp.Log; /// public string Path => VirtualPath; #endregion #region Core Properties which should appear in docs /// public virtual ICodeLog Log => RzrHlp.CodeLog; /// public virtual IHtmlHelper Html => RzrHlp.Html; #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/CacheKeyTestAccessors.cs ================================================ using ToSic.Sxc.Dnn.Razor.Sys; namespace ToSic.Sxc.Dnn; /// /// Logic-free test accessor wrappers for to keep Find-All-References of production methods clean. /// internal static class CacheKeyTestAccessors { // Constructor forwarder (factory) public static CacheKey NewCacheKeyTac(int appId, string? edition, string templatePath, string contentHash, string appCodeHash, string? appPath = null) => new CacheKey(appId: appId, edition: edition, templatePath: templatePath, contentHash: contentHash, appCodeHash: appCodeHash, appPath: appPath); // Static method forwarders public static string NormalizePathTac(string templatePath, string edition, string? appPath = null) => CacheKey.NormalizePath(templatePath: templatePath, edition: edition, appPath: appPath); public static string GetAppFolderTac(int appId, string edition) => CacheKey.GetAppFolder(appId: appId, edition: edition); public static string ToStringTac(this CacheKey cacheKey) => cacheKey.ToString(); public static string GetFilePathTac(this CacheKey cacheKey, string cacheDirectory) => cacheKey.GetFilePath(cacheDirectory: cacheDirectory); public static bool EqualsTac(this CacheKey cacheKey, CacheKey other) => cacheKey.Equals(other: other); public static int GetHashCodeTac(this CacheKey cacheKey) => cacheKey.GetHashCode(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/CacheKeyTests.cs ================================================ namespace ToSic.Sxc.Dnn; /// /// Unit tests for CacheKey value object. /// Tests validate cache key format, path normalization, hash truncation, and equality behavior. /// public class CacheKeyTests { private const int TestAppId = 42; private const string TestEdition = "live"; private const string TestContentHash = "abcdef1234567890"; // Long hash private const string TestAppCodeHash = "xyz789abcdefghij"; // Long hash /// /// CacheKey.ToString() format verification /// Verifies filename format: {fileName}-{extension}-{contentHash}-{appCodeHash}.dll /// [Fact] public void CacheKey_ToString_ReturnsCorrectFormat() { // Arrange var templatePath = "Views/Default.cshtml"; var normalizedPath = CacheKeyTestAccessors.NormalizePathTac(templatePath, TestEdition); var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); // Act var result = cacheKey.ToStringTac(); // Assert Contains(normalizedPath, result); EndsWith(".dll", result); // Verify format: {fileName}-{extension}-{hash1}-{hash2}.dll var expectedPattern = $"{normalizedPath}"; StartsWith(expectedPattern, result); } /// /// Hash truncation verification /// Verifies that hashes are truncated to first 6 characters. /// [Fact] public void CacheKey_ToString_TruncatesHashesToSixCharacters() { // Arrange var templatePath = "Views/Test.cshtml"; var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); // Act var result = cacheKey.ToStringTac(); // Assert var expectedContentHashShort = TestContentHash.Substring(0, 6); // "abcdef" var expectedAppCodeHashShort = TestAppCodeHash.Substring(0, 6); // "xyz789" Contains(expectedContentHashShort, result); Contains(expectedAppCodeHashShort, result); // Verify full hash is NOT in the filename DoesNotContain(TestContentHash, result); DoesNotContain(TestAppCodeHash, result); } /// /// CacheKey.NormalizePath() lowercase conversion /// Verifies that paths are converted to lowercase. /// [Fact] public void CacheKey_NormalizePath_ConvertsToLowercase() { // Arrange var inputPath = "Views/Default.cshtml"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, TestEdition); // Assert Equal(result, result.ToLowerInvariant()); DoesNotContain("V", result); // No uppercase V DoesNotContain("D", result); // No uppercase D } /// /// CacheKey.NormalizePath() slash-to-hyphen replacement /// Verifies that forward and backslashes are replaced with hyphens. /// [Fact] public void CacheKey_NormalizePath_ReplacesSlashesWithHyphens() { // Arrange var inputPath1 = "Views/Default.cshtml"; var inputPath2 = "Views\\Default.cshtml"; // Act var result1 = CacheKeyTestAccessors.NormalizePathTac(inputPath1, TestEdition); var result2 = CacheKeyTestAccessors.NormalizePathTac(inputPath2, TestEdition); // Assert DoesNotContain("/", result1); DoesNotContain("\\", result1); DoesNotContain("/", result2); DoesNotContain("\\", result2); Contains("-", result1); Contains("-", result2); // Both should produce same result Equal(result1, result2); } /// /// CacheKey.NormalizePath() .cshtml handling /// Verifies that .cshtml extension is converted to -cshtml. /// [Fact] public void CacheKey_NormalizePath_HandlesCSHTMLExtension() { // Arrange var inputPath = "Views/Default.cshtml"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, TestEdition); // Assert DoesNotContain(".cshtml", result); Contains("-cshtml", result); } /// /// CacheKey.NormalizePath() complete example /// Verifies the documented example: "Views/Default.cshtml" → "views-default-cshtml-6995bfe9" /// [Fact] public void CacheKey_NormalizePath_MatchesDocumentedExample() { // Arrange var inputPath = "Views/Default.cshtml"; var expectedOutput = "views-default-cshtml-6995bfe9"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, TestEdition); // Assert Equal(expectedOutput, result); } /// /// CacheKey.NormalizePath() removes app root prefix such as "Portals/.../2sxc/app". /// [Fact] public void CacheKey_NormalizePath_TrimsAppRootPrefix() { // Arrange var inputPath = "Portals/0/2sxc/MyApp/live/views/Home.cshtml"; var expectedOutput = "views-home-cshtml-e5954f02"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, TestEdition); // Assert Equal(expectedOutput, result); DoesNotContain("live-", result); } /// /// CacheKey.NormalizePath() removes edition segment when it appears at the beginning of the app-scoped path. /// [Fact] public void CacheKey_NormalizePath_TrimsEditionPrefix() { // Arrange const string inputPath = "bs5/textimage/text-and-image.cshtml"; const string edition = "bs5"; const string expectedOutput = "textimage-text-and-image-cshtml-8c705c9f"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, edition); // Assert Equal(expectedOutput, result); DoesNotContain($"{edition}-", result); } /// /// CacheKey.NormalizePath() uses provided app path instead of relying on hard-coded path fragments. /// Ensures app root trimming works even when the app folder name matches the default marker. /// [Fact] public void CacheKey_NormalizePath_TrimsUsingProvidedAppPath() { // Arrange const string inputPath = "2sxc/2sxc/views/Home.cshtml"; const string appPath = "2sxc/2sxc"; // Act var result = CacheKeyTestAccessors.NormalizePathTac(inputPath, edition: "root", appPath: appPath); // Assert StartsWith("views-home-cshtml-", result); } /// /// Verifies that CacheKey equality works correctly for identical values. /// [Fact] public void CacheKey_Equals_ReturnsTrueForIdenticalKeys() { // Arrange var templatePath = "Views/Test.cshtml"; var key1 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); var key2 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); // Act & Assert Equal(key1, key2); True(key1.EqualsTac(key2)); Equal(key1.GetHashCodeTac(), key2.GetHashCodeTac()); } /// /// Verifies that CacheKey equality returns false for different values. /// [Fact] public void CacheKey_Equals_ReturnsFalseForDifferentKeys() { // Arrange var templatePath = "Views/Test.cshtml"; var key1 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); var key2 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, "different", TestAppCodeHash); // Act & Assert NotEqual(key1, key2); False(key1.EqualsTac(key2)); } /// /// Verifies that GetFilePath combines cache directory with filename correctly. /// [Fact] public void CacheKey_GetFilePath_CombinesDirectoryAndFilename() { // Arrange var cacheDir = @"C:\temp\cache"; var templatePath = "Views/Test.cshtml"; var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, templatePath, TestContentHash, TestAppCodeHash); // Act var result = cacheKey.GetFilePathTac(cacheDir); // Assert StartsWith(cacheDir, result); EndsWith(".dll", result); Contains(Path.DirectorySeparatorChar.ToString(), result); } /// /// Verifies that constructor validates parameters. /// [Theory] [InlineData(0, "live", "path", "hash1", "hash2")] // Invalid appId [InlineData(-1, "live", "path", "hash1", "hash2")] // Negative appId public void CacheKey_Constructor_ThrowsOnInvalidAppId(int appId, string edition, string path, string hash1, string hash2) { // Act & Assert Throws(() => CacheKeyTestAccessors.NewCacheKeyTac(appId, edition, path, hash1, hash2)); } /// /// Verifies that constructor defaults null/empty edition to "root". /// Spec: Edition parameter is nullable and defaults to "root" if not provided. /// [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void CacheKey_Constructor_DefaultsEditionToRoot(string? edition) { // Arrange var templatePath = "Views/Test.cshtml"; // Act var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, edition, templatePath, TestContentHash, TestAppCodeHash); // Assert Equal("root", cacheKey.Edition); } /// /// Verifies that constructor uses provided edition when non-empty. /// [Theory] [InlineData("live")] [InlineData("staging")] [InlineData("draft")] public void CacheKey_Constructor_UsesProvidedEdition(string edition) { // Arrange var templatePath = "Views/Test.cshtml"; // Act var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, edition, templatePath, TestContentHash, TestAppCodeHash); // Assert Equal(edition, cacheKey.Edition); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/GlobalUsings.cs ================================================ // Global using directives global using ToSic.Eav.Testing; global using static Xunit.Assert; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/RazorDiskCacheTests.cs ================================================ using System.Collections.Concurrent; using System.Reflection; using ToSic.Sxc.Dnn.Razor.Sys; namespace ToSic.Sxc.Dnn; /// /// Integration tests for disk cache save/load cycle, invalidation, feature flag, and concurrent compilation. /// Tests validate end-to-end functionality of the CSHTML disk caching feature. /// public class RazorDiskCacheTests { private const string TestCacheDir = "test-cache"; private const int TestAppId = 42; private const string TestEdition = "live"; private const string TestTemplatePath = "views/test-template.cshtml"; private const string TestContentHash = "abc123"; private const string TestAppCodeHash = "xyz789"; /// /// Disk cache save/load cycle test /// Verifies that a compiled assembly can be saved to disk cache and loaded back successfully. /// [Fact] public void DiskCache_SaveAndLoad_ReturnsValidAssembly() { // Arrange var tempCacheDir = Path.Combine(Path.GetTempPath(), TestCacheDir, Guid.NewGuid().ToString()); Directory.CreateDirectory(tempCacheDir); try { var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), TestContentHash, TestAppCodeHash); var cachePath = cacheKey.GetFilePathTac(tempCacheDir); Directory.CreateDirectory(Path.GetDirectoryName(cachePath)!); // Create a test assembly file (using current assembly as test data) var testAssemblyPath = Assembly.GetExecutingAssembly().Location; File.Copy(testAssemblyPath, cachePath, overwrite: true); // Act - Load from disk cache var assemblyBytes = File.ReadAllBytes(cachePath); var loadedAssembly = Assembly.Load(assemblyBytes); // Assert NotNull(loadedAssembly); NotNull(loadedAssembly.FullName); True(File.Exists(cachePath), "Cache file should exist"); } finally { // Cleanup if (Directory.Exists(tempCacheDir)) Directory.Delete(tempCacheDir, recursive: true); } } /// /// Verifies that cache key changes when template content changes (different contentHash). /// [Fact] public void DiskCache_ContentHashChange_GeneratesDifferentCacheKey() { // Arrange var originalContentHash = "hash1"; var modifiedContentHash = "hash2"; var originalKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), originalContentHash, TestAppCodeHash); // Act - Simulate file change with different content hash var modifiedKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), modifiedContentHash, TestAppCodeHash); // Assert NotEqual(originalKey.ToStringTac(), modifiedKey.ToStringTac()); NotEqual(originalKey, modifiedKey); } /// /// Verifies that cache key changes when AppCode assembly changes (different appCodeHash). /// [Fact] public void DiskCache_AppCodeHashChange_GeneratesDifferentCacheKey() { // Arrange - Use hashes with different first 6 characters var originalAppCodeHash = "aaa111000000000000000000000000000000000000000000000000000000"; var modifiedAppCodeHash = "bbb222000000000000000000000000000000000000000000000000000000"; var originalKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), TestContentHash, originalAppCodeHash); // Act - Simulate AppCode change with different hash var modifiedKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), TestContentHash, modifiedAppCodeHash); // Assert NotEqual(originalKey.ToStringTac(), modifiedKey.ToStringTac()); NotEqual(originalKey, modifiedKey); } /// /// Verifies that cache key generation works with null edition (defaults to "root"). /// Validates spec: Edition parameter is nullable and defaults to "root" if not provided. /// [Fact] public void DiskCache_NullEdition_DefaultsToRoot() { // Arrange & Act - Pass null edition var cacheKey = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, null, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, null), TestContentHash, TestAppCodeHash); var fileName = cacheKey.ToStringTac(); // Assert Equal("root", cacheKey.Edition); // file name no longer contains edition/app, but edition on the object must default to root DoesNotContain("root", fileName); } /// /// Concurrent compilation safety test /// Verifies that multiple threads generating cache keys for the same template produce identical results. /// This validates that the CacheKey value object is thread-safe and deterministic. /// [Fact] public void DiskCache_ConcurrentCacheKeyGeneration_ProducesIdenticalResults() { // Arrange const int threadCount = 10; var cacheKeys = new ConcurrentBag(); // Act - Generate cache keys concurrently Parallel.For(0, threadCount, i => { var key = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, CacheKeyTestAccessors.NormalizePathTac(TestTemplatePath, TestEdition), TestContentHash, TestAppCodeHash); cacheKeys.Add(key.ToStringTac()); }); // Assert - All cache keys should be identical var distinctKeys = cacheKeys.Distinct().ToList(); Single(distinctKeys); } /// /// Validates that cache files in a directory can be identified and deleted by pattern. /// This simulates the InvalidateAppCache bulk deletion scenario. /// [Fact] public void DiskCache_BulkInvalidation_DeletesMatchingFiles() { // Arrange var tempCacheDir = Path.Combine(Path.GetTempPath(), TestCacheDir, Guid.NewGuid().ToString()); Directory.CreateDirectory(tempCacheDir); try { // Create multiple cache files for the same app var cacheKey1 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, "template1", "hash1", "apphash1"); var cacheKey2 = CacheKeyTestAccessors.NewCacheKeyTac(TestAppId, TestEdition, "template2", "hash2", "apphash1"); var cacheKey3 = CacheKeyTestAccessors.NewCacheKeyTac(999, TestEdition, "template3", "hash3", "apphash1"); // Different app var cachePath1 = cacheKey1.GetFilePathTac(tempCacheDir); var cachePath2 = cacheKey2.GetFilePathTac(tempCacheDir); var cachePath3 = cacheKey3.GetFilePathTac(tempCacheDir); Directory.CreateDirectory(Path.GetDirectoryName(cachePath1)!); Directory.CreateDirectory(Path.GetDirectoryName(cachePath2)!); Directory.CreateDirectory(Path.GetDirectoryName(cachePath3)!); File.WriteAllText(cachePath1, "test1"); File.WriteAllText(cachePath2, "test2"); File.WriteAllText(cachePath3, "test3"); // Act - delete all dlls for app/edition folder var appEditionDir = Path.Combine(tempCacheDir, CacheKeyTestAccessors.GetAppFolderTac(TestAppId, TestEdition)); var filesToDelete = Directory.Exists(appEditionDir) ? Directory.GetFiles(appEditionDir, "*.dll", SearchOption.AllDirectories) : Array.Empty(); foreach (var file in filesToDelete) File.Delete(file); // Assert False(File.Exists(cachePath1), "Cache file 1 should be deleted"); False(File.Exists(cachePath2), "Cache file 2 should be deleted"); True(File.Exists(cachePath3), "Cache file 3 (different app) should remain"); } finally { // Cleanup if (Directory.Exists(tempCacheDir)) Directory.Delete(tempCacheDir, recursive: true); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/ToSic.Eav.Configuration.Features-Compatibility/FeatureTestsBase.cs ================================================ //using Microsoft.Extensions.DependencyInjection; //using Microsoft.Extensions.DependencyInjection.Extensions; //using ToSic.Eav.Apps.Mocks; //using ToSic.Eav.Data; //using ToSic.Eav.Data.Mocks; //using ToSic.Eav.Integration; //using ToSic.Eav.Internal.Loaders; //namespace ToSic.Sxc.ToSic.Eav.Configuration.Features_Compatibility; //public class FeatureTestsBase: TestBaseEav //{ // public FeatureTestsBase() // { // // Make sure that features are ready to use // var sysLoader = GetService(); // sysLoader.ReloadFeatures(); // } // protected override IServiceCollection SetupServices(IServiceCollection services) // { // base.SetupServices(services) // .AddAppLoader(); // services.TryAddTransient(); // services.TryAddTransient(); // return services; // } //} ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/ToSic.Eav.Configuration.Features-Compatibility/FeaturesStaticTests.cs ================================================ using ToSic.Eav.Configuration; using ToSic.Eav.Testing.Scenarios; using ToSic.Sxc.Dnn.StartUp; using ToSic.Sys.Capabilities.Features; using BuiltInFeatures = ToSic.Sys.Capabilities.Features.BuiltInFeatures; #pragma warning disable 618 namespace ToSic.Sxc.ToSic.Eav.Configuration.Features_Compatibility; // ReSharper disable once InconsistentNaming public class FeaturesStaticTests : IClassFixture> { public FeaturesStaticTests(ISysFeaturesService featuresSvc) { new StartupDnn().SetupOldStaticFeaturesForCompatibility(featuresSvc); } [Fact] //[Ignore("I believe the setup doesn't work yet - needs to first load the licenses to be able to test this")] public void PasteClipboardActive() { var x = Features.Enabled(BuiltInFeatures.PasteImageFromClipboard.Guid); True(x, "this should be enabled and non-expired"); } [Fact] //[Ignore("I believe the setup doesn't work yet - needs to first load the licenses to be able to test this")] public void InventedFeatureGuid() { var inventedGuid = new Guid("12345678-1c8b-4286-a33b-3210ed3b2d9a"); var x = Features.Enabled(inventedGuid); False(x, "this should be enabled and expired"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/ToSic.Eav.Configuration.Features-Compatibility/IFeaturesTests.cs ================================================ using ToSic.Eav.Configuration; using ToSic.Eav.Testing.Scenarios; using ToSic.Sys.Capabilities.Features; namespace ToSic.Sxc.ToSic.Eav.Configuration.Features_Compatibility; // ReSharper disable once InconsistentNaming public class IFeaturesTests(IFeaturesService Features) : IClassFixture> { [Fact] public void PasteClipboardActive() { var x = Features.Enabled(BuiltInFeatures.PasteImageFromClipboard.Guid); True(x, "this should be enabled and non-expired"); } [Fact] public void InventedFeatureGuid() { var inventedGuid = new Guid("12345678-1c8b-4286-a33b-3210ed3b2d9a"); var x = Features.Enabled(inventedGuid); False(x, "this should be enabled and expired"); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/ToSic.Eav.Configuration.Features-Compatibility/Startup.cs ================================================ using Microsoft.Extensions.DependencyInjection; using ToSic.Eav; using ToSic.Eav.Run.Startup; using ToSic.Sxc.Compatibility; using ToSic.Sys.Capabilities.Platform; using ToSic.Testing.Shared.Platforms; #pragma warning disable CA1822 namespace ToSic.Sxc.ToSic.Eav.Configuration.Features_Compatibility; /// /// A Startup helper for tests which need Dependency-Injection setup for EAV Core. /// /// /// Use by adding this kind of attribute to your test class: /// `[Startup(typeof(StartupTestFullWithDb))]` /// public class Startup { /// /// Startup helper /// public virtual void ConfigureServices(IServiceCollection services) => services .AddTransient() .AddDnnCompatibility() .AddFixtureHelpers() // Apps .AddEavWork() .AddEavContext() .AddEavAppsPersistence() .AddEavApps() // SQL Server .AddRepositoryAndEfc() // Import/Export as well as File Based Json loading .AddEavImportExport() .AddEavPersistence() // DataSources .AddDataSources() .AddDataSourceSystem() // EAV Core //.AddEavDataPersistence() .AddEavDataBuild() .AddEavDataStack() .AddEavModels() .AddEavData() // EAV Core and Downstream .AddAllLibAndSys() // Fallbacks for services which were not implemented - must come last .AddEavAllFallbacks(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/ToSic.Sxc.Dnn.SystemTests.csproj ================================================  ToSic.Sxc.Dnn ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.SystemTests/VerifyTestsRun.cs ================================================ namespace ToSic.Sxc.Dnn; public class VerifyTestsRun { [Fact] public void VerifyTestsRun1() { // This is a dummy test to verify that the tests are running correctly. // It doesn't do anything, but it's here to ensure that the test framework is set up correctly. True(true); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Dnn/Api12.cs ================================================ using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; // ReSharper disable once CheckNamespace namespace Custom.Dnn; /// /// This is the base class for all custom API Controllers.
/// With this, your code receives the full context incl. the current App, DNN, Data, etc. ///
[PublicApi("This is the official base class for v12+")] [DnnLogExceptions] [DefaultToNewtonsoftForHttpJson] public abstract class Api12(string logSuffix) : Hybrid.Api12(logSuffix), IDynamicWebApi, IHasDnn { protected Api12() : this("Dnn12") { } /// public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Hybrid/Api12.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Apps; using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; using ToSic.Sxc.Services; using ToSic.Sxc.Sys.ExecutionContext; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// This is the base class for all custom API Controllers.
/// With this, your code receives the full context incl. the current App, DNN, Data, etc. ///
[PublicApi("This is the official base class for v12+")] [DnnLogExceptions] [DefaultToNewtonsoftForHttpJson] public abstract partial class Api12(string logSuffix) : DnnSxcCustomControllerBase(logSuffix), IDynamicCode12, IDynamicWebApi, IHasCodeLog, ICreateInstance { #region Setup protected Api12() : this("Hyb12") { } [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// public new ICodeLog Log => SysHlp.CodeLog; [PrivateApi] public int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel12; /// public TService GetService() where TService : class => SysHlp.GetService(); #endregion #region Content, Presentation, Header, App, Data /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; /// public IApp App => CodeApi.App; /// public IDataSource Data => CodeApi.Data; #endregion #region Link & Edit - added to API in 2sxc 10.01; CmsContext, Resources, Settings (v12) /// public ILinkService Link => CodeApi?.Link; /// public IEditService Edit => CodeApi?.Edit; /// public ICmsContext CmsContext => CodeApi?.CmsContext; /// public dynamic Resources => CodeApi.Resources; /// public dynamic Settings => CodeApi.Settings; [PrivateApi("Not yet ready")] public IDevTools DevTools => CodeApi.DevTools; #endregion #region AsDynamic implementations + AsList /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); /// public IEnumerable AsList(object list) => CodeApi?.Cdf.CodeAsDynList(list); #endregion #region Convert-Service /// public IConvertService Convert => field ??= CodeApi.Convert; #endregion #region CreateSource implementations /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); /// public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => DynHlp.SaveInAdam(stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion #region CreateInstance string IGetCodePath.CreateInstancePath { get; set; } private CompileCodeHelper CompileCodeHlp => field ??= GetService().Init(this); /// public dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => CompileCodeHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion #region Net Core Compatibility Shims - Copy this entire section to WebApi Files /// public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => Shim.File(download: download, virtualPath: virtualPath, contentType: contentType, fileDownloadName: fileDownloadName, contents: contents); private WebApiCoreShim Shim => new(Request); /// [NonAction] public new dynamic Ok() => Shim.Ok(); /// [NonAction] public dynamic Ok(object value) => Shim.Ok(value); /// [NonAction] public dynamic NoContent() => Shim.NoContent(); // TODO: this Shim could now be implemented after 16.02 - since we don't have the Content property any more #region Content (ca. 5 overloads) can't be implemented, because it conflicts with our property "Content" #endregion /// [NonAction] public new dynamic Redirect(string url) => Shim.Redirect(url); /// [NonAction] public dynamic RedirectPermanent(string url) => Shim.RedirectPermanent(url); /// [NonAction] public dynamic StatusCode(int statusCode) => Shim.StatusCode(statusCode); /// [NonAction] public dynamic StatusCode(int statusCode, object value) => Shim.StatusCode(statusCode, value); /// [NonAction] public dynamic Unauthorized() => Shim.Unauthorized(); /// [NonAction] public dynamic Unauthorized(object value) => Shim.Unauthorized(value); /// [NonAction] public new dynamic NotFound() => Shim.NotFound(); /// [NonAction] public dynamic NotFound(object value) => Shim.NotFound(value); /// [NonAction] public new dynamic BadRequest() => Shim.BadRequest(); /// [NonAction] public new dynamic Conflict() => Shim.Conflict(); /// [NonAction] public dynamic Conflict(object error) => Shim.Conflict(error); /// [NonAction] public dynamic Accepted() => Shim.Accepted(); /// [NonAction] public dynamic Forbid() => Shim.Forbid(); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Hybrid/Api12_Obsolete.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Code.Sys.CodeErrorHelp; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; partial class Api12 { // Obsolete stuff - not supported any more in after V10 - show helpful error messages #region Shared Code Block between RazorComponent_Obsolete and ApiController_Obsolete #region Obsolete CreateSource [PrivateApi] [Obsolete("throws error with fix-instructions. Use CreateSource instead.")] public IDataSource CreateSource(string typeName = "", IDataSource inSource = null, ILookUpEngine configurationProvider = null) => RazorExceptions.ExCreateSourceString(); #endregion #region Compatibility with Eav.Interfaces.IEntity - introduced in 10.10 - Removed in v20 //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(ToSic.Eav.Interfaces.IEntity entity) // => RazorExceptions.ExAsDynamicInterfacesIEntity(); //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(KeyValuePair entityKeyValuePair) // => RazorExceptions.AsDynamicKvpInterfacesIEntity(); //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //[PrivateApi] //public IEnumerable AsDynamic(IEnumerable entities) // => RazorExceptions.AsDynamicIEnumInterfacesIEntity(); #endregion #region AsDynamic [PrivateApi] [Obsolete("throws error with fix-instructions. Use AsDynamic(IEnumerable...)")] public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => RazorExceptions.ExAsDynamicKvp(); #region Old AsDynamic with correct warnings /// [PrivateApi] public IEnumerable AsDynamic(IDataStream stream) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); /// [PrivateApi] public IEnumerable AsDynamic(IDataSource source) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); /// [PrivateApi] public IEnumerable AsDynamic(IEnumerable entities) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); #endregion #endregion #region Presentation, ListContent, ListPresentation, List [PrivateApi] [Obsolete("use Content.Presentation instead")] public dynamic Presentation => RazorExceptions.ExPresentation(); [PrivateApi] [Obsolete("Use Header instead")] public dynamic ListContent => RazorExceptions.ExListContent(); [PrivateApi] [Obsolete("Use Header.Presentation instead")] public dynamic ListPresentation => RazorExceptions.ExListPresentation(); [PrivateApi] [Obsolete("This is an old way used to loop things - removed in RazorComponent")] public IEnumerable List => RazorExceptions.ExList(); #endregion #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Hybrid/Api14.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Apps; using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; using ToSic.Sxc.Services; using ToSic.Sxc.Services.Sys; using ToSic.Sxc.Sys.ExecutionContext; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// Base class for v14 Dynamic WebAPI files. /// Will provide the on property `Kit`. /// This contains all the popular services used in v14, so that your code can be lighter. /// /// /// Important: The property `Convert` which exited on Razor12 was removed. use `Kit.Convert` instead. /// [PublicApi] [DnnLogExceptions] [DefaultToNewtonsoftForHttpJson] public abstract partial class Api14(string logSuffix) : DnnSxcCustomControllerBase(logSuffix), IDynamicCode14, IHasCodeLog, IDynamicWebApi, IDynamicCode12, ICreateInstance { #region Setup protected Api14() : this("Hyb14") { } internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// public ServiceKit14 Kit => field ??= CodeApi.ServiceKit14; /// public new ICodeLog Log => SysHlp.CodeLog; [PrivateApi] public int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel12; #endregion /// public TService GetService() where TService : class => SysHlp.GetService(); #region Content, Presentation, Header, App, Data /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; /// public IApp App => CodeApi.App; /// public IDataSource Data => CodeApi.Data; #endregion #region Link & Edit - added to API in 2sxc 10.01; CmsContext, Resources, Settings (v12) /// public ILinkService Link => CodeApi?.Link; /// public IEditService Edit => CodeApi?.Edit; /// public ICmsContext CmsContext => CodeApi?.CmsContext; /// public dynamic Resources => CodeApi.Resources; /// public dynamic Settings => CodeApi.Settings; [PrivateApi("Not yet ready")] public IDevTools DevTools => CodeApi.DevTools; #endregion #region AsDynamic implementations + AsList /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); /// public IEnumerable AsList(object list) => CodeApi?.Cdf.CodeAsDynList(list); #endregion #region CreateSource implementations /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); #endregion #region Convert-Service - should NOT be in v14, but was by accident! /// public IConvertService Convert => field ??= CodeApi.Convert; #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); /// public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => DynHlp.SaveInAdam(stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion #region CreateInstance string IGetCodePath.CreateInstancePath { get; set; } private CompileCodeHelper CompileCodeHlp => field ??= GetService().Init(this); /// public dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => CompileCodeHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); /// [PrivateApi("added in 16.05, but not sure if it should be public")] public dynamic GetCode(string path, NoParamOrder npo = default, string className = default) => CompileCodeHlp.GetCode(path: path, className: className); #endregion #region Net Core Compatibility Shims - Copy this entire section to WebApi Files /// public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => Shim.File(download: download, virtualPath: virtualPath, contentType: contentType, fileDownloadName: fileDownloadName, contents: contents); private WebApiCoreShim Shim => new(Request); /// [NonAction] public new dynamic Ok() => Shim.Ok(); /// [NonAction] public dynamic Ok(object value) => Shim.Ok(value); /// [NonAction] public dynamic NoContent() => Shim.NoContent(); // TODO: this Shim could now be implemented after 16.02 - since we don't have the Content property any more #region Content (ca. 5 overloads) can't be implemented, because it conflicts with our property "Content" #endregion /// [NonAction] public new dynamic Redirect(string url) => Shim.Redirect(url); /// [NonAction] public dynamic RedirectPermanent(string url) => Shim.RedirectPermanent(url); /// [NonAction] public dynamic StatusCode(int statusCode) => Shim.StatusCode(statusCode); /// [NonAction] public dynamic StatusCode(int statusCode, object value) => Shim.StatusCode(statusCode, value); /// [NonAction] public dynamic Unauthorized() => Shim.Unauthorized(); /// [NonAction] public dynamic Unauthorized(object value) => Shim.Unauthorized(value); /// [NonAction] public new dynamic NotFound() => Shim.NotFound(); /// [NonAction] public dynamic NotFound(object value) => Shim.NotFound(value); /// [NonAction] public new dynamic BadRequest() => Shim.BadRequest(); /// [NonAction] public new dynamic Conflict() => Shim.Conflict(); /// [NonAction] public dynamic Conflict(object error) => Shim.Conflict(error); /// [NonAction] public dynamic Accepted() => Shim.Accepted(); /// [NonAction] public dynamic Forbid() => Shim.Forbid(); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Hybrid/Api14_Obsolete.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Code.Sys.CodeErrorHelp; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; partial class Api14 { // Obsolete stuff - not supported anymore in after V10 - show helpful error messages #region Shared Code Block between RazorComponent_Obsolete and ApiController_Obsolete #region Obsolete CreateSource [PrivateApi] [Obsolete("throws error with fix-instructions. Use CreateSource instead.")] public IDataSource CreateSource(string typeName = "", IDataSource inSource = null, ILookUpEngine configurationProvider = null) => RazorExceptions.ExCreateSourceString(); #endregion #region Compatibility with Eav.Interfaces.IEntity - introduced in 10.10 - Removed in v20 //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(ToSic.Eav.Interfaces.IEntity entity) // => RazorExceptions.ExAsDynamicInterfacesIEntity(); //[PrivateApi] //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(KeyValuePair entityKeyValuePair) // => RazorExceptions.AsDynamicKvpInterfacesIEntity(); //[Obsolete("throws error with fix-instructions. Cast your entities to ToSic.Eav.Data.IEntity")] //[PrivateApi] //public IEnumerable AsDynamic(IEnumerable entities) // => RazorExceptions.AsDynamicIEnumInterfacesIEntity(); #endregion #region AsDynamic [PrivateApi] [Obsolete("throws error with fix-instructions. Use AsDynamic(IEnumerable...)")] public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => RazorExceptions.ExAsDynamicKvp(); #region Old AsDynamic with correct warnings /// [PrivateApi] public IEnumerable AsDynamic(IDataStream stream) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); /// [PrivateApi] public IEnumerable AsDynamic(IDataSource source) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); /// [PrivateApi] public IEnumerable AsDynamic(IEnumerable entities) => throw new($"AsDynamic for lists isn't supported here. Please use AsList(...) instead."); #endregion #endregion #region Presentation, ListContent, ListPresentation, List [PrivateApi] [Obsolete("use Content.Presentation instead")] public dynamic Presentation => RazorExceptions.ExPresentation(); [PrivateApi] [Obsolete("Use Header instead")] public dynamic ListContent => RazorExceptions.ExListContent(); [PrivateApi] [Obsolete("Use Header.Presentation instead")] public dynamic ListPresentation => RazorExceptions.ExListPresentation(); [PrivateApi] [Obsolete("This is an old way used to loop things - removed in RazorComponent")] public IEnumerable List => RazorExceptions.ExList(); #endregion #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/Hybrid/ApiTyped.cs ================================================ using ToSic.Eav.Data; using ToSic.Sxc.Apps; using ToSic.Sxc.Code; using ToSic.Sxc.Data; using ToSic.Sxc.Services; using ToSic.Sxc.Context; using System.Web.Http.Results; using ToSic.Eav.DataSource; using ToSic.Eav.Models; using ToSic.Eav.WebApi.Sys; using ToSic.Sxc.Adam; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; using ToSic.Sxc.Services.Sys; using ToSic.Sxc.Sys.ExecutionContext; // ReSharper disable once CheckNamespace namespace Custom.Hybrid; /// /// Base class for v16 [Typed](xref:NetCode.TypedCode.Index) WebAPI files. /// Use it to create custom WebAPI endpoints in your App. /// /// It provides the on property `Kit` which contains all the popular services to create amazing stuff. /// /// /// Important: This is very different from Razor12 or Razor14, as it doesn't rely on `dynamic` code. /// Be aware of this since the APIs are very different - see [Typed Code](xref:NetCode.TypedCode.Index). /// [PublicApi] [DnnLogExceptions] //[DefaultToNewtonsoftForHttpJson] - // !!! v16 should now default to normal [JsonFormatter] public abstract class ApiTyped: DnnSxcCustomControllerBase, IHasCodeLog, IDynamicWebApi, ITypedCode16, IGetCodePath { #region Setup /// /// Main constructor. /// Doesn't have parameters so it can easily be inherited. /// protected ApiTyped() : base(EavWebApiConstants.HistoryNameWebApi) { } /// /// Alternate constructor to use when inheriting, placing the Insights logs in an own section. /// /// Name of the section in Insights protected ApiTyped(string insightsGroup) : base("Api16", insightsGroup) { } internal ICodeTypedApiHelper CodeApi => field ??= ExCtx.GetTypedApi(); /// public ServiceKit16 Kit => field ??= CodeApi.ServiceKit16; /// public new ICodeLog Log => SysHlp.CodeLog; [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel16; #endregion #region Link & Edit - added to API in 2sxc 10.01; CmsContext, Resources, Settings (v12) /// public TService GetService() where TService : class => SysHlp.GetService(); /// // ReSharper disable once MethodOverloadWithOptionalParameter public TService GetService(NoParamOrder npo = default, string typeName = default) where TService : class => AppCodeGetNamedServiceHelper.GetService(owner: this, CodeHelper.Specs, typeName); /// public ILinkService Link => CodeApi?.Link; [PrivateApi("Not yet ready")] [ShowApiWhenReleased(ShowApiMode.Never)] public IDevTools DevTools => CodeHelper.DevTools; #endregion #region MyContext & UniqueKey /// public ICmsContext MyContext => CodeApi.CmsContext; /// public ICmsPage MyPage => CodeApi.CmsContext.Page; /// public ICmsUser MyUser => CodeApi.CmsContext.User; /// public ICmsView MyView => CodeApi.CmsContext.View; /// public string UniqueKey => Kit.Key.UniqueKey; #endregion #region AsDynamic implementations + AsList - all killed in v16 ///// //public dynamic AsDynamic(string json, string fallback = default) => _DynCodeRoot.Cdf.AsDynamicFromJson(json, fallback); ///// //public dynamic AsDynamic(IEntity entity) => _DynCodeRoot.Cdf.AsDynamic(entity); ///// //public dynamic AsDynamic(object dynamicEntity) => _DynCodeRoot.Cdf.AsDynamicInternal(dynamicEntity); ///// //public dynamic AsDynamic(params object[] entities) => _DynCodeRoot.Cdf.MergeDynamic(entities); ///// //public IEntity AsEntity(object dynamicEntity) => _DynCodeRoot.Cdf.AsEntity(dynamicEntity); ///// //public IEnumerable AsList(object list) => _DynCodeRoot?.Cdf.AsDynamicList(list); #endregion #region Adam /// public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => DynHlp.SaveInAdam(stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion #region New App, Settings, Resources /// public IAppTyped App => CodeApi.AppTyped; /// public ITypedStack AllResources => CodeHelper.AllResources; /// public ITypedStack AllSettings => CodeHelper.AllSettings; #endregion #region CreateInstance private CompileCodeHelper CompileCodeHlp => field ??= GetService().Init(this); string IGetCodePath.CreateInstancePath { get; set; } /// public dynamic GetCode(string path, NoParamOrder npo = default, string className = default) => CompileCodeHlp.GetCode(path, className: className); #endregion #region My... Stuff private CodeHelperTypedData CodeHelper => field ??= new(helperSpecs: new(ExCtx, false, ((IGetCodePath)this).CreateInstancePath)); /// public ITypedItem MyItem => CodeHelper.MyItem; /// public IEnumerable MyItems => CodeHelper.MyItems; /// public ITypedItem MyHeader => CodeHelper.MyHeader; /// public IDataSource MyData => CodeApi.Data; #endregion #region As Conversions /// public ITypedItem AsItem(object data, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsItem(data, new() { ItemIsStrict = propsRequired ?? true })!; /// public IEnumerable AsItems(object list, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsItems(list, new() { ItemIsStrict = propsRequired ?? true }); /// public IEntity AsEntity(ICanBeEntity thing) => CodeApi.Cdf.AsEntity(thing); /// public ITyped AsTyped(object original, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsTyped(original, new() { EntryPropIsRequired = false, ItemIsStrict = propsRequired ?? true }); /// public IEnumerable AsTypedList(object list, NoParamOrder npo = default, bool? propsRequired = default) => CodeApi.Cdf.AsTypedList(list, new() { EntryPropIsRequired = false, ItemIsStrict = propsRequired ?? true }); /// public ITypedStack AsStack(params object[] items) => CodeApi.Cdf.AsStack(items); /// public T AsStack(params object[] items) where T : class, IModelFromData, new() => CodeApi.Cdf.AsStack(items); #endregion [PrivateApi] public ITypedRazorModel MyModel => throw new("MyModel isn't meant to work in WebApi"); #region Net Core Compatibility Shims - Copy this entire section to WebApi Files /// public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => Shim.File(download: download, virtualPath: virtualPath, contentType: contentType, fileDownloadName: fileDownloadName, contents: contents); private WebApiCoreShim Shim => new(Request); /// [NonAction] public new OkResult Ok() => base.Ok(); // Shim.Ok(); /// [NonAction] public HttpResponseMessage Ok(object value) => Shim.Ok(value); /// [NonAction] public HttpResponseMessage NoContent() => Shim.NoContent(); // TODO: the Content Shim could now be implemented after 16.02 - since we don't have the Content property any more #region Content (ca. 5 overloads) can't be implemented, because it conflicts with our property "Content" #endregion /// [NonAction] public new RedirectResult Redirect(string url) => base.Redirect(url); // Shim.Redirect(url); /// [NonAction] public HttpResponseMessage RedirectPermanent(string url) => Shim.RedirectPermanent(url); /// [NonAction] public HttpResponseMessage StatusCode(int statusCode) => Shim.StatusCode(statusCode); /// [NonAction] public HttpResponseMessage StatusCode(int statusCode, object value) => Shim.StatusCode(statusCode, value); /// [NonAction] public HttpResponseMessage Unauthorized() => Shim.Unauthorized(); /// [NonAction] public HttpResponseMessage Unauthorized(object value) => Shim.Unauthorized(value); /// [NonAction] public new NotFoundResult NotFound() => base.NotFound();// Shim.NotFound(); /// [NonAction] public HttpResponseMessage NotFound(object value) => Shim.NotFound(value); /// [NonAction] public new BadRequestResult BadRequest() => base.BadRequest(); // Shim.BadRequest(); /// [NonAction] public new ConflictResult Conflict() => base.Conflict(); // Shim.Conflict(); /// [NonAction] public HttpResponseMessage Conflict(object error) => Shim.Conflict(error); /// [NonAction] public HttpResponseMessage Accepted() => Shim.Accepted(); /// [NonAction] public HttpResponseMessage Forbid() => Shim.Forbid(); #endregion #region As / AsList WIP v17 /// public T As(object source, NoParamOrder npo = default) where T : class, IModelFromData => CodeApi.Cdf.AsCustom(source: source, npo: npo); /// public IEnumerable AsList(object source, NoParamOrder npo = default, bool nullIfNull = default) where T : class, IModelFromData => CodeApi.Cdf.AsCustomList(source, npo, nullIfNull); #endregion #region Customize new WIP v17 /// /// WIP /// [PrivateApi("Experiment v17.02+")] [ShowApiWhenReleased(ShowApiMode.Never)] protected ICodeCustomizer Customize => field ??= CodeApi.GetService(reuse: true); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Custom/readme.md ================================================ # ToSic.Sxc.Hybrid for DNN This folder should contain the DNN implementations of the hybrid stuff. ## Notes / Best Practices * We'll create subfolders for managing the code * but all the objects for the custom work should be in the `ToSic.Sxc.Hybrid` namespace don't use sub-namespaces because it just makes the docs harder to read / organize. ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/ApiController.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Apps; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; using ToSic.Sxc.Services; using ToSic.Sxc.Sys.ExecutionContext; namespace ToSic.Sxc.Dnn; /// /// This is the base class for all custom API Controllers.
/// With this, your code receives the full context incl. the current App, DNN, Data, etc. ///
[PublicApi("This was the official base class before v12. Try to move away from it, go to the latest base class on Custom.Hybrid.ApiTyped")] [DnnLogExceptions] [Obsolete("This will continue to work, but you should use the Custom.Hybrid.Api14 or Custom.Dnn.Api12 instead.")] [DefaultToNewtonsoftForHttpJson] [ShowApiWhenReleased(ShowApiMode.Never)] public abstract class ApiController : DnnSxcCustomControllerBase, IHasDnn, ICreateInstance, IDynamicCode, IDynamicWebApi, IHasCodeLog { internal const string ErrRecommendedNamespaces = "To use it, use the new base class from Custom.Hybrid.Api14 or Custom.Dnn.Api12 instead."; internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// /// Probably obsolete, but a bit risky to just remove /// We will only add it to ApiController but not to Api12, because no new code should ever use that. /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public IBlock Block => SysHlp.GetBlockAndContext(Request); [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel9Old; /// public IApp App => CodeApi.App; /// public IDataSource Data => CodeApi.Data; /// public TService GetService() where TService : class => SysHlp.GetService(); /// public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; #region AsDynamic implementations /// public dynamic AsDynamic(string json, string fallback = default) => CodeApi.Cdf.Json2Jacket(json, fallback); /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); #endregion #region AsList /// public IEnumerable AsList(object list) => CodeApi?.Cdf.CodeAsDynList(list); #endregion #region CreateSource implementations /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Content, Presentation & List /// public dynamic Content => CodeApi.Content; /// public dynamic Header => CodeApi.Header; #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => throw new NotSupportedException("Not implemented. " + ErrRecommendedNamespaces); /// public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => DynHlp.SaveInAdam(stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion #region Link & Edit - added to API in 2sxc 10.01 /// public ILinkService Link => CodeApi?.Link; /// public IEditService Edit => CodeApi?.Edit; #endregion #region CmsContext /// public ICmsContext CmsContext => CodeApi?.CmsContext; #endregion #region CreateInstance string IGetCodePath.CreateInstancePath { get; set; } private CompileCodeHelper CompileCodeHlp => field ??= GetService().Init(this); /// public dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => CompileCodeHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion #region IHasLog /// public new ICodeLog Log => SysHlp.CodeLog; #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Adam/AdamController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.PublicApi; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Adam.AdamControllerReal; namespace ToSic.Sxc.Dnn.Backend; /// /// Direct access to app-content items, simple manipulations etc. /// Should check for security at each standard call - to see if the current user may do this /// Then we can reduce security access level to anonymous, because each method will do the security check /// [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] // use view, all methods must re-check permissions [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class AdamController() : DnnSxcControllerBase("Adam"), IAdamController { private RealController Real => SysHlp.GetService(); [HttpPost] [HttpPut] public object Upload(int appId, string contentType, Guid guid, string field, [FromUri] string subFolder = "", bool usePortalRoot = false) => Real.Upload(new(Request, HttpContext.Current.Request), appId, contentType, guid, field, subFolder, usePortalRoot); // Note: #AdamItemDto - as of now, we must use object because System.Io.Text.Json will otherwise not convert the object correctly :( [HttpGet] public IEnumerable Items(int appId, string contentType, Guid guid, string field, string subfolder, bool usePortalRoot = false) => Real.Items(appId, contentType, guid, field, subfolder, usePortalRoot); [HttpPost] public IEnumerable Folder(int appId, string contentType, Guid guid, string field, string subfolder, string newFolder, bool usePortalRoot) => Real.Folder(appId, contentType, guid, field, subfolder, newFolder, usePortalRoot); [HttpGet] public bool Delete(int appId, string contentType, Guid guid, string field, string subfolder, bool isFolder, int id, bool usePortalRoot) => Real.Delete(appId, contentType, guid, field, subfolder, isFolder, id, usePortalRoot); [HttpGet] public bool Rename(int appId, string contentType, Guid guid, string field, string subfolder, bool isFolder, int id, string newName, bool usePortalRoot) => Real.Rename(appId, contentType, guid, field, subfolder, isFolder, id, newName, usePortalRoot); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Adam/DnnAdamSecurityChecks.cs ================================================ using DotNetNuke.Entities.Host; using DotNetNuke.Security.Permissions; using DotNetNuke.Services.FileSystem; using ToSic.Sxc.Adam.Sys.Security; using IAsset = ToSic.Eav.Apps.Assets.IAsset; using IFile = ToSic.Eav.Apps.Assets.IFile; using IFolder = ToSic.Eav.Apps.Assets.IFolder; namespace ToSic.Sxc.Dnn.Backend; internal class DnnAdamSecurityChecks(AdamSecurityChecksBase.Dependencies services) : AdamSecurityChecksBase(services, DnnConstants.LogName) { /// /// Helper to check extension based on DNN settings /// /// /// /// /// mostly a copy from https://github.com/dnnsoftware/Dnn.Platform/blob/115ae75da6b152f77ad36312eb76327cdc55edd7/DNN%20Platform/Modules/Journal/FileUploadController.cs#L72 /// public override bool SiteAllowsExtension(string fileName) { var extension = Path.GetExtension(fileName); return !string.IsNullOrEmpty(extension) && Host.AllowedExtensionWhitelist.IsAllowedExtension(extension.ToLowerInvariant()); } public override bool CanEditFolder(IAsset item) { var id = (item as IFolder)?.Id ?? (item as IFile)?.ParentId ?? throw new ArgumentException("Should be a DNN asset", nameof(item)); if (FolderManager.Instance.GetFolder(id) is not FolderInfo folderInfo) return false; return FolderPermissionController.CanAddFolder(folderInfo) // ex: "WRITE" core folder permission || FolderPermissionController.CanAdminFolder(folderInfo) // ex: "WRITE" core folder permission || FolderPermissionController.CanManageFolder(folderInfo) // ex: "WRITE" core folder permission || FolderPermissionController.CanDeleteFolder(folderInfo) // ex: "WRITE" core folder permission || FolderPermissionController.CanCopyFolder(folderInfo); // ex: "WRITE" core folder permission } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/ApiExplorerController.cs ================================================ using System.Reflection; using System.Web.Compilation; using System.Web.Hosting; using ToSic.Eav.Apps.Sys.AppJson; using ToSic.Eav.Context; using ToSic.Eav.WebApi.Sys.ApiExplorer; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Dnn.Compile; using ToSic.Sxc.Dnn.Compile.Sys; using ToSic.Sxc.Dnn.Integration; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Polymorphism.Sys; using RealController = ToSic.Eav.WebApi.Sys.ApiExplorer.ApiExplorerControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ShowApiWhenReleased(ShowApiMode.Never)] public class ApiExplorerController() : DnnSxcControllerRoot(RealController.LogSuffix), IApiExplorerController { private RealController Real => SysHlp.GetService(); [HttpGet] public HttpResponseMessage Inspect(string path) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Inspect(path, GetCompiledAssembly); } private Assembly GetCompiledAssembly(string path) { var className = Path.GetFileNameWithoutExtension(path); Log.A($"Class name: {className}"); var controllerVirtualPath = Path.Combine( SysHlp.GetService().Setup(Request).GetAppFolderVirtualPath(SysHlp.GetService()), path); Log.A($"Controller Virtual Path: {controllerVirtualPath}"); if (!File.Exists(HostingEnvironment.MapPath(controllerVirtualPath))) throw new($"Error: can't find controller file: {controllerVirtualPath}"); Assembly assembly; var appJson = SysHlp.GetService(); var block = SysHlp.GetService().GetCmsBlock(Request); var codeFileInfo = SysHlp.GetService().TypeOfVirtualPath(controllerVirtualPath); if ((block != null && appJson.DnnCompilerAlwaysUseRoslyn(block.AppId)) || codeFileInfo.AppCode || FileInAppCode(path)) { Log.A("has AppCode"); // Figure edition HotBuildSpec spec = null; if (block != null) { var edition = SysHlp.GetService().UseViewEditionOrGet(block); spec = new(block.AppId, edition: edition, appName: block.App.Name); } assembly = SysHlp.GetService().GetCompiledAssembly(codeFileInfo, className, spec)?.Assembly; } else { assembly = BuildManager.GetCompiledAssembly(controllerVirtualPath); } if (assembly == null) throw new("Assembly not found or compiled to null (error)."); return assembly; } [HttpGet] [JsonFormatter(Casing = Casing.Camel)] public AllApiFilesDto AppApiFiles(int appId) => Real.AppApiFiles(appId); private bool FileInAppCode(string path) => path.StartsWith("AppCode\\api\\", StringComparison.InvariantCultureIgnoreCase) || path.ContainsInsensitive("\\AppCode\\api\\"); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/AppController.cs ================================================ using System.Web; using ToSic.Eav.DataSources.Sys; using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Eav.WebApi.Sys.ImportExport; using ToSic.Sxc.Dnn.WebApi.Sys; using AppDto = ToSic.Eav.WebApi.Sys.Dto.AppDto; using RealController = ToSic.Sxc.Backend.Admin.AppControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; // [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] can't be used, because it forces the security // token, which fails in the cases where the url is called using get, which should result in a download // [ValidateAntiForgeryToken] because the exports are called by the browser directly (new tab) // we can't set this globally (only needed for imports) [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class AppController() : DnnSxcControllerBase(RealController.LogSuffix), IAppController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ICollection List(int zoneId) => Real.List(zoneId); /// [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public ICollection InheritableApps() => Real.InheritableApps(); /// [HttpDelete] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public void App(int zoneId, int appId, bool fullDelete = true) { SysHlp.PreventServerTimeout600(); Real.App(zoneId, appId, fullDelete); } /// [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public void App(int zoneId, string name, int? inheritAppId = null) => Real.App(zoneId, name, inheritAppId); /// [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ICollection Languages(int appId) => Real.Languages(appId); /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public AppExportInfoDto Statistics(int zoneId, int appId) => Real.Statistics(zoneId, appId); /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool FlushCache(int zoneId, int appId) => Real.FlushCache(zoneId, appId); /// [HttpGet] public HttpResponseMessage Export(int zoneId, int appId, bool includeContentGroups, bool resetAppGuid, bool assetsAdam, bool assetsSite, bool assetAdamDeleted = true) => Real.Export(new(zoneId, appId, includeContentGroups, resetAppGuid, assetsAdam, assetsSite, assetAdamDeleted)) .ToHttpResponse(); /// [HttpGet] [ValidateAntiForgeryToken] public async Task SaveData(int zoneId, int appId, bool includeContentGroups, bool resetAppGuid, bool withPortalFiles = false) => (await Real.SaveData(new(zoneId, appId, includeContentGroups, resetAppGuid, WithSiteFiles: withPortalFiles))).Data; /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public Task Reset(int zoneId, int appId, bool withPortalFiles = false) { SysHlp.PreventServerTimeout600(); return Real.Reset(zoneId, appId, PortalSettings.DefaultLanguage, withPortalFiles); } /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public List GetStack(int appId, string part, string key = null, Guid? view = null) => Real.GetStack(appId, part, key, view); /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ImportResultDto Import(int zoneId) { SysHlp.PreventServerTimeout600(); return Real.Import(new(Request, HttpContext.Current.Request), zoneId, HttpContext.Current.Request["Name"]); } /// [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public IEnumerable GetPendingApps(int zoneId) => Real.GetPendingApps(zoneId); /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ImportResultDto InstallPendingApps(int zoneId, IEnumerable pendingApps) { SysHlp.PreventServerTimeout600(); return Real.InstallPendingApps(zoneId, pendingApps); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/AppExtensionsController.cs ================================================ using System.Web; using ToSic.Eav.Apps.Sys.FileSystemState; using ToSic.Eav.WebApi.Sys.ImportExport; using ToSic.Sxc.Backend.Admin; using ToSic.Sxc.Backend.App; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.AppExtensionsControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class AppExtensionsController() : DnnSxcControllerBase(RealController.LogSuffix), IAppExtensionsController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [JsonFormatter(Casing = Casing.Camel)] public ExtensionsResultDto Extensions(int appId) => Real.Extensions(appId); /// [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public PreflightResultDto InstallPreflight(int appId, string editions = "") => Real.InstallPreflight(new(Request, HttpContext.Current.Request), appId, editions); /// [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public PreflightResultDto InstallPreflightFrom(int appId, [FromBody] string[] urls, string editions = "") { SysHlp.PreventServerTimeout600(); return Real.InstallPreflightFrom(urls, appId, editions); } /// [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Install(int zoneId, int appId, string editions = "", bool overwrite = false) => Real.Install(new(Request, HttpContext.Current.Request), zoneId, appId, editions, overwrite); /// [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool InstallFrom(int zoneId, int appId, [FromBody] string[] urls, string editions = "", bool overwrite = false) { SysHlp.PreventServerTimeout600(); return Real.InstallFrom(urls, zoneId, appId, editions, overwrite); } /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [JsonFormatter(Casing = Casing.Camel)] public ExtensionInspectResultDto Inspect(int appId, string name, string edition = null) => Real.Inspect(appId, name, edition); /// /// Update/create endpoint using PUT with name as route segment. [Route("api/2sxc/admin/[controller]/{name}")] [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [JsonFormatter(Casing = Casing.Camel)] public new bool Configuration(int appId, [FromUri] string name, [FromBody] ExtensionManifest configuration) => Real.Configuration(appId, name, configuration); ///// ///// Alias POST endpoint for front-ends posting to /appExtensions/extensions with query parameters. ///// Matches plural POST behavior to avoid 405 errors if client uses POST. ///// ////[ActionName("extensions")] //[HttpPost] //[ValidateAntiForgeryToken] //[SupportedModules(DnnSupportedModuleNames)] //[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] //[JsonFormatter(Casing = Casing.Camel)] //public bool Extensions(int appId, string name, [FromBody] ExtensionManifest configuration) // => Real.Extension(appId, name, configuration); /// [HttpGet] // Note: since this is a GET download, there is no ValidateAntiForgeryToken and no header with the module names //[ValidateAntiForgeryToken] //[SupportedModules(DnnSupportedModuleNames)] [DnnAuthorize(StaticRoles = "Administrators")] public HttpResponseMessage Download(int appId, string name) => Real.Download(appId, name).ToHttpResponse(); /// [HttpDelete] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [JsonFormatter(Casing = Casing.Camel)] public bool Delete(int appId, string name, string edition = null, bool force = false, bool withData = false) => Real.Delete(appId, name, edition, force, withData); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/AppFilesController.cs ================================================ using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Apps.Sys.EditAssets; using ToSic.Sxc.Backend.Admin.AppFiles; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.AppFiles.AppFilesControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// This one supplies portal-wide (or cross-portal) settings / configuration /// [SupportedModules(DnnSupportedModuleNames)] [DnnLogExceptions] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class AppFilesController() : DnnSxcControllerBase(RealController.LogSuffix), IAppFilesController { private RealController Real => SysHlp.GetService(); [HttpGet] public ICollection All(int appId, bool global, string path = null, string mask = "*.*", bool withSubfolders = false, bool returnFolders = false) => Real.All(appId, global, path, mask, withSubfolders, returnFolders); [HttpGet] public AssetEditInfo Asset(int appId, int templateId = 0, string path = null, // identifier is always one of these two bool global = false) => Real.Asset(appId, templateId, path, global); [HttpPost] public bool Create( [FromUri] int appId, [FromUri] string path, [FromUri] bool global, [FromUri] string templateKey) => Real.Create(appId, path, global, templateKey); [HttpPost] public bool Asset( [FromUri] int appId, [FromBody] AssetEditInfo template, [FromUri] int templateId = 0, [FromUri] string path = null, // identifier is either template Id or path // todo w/SPM - global never seems to be used - must check why and if we remove or add to UI // TODO: NEW PARAM TEMPLATEKey SHOULD BE USED TO CREATE THE FILE [FromUri] bool global = false) => Real.Asset(appId: appId, template: template, templateId: templateId, path: path, global: global); [HttpGet] public TemplatesDto GetTemplates(string purpose = null, string type = null) => Real.GetTemplates(purpose, type); [HttpGet] public TemplatePreviewDto Preview(int appId, string path, string templateKey, bool global = false) => Real.Preview(appId, path, templateKey, global); [HttpGet] public AllFilesDto AppFiles(int appId, string path = null, string mask = null) => Real.AppFiles(appId, path, mask); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/AppInternalsController.cs ================================================ using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Admin.AppInternalsControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Proxy Class to the AppInternalsController (Web API Controller) /// [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class AppInternalsController() : DnnSxcControllerBase(RealController.LogSuffix), IAppInternalsController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public AppInternalsDto Get(int appId) => Real.Get(appId); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/AppPartsController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.AppPartsControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; // [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] can't be used, because it forces the security // token, which fails in the cases where the url is called using get, which should result in a download [ShowApiWhenReleased(ShowApiMode.Never)] public class AppPartsController() : DnnSxcControllerRoot(RealController.LogSuffix), IAppPartsController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] public ExportPartsOverviewDto Get(int zoneId, int appId, string scope) => Real.Get(zoneId: zoneId, appId: appId, scope: scope); /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage Export(int zoneId, int appId, string contentTypeIdsString, string entityIdsString, string templateIdsString) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Export(zoneId: zoneId, appId: appId, contentTypeIdsString: contentTypeIdsString, entityIdsString: entityIdsString, templateIdsString: templateIdsString); } /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] public ImportResultDto Import(int zoneId, int appId) { SysHlp.PreventServerTimeout600(); return Real.Import(uploadInfo: new(Request, HttpContext.Current.Request), zoneId: zoneId, appId: appId); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/CodeController.cs ================================================ using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.CodeControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; [ShowApiWhenReleased(ShowApiMode.Never)] public class CodeController() : DnnSxcControllerBase(RealController.LogSuffix) { private RealController Real => SysHlp.GetService(); [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public IEnumerable InlineHelp(string language) => Real.InlineHelp(language); [HttpGet] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public RichResult GenerateDataModels(int appId, string generator, string edition = null, int configurationId = 0) => Real.GenerateDataModels(appId, edition, generator: generator, configurationId: configurationId); // #MigrateSimpleDataToSysDataAccess //[HttpGet] //[JsonFormatter] //[ValidateAntiForgeryToken] //[SupportedModules(DnnSupportedModuleNames)] //[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] //public EditionsDto GetEditions(int appId) // => Real.GetEditions(appId); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/DataController.cs ================================================ using System.Web; using ToSic.Eav.Apps.Sys.Work; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Backend.Admin; using ToSic.Sxc.Dnn.WebApi.Sys; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Web API Controller for app data bundles etc. /// /// /// Because download JSON call is made in a new window, they won't contain any http-headers like module-id or security token. /// So we can't use the classic protection attributes to the class like: /// - [SupportedModules(DnnSupportedModuleNames)] /// - [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] /// - [ValidateAntiForgeryToken] /// Instead, each method must have all attributes, or do additional security checking. /// Security checking is possible, because the cookie still contains user information /// [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class DataController() : DnnSxcControllerBase(DataControllerReal.LogSuffix), IAdminDataController { private DataControllerReal Real => SysHlp.GetService(); /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage BundleExport(int appId, Guid exportConfiguration, int indentation = 0) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.BundleExport(appId, exportConfiguration, indentation); } /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] public ImportResultDto BundleImport(int zoneId, int appId) { SysHlp.PreventServerTimeout600(); return Real.BundleImport(new(Request, HttpContext.Current.Request), zoneId, appId); } /// [HttpGet] [AllowAnonymous] // will do security check internally public bool BundleSave(int appId, Guid exportConfiguration, int indentation = 0) => Real.BundleSave(appId, exportConfiguration, indentation); /// [HttpGet] [AllowAnonymous] // will do security check internally public bool BundleRestore(string fileName, int zoneId, int appId) => Real.BundleRestore(fileName, zoneId, appId); ///// //[HttpGet] //[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] //public IReadOnlyList GetRecycleBin(int appId) // => Real.GetRecycleBin(appId); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public void Recycle(int appId, int transactionId) => Real.Recycle(appId, transactionId); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/DialogController.cs ================================================ using ToSic.Sxc.Backend.Admin; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.DialogControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// This one supplies portal-wide (or cross-portal) settings / configuration /// [SupportedModules(DnnSupportedModuleNames)] [DnnLogExceptions] // 2dm 2024-01-26 changed from "Admin" to "Edit" because it's used in the quick-dialog. // It needs "Edit" to get settings for the quick-dialog-add-inner content // https://github.com/2sic/2sxc/issues/3234 // If we refactor the quick-dialog it should provide the settings directly in the main call // And not need this any more - then we can switch back to "Admin" [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class DialogController() : DnnSxcControllerBase(RealController.LogSuffix), IDialogController { private RealController Real => SysHlp.GetService(); [HttpGet] public DialogContextStandaloneDto Settings(int appId) => Real.Settings(appId); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/DnnApiInspector.cs ================================================ using System.Reflection; using ToSic.Eav.WebApi.Sys.ApiExplorer; namespace ToSic.Sxc.Dnn.Backend.Admin; internal class DnnApiInspector() : ServiceBase(DnnConstants.LogName), IApiInspector { public bool IsBody(ParameterInfo paramInfo) => paramInfo.CustomAttributes.Any(ca => ca.AttributeType == typeof(FromBodyAttribute)); public List GetHttpVerbs(MethodInfo methodInfo) { var httpMethods = new List(); var getAtt = methodInfo.GetCustomAttribute(); if (getAtt != null) httpMethods.Add(getAtt.HttpMethods[0].Method); var postAtt = methodInfo.GetCustomAttribute(); if (postAtt != null) httpMethods.Add(postAtt.HttpMethods[0].Method); var putAtt = methodInfo.GetCustomAttribute(); if (putAtt != null) httpMethods.Add(putAtt.HttpMethods[0].Method); var deleteAtt = methodInfo.GetCustomAttribute(); if (deleteAtt != null) httpMethods.Add(deleteAtt.HttpMethods[0].Method); var acceptVerbsAtt = methodInfo.GetCustomAttribute(); if (acceptVerbsAtt != null) httpMethods.AddRange(acceptVerbsAtt.HttpMethods.Select(m => m.Method)); return httpMethods; } public ApiSecurityDto GetSecurity(MemberInfo member) { var dnnAuthList = member.GetCustomAttributes().ToList(); return new() { ignoreSecurity = member.GetCustomAttribute() != null, allowAnonymous = dnnAuthList.Any(a => a.AccessLevel == SecurityAccessLevel.Anonymous), requireVerificationToken = member.GetCustomAttribute() != null, superUser = dnnAuthList.Any(a => a.AccessLevel == SecurityAccessLevel.Host), admin = dnnAuthList.Any(a => a.AccessLevel == SecurityAccessLevel.Admin), edit = dnnAuthList.Any(a => a.AccessLevel == SecurityAccessLevel.Edit), view = dnnAuthList.Any(a => a.AccessLevel == SecurityAccessLevel.View), // if it has any dnn authorize attributes or supported-modules it needs the context requireContext = dnnAuthList.Any() || member.GetCustomAttribute() != null, }; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/EntityController.cs ================================================ using ToSic.Eav.ImportExport.Sys.Options; using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using Guid = System.Guid; using RealController = ToSic.Eav.WebApi.Sys.Admin.EntityControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Proxy Class to the EAV EntitiesController (Web API Controller) /// /// /// Because download JSON call is made in a new window, they won't contain any http-headers like module-id or security token. /// So we can't use the classic protection attributes to the class like: /// - [SupportedModules(DnnSupportedModuleNames)] /// - [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] /// - [ValidateAntiForgeryToken] /// Instead, each method must have all attributes, or do additional security checking. /// Security checking is possible, because the cookie still contains user information /// [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class EntityController() : DnnSxcControllerBase(RealController.LogSuffix), IEntityController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public IEnumerable> List(int appId, string contentType) => Real.List(appId, contentType); /// [HttpDelete] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public void Delete(string contentType, int appId, int? id = null, Guid? guid = null, bool force = false, int? parentId = null, string parentField = null) => Real.Delete(contentType, appId, id, guid, force, parentId, parentField); /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage Json(int appId, int id, string prefix, bool withMetadata) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Json(appId, id, prefix, withMetadata); } /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage Download( int appId, string language, string defaultLanguage, string contentType, ExportSelection recordExport, ExportResourceReferenceMode resourcesReferences, ExportLanguageResolution languageReferences, string selectedIds = null) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Download(appId, language, defaultLanguage, contentType, recordExport, resourcesReferences, languageReferences, selectedIds); } /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public ContentImportResultDto XmlPreview(ContentImportArgsDto args) => Real.XmlPreview(args); /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public ContentImportResultDto XmlUpload(ContentImportArgsDto args) => Real.XmlUpload(args); /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public bool Upload(EntityImportDto args) => Real.Upload(args); ///// //// not final yet, so no [HttpGet] //public dynamic Usage(int appId, Guid guid) => Real.Usage(appId, guid); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/FeatureController.cs ================================================ using ToSic.Eav.WebApi.Sys.Admin.Features; using ToSic.Eav.WebApi.Sys.Licenses; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sys.Capabilities.Features; using RealController = ToSic.Eav.WebApi.Sys.Admin.Features.FeatureControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Provide information about activated features which will be managed externally. /// /// /// Added in 2sxc 10 /// [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class FeatureController() : DnnSxcControllerRoot(RealController.LogSuffix), IFeatureController { private RealController Real => SysHlp.GetService(); [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public FeatureStateDto Details(string nameId) => Real.Details(nameId); /// /// POST updated features JSON configuration. /// /// /// Added in 2sxc 13 /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public bool SaveNew([FromBody] List changes) => Real.SaveNew(changes); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/FieldController.cs ================================================ using ToSic.Eav.Apps.Sys; using ToSic.Eav.Data.Sys; using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Admin.FieldControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Web API Controller for Content-Type structures, fields etc. /// [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ShowApiWhenReleased(ShowApiMode.Never)] public class FieldController() : DnnSxcControllerBase(RealController.LogSuffix), IFieldController { private RealController Real => SysHlp.GetService(); #region Fields - Get, Reorder, Data-Types (for dropdown), etc. /// /// Returns the configuration for a content type /// [HttpGet] public IEnumerable All(int appId, string staticName) => Real.All(appId, staticName); /// /// Used to be GET ContentType/DataTypes /// [HttpGet] public string[] DataTypes(int appId) => Real.DataTypes(appId); /// /// Used to be GET ContentType/InputTypes /// [HttpGet] public ICollection InputTypes(int appId) => Real.InputTypes(appId); /// [HttpGet] public Dictionary ReservedNames() => AttributeNames.ReservedNames; /// /// Used to be GET ContentType/AddField /// [HttpPost] public int Add(int appId, int contentTypeId, string staticName, string type, string inputType, int index) => Real.Add(appId, contentTypeId, staticName, type, inputType, index); /// /// Used to be GET ContentType/DeleteField /// [HttpDelete] public bool Delete(int appId, int contentTypeId, int attributeId) => Real.Delete(appId, contentTypeId, attributeId); /// /// Used to be GET ContentType/Reorder /// [HttpPost] public bool Sort(int appId, int contentTypeId, string order) => Real.Sort(appId, contentTypeId, order); /// /// Used to be GET ContentType/UpdateInputType /// [HttpPost] public bool InputType(int appId, int attributeId, string inputType) => Real.InputType(appId, attributeId, inputType); #endregion /// /// Used to be GET ContentType/Rename /// [HttpPost] public void Rename(int appId, int contentTypeId, int attributeId, string newName) => Real.Rename(appId, contentTypeId, attributeId, newName); #region Sharing and Inheriting [HttpGet] public IEnumerable GetSharedFields(int appId, int attributeId = default) => Real.GetSharedFields(appId, attributeId); [HttpGet] public IEnumerable GetAncestors(int appId, int attributeId) => Real.GetAncestors(appId, attributeId); [HttpGet] public IEnumerable GetDescendants(int appId, int attributeId) => Real.GetDescendants(appId, attributeId); [HttpPost] public bool Share(int appId, int attributeId, bool share, bool hide = false) => Real.Share(appId, attributeId, share, hide); [HttpPost] public bool Inherit(int appId, int attributeId, Guid inheritMetadataOf) => Real.Inherit(appId, attributeId, inheritMetadataOf); [HttpPost] public bool AddInheritedField(int appId, int contentTypeId, string sourceType, Guid sourceField, string name) => Real.AddInheritedField(appId, contentTypeId, sourceType, sourceField, name); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/MetadataController.cs ================================================ using ToSic.Eav.WebApi.Sys.Admin.Metadata; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Admin.Metadata.MetadataControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class MetadataController() : DnnSxcControllerBase(RealController.LogSuffix), IMetadataController { private RealController Real => SysHlp.GetService(); [HttpGet] public MetadataListDto Get(int appId, int targetType, string keyType, string key, string contentType = null) => Real.Get(appId, targetType, keyType, key, contentType); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/QueryController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.Sys.Admin.Query; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.Query.QueryControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Proxy Class to the EAV PipelineDesignerController (Web API Controller) /// [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [DnnLogExceptions] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class QueryController() : DnnSxcControllerBase(RealController.LogSuffix, RealController.LogGroup, firstMessage: $"Query: {HttpContext.Current?.Request.Url.AbsoluteUri.After("/query/")}"), IQueryController { private RealController Real => SysHlp.GetService(); [HttpGet] public QueryDefinitionDto Get(int appId, int? id = null) => Real.Get(appId, id); [HttpGet] public IEnumerable DataSources(int zoneId, int appId) => Real.DataSources(new(zoneId, appId)); [HttpPost] public QueryDefinitionDto Save([FromBody] QueryDefinitionDto data, int appId, int id) => Real.Save(data, appId, id); [HttpGet] public QueryRunDto RunDev(int appId, int id, int top = 0) => Real.RunDev(appId, id, top); [HttpGet] public QueryRunDto DebugStream(int appId, int id, string from, string @out, int top = 25) => Real.DebugStream(appId, id, @from, @out, top); [HttpGet] public void Clone(int appId, int id) => Real.Clone(appId, id); [HttpDelete] public bool Delete(int appId, int id) => Real.DeleteIfUnused(appId, id); [HttpPost] public bool Import(EntityImportDto args) => Real.Import(args); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/TypeController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Backend.Admin; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.TypeControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; /// /// Web API Controller for Content-Type structures, fields etc. /// /// /// Because download JSON call is made in a new window, they won't contain any http-headers like module-id or security token. /// So we can't use the classic protection attributes to the class like: /// - [SupportedModules(DnnSupportedModuleNames)] /// - [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] /// - [ValidateAntiForgeryToken] /// Instead, each method must have all attributes, or do additional security checking. /// Security checking is possible, because the cookie still contains user information /// [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class TypeController() : DnnSxcControllerBase(RealController.LogSuffix), ITypeController { private RealController Real => SysHlp.GetService(); /// /// Get a list of all content-types. /// See https://docs.2sxc.org/basics/data/content-types/index.html /// /// /// /// /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public IEnumerable List(int appId, string scope = null, bool withStatistics = false) => Real.List(appId, scope, withStatistics); /// /// Used to be GET Scopes. /// Scopes are a way to organize content types, see https://docs.2sxc.org/basics/data/content-types/scopes.html /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ScopesDto Scopes(int appId) => Real.Scopes(appId); /// /// Used to be GET ContentTypes. /// See https://docs.2sxc.org/basics/data/content-types/index.html /// [HttpGet] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public ContentTypeDto Get(int appId, string contentTypeId, string scope = null) => Real.Get(appId, contentTypeId, scope); /// /// Delete a Content-Type /// /// /// /// /// /// ATM it requires the DELETE verb, but this often causes problems on IIS with WebDav. /// TODO: probably switch over to use Get again, even if it's not as descriptive as delete /// [HttpDelete] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Delete(int appId, string staticName) => Real.Delete(appId, staticName); /// /// Save a Content-Type. /// See https://docs.2sxc.org/basics/data/content-types/index.html /// /// /// /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] // 2019-11-15 2dm special change: item to be Dictionary because in DNN 9.4 // it causes problems when a content-type has metadata, where a value then is a deeper object // in future, the JS front-end should send something clearer and not the whole object public bool Save(int appId, Dictionary item) => Real.Save(appId, item); /// /// Used to add a Ghost content-type. /// See https://docs.2sxc.org/basics/data/content-types/range-app-shared.html /// /// /// /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public bool AddGhost(int appId, string sourceNameId) => Real.AddGhost(appId, sourceNameId); /// /// Change which attribute on a Content-Type is the title. /// /// /// /// [HttpPost] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public void SetTitle(int appId, int contentTypeId, int attributeId) => Real.SetTitle(appId, contentTypeId, attributeId); /// /// Export a Content-Type as JSON /// /// /// New in 2sxc 11.07 /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage Json(int appId, string name) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Json(appId, name); } /// /// Used to be POST ImportExport/ImportContent /// /// /// New in 2sxc 11.07 /// /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] public ImportResultDto Import(int zoneId, int appId) { SysHlp.PreventServerTimeout600(); return Real.Import(new(Request, HttpContext.Current.Request), zoneId, appId); } /// /// Json Bundle Export /// /// /// New in 2sxc v15.x /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage JsonBundleExport(int appId, Guid exportConfiguration, int indentation = 0) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.JsonBundleExport(appId, exportConfiguration, indentation); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/ViewController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.Sys.Context; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Backend.Admin; using ToSic.Sxc.Backend.Views; using ToSic.Sxc.Dnn.Backend.Context; using ToSic.Sxc.Dnn.Pages; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Admin.ViewControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class ViewController() : DnnSxcControllerBase(RealController.LogSuffix), IViewController { private RealController Real => SysHlp.GetService(); /// [HttpGet] [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public IEnumerable All(int appId) => Real.All(appId); /// [HttpGet, HttpDelete] [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Delete(int appId, int id) => Real.Delete(appId, id); /// [HttpGet] [AllowAnonymous] // will do security check internally public HttpResponseMessage Json(int appId, int viewId) { // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.Json(appId, viewId); } /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] public ImportResultDto Import(int zoneId, int appId) { SysHlp.PreventServerTimeout600(); return Real.Import(new(Request, HttpContext.Current.Request), zoneId, appId); } /// [HttpGet] [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public IEnumerable Usage(int appId, Guid guid) => Real.UsagePreparations((views, blocks) => { // create array with all 2sxc modules in this portal var allMods = new DnnPages(Log).AllModulesWithContent(PortalSettings.PortalId); Log.A($"Found {allMods.Count} modules"); return views.Select(vwb => vwb.Init(blocks, allMods)); }) .Usage(appId, guid); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Admin/ZoneController.cs ================================================ using ToSic.Eav.WebApi.Sys.Admin; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Eav.WebApi.Sys.Zone; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Admin.ZoneControllerReal; namespace ToSic.Sxc.Dnn.Backend.Admin; [SupportedModules(DnnSupportedModuleNames)] [DnnLogExceptions] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class ZoneController() : DnnSxcControllerBase(RealController.LogSuffix), IZoneController { private RealController Real => SysHlp.GetService(); /// [HttpGet] public IList GetLanguages() => Real.GetLanguages(); /// [HttpGet] public void SwitchLanguage(string cultureCode, bool enable) => Real.SwitchLanguage(cultureCode, enable); /// [HttpGet] public SystemInfoSetDto GetSystemInfo() => Real.GetSystemInfo(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/App/AppDataController.cs ================================================ using ToSic.Eav.WebApi.Sys.App; using ToSic.Sxc.Dnn.WebApi.Sys; using static ToSic.Eav.WebApi.Sys.EavWebApiConstants; using RealController = ToSic.Sxc.Backend.App.AppDataControllerReal; namespace ToSic.Sxc.Dnn.Backend.App; /// [AllowAnonymous] [ShowApiWhenReleased(ShowApiMode.Never)] public class AppDataController() : DnnSxcControllerBase(RealController.LogSuffix), IAppDataController { private RealController Real => SysHlp.GetService(); #region Get List / all of a certain content-type /// [HttpGet] [AllowAnonymous] // will check security internally, so assume no requirements public IEnumerable> GetEntities(string contentType, string appPath = default, [FromUri] IDictionary queryParams = null) => Real.GetEntities(contentType, appPath, uri: Request.RequestUri); #endregion #region GetOne by ID / GUID /// [HttpGet] [AllowAnonymous] // will check security internally, so assume no requirements public IDictionary GetOne(string contentType, string guid, string appPath = default, [FromUri] IDictionary queryParams = null) // this will handle Guid => Real.GetOne(contentType, guid, appPath, uri: Request.RequestUri); [HttpGet] [AllowAnonymous] // will check security internally, so assume no requirements public IDictionary GetOne(string contentType, int id, string appPath = default, [FromUri] IDictionary queryParams = null) // this will handle int id => Real.GetOne(contentType, id.ToString(), appPath, uri: Request.RequestUri); #endregion #region Create /// [HttpPost] [AllowAnonymous] // will check security internally, so assume no requirements public IDictionary CreateOrUpdate( [FromUri] string contentType, [FromBody] Dictionary newContentItem, [FromUri] int? id = null, [FromUri] string appPath = null) => Real.CreateOrUpdate(contentType, newContentItem, id, appPath); #endregion #region Delete /// [HttpDelete] [AllowAnonymous] // will check security internally, so assume no requirements public void Delete(string contentType, string guid, [FromUri] string appPath = null) // this will handle Guid => Real.Delete(contentType, guid, appPath); [HttpDelete] [AllowAnonymous] // will check security internally, so assume no requirements public void Delete(string contentType, int id, [FromUri] string appPath = null) // this will handle int id => Real.Delete(contentType, id.ToString(), appPath); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/App/AppQueryController.cs ================================================ using ToSic.Eav.DataFormats.EavLight; using ToSic.Eav.WebApi.Sys.Admin.App; using ToSic.Eav.WebApi.Sys.Admin.Query; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.App.AppQueryControllerReal; namespace ToSic.Sxc.Dnn.Backend.App; [AllowAnonymous] // All functions will check security internally, so assume no requirements [ShowApiWhenReleased(ShowApiMode.Never)] public class AppQueryController() : DnnSxcControllerBase(RealController.LogSuffix), IAppQueryController { private RealController Real => SysHlp.GetService(); // GET is separated from POST to solve HttpResponseException that happens when // 'content-type' header is missing (or in GET request) on the endpoint that has [FromBody] in signature [HttpGet] public IDictionary> Query( [FromUri] string name, [FromUri] int? appId = null, [FromUri] string stream = null, [FromUri] bool? includeGuid = false ) => Real.Query(name, appId, stream, includeGuid); [HttpPost] public IDictionary> QueryPost ([FromUri] string name, [FromBody] QueryParametersDtoFromClient more, [FromUri] int? appId = null, [FromUri] string stream = null, [FromUri] bool? includeGuid = false ) => Real.QueryPost(name, more, appId, stream, includeGuid); [HttpGet] public IDictionary> PublicQuery( [FromUri] string appPath, [FromUri] string name, [FromUri] string stream = null ) => Real.PublicQuery(appPath, name, stream); [HttpPost] public IDictionary> PublicQueryPost( [FromUri] string appPath, [FromUri] string name, [FromBody] QueryParametersDtoFromClient more, [FromUri] string stream = null ) => Real.PublicQueryPost(appPath, name, more, stream); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/App/CacheController.cs ================================================ using ToSic.Sxc.Backend.App; using ToSic.Sxc.Dnn.WebApi.Sys; namespace ToSic.Sxc.Dnn.Backend.App; [ShowApiWhenReleased(ShowApiMode.Never)] public class CacheController() : DnnSxcControllerBase(CacheControllerReal.LogSuffix) { private CacheControllerReal Real => SysHlp.GetService(); // Handles the app/auto/cache/flush route, using the current block context unless an appId is supplied. [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Flush([FromBody] AppCacheFlushSpecs specs, [FromUri] int? appId = null) => Real.FlushAuto(appId, specs); // Handles the named-app route app/{appPath}/cache/flush for callers outside of a block context. [HttpPost] [ValidateAntiForgeryToken] [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Flush([FromUri] string appPath, [FromBody] AppCacheFlushSpecs specs) => Real.Flush(appPath, specs); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Cms/BlockController.cs ================================================ using ToSic.Sxc.Apps.Sys.Ui; using ToSic.Sxc.Backend.Cms; using ToSic.Sxc.Backend.InPage; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Cms.BlockControllerReal; namespace ToSic.Sxc.Dnn.Backend.Cms; [ValidateAntiForgeryToken] // cannot use this, as most requests now come from a lone page [SupportedModules(DnnSupportedModuleNames)] [ShowApiWhenReleased(ShowApiMode.Never)] public class BlockController() : DnnSxcControllerBase(RealController.LogSuffix), IBlockController { private RealController Real => SysHlp.GetService(); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public string Block(int parentId, string field, int index, string app = "", Guid? guid = null) => Real.Block(parentId, field, index, app, guid); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public void Item([FromUri] int? index = null) => Real.Item(index); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public void App(int? appId) => Real.App(appId); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public IEnumerable Apps(string apps = null) => Real.Apps(apps); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public IEnumerable ContentTypes() => Real.ContentTypes(); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public IEnumerable Templates() => Real.Templates(); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public Guid? Template(int templateId, bool forceCreateContentGroup) => Real.Template(templateId, forceCreateContentGroup); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public AjaxRenderDto Render([FromUri] int templateId, [FromUri] string lang, [FromUri] string edition) => Real.Set(DnnConstants.SysFolderRootVirtual.Trim('~')).Render(templateId, lang, edition); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public bool Publish(string part, int index) => Real.Publish(part, index); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Cms/ContentGroupController.cs ================================================ using ToSic.Sxc.Backend.Cms; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Cms.ContentGroupControllerReal; namespace ToSic.Sxc.Dnn.Backend.Cms; [ShowApiWhenReleased(ShowApiMode.Never)] public class ContentGroupController() : DnnSxcControllerBase(RealController.LogSuffix), IContentGroupController { private RealController Real => SysHlp.GetService(); [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public EntityInListDto Header(Guid guid) => Real.Header(guid); // TODO: shouldn't be part of ContentGroupController any more, as it's generic now [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public void Replace(Guid guid, string part, int index, int entityId, bool add = false) => Real.Replace(guid, part, index, entityId, add); // TODO: WIP changing this from ContentGroup editing to any list editing [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public ReplacementListDto Replace(Guid guid, string part, int index) => Real.Replace(guid, part, index); [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public List ItemList(Guid guid, string part) => Real.ItemList(guid, part); // TODO: part should be handed in with all the relevant names! atm it's "content" in the content-block scenario [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public bool ItemList([FromUri] Guid guid, List list, [FromUri] string part = null) => Real.ItemList(guid, list, part); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Cms/EditController.cs ================================================ using ToSic.Eav.WebApi.Sys.Cms; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Cms.EditControllerReal; namespace ToSic.Sxc.Dnn.Backend.Cms; //[SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class EditController() : DnnSxcControllerBase(RealController.LogSuffix), IEditController { #region Setup / Infrastructure private RealController Real => SysHlp.GetService(); #endregion /// [HttpPost] [AllowAnonymous] // will check security internally, so assume no requirements public async Task Load([FromBody] List items, int appId) => await Real.Load(items, appId); /// [HttpPost] [AllowAnonymous] // will check security internally, so assume no requirements public async Task> Save([FromBody] EditSaveDto package, int appId, bool partOfPage) => await Real.Save(package, appId, partOfPage); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public LinkInfoDto LinkInfo(string link, int appId, string contentType = default, Guid guid = default, string field = default) => Real.LinkInfo(link, appId, contentType, guid, field); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public bool Publish(int id) => Real.Publish(id); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Cms/HistoryController.cs ================================================ using ToSic.Eav.Persistence.Versions; using ToSic.Eav.WebApi.Sys.Cms; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Cms.HistoryControllerReal; namespace ToSic.Sxc.Dnn.Backend.Cms; /// /// Controller for history of entities /// [PrivateApi] [SupportedModules(DnnSupportedModuleNames)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class HistoryController() : DnnSxcControllerBase(RealController.LogSuffix), IHistoryController { private RealController Real => SysHlp.GetService(); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public List Get(int appId, [FromBody] ItemIdentifier item) => Real.Get(appId, item); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] public bool Restore(int appId, int changeId, [FromBody] ItemIdentifier item) => Real.Restore(appId, changeId, item); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Cms/ListController.cs ================================================ using ToSic.Eav.WebApi.Sys.Cms; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Cms.ListControllerReal; namespace ToSic.Sxc.Dnn.Backend.Cms; [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] [ShowApiWhenReleased(ShowApiMode.Never)] public class ListController() : DnnSxcControllerBase(RealController.LogSuffix), IListController { private RealController Real => SysHlp.GetService(); /// /// /// used to be GET Module/ChangeOrder /// [HttpPost] public void Move(Guid? parent, string fields, int index, int toIndex) => Real.Move(parent, fields, index, toIndex); /// /// /// Used to be Get Module/RemoveFromList /// [HttpDelete] public void Delete(Guid? parent, string fields, int index) => Real.Delete(parent, fields, index); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Context/DnnContextDtoExtensions.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Tabs; using ToSic.Eav.WebApi.Sys.Context; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Blocks.Sys.Views; using ToSic.Sxc.Dnn.Pages; namespace ToSic.Sxc.Dnn.Backend.Context; /// /// This contains constructor like initializer calls for ContextDto objects. /// They are DNN specific /// internal static class DnnContextDtoExtensions { internal static ContentBlockDto ToDto(this BlockConfiguration block, IEnumerable blockModules) => new() { Id = block.Id, Guid = block.Guid, Modules = blockModules.Select(m => m.Module.ToDto(m.Page)), }; internal static InstanceDto ToDto(this ModuleInfo module, TabInfo page) => new() { Id = module.ModuleID, ShowOnAllPages = module.AllTabs, Title = module.ModuleTitle, UsageId = module.TabModuleID, IsDeleted = module.IsDeleted || page.IsDeleted, Page = page.ToDto(), }; internal static PageDto ToDto(this TabInfo page) => new() { Id = page.TabID, Url = page.FullUrl, Name = page.TabName, CultureCode = page.CultureCode, Visible = page.IsVisible, Title = page.Title, Portal = new(page.PortalID), }; internal static ViewDto Init(this IView view, ICollection blocks, List modules) => new() { Id = view.Entity.EntityId, Guid = view.Entity.EntityGuid, Name = view.Name, Path = view.Path, Blocks = blocks .Where(b => b.View.Guid == view.Guid) .Select(blWMod => blWMod.ToDto(modules.Where(m => m.ContentGroup == blWMod.Guid))), }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Context/DnnUiContextBuilder.cs ================================================ using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Portals; using System.Web; using ToSic.Eav.WebApi.Sys.Context; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Sxc.Backend.Context; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Dnn.Web; using ToSic.Sxc.WebApi.Sys.ExternalLinks; namespace ToSic.Sxc.Dnn.WebApi.Context; internal sealed class DnnUiContextBuilder( ISxcCurrentContextService ctxService, ExternalLinksService externalLinksService, UiContextBuilderBase.Dependencies deps) : UiContextBuilderBase(deps) { #region Constructor / DI private readonly PortalSettings _portal = PortalSettings.Current; private ModuleInfo Module => (ctxService.BlockContextOrNull()?.Module as IWrapper)?.GetContents(); #endregion protected override ContextResourceWithApp GetSystem(Ctx flags) { var result = base.GetSystem(flags); result.Url = VirtualPathUtility.ToAbsolute("~/"); return result; } protected override ContextResourceWithApp GetSite(Ctx flags) { var result = base.GetSite(flags); result.Id = _portal.PortalId; result.Url = "//" + _portal.PortalAlias.HTTPAlias + "/"; return result; } protected override WebResourceDto GetPage() => Module == null ? null : new WebResourceDto { Id = Module.TabID, // todo: maybe page url // used to be on ps.ActiveTab.FullUrl; // but we can't get it from there directly }; protected override ContextAppDto GetApp(Ctx flags) { var appDto = base.GetApp(flags); // If no app is selected yet, then there is no information to return if (appDto == null) return null; try { var roots = DnnJsApiService.GetApiRoots(); appDto.Api = roots.AppApiRoot; } catch { /* ignore */ } return appDto; } /// /// build a getting-started url which is used to correctly show the user infos like /// warnings related to his dnn or 2sxc version /// infos based on his languages /// redirects based on the app he's looking at, etc. /// /// protected override string GetGettingStartedUrl() { if (AppSpecsOrNull is not { } app) return ""; var gsUrl = externalLinksService.LinkToDestination( ExternalSxcDestinations.GettingStarted, Services.SiteCtx.Site, Module.ModuleID, app, Module.DesktopModule.ModuleName == "2sxc"); return gsUrl; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Module/ModuleController.cs ================================================ using ToSic.Sxc.Dnn.WebApi.Sys; namespace ToSic.Sxc.Dnn.Backend.Module; // support all modules now... [SupportedModules(DnnSupportedModuleNames)] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class ModuleController() : DnnSxcControllerRoot("Mod") { [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public bool Delete(int tabId, int modId) { Log.A($"delete mod:{modId} on tab:{tabId}"); var mc = new DotNetNuke.Entities.Modules.ModuleController(); mc.DeleteTabModule(tabId, modId, true); Log.A("delete completed"); return true; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Sys/InsightsController.cs ================================================ using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.Sys.Insights.InsightsControllerReal; namespace ToSic.Sxc.Dnn.Backend.Sys; [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] public class InsightsController() : DnnSxcControllerRoot(RealController.LogSuffix) { private RealController Real => SysHlp.GetService(); /// /// Single-Point-Of-Entry /// The insights handle all their work in the backend, incl. view-switching. /// This is important for many reasons, inc. the fact that this will always be the first endpoint to implement /// on any additional system. /// [HttpGet] // Will do security checks internally public string Details(string view, int? appId = null, string key = null, int? position = null, string type = null, bool? toggle = null, string nameId = null, string filter = default) => Real.Details(view, appId, key, position, type, toggle, nameId, filter); #region Controll Logging of Requests on Insights for special debugging, usually disabled to not clutter the logs /// /// Enable/disable logging of access to insights /// Only enable this if you have trouble developing insights, otherwise it clutters our logs /// internal static bool InsightsLoggingEnabled = false; /// /// Special detection for the AppApiController to skip these requests? /// internal const string InsightsUrlFragment = "/sys/insights/"; /// /// Make sure that these requests don't land in the normal api-log. /// Otherwise each log-access would re-number what item we're looking at /// protected override string HistoryLogGroup => "web-api.insights"; #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Sys/InstallController.cs ================================================ using ToSic.Eav.WebApi.Sys.Install; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Sxc.Backend.Sys.InstallControllerReal; namespace ToSic.Sxc.Dnn.Backend.Sys; [ShowApiWhenReleased(ShowApiMode.Never)] public class InstallController() : DnnSxcControllerRoot(RealController.LogSuffix), IInstallController { private RealController Real => SysHlp.GetService(); /// /// Make sure that these requests don't land in the normal api-log. /// Otherwise, each log-access would re-number what item we're looking at /// protected override string HistoryLogGroup => "web-api.install"; /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] public bool Resume() => Real.Resume(); /// [HttpGet] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] public InstallAppsDto InstallSettings(bool isContentApp) => Real.InstallSettings(isContentApp, ((DnnModule)SysHlp.GetService()).Init(Request.FindModuleInfo())); /// [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] // Now with RVT as it's post now. Previously not, because this was a GET and could not include the RVT public HttpResponseMessage RemotePackage(string packageUrl, string newName = null) { SysHlp.PreventServerTimeout600(); // Make sure the Scoped ResponseMaker has this controller context SysHlp.SetupResponseMaker(this); return Real.RemotePackage(packageUrl, ((DnnModule)SysHlp.GetService()).Init(ActiveModule), newName); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Sys/LicenseController.cs ================================================ using System.Web; using ToSic.Eav.WebApi.Sys.Licenses; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Licenses.LicenseControllerReal; namespace ToSic.Sxc.Dnn.Backend.Sys; [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)] [ShowApiWhenReleased(ShowApiMode.Never)] public class LicenseController() : DnnSxcControllerRoot("License"), ILicenseController { private RealController Real => SysHlp.GetService(); /// /// Make sure that these requests don't land in the normal api-log. /// Otherwise each log-access would re-number what item we're looking at /// protected override string HistoryLogGroup => "web-api.license"; /// [HttpGet] public IEnumerable Summary() => Real.Summary(); /// [HttpPost] [ValidateAntiForgeryToken] public LicenseFileResultDto Upload() { SysHlp.PreventServerTimeout600(); return Real.Upload(new(Request, HttpContext.Current.Request)); } /// [HttpGet] public LicenseFileResultDto Retrieve() { SysHlp.PreventServerTimeout600(); return Real.Retrieve(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Backend/Sys/LogController.cs ================================================ using ToSic.Eav.WebApi.Sys.Logs; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Dnn.WebApi.Sys; using RealController = ToSic.Eav.WebApi.Sys.Logs.LogControllerReal; namespace ToSic.Sxc.Dnn.Backend.Sys; /// /// This one supplies portal-wide (or cross-portal) settings / configuration /// [SupportedModules(DnnSupportedModuleNames)] [DnnLogExceptions] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] [ValidateAntiForgeryToken] [ShowApiWhenReleased(ShowApiMode.Never)] public class LogController() : DnnSxcControllerRoot(RealController.LogSuffix), ILogController { private RealController Real => SysHlp.GetService(); /// [HttpGet] public string EnableDebug(int duration = 1) => Real.EnableDebug(DnnLogging.ActivateForDuration, duration); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Integration/DnnAppFolderUtilities.cs ================================================ using System.Net; using System.Web.Http.Routing; using ToSic.Eav.Context; using ToSic.Eav.WebApi.Sys.Routing; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.WebApi.Sys; namespace ToSic.Sxc.Dnn.Integration; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnAppFolderUtilities( Generator folder, Generator dnnGetBlock, LazySvc errorHelp) : ServiceBase($"{DnnConstants.LogName}.AppFld", connect: [errorHelp, folder, dnnGetBlock]) { private HttpRequestMessage _request; private HttpRequestMessage Request => _request ?? throw new("Request not available - call Setup(...) first!"); public DnnAppFolderUtilities Setup(HttpRequestMessage request) { _request = request; return this; } internal string GetAppFolderVirtualPath(ISite site) { var l = Log.Fn(); var appFolder = GetAppFolder(true); var appFolderVirtualPath = Path.Combine(site.AppsRootPhysical, appFolder).ForwardSlash(); return l.Return(appFolderVirtualPath, $"Ok, AppFolder Virtual Path: {appFolderVirtualPath}"); } internal string GetAppFolder(bool errorIfNotFound, IBlock block = null) { var l = Log.Fn(); const string errPrefix = "Api Controller Finder Error: "; const string errSuffix = "Check event-log, code and inner exception. "; var routeData = Request.GetRouteData(); // Figure out the Path, or show error for that. string appFolder; try { appFolder = AppPathOrNull(routeData); // only check for app folder if we don't have a context if (appFolder == null) { l.A("no folder found in url, will auto-detect"); appFolder = folder.New() .Init(block ?? dnnGetBlock.New().GetCmsBlock(Request)) .GetAppFolder(); } l.A($"App Folder: {appFolder}"); } catch (Exception getBlockException) { const string msg = errPrefix + "Trying to find app name, unexpected error - possibly bad/invalid headers. " + errSuffix; if (errorIfNotFound) throw l.Done(DnnHttpErrors.LogAndReturnException(Request, HttpStatusCode.BadRequest, getBlockException, msg, errorHelp.Value)); return l.Return(null, "not found, maybe error"); } if (string.IsNullOrWhiteSpace(appFolder) && errorIfNotFound) { const string msg = errPrefix + "App name is unknown - tried to check name in url (.../app/[app-name]/...) " + "and tried app-detection using url-params/headers pageid/moduleid. " + errSuffix; throw l.Done(DnnHttpErrors.LogAndReturnException(Request, HttpStatusCode.BadRequest, new(msg), msg, errorHelp.Value)); } return l.ReturnAsOk(appFolder); } public static string AppPathOrNull(IHttpRouteData route) => route.Values[VarNames.AppPath]?.ToString(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Integration/DnnHttpErrors.cs ================================================ using System.Net; using ToSic.Eav.WebApi.Sys.Helpers.Http; using ToSic.Sxc.Code.Sys.CodeErrorHelp; namespace ToSic.Sxc.Dnn.Integration; internal class DnnHttpErrors { private const string ApiErrPrefix = "2sxc Api Controller Finder Error: "; private const string ApiErrGeneral = "Error selecting / compiling an API controller. "; private const string ApiErrSuffix = "Check event-log, code and inner exception. "; internal const string ApiErrMessage = ApiErrPrefix + ApiErrGeneral + ApiErrSuffix; internal static HttpResponseException LogAndReturnException( HttpRequestMessage request, HttpStatusCode code, Exception e, string msg, CodeErrorHelpService errorHelp) { var helpText = errorHelp.FindHelp(e)?.ErrorMessage + msg; var exception = new Exception(helpText, e); DotNetNuke.Services.Exceptions.Exceptions.LogException(exception); var dnnUser = DotNetNuke.Entities.Users.UserController.Instance.GetCurrentUserInfo(); var exToShow = dnnUser?.IsSuperUser == true ? exception : new PublicException(ApiErrMessage + helpText); return new(request.CreateErrorResponse(code, exToShow)); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Integration/DnnWebApiLogging.cs ================================================ using System.Web; using System.Web.Http.Controllers; using ToSic.Eav.Web.Sys; using ToSic.Sxc.Apps; using ToSic.Sxc.Blocks.Sys; using ToSic.Sys.Code.InfoSystem; namespace ToSic.Sxc.Dnn.Integration; /// /// Helper class for work on the WebAPIs which may be used by multiple base classes. /// This is to ensure the code is not in the class, and is reusable. /// /// Scoped request logging /// First message - ATM only used for queries to simplify/show what query is called. internal class DnnWebApiLogging(HttpRequestLoggingScoped requestLogging, string firstMessage) { #region Timer Around Everything /// /// Add the first message with the current path. /// Will not be used until disposed, to then stop the full-timer. /// private readonly ILogCall _timerWrapLog = requestLogging.RootLog.Fn( // Note: can't log URL as the HttpContext is not ready at this time. message: firstMessage ?? $": {HttpContext.Current?.Request.Url.AbsoluteUri}", timer: true, // ReSharper disable once ExplicitCallerInfoArgument cName: "Api" ); internal void OnDispose() => _timerWrapLog.Done(); #endregion public void OnInitialize(HttpControllerContext controllerContext) { controllerContext.Request.Properties.Add(EavLogKey, requestLogging.StoreEntry); } /// /// Add Log Specs to the current request and also to any reported code changes later on. /// public void AddLogSpecs(IBlock block, IApp app, string currentPath, CodeInfosInScope codeInfos) => requestLogging.StoreEntry.TryUpdateSpecs(() => { // Add app-id to entry info to ensure controllers with same name being detected by app if (currentPath != default && app != default) currentPath = $"app:{app.AppId}/{currentPath}"; var logSpecs = new SpecsForLogHistory() .BuildSpecsForLogHistory(block, app, entry: currentPath, addView: false); logSpecs["Url"] = HttpContext.Current?.Request.Url.AbsoluteUri; codeInfos.AddContext(() => logSpecs, entryPoint: currentPath); return logSpecs; }); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Integration/GetDnnBlock.cs ================================================ using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Blocks.Sys.BlockBuilder; using static ToSic.Sxc.Backend.SxcWebApiConstants; namespace ToSic.Sxc.Dnn.Integration; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnGetBlock( Generator blockFromEntity, Generator moduleAndBlockBuilder) : ServiceBase($"{LogName}.GetBlk", connect: [blockFromEntity, moduleAndBlockBuilder]) { internal IBlock GetCmsBlock(HttpRequestMessage request) { var l = Log.Fn(timer: true); var moduleInfo = request.FindModuleInfo(); if (moduleInfo == null) return l.ReturnNull("request ModuleInfo not found"); var block = moduleAndBlockBuilder.New().BuildBlock(moduleInfo, null); // check if we need an inner block if (!request.Headers.Contains(HeaderContentBlockId)) return l.Return(block, "normal block, no inner-content"); // only if it's negative, do we load the inner block var blockHeaderId = request.Headers.GetValues(HeaderContentBlockId).FirstOrDefault(); int.TryParse(blockHeaderId, out var contentBlockId); // only if ID is negative, do we load the inner block if (contentBlockId >= 0) return l.Return(block, "normal block"); var entBlock = GetBlockOrInnerContentBlock(request, block, contentBlockId); return l.Return(entBlock, $"inner content-block {contentBlockId}"); } private IBlock GetBlockOrInnerContentBlock(HttpRequestMessage request, IBlock block, int blockId) { var l = Log.Fn($"{nameof(blockId)}: {blockId}"); // If we have a list of inner-blocks (WIP, I believe not implemented) do we go down the list of blocks to find the inner-most one if (request.Headers.Contains(HeaderContentBlockList)) { var blockIds = request.Headers .GetValues(HeaderContentBlockList) .FirstOrDefault()? .CsvToArrayWithoutEmpty(); if (blockIds.SafeAny()) return l.Return(FindInnerContentParentBlock(block, blockId, blockIds), $"from {HeaderContentBlockList}"); } var entBlock = blockFromEntity.New().GetBlockOfEntity(block, null, blockId); return l.Return(entBlock); } private IBlock FindInnerContentParentBlock(IBlock parent, int contentBlockId, IReadOnlyCollection blockIds) { if (blockIds == null || blockIds.Count < 2) return parent; foreach (var ids in blockIds) // blockIds is ordered list, from first ancestor till last successor { var parentIds = ids.Split(':'); //var parentAppId = int.Parse(parentIds[0]); //var parentContentBlocks = new Guid(parentIds[1]); var id = int.Parse(parentIds[0]); if (!int.TryParse(parentIds[1], out var cbid) || id == cbid || cbid >= 0) continue; if (cbid == contentBlockId) break; // we are done, because block should be parent/ancestor of cbid parent = blockFromEntity.New().GetBlockOfEntity(parent, null, cbid); } return parent; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/Integration/StartUpDnnWebApi.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Newtonsoft.Json; using ToSic.Eav.WebApi.Sys.ApiExplorer; using ToSic.Eav.WebApi.Sys.Context; using ToSic.Sxc.Adam.Sys.Security; using ToSic.Sxc.Dnn.Backend; using ToSic.Sxc.Dnn.Backend.Admin; using ToSic.Sxc.Dnn.WebApi.Context; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; namespace ToSic.Sxc.Dnn.Integration; [ShowApiWhenReleased(ShowApiMode.Never)] public static class StartUpDnnWebApi { public static IServiceCollection AddDnnWebApi(this IServiceCollection services) { // Settings / WebApi stuff services.TryAddTransient(); services.TryAddTransient(); // new #2160 services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); // v14.12-01 // new v15 services.TryAddTransient(); // new v17 services.TryAddTransient(); return services; } public static void Configure() { // Configure Newtonsoft Time zone handling GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; // System.Text.Json supports ISO 8601-1:2019, including the RFC 3339 profile GlobalConfiguration.Configuration.Formatters.Add(JsonFormatters.SystemTextJsonMediaTypeFormatter); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Compatibility/ApiTempShimmed.cs ================================================ using ToSic.Sxc.Adam; namespace ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; /// /// [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] internal abstract class ApiTempShimmed : DnnSxcCustomControllerBase, IDynamicWebApi, INetCoreCompatibility { #region Net Core Compatibility Shims - Copy this entire section to WebApi Files public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") { throw new NotImplementedException(); } /// public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => Shim.File(download: download, virtualPath: virtualPath, contentType: contentType, fileDownloadName: fileDownloadName, contents: contents); private WebApiCoreShim Shim => new(Request); /// [NonAction] public new dynamic Ok() => Shim.Ok(); /// [NonAction] public dynamic Ok(object value) => Shim.Ok(value); /// [NonAction] public dynamic NoContent() => Shim.NoContent(); // TODO: this Shim could now be implemented after 16.02 - since we don't have the Content property any more #region Content (ca. 5 overloads) can't be implemented, because it conflicts with our property "Content" #endregion /// [NonAction] public new dynamic Redirect(string url) => Shim.Redirect(url); /// [NonAction] public dynamic RedirectPermanent(string url) => Shim.RedirectPermanent(url); /// [NonAction] public dynamic StatusCode(int statusCode) => Shim.StatusCode(statusCode); /// [NonAction] public dynamic StatusCode(int statusCode, object value) => Shim.StatusCode(statusCode, value); /// [NonAction] public dynamic Unauthorized() => Shim.Unauthorized(); /// [NonAction] public dynamic Unauthorized(object value) => Shim.Unauthorized(value); /// [NonAction] public new dynamic NotFound() => Shim.NotFound(); /// [NonAction] public dynamic NotFound(object value) => Shim.NotFound(value); /// [NonAction] public new dynamic BadRequest() => Shim.BadRequest(); /// [NonAction] public new dynamic Conflict() => Shim.Conflict(); /// [NonAction] public dynamic Conflict(object error) => Shim.Conflict(error); /// [NonAction] public dynamic Accepted() => Shim.Accepted(); /// [NonAction] public dynamic Forbid() => Shim.Forbid(); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Compatibility/INetCoreCompatibility.cs ================================================ namespace ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; [ShowApiWhenReleased(ShowApiMode.Never)] public interface INetCoreCompatibility { /// dynamic Ok(); /// dynamic Ok(object value); /// dynamic NoContent(); /// dynamic Redirect(string url); /// dynamic RedirectPermanent(string url); /// dynamic StatusCode(int statusCode); /// dynamic StatusCode(int statusCode, object value); /// dynamic Unauthorized(); /// dynamic Unauthorized(object value); /// dynamic NotFound(); /// dynamic NotFound(object value); /// dynamic BadRequest(); /// dynamic Conflict(); /// dynamic Conflict(object error); /// dynamic Accepted(); /// dynamic Forbid(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Compatibility/WebApiCoreShim.cs ================================================ namespace ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; /// /// This is the helper class to compose other WebApi-classes of modern custom API Controllers.
/// It provides Commands such as `Ok()` which already exist in .net core and allows hybrid controllers to have the same commands. /// /// Use `Custom.Hybrid.Api12` or `Custom.Hybrid.Api14` as your real base classes ///
[PrivateApi("This is the .net core Shim class for v12+")] [DnnLogExceptions] [ShowApiWhenReleased(ShowApiMode.Never)] internal partial class WebApiCoreShim: ServiceBase { public HttpRequestMessage Request { get; } protected internal WebApiCoreShim(HttpRequestMessage request) : base("Dnn.ApShim") { Request = request; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Compatibility/WebApiCoreShim_File.cs ================================================ using System.Net; using System.Text; using System.Web; using System.Xml; using ToSic.Eav.WebApi.Sys; using ToSic.Sxc.Backend; namespace ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; partial class WebApiCoreShim { /// public dynamic File(NoParamOrder npo = default, // Important: the second parameter should _not_ be a string, otherwise the signature looks the same as the built-in File(...) method bool? download = null, string virtualPath = null, // important: this is the virtualPath, but it should not have the same name, to not confuse the compiler with same sounding param names string contentType = null, string fileDownloadName = null, object contents = null // can be stream, string or byte[] ) { // fileDownloadName becomes null when download != true // Try to figure out file mime type as needed if (string.IsNullOrWhiteSpace(contentType)) contentType = (string.IsNullOrWhiteSpace(fileDownloadName ?? virtualPath)) ? MimeTypeConstants.FallbackType : MimeMapping.GetMimeMapping(fileDownloadName ?? virtualPath); HttpContent httpContent = new ByteArrayContent(Encoding.UTF8.GetBytes(string.Empty)); // check if this may just be a call to the built in file, which has two strings // this can only be possible if only the virtualPath and contentType were set if (!string.IsNullOrWhiteSpace(virtualPath)) httpContent = new StreamContent(new FileStream(HttpContext.Current.Server.MapPath(virtualPath), FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); var encoding = Encoding.UTF8; // the default response encoding is UTF-8 var isValidXml = false; switch (contents) { case XmlDocument xmlDoc: var xmlStream = new MemoryStream(); xmlDoc.Save(xmlStream); xmlStream.Position = 0; httpContent = new StreamContent(xmlStream); isValidXml = true; encoding = CustomApiHelpers.GetEncoding(xmlDoc); break; case string stringBody: httpContent = new ByteArrayContent(encoding.GetBytes(stringBody)); isValidXml = CustomApiHelpers.IsValidXml(stringBody); encoding = CustomApiHelpers.GetEncoding(stringBody); break; case Stream streamBody: httpContent = new StreamContent(streamBody); isValidXml = CustomApiHelpers.IsValidXml(streamBody); encoding = CustomApiHelpers.GetEncoding(streamBody); break; case byte[] charBody: httpContent = new ByteArrayContent(charBody); isValidXml = CustomApiHelpers.IsValidXml(charBody); encoding = CustomApiHelpers.GetEncoding(charBody); break; } contentType = CustomApiHelpers.XmlContentTypeFromContent(isValidXml, contentType); var response = Request.CreateResponse(HttpStatusCode.OK); response.Content = httpContent; response.Content.Headers.ContentType = CustomApiHelpers.PrepareMediaTypeHeaderValue(contentType, encoding); response.Content.Headers.ContentDisposition = CustomApiHelpers.PrepareContentDispositionHeaderValue(download, fileDownloadName); return response; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Compatibility/WebApiCoreShim_Responses.cs ================================================ using System.Net; // The commands here should help Dnn WebAPIs namespace ToSic.Sxc.Dnn.WebApi.Sys.Compatibility; partial class WebApiCoreShim { /// /// Creates a .net-core like `OkResult` object that produces an empty .net-core like `StatusCodes.Status200OK` response. /// /// Typical use: `return Ok();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `OkResult` for the response. [NonAction] public HttpResponseMessage Ok() => Request.CreateResponse(HttpStatusCode.OK); /// /// Creates an .net-core like `OkObjectResult` object that produces an .net-core like `StatusCodes.Status200OK` response. /// /// Typical use: `return Ok(objectToInclude);` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The content value to format in the entity body. /// The created .net-core like `OkObjectResult` for the response. [NonAction] // maybe ??? low priority public HttpResponseMessage Ok(object value) => Request.CreateResponse(HttpStatusCode.OK, value); /// /// Creates a .net-core like `NoContentResult` object that produces an empty /// .net-core like `StatusCodes.Status204NoContent` response. /// /// Typical use: `return NoContent();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `NoContentResult` object for the response. [NonAction] public HttpResponseMessage NoContent() => Request.CreateResponse(HttpStatusCode.NoContent); // TODO: this Shim could now be implemented after 16.02 - since we don't have the Content property any more #region Content (ca. 5 overloads) can't be implemented, because it conflicts with our property "Content" //public dynamic Content(string content) //{ // throw new NotSupportedException(); //} //public dynamic Content(string content, string contentType) //{ //} #endregion #region Redirect Variants // Note that .net core has ca. 30 variants - we probably just need 2 /// /// Creates a .net-core like `RedirectResult` object that redirects (.net-core like `StatusCodes.Status302Found`) /// to the specified . /// /// Typical use: `return Redirect("https://2sxc.org");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The URL to redirect to. /// The created .net-core like `RedirectResult` for the response. [NonAction] public HttpResponseMessage Redirect(string url) { if (string.IsNullOrEmpty(url)) throw new ArgumentNullException(nameof(url)); var response = Request.CreateResponse(HttpStatusCode.Redirect); response.Headers.Location = new(url); return response; } /// /// Creates a .net-core like `RedirectResult` object with .net-core like `RedirectResult.Permanent` set to true /// (.net-core like `StatusCodes.Status301MovedPermanently`) using the specified . /// /// Typical use: `return RedirectPermanent("https://2sxc.org");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The URL to redirect to. /// The created .net-core like `RedirectResult` for the response. [NonAction] public HttpResponseMessage RedirectPermanent(string url) { if (string.IsNullOrEmpty(url)) throw new ArgumentNullException(nameof(url)); var response = Request.CreateResponse(HttpStatusCode.MovedPermanently); response.Headers.Location = new(url); return response; } #endregion #region StatusCode - low priority /// /// Creates a .net-core like `StatusCodeResult` object by specifying a . /// /// Typical use: `return StatusCode(403);` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The status code to set on the response. /// The created .net-core like `StatusCodeResult` object for the response. [NonAction] public HttpResponseMessage StatusCode(int statusCode) => Request.CreateResponse((HttpStatusCode)statusCode); /// /// Creates a .net-core like `ObjectResult` object by specifying a and /// /// Typical use: `return StatusCode(304, "not modified");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The status code to set on the response. /// The value to set on the .net-core like `ObjectResult"/>. /// The created .net-core like `ObjectResult` object for the response. [NonAction] public HttpResponseMessage StatusCode(int statusCode, object value) => Request.CreateResponse((HttpStatusCode)statusCode, value); #endregion /// /// Creates an .net-core like `UnauthorizedResult` that produces an .net-core like `StatusCodes.Status401Unauthorized` response. /// /// Typical use: `return Unauthorized();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `UnauthorizedResult` for the response. [NonAction] public HttpResponseMessage Unauthorized() => Request.CreateResponse(HttpStatusCode.Unauthorized); /// /// Creates an .net-core like `UnauthorizedObjectResult` that produces a .net-core like `StatusCodes.Status401Unauthorized` response. /// /// Typical use: `return Unauthorized("we don't like this");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `UnauthorizedObjectResult` for the response. [NonAction] public HttpResponseMessage Unauthorized(object value) => Request.CreateResponse(HttpStatusCode.Unauthorized, value); /// /// Creates an .net-core like `NotFoundResult` that produces a .net-core like `StatusCodes.Status404NotFound` response. /// /// Typical use: `return NotFound();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `NotFoundResult` for the response. [NonAction] public HttpResponseMessage NotFound() => Request.CreateResponse(HttpStatusCode.NotFound); /// /// Creates an .net-core like `NotFoundObjectResult` that produces a .net-core like `StatusCodes.Status404NotFound` response. /// /// Typical use: `return Unauthorized("try another ID");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `NotFoundObjectResult` for the response. [NonAction] public HttpResponseMessage NotFound(object value) => Request.CreateResponse(HttpStatusCode.NotFound, value); /// /// Creates an .net-core like `BadRequestResult` that produces a .net-core like `StatusCodes.Status400BadRequest` response. /// /// Typical use: `return BadRequest();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `BadRequestResult` for the response. [NonAction] public HttpResponseMessage BadRequest() => Request.CreateResponse(HttpStatusCode.BadRequest); ///// ///// Creates an .net-core like `BadRequestObjectResult` that produces a .net-core like `StatusCodes.Status400BadRequest` response. ///// ///// An error object to be returned to the client. ///// The created .net-core like `BadRequestObjectResult` for the response. //[NonAction] //public dynamic BadRequest(object error) // => throw new NotSupportedException(); ///// ///// Creates an .net-core like `BadRequestObjectResult` that produces a .net-core like `StatusCodes.Status400BadRequest` response. ///// ///// The .net-core like `ModelStateDictionary" /> containing errors to be returned to the client. ///// The created .net-core like `BadRequestObjectResult` for the response. //[NonAction] //public dynamic BadRequest(object modelState) // => throw new NotSupportedException(); #region Conflict /// /// Creates an .net-core like `ConflictResult` that produces a .net-core like `StatusCodes.Status409Conflict` response. /// /// Typical use: `return Conflict();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `ConflictResult` for the response. [NonAction] public HttpResponseMessage Conflict() => Request.CreateResponse(HttpStatusCode.Conflict); /// /// Creates an .net-core like `ConflictObjectResult` that produces a .net-core like `StatusCodes.Status409Conflict` response. /// /// Typical use: `return Conflict("the stored file is newer");` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// Contains errors to be returned to the client. /// The created .net-core like `ConflictObjectResult` for the response. [NonAction] public HttpResponseMessage Conflict(object error) => Request.CreateResponse(HttpStatusCode.Conflict, error); ///// ///// Creates an .net-core like `ConflictObjectResult` that produces a .net-core like `StatusCodes.Status409Conflict` response. ///// ///// The .net-core like `ModelStateDictionary" /> containing errors to be returned to the client. ///// The created .net-core like `ConflictObjectResult` for the response. //[NonAction] //public dynamic Conflict(ModelStateDictionary modelState) // => new ConflictObjectResult(modelState); #endregion #region Problem, ValidationProblem - won't implement #endregion #region Created, CreatedAtAction, CreatedAtRoute - won't impelment #endregion #region Accepted /// /// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. /// /// Typical use: `return Accepted();` /// /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// The created .net-core like `AcceptedResult` for the response. [NonAction] public HttpResponseMessage Accepted() => Request.CreateResponse(HttpStatusCode.Accepted); // All other accepted - don't implement ///// ///// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. ///// ///// The optional content value to format in the entity body; may be null. ///// The created .net-core like `AcceptedResult` for the response. //[NonAction] //public dynamic Accepted(object value) // => new AcceptedResult(location: null, value: value); ///// ///// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. ///// ///// The optional URI with the location at which the status of requested content can be monitored. ///// May be null. ///// The created .net-core like `AcceptedResult` for the response. //[NonAction] //public dynamic Accepted(Uri uri) //{ // if (uri == null) // { // throw new ArgumentNullException(nameof(uri)); // } // return new AcceptedResult(locationUri: uri, value: null); //} ///// ///// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. ///// ///// The optional URI with the location at which the status of requested content can be monitored. ///// May be null. ///// The created .net-core like `AcceptedResult` for the response. //[NonAction] //public dynamic Accepted(string uri) // => new AcceptedResult(location: uri, value: null); ///// ///// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. ///// ///// The URI with the location at which the status of requested content can be monitored. ///// The optional content value to format in the entity body; may be null. ///// The created .net-core like `AcceptedResult` for the response. //[NonAction] //public dynamic Accepted(string uri, object value) // => new AcceptedResult(uri, value); ///// ///// Creates a .net-core like `AcceptedResult` object that produces an .net-core like `StatusCodes.Status202Accepted` response. ///// ///// The URI with the location at which the status of requested content can be monitored. ///// The optional content value to format in the entity body; may be null. ///// The created .net-core like `AcceptedResult` for the response. //[NonAction] //public dynamic Accepted(Uri uri, object value) //{ // if (uri == null) // { // throw new ArgumentNullException(nameof(uri)); // } // return new AcceptedResult(locationUri: uri, value: value); //} #endregion #region Challenge - only one implemented ///// ///// Creates a .net-core like `ChallengeResult"/>. ///// ///// The created .net-core like `ChallengeResult` for the response. ///// ///// The behavior of this method depends on the .net-core like `IAuthenticationService` in use. ///// .net-core like `StatusCodes.Status401Unauthorized` and .net-core like `StatusCodes.Status403Forbidden"/> ///// are among likely status results. ///// //[NonAction] //public dynamic Challenge() // => Request.CreateResponse(HttpStatusCode.Forbidden); #endregion #region Forbid - only one implemented /// /// Creates a .net-core like `ForbidResult` (.net-core like `StatusCodes.Status403Forbidden` by default). /// /// Typical use: `return Forbid();` /// /// The created .net-core like `ForbidResult` for the response. /// /// This is a shim to ensure that .net Framework code can be written the same way as .net core WebApis. /// It returns a `dynamic` to make it easy to use, but the real .net core implementation returns a typed object. /// /// Some authentication schemes, such as cookies, will convert .net-core like `StatusCodes.Status403Forbidden` to /// a redirect to show a login page. /// [NonAction] public HttpResponseMessage Forbid() => Request.CreateResponse(HttpStatusCode.Forbidden); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/ApiControllerServices.cs ================================================ using ToSic.Sxc.Dnn.Integration; using ToSic.Sxc.Sys.ExecutionContext; namespace ToSic.Sxc.Dnn.WebApi.Sys; /// /// Note: normally dependencies are Constructor injected. /// This doesn't work in DNN. /// But for consistency, we're building a comparable structure here. /// [ShowApiWhenReleased(ShowApiMode.Never)] public record ApiControllerDependencies( IExecutionContextFactory ExCtxFactory, DnnAppFolderUtilities AppFolderUtilities, LazySvc AppOverrideLazy) : DependenciesRecord(connect: [ExCtxFactory, AppFolderUtilities, AppOverrideLazy]); ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/DnnSxcControllerBase.cs ================================================ using System.Web.Http.Controllers; namespace ToSic.Sxc.Dnn.WebApi.Sys; /// /// This class is the base class of 2sxc API access /// It will auto-detect the SxcBlock context /// But it will NOT provide an App or anything like that /// [DnnLogExceptions] [PrivateApi("This was only ever used as an internal base class, so it can be modified as needed - just make sure the derived types don't break")] // Can't hide in Intellisense, because that would hide it for all derived classes too // [ShowApiWhenReleased(ShowApiMode.Never)] public abstract class DnnSxcControllerBase(string logSuffix, string insightsGroup = default, string firstMessage = default) : DnnSxcControllerRoot(logSuffix, insightsGroup, firstMessage) { protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); DynHlp.InitializeBlockContext(controllerContext.Request); } internal DynamicApiCompileCodeHelpers DynHlp => field ??= new(this, SysHlp); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/DnnSxcControllerRoot.cs ================================================ using System.Web.Http.Controllers; using ToSic.Eav.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; namespace ToSic.Sxc.Dnn.WebApi.Sys; [DnnLogWebApi, ConfigureJsonOnlyResponse] [PrivateApi("This controller is never used publicly, you can rename any time you want")] // Can't hide in Intellisense, because that would hide it for all derived classes too // [ShowApiWhenReleased(ShowApiMode.Never)] public abstract class DnnSxcControllerRoot : DnnApiController, IHasLog { internal const string DnnSupportedModuleNames = "2sxc,2sxc-app"; protected DnnSxcControllerRoot(string logSuffix, string insightsGroup = default, string firstMessage = default) { Log = new Log("Api." + logSuffix); // ReSharper disable once VirtualMemberCallInConstructor SysHlp = new(this, insightsGroup ?? HistoryLogGroup, firstMessage); } /// /// Special helper to move all Razor logic into a separate class. /// For architecture of Composition over Inheritance. /// internal DnnWebApiHelper SysHlp { get; } [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] protected override void Initialize(HttpControllerContext controllerContext) { var l = Log.Fn(); // Add the logger to the request, in case it's needed in error-reporting SysHlp.WebApiLogging.OnInitialize(controllerContext); base.Initialize(controllerContext); l.Done(); } [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] protected override void Dispose(bool disposing) { SysHlp.OnDispose(); base.Dispose(disposing); } /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public ILog Log { get; } /// /// The group name for log entries in insights. /// Helps group various calls by use case. /// [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] protected virtual string HistoryLogGroup => EavWebApiConstants.HistoryNameWebApi; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/DnnSxcCustomControllerBase.cs ================================================ using System.Web.Http.Controllers; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Sys.ExecutionContext; namespace ToSic.Sxc.Dnn.WebApi.Sys; /// /// This is the foundation for both the old SxcApiController and the new Dnn.ApiController. /// incl. the current App, DNN, Data, etc. /// For others, please use the SxiApiControllerBase, which doesn't have all that, and is usually then /// safer because it can't accidentally mix the App with a different appId in the params /// [PrivateApi("This is an internal base class used for the App ApiControllers. Make sure the implementations don't break")] // Note: 2022-02 2dm I'm not sure if this was ever published as the official api controller, but it may have been? [DnnLogExceptions] // Can't hide in Intellisense, because that would hide it for all derived classes too // [ShowApiWhenReleased(ShowApiMode.Never)] [method: PrivateApi] public abstract class DnnSxcCustomControllerBase(string logSuffix, string insightsGroup = default) : DnnSxcControllerBase(logSuffix, insightsGroup) { #region Constructor & DI / Setup /// /// Empty constructor is important for inheriting classes /// [PrivateApi] protected DnnSxcCustomControllerBase() : this("DynApi") { } [PrivateApi] protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); var init = DynHlp.Initialize(controllerContext); if (this is IGetCodePath thisWithPath) thisWithPath.CreateInstancePath = init.Folder; ExCtx = init.Root; } #endregion #region Internal / Plumbing / Obsolete [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] public IExecutionContext ExCtx { get; private set; } /// /// The name of the logger in insights. The inheriting class should provide the real name to be used. /// Note: Probably almost never used, except by 2sic. Must determine if we just remove it /// [Obsolete("Deprecated in v13.03 - doesn't serve a purpose any more. Will just remain to avoid breaking public uses of this property.")] [PrivateApi] [ShowApiWhenReleased(ShowApiMode.Never)] // ReSharper disable once UnassignedGetOnlyAutoProperty protected virtual string HistoryLogName { get; } #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/DnnWebApiHelper.cs ================================================ using System.Web; using ToSic.Eav.Web.Sys; using ToSic.Eav.WebApi.Sys; using ToSic.Eav.WebApi.Sys.Helpers.Http; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Dnn.Integration; namespace ToSic.Sxc.Dnn.WebApi.Sys; internal class DnnWebApiHelper : CodeHelperBase { #region Constructor & Destructor public DnnWebApiHelper(IHasLog apiController, string historyLogGroup, string firstMessage = default) : base("Dnn.ApiHlp") { var requestLogging = GetService>() .New(new() { Segment = historyLogGroup ?? EavWebApiConstants.HistoryNameWebApi, RootName = "Dnn.Api" }); this.LinkLog(requestLogging.RootLog); apiController.LinkLog(requestLogging.RootLog); WebApiLogging = new(requestLogging, firstMessage: firstMessage); } public void OnDispose() => WebApiLogging.OnDispose(); #endregion #region Logging public DnnWebApiLogging WebApiLogging { get; } #endregion #region Basic Service /// /// Get a service of a specified type. /// /// /// /// /// This will override the base functionality to ensure that any services created will be able to get the CodeContext. /// public TService GetService() where TService : class => ExCtxOrNull?.GetService() ?? _serviceProvider.Get(DnnStaticDi.GetPageScopedServiceProvider).Build(Log); // Must cache it, to be really sure we use the same ServiceProvider in the same request private readonly GetOnce _serviceProvider = new(); public void SetupResponseMaker(System.Web.Http.ApiController apiController) => GetService().Init(apiController); #endregion /// /// Extend Time so Web Server doesn't time out /// public void PreventServerTimeout600() => HttpContext.Current.Server.ScriptTimeout = 600; public IBlock GetBlockAndContext(HttpRequestMessage request) => _blcCtx.Get(() => GetService().GetCmsBlock(request)); private readonly GetOnce _blcCtx = new(); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/ControllerBase/DynamicApiCompileCodeHelpers.cs ================================================ using System.Web.Http.Controllers; using ToSic.Eav.Apps.Sys; using ToSic.Razor.Blade; using ToSic.Sxc.Backend.Adam; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Sys.ExecutionContext; using ToSic.Sys.Code.InfoSystem; using IApp = ToSic.Sxc.Apps.IApp; namespace ToSic.Sxc.Dnn.WebApi.Sys; internal class DynamicApiCompileCodeHelpers: CompileCodeHelper { public DynamicApiCompileCodeHelpers(DnnApiController owner, DnnWebApiHelper sysHlp) { _owner = owner; this.LinkLog((owner as IHasLog)?.Log); _sysHlp = sysHlp; } private readonly DnnApiController _owner; private readonly DnnWebApiHelper _sysHlp; #region Init /// /// This will make sure that any services requiring the context can get it. /// It must usually be called from the base class which expects to use this. /// /// public void InitializeBlockContext(HttpRequestMessage request) { if (_blockContextInitialized) return; _blockContextInitialized = true; SharedCurrentContextService = _sysHlp.GetService(); SharedCurrentContextService.AttachBlock(_sysHlp.GetBlockAndContext(request)); } private bool _blockContextInitialized; public (IExecutionContext Root, string Folder) Initialize(HttpControllerContext controllerContext) { var request = controllerContext.Request; InitializeBlockContext(request); // Note that the CmsBlock is created by the BaseClass, if it's detectable. Otherwise, it's null var block = _sysHlp.GetBlockAndContext(request); Log.A($"HasBlock: {block != null}"); var services = _sysHlp.GetService().ConnectServices(Log); var exCtx = services.ExCtxFactory.New(new() { OwnerOrNull = _owner, BlockOrNull = block, ParentLog = Log, CompatibilityFallback = CompatibilityLevels.CompatibilityLevel10, }); _sysHlp.ConnectToRoot(exCtx); AdamCode = exCtx.GetService(); // In case SxcBlock was null, there is no instance, but we may still need the app var app = exCtx.GetApp(); if (app == null! /* Special: there are cases where it's null, even though the API doesn't show it */) { Log.A("DynCode.App is null"); app = GetAppOrNullFromUrlParams(services, request); if (app != null) ((IExCtxAttachApp)exCtx).AttachApp(app); } var reqProperties = request.Properties; // must run this after creating AppAndDataHelpers reqProperties.Add(DnnConstants.DnnContextKey, (exCtx as IHasDnn)?.Dnn); /*if (*/ reqProperties.TryGetTyped(SourceCodeConstants.SharedCodeRootPathKeyInCache, out string path); /*) CreateInstancePath = path; */ // 16.02 - try to log more details about the current API call var currentPath = reqProperties.TryGetTyped(SourceCodeConstants.SharedCodeRootFullPathKeyInCache, out string p2) ? p2.AfterLast("/") : null; _sysHlp.WebApiLogging?.AddLogSpecs(block, app, currentPath, _sysHlp.GetService()); return (exCtx, path); } private IApp GetAppOrNullFromUrlParams(ApiControllerDependencies services, HttpRequestMessage request) { var l = Log.Fn(); try { var routeAppPath = services.AppFolderUtilities.Setup(request).GetAppFolder(false); var appReader = SharedCurrentContextService.SetAppOrNull(routeAppPath)?.AppReaderRequired; if (appReader == default) return l.ReturnNull("no app detected"); var siteCtx = SharedCurrentContextService.Site(); // Look up if page publishing is enabled - if module context is not available, always false l.A($"AppId: {appReader.AppId}"); var app = services.AppOverrideLazy.Value; app.Init(siteCtx.Site, appReader.PureIdentity(), new()); return l.Return(app, $"found #{app.AppId}"); } catch { // ignore return l.ReturnNull("exception, ignore"); } } #endregion public ISxcCurrentContextService SharedCurrentContextService; #region Adam public AdamCode AdamCode { get; private set; } public Sxc.Adam.IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => AdamCode.SaveInAdam( stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/ConfigureJsonOnlyResponseAttribute.cs ================================================ using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; /// /// Configure the WebApi controller to only use JSON responses. /// This should enforce JSON formatting. /// It's only needed in .net4x where the default is xml. /// /// /// The proper way to implement per-controller configuration is to create a custom attribute that implements IControllerConfiguration and /// modifies the HttpControllerSettings (not the global configuration directly) /// [ShowApiWhenReleased(ShowApiMode.Never)] // unclear if this needs to be public [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] public class ConfigureJsonOnlyResponseAttribute : ActionFilterAttribute, IControllerConfiguration, IHasLog { // For debugging // turn on if we ever need to debug stuff again, but avoid this in production, unless really, really necessary #if DEBUG private static readonly bool LogAnything = true; #else private static readonly bool LogAnything = false; #endif // ReSharper disable ConvertToConstant.Local private static readonly bool LogDetails = false; private static readonly bool TestThrowInitialize = false; private static readonly bool TestThrowOnActionExecuting = false; // ReSharper restore ConvertToConstant.Local public ILog Log { get; } = LogAnything ? new Log("Api.JsnAttr") : null; private bool IsDebugEnabled() => new GlobalDebugParser(LogDetails ? Log : null).IsDebugEnabled(); // Keys for per-request storage (avoid header mutation) private const string DebugFlagKey = "2sxc.DebugEnabled"; /// /// This will just run once for every controller. /// /// /// /// /// The proper way to implement per-controller configuration is to modifies the HttpControllerSettings (not the global configuration directly) /// This approach creates a controller-specific configuration that is isolated from the global settings. /// https://learn.microsoft.com/en-us/aspnet/web-api/overview/advanced/configuring-aspnet-web-api#per-controller-configuration /// public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) { // Create an independent log for this operation - don't use a class-level log because it would grow too much // add to insights-history for analytic PlaceLogInHistory(Log); var l = Log.Fn($"{nameof(controllerDescriptor)}: {controllerDescriptor.ControllerType.FullName}"); try { // Debug logging during dev-builds var debugEnabled = IsDebugEnabled(); // no request context here if (debugEnabled) DnnJsonFormattersDebug.DumpFormattersToLog(Log, "init-before", controllerSettings.Formatters); // This creates a controller-specific configuration var formattersManager = new DnnJsonFormattersManager(Log); formattersManager.ReconfigureControllerWithBestSerializers( controllerSettings.Formatters, GetCustomAttributes(controllerDescriptor.ControllerType) ); // Debug logging during dev-builds if (debugEnabled) DnnJsonFormattersDebug.DumpFormattersToLog(Log, "init-after", controllerSettings.Formatters); // Test throwing an exception. Usually in debugging you will move the execution cursor to here to generate errors for specific requests if (TestThrowInitialize) throw new($"Test Exception in {nameof(Initialize)}"); } catch (Exception ex) { // Add info - and add to system log as we want to see what actually happened l.Ex(ex); throw; } finally { l.Done(); } } /// /// Dynamic Per-Request Configuration /// /// public override void OnActionExecuting(HttpActionContext context) { // Log = new Log("Dnn.Attr"); // new log for each run PlaceLogInHistory(Log); var l = Log.Fn($"{nameof(context.Request.RequestUri)}:{context.Request?.RequestUri}"); try { // Ensure we only configure once per request (probably not necessary anymore) if (PerRequestConfigurationHelper.SkipOnMultipleExecutionsOnTheSameRequest(context, l)) { l.Done("exit early, repeat on same request"); return; } var requestProperties = context.Request?.Properties; // Cache debug-flag per request var debugEnabled = GetCachedDebugEnabled(requestProperties); var oldFormatters = context.ControllerContext.ControllerDescriptor.Configuration.Formatters; if (oldFormatters == null) { l.Done("formatters are null, unexpected"); return; } if (debugEnabled) DnnJsonFormattersDebug.DumpFormattersToLog(Log, "action-before", oldFormatters); // Re-use manager instance per request if possible to avoid repeated allocations var dnnJsonFormattersManager = new DnnJsonFormattersManager(Log); // Get any attribute for formatting on the current action, as this can override the controller-level configuration var jsonFormatterAttributeOnAction = context.ActionDescriptor .GetCustomAttributes() .FirstOrDefault(); var effectiveJsonFormatterAttribute = ApplyQueryStringCasingOverride(context, jsonFormatterAttributeOnAction); var perRequestConfiguration = PerRequestConfigurationHelper .CreateAndApplyPerRequestConfiguration(context, dnnJsonFormattersManager, effectiveJsonFormatterAttribute); // Debug logging during dev-builds if (debugEnabled && perRequestConfiguration != null) DnnJsonFormattersDebug.DumpFormattersToLog(Log, "action-after", perRequestConfiguration?.Formatters); l.Done(); // Test throwing an exception. Usually in debugging you will move the execution cursor to here to generate errors for specific requests if (TestThrowOnActionExecuting) throw new($"Test Exception in {nameof(OnActionExecuting)}"); } catch (Exception ex) { // Add info - and add to system log as we want to see what actually happened l.Ex(ex); throw; } } // Cache debug-flag per request private bool GetCachedDebugEnabled(IDictionary requestProperties) { if (requestProperties?.TryGetTyped(DebugFlagKey, out bool dbgBool) == true) return dbgBool; var debugEnabled = IsDebugEnabled(); requestProperties?[DebugFlagKey] = debugEnabled; return debugEnabled; } /// /// Allows request-level casing override using `?$casing=camel` without touching global formatter state. /// private static JsonFormatterAttribute ApplyQueryStringCasingOverride(HttpActionContext context, JsonFormatterAttribute currentAttribute) { if (!TryGetQueryStringCasingOverride(context, out var requestedCasing)) return currentAttribute; return new() { EntityFormat = currentAttribute?.EntityFormat ?? EntityFormat.Light, Casing = requestedCasing }; } /// /// Returns true only for supported casing overrides; unsupported values are ignored. /// private static bool TryGetQueryStringCasingOverride(HttpActionContext context, out Casing casing) => JsonCasingOverrideHelper.TryParseCasingOverride(context?.Request?.GetQueryNameValuePairs(), out casing); /// /// since it's really hard to debug attribute/serialization issues, try to log this problem /// private void PlaceLogInHistory(ILog log) { if (LogAnything) GetService()?.Add("webapi-serialization", log); } // Do NOT CACHE the ServiceProvider, as this attribute seems to be long-lived and shared between requests private TService GetService() where TService : class => DnnStaticDi.GetPageScopedServiceProvider().Build(Log); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/DnnJsonFormattersDebug.cs ================================================ using System.Net.Http.Formatting; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; internal class DnnJsonFormattersDebug { internal static void DumpFormattersToLog(ILog log, string phase, MediaTypeFormatterCollection formatters) { var l = log.Fn($"dump:{phase}"); try { // Intro l.A($"Dumping formatters ({formatters?.Count ?? -1}) at {phase}"); // If nothing, exit early if (formatters == null) { l.A("Formatters collection is NULL"); return; } // Show each formatter for (var i = 0; i < formatters.Count; i++) { var f = formatters[i]; if (f == null) { l.A($"[{i}] NULL formatter"); continue; } var type = f.GetType(); var info = $"[{i}] {type.FullName} ({f.GetHashCode()})"; // Try to unwrap common tracer pattern try { var innerProp = type.GetProperty("InnerFormatter"); if (innerProp != null) info += innerProp.GetValue(f) is MediaTypeFormatter inner ? $" -> inner: {inner.GetType().FullName}" : " -> inner: null"; } catch { /* ignore reflection errors */ } l.A(info); } } catch (Exception ex) { l.Ex(ex); } finally { l.Done(); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/DnnJsonFormattersManager.cs ================================================ using System.Net.Http.Formatting; using System.Web.Http.Controllers; using ToSic.Sxc.WebApi.Sys.ActionFilters; using static ToSic.Sxc.Dnn.WebApi.Sys.HttpJson.DnnJsonFormattersDebug; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; internal class DnnJsonFormattersManager(ILog parentLog): HelperBase(parentLog, "Dnn.JFManager") { // For debugging // ReSharper disable once ConvertToConstant.Local private static readonly bool LogDetails = false; /// /// Name used in the Tracer wrapper around SystemTextJsonMediaTypeFormatter /// private const string SystemTextJsonMediaTypeFormatterName = "System.Net.Http.Formatting.SystemTextJsonMediaTypeFormatter"; private bool IsDebugEnabled() => new GlobalDebugParser(LogDetails ? Log : null).IsDebugEnabled(); private object EnsureNoNulls(MediaTypeFormatterCollection formatters) { var l = Log.Fn(); try { if (formatters.All(f => f != null)) return l.ReturnNull("No null formatters found"); l.A("Null formatter(s) detected - will rebuild collection without nulls"); var safe = formatters .Where(f => f != null) .ToList(); formatters.Clear(); formatters.AddRange(safe); return l.ReturnNull($"Sanitized formatters count: {formatters.Count}"); } catch (Exception ex) { l.Ex(ex); return l.ReturnNull("Exception during EnsureNoNulls"); } } // This creates a controller-specific configuration internal void ReconfigureControllerWithBestSerializers(MediaTypeFormatterCollection formatters, Attribute[] customAttributes) { var l = Log.Fn(); if (IsDebugEnabled()) DumpFormattersToLog(Log, "before-controller", formatters); // Remove the XML formatter l.A("Will remove the default XmlFormatter"); try { if (formatters.XmlFormatter != null) formatters.Remove(formatters.XmlFormatter); } catch (Exception ex) { l.E("XmlFormatter remove failed"); l.Ex(ex); } // Get JsonFormatterAttribute from controller - would mark the controller to use System.Text.Json var jsonFormatterAttribute = customAttributes .OfType() .FirstOrDefault(); // For older apis we need to leave NewtonsoftJson (when JsonFormatterAttribute is missing on controller) var keepOldNewtonsoft = customAttributes .OfType() .Any(); if (keepOldNewtonsoft && jsonFormatterAttribute == null) { if (IsDebugEnabled()) DumpFormattersToLog(Log, "after-controller-skip", formatters); l.Done($"Has {nameof(DefaultToNewtonsoftForHttpJsonAttribute)} and no custom {nameof(JsonFormatterAttribute)} will leave serializers intact."); return; } // For newer apis we need to use System.Text.Json, but generated per request // because of DI dependencies for EavJsonConvertors in new generated JsonOptions // Remove default JsonMediaTypeFormatter (Newtonsoft) with a single rebuild pass try { var keep = formatters .Where(f => f is not JsonMediaTypeFormatter) .ToList(); formatters.Clear(); formatters.AddRange(keep); } catch (Exception ex) { l.E("Newtonsoft remove (rebuild) failed"); l.Ex(ex); } // Add SystemTextJsonMediaTypeFormatter with JsonSerializerOptions based on JsonFormatterAttribute from controller ReplaceJsonFormatterWithNewInstance(formatters, jsonFormatterAttribute); EnsureNoNulls(formatters); if (IsDebugEnabled()) DumpFormattersToLog(Log, "after-controller", formatters); l.Done(); } internal void ReconfigureActionWithContextAwareSerializer( HttpControllerDescriptor controllerDescriptor, MediaTypeFormatterCollection formatters, JsonFormatterAttribute jsonFormatterAttributeOnAction) { var l = Log.Fn(); // Get JsonFormatterAttribute from action **Method** l.A(jsonFormatterAttributeOnAction == null ? $"{nameof(JsonFormatterAttribute)} is missing on action method." // note: before 20.09 it returned here : $"Method has custom {nameof(JsonFormatterAttribute)}"); // For older apis we need to leave (when JsonFormatterAttribute is missing on action method) var controllerHasDefaultToOld = Attribute.GetCustomAttributes(controllerDescriptor.ControllerType) .OfType() .Any(); if (controllerHasDefaultToOld) { l.Done($"Controller has {nameof(DefaultToNewtonsoftForHttpJsonAttribute)}, will exit leaving old serializers."); return; } if (formatters == null) { l.Done("Formatters collection is null - nothing to reconfigure"); return; } l.A($"Found {formatters.Count} formatters"); if (IsDebugEnabled()) DumpFormattersToLog(Log, "before-action", formatters); ReplaceJsonFormatterWithNewInstance(formatters, jsonFormatterAttributeOnAction); EnsureNoNulls(formatters); if (IsDebugEnabled()) DumpFormattersToLog(Log, "after-action", formatters); l.Done(); } internal void ReplaceJsonFormatterWithNewInstance(MediaTypeFormatterCollection formatters, JsonFormatterAttribute jsonFormatterAttributeOnAction) { var l = Log.Fn(); // 2025-11-08 2dm - creating a list to avoid multiple enumeration of formatters // since I sometimes observed a single error after restart "Collection was modified; enumeration operation may not execute." // Defensive: copy once to avoid collection-modified exceptions var formattersListCopy = formatters.ToList(); // Collect formatters to remove (STJ and tracer-like) in one pass var toKeep = new List(formattersListCopy.Count); var removedForCasingMedia = new List(); // all removed items var removedStj = new List(); // only STJ for casing helper foreach (var f in formattersListCopy) { if (f is SystemTextJsonMediaTypeFormatter stj) { removedForCasingMedia.Add(stj); removedStj.Add(stj); continue; } // Tracers seem to be wrapped formatters which can also do trace-logging. // We noticed that these are prepared // Detect tracer by ToString match if (f != null && f.ToString() == SystemTextJsonMediaTypeFormatterName) { removedForCasingMedia.Add(f); // Try to unwrap actual inner STJ if present try { var innerProp = f.GetType().GetProperty("InnerFormatter"); if (innerProp?.GetValue(f) is SystemTextJsonMediaTypeFormatter inner) { removedForCasingMedia.Add(inner); removedStj.Add(inner); } } catch (Exception ex) { l.E("Failed to unwrap tracer"); l.Ex(ex); } continue; } toKeep.Add(f); } // If no STJ present after removal, add new one configured by factory var hasStj = toKeep.Any(x => x is SystemTextJsonMediaTypeFormatter); if (!hasStj) { l.A($"Will add {nameof(SystemTextJsonMediaTypeFormatter)} since none were found"); MediaTypeFormatter newFactory = null; try { newFactory = JsonConverterFactoryHelpers.CreateNewFormatterFactory( // Get the service provider from the current request scope using DnnStaticDi helper // This ensures all services (including EavJsonConverterFactory and its dependencies) use the current request's culture DnnStaticDi.GetPageScopedServiceProvider(), jsonFormatterAttributeOnAction, () => JsonFormatterCasingHelpersForDnn.ExtractCasingFromFormatters(removedStj), jsonSerializerOptions => new SystemTextJsonMediaTypeFormatter { JsonSerializerOptions = jsonSerializerOptions } ); } catch (Exception ex) { l.E("CreateNewFormatterFactory threw"); l.Ex(ex); } if (newFactory != null) toKeep.Insert(0, newFactory); else l.A("CreateNewFormatterFactory returned NULL - will not insert"); } else { l.A($"It has a {nameof(SystemTextJsonMediaTypeFormatter)}, so won't add."); } // Rebuild collection once to avoid multiple Remove calls try { formatters.Clear(); foreach (var f in toKeep) formatters.Add(f); } catch (Exception ex) { l.E("Rebuild formatters failed"); l.Ex(ex); } l.Done(); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/GlobalDebugParser.cs ================================================ using System.Diagnostics; using System.Web; using DotNetNuke.Entities.Controllers; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; // Helper for parsing debug decision from querystring and host-setting (no headers, no empty values). internal class GlobalDebugParser(ILog parentLog) : HelperBase(parentLog, "Dnn.DbRqPr") { private const string Debug = "debug"; // HostSetting key (DNN Host / SuperUser scope) - avoids web.config edits/restarts private const string HostSettingForceDebugKey = "Sxc:ForceDebug"; // Global state cached in-memory for fast checks (not user-bound) private static bool? _globalDebug; private static readonly object GlobalLock = new(); // Determines whether tracing is enabled for the given HttpContext. // Precedence: explicit query toggle -> cached host-setting -> default(false) internal bool IsDebugEnabled() { var l = Log.Fn("parse debug state"); try { #if DEBUG if (Debugger.IsAttached) { l.A("Debugger attached -> debug = true"); return l.ReturnTrue("attached"); } #endif var ctx = HttpContext.Current; // may be null outside request scope // 1) Query string explicit toggle (requires value true/false; no empty value supported) try { if (ctx?.Request != null) { var req = ctx.Request; var hasKey = req.QueryString.AllKeys?.Contains(Debug) == true; if (hasKey) { var qVal = req.QueryString[Debug]; l.A($"query:'{qVal}'"); if (qVal != null) { if (IsTruthy(qVal)) { SetGlobalDebug(true, out var persistedOk); l.A($"explicit query toggle on; host-setting-persist={(persistedOk ? "ok" : "fail")}"); return l.ReturnTrue("explicit-on"); } if (IsFalsey(qVal)) { SetGlobalDebug(false, out var persistedOk); l.A($"explicit query toggle off; host-setting-persist={(persistedOk ? "ok" : "fail")}"); return l.ReturnFalse("explicit-off"); } l.A("query value invalid -> ignore"); } } } } catch (Exception ex) { l.Ex(ex); } // 2) Fallback to global cached host-setting try { var forced = GetGlobalDebug(); if (forced.HasValue) { l.A($"global forced = {forced.Value}"); return l.Return(forced.Value, forced.Value ? "global-on" : "global-off"); } } catch (Exception ex) { l.Ex(ex); } l.A("default = false"); return l.ReturnFalse("default-off"); } catch (Exception ex) { l.Ex(ex); return l.ReturnFalse("error"); } } // Retrieve forced debug from cache or HostSettings private static bool? GetGlobalDebug() { if (_globalDebug.HasValue) return _globalDebug.Value; lock (GlobalLock) { if (_globalDebug.HasValue) return _globalDebug.Value; try { var raw = HostController.Instance.GetString(HostSettingForceDebugKey, null); if (raw == null) { _globalDebug = null; // unset } else if (IsTruthy(raw)) { _globalDebug = true; } else if (IsFalsey(raw)) { _globalDebug = false; } else { _globalDebug = null; // unknown -> ignore } } catch { _globalDebug = null; } return _globalDebug; } } // Set global forced debug & persist in HostSettings; returns persistence success private static void SetGlobalDebug(bool enable, out bool persistedOk) { lock (GlobalLock) { _globalDebug = enable; persistedOk = TryPersistHostSetting(enable); } } private static bool TryPersistHostSetting(bool enable) { try { var value = enable ? "true" : "false"; HostController.Instance.Update(HostSettingForceDebugKey, value, clearCache: true); return true; } catch { return false; // keep in-memory state } } private static bool IsTruthy(string value) { if (value == null) return false; var v = value.Trim().ToLowerInvariant(); return v.Length == 0 || v is "true" or "1" or "yes" or "on"; } private static bool IsFalsey(string value) { if (value == null) return false; var v = value.Trim().ToLowerInvariant(); return v is "false" or "0" or "no" or "off"; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/JsonFormatterCasingHelpersForDnn.cs ================================================ using System.Net.Http.Formatting; using System.Text.Json; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; internal class JsonFormatterCasingHelpersForDnn { internal static Casing ExtractCasingFromFormatters(List formatters) { if (formatters is not { Count: > 0 }) return Casing.Unspecified; foreach (var formatter in formatters) { var options = formatter.JsonSerializerOptions; if (options?.PropertyNamingPolicy != null) return GetCasing(options); } return Casing.Unspecified; } /// /// Get the casing configuration from JsonSerializerOptions. /// Analyzes both PropertyNamingPolicy and DictionaryKeyPolicy to determine the casing. /// /// The JsonSerializerOptions to analyze /// The detected Casing configuration internal static Casing GetCasing(JsonSerializerOptions options) { if (options == null! /* paranoid */) return Casing.Unspecified; var isCamelCase = options.PropertyNamingPolicy == JsonNamingPolicy.CamelCase; var isDictionaryCamelCase = options.DictionaryKeyPolicy == JsonNamingPolicy.CamelCase; // If both are camelCase, return the simple Camel flag if (isCamelCase && isDictionaryCamelCase) return Casing.Camel; // If both preserve original casing if (!isCamelCase && !isDictionaryCamelCase) return Casing.Preserve; // Mixed scenarios - use granular flags var result = Casing.Unspecified; if (isCamelCase) result |= Casing.Camel; else result |= Casing.Preserve; if (isDictionaryCamelCase) result |= Casing.DictionaryCamel; else result |= Casing.DictionaryPreserve; return result; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/JsonFormatters.cs ================================================ using System.Net.Http.Formatting; using ToSic.Eav.Serialization.Sys.Json; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; internal class JsonFormatters { public static SystemTextJsonMediaTypeFormatter SystemTextJsonMediaTypeFormatter => field ??= new() { JsonSerializerOptions = JsonOptions.UnsafeJsonWithoutEncodingHtml }; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/PerRequestConfigurationHelper.cs ================================================ using System.Reflection; using System.Web.Http.Controllers; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; /// /// Helper to change the formatters of an API call for this request only. /// We need it, because every request could have different cultures etc. which is provided through DI. /// Making it any other way could have side effects on later / other requests. /// internal class PerRequestConfigurationHelper { /// /// Ensure we only configure once per request. /// /// /// /// `false` if not yet configured, `true` if already configured. internal static bool SkipOnMultipleExecutionsOnTheSameRequest(HttpActionContext context, ILogCall l) { const string markerKey = "2sxc.JsonFormatter.Configured"; // Use Request.Properties to mark rather than mutating headers (faster & avoids client-side confusion) var props = context.Request?.Properties; if (props == null) return false; // If it was already configured, we would get a count, // so we can increase it and log that this is happening - but skip the actual configuration again. if (props.TryGetTyped(markerKey, out int cnt)) { cnt++; props[markerKey] = cnt; l.A($"Formatter configuration already ran for this request - skipping (count:{cnt})"); return true; } // First time, mark it as configured and continue with the configuration. props[markerKey] = 1; return false; } internal static HttpConfiguration CreateAndApplyPerRequestConfiguration( HttpActionContext context, DnnJsonFormattersManager manager, JsonFormatterAttribute jsonFormatterAttributeOnCurrentAction) { var configOriginal = context.ControllerContext.Configuration ?? throw new InvalidOperationException("Controller configuration is not available."); // Create a copy of the previous configuration var settingsCopy = new HttpControllerSettings(configOriginal); manager.ReconfigureActionWithContextAwareSerializer( context.ControllerContext.ControllerDescriptor, settingsCopy.Formatters, // this list will be updated, side effect! jsonFormatterAttributeOnCurrentAction ); var perRequestConfiguration = ApplyControllerSettings(settingsCopy, configOriginal); var updated = ApplyPerRequestConfiguration(context, perRequestConfiguration); return updated; } private static HttpConfiguration ApplyPerRequestConfiguration(HttpActionContext context, HttpConfiguration configuration) { // Note: null should not be possible, will probably cause problems upstream if (configuration == null) return null; context.ControllerContext.Configuration = configuration; context.Request?.SetConfiguration(configuration); return configuration; } /// /// This gives access to the internal static method `HttpConfiguration.ApplyControllerSettings` /// which is used by Web API to create a controller-specific configuration based on the global configuration and controller settings. /// /// We need it to spin up per-request clones of the controller configuration without touching shared state /// /// /// We will use this method to create a per-request configuration that we can modify without affecting the global configuration or other requests. /// The underlying method is retrieved through reflection, but we'll cache the delegate for performance, so we only pay the reflection cost once. /// /// The method we wrap is: /// internal static HttpConfiguration ApplyControllerSettings(HttpControllerSettings settings, HttpConfiguration configuration) /// { /// if (!settings.IsFormatterCollectionInitialized && !settings.IsParameterBindingRuleCollectionInitialized && !settings.IsServiceCollectionInitialized) /// return configuration; /// HttpConfiguration httpConfiguration = new HttpConfiguration(configuration, settings); /// httpConfiguration.Initializer(httpConfiguration); /// return httpConfiguration; /// } /// private static readonly Func ApplyControllerSettings = typeof(HttpConfiguration).GetDelegateToMethod>( methodName: "ApplyControllerSettings", bindingAttr: BindingFlags.NonPublic | BindingFlags.Static ); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/System.Text.Json.Formatter.cs ================================================ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // https://github.com/aspnet/AspLabs/blob/main/src/AspNetCoreWebAPI/src/System.Text.Json.Formatter/SystemTextJsonMediaTypeFormatter.cs // 2024-01-10 2dm NOTES // It seems to be identical with the code from the source, so I assume that it patches capabilities // which were added by a newer .net but missing in Dnn // Also not sure when we can remove this using System.Net.Http.Headers; using System.Text; using System.Text.Json; // ReSharper disable once CheckNamespace namespace System.Net.Http.Formatting; /// /// class to handle Json. /// internal class SystemTextJsonMediaTypeFormatter : MediaTypeFormatter { /// /// Initializes a new instance of the class. /// public SystemTextJsonMediaTypeFormatter() { // Set default supported media types SupportedMediaTypes.Add(new("application/json")); SupportedMediaTypes.Add(new("text/json")); // Set default supported character encodings SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true)); SupportedEncodings.Add(new UnicodeEncoding(bigEndian: false, byteOrderMark: true, throwOnInvalidBytes: true)); } /// /// Gets or sets the used to format data. Configured using . /// public JsonSerializerOptions JsonSerializerOptions = new(JsonSerializerDefaults.Web); public override Task ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) => ReadFromStreamAsync(type, readStream, content, formatterLogger, default); public override async Task ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger, CancellationToken cancellationToken) { if (type == null) { throw new ArgumentNullException("type"); } if (readStream == null) { throw new ArgumentNullException("readStream"); } HttpContentHeaders contentHeaders = content == null ? null : content.Headers; // If content length is 0 then return default value for this type if (contentHeaders != null && contentHeaders.ContentLength == 0) { return GetDefaultValueForType(type); } // Get the character encoding for the content // Never non-null since SelectCharacterEncoding() throws in error / not found scenarios Encoding effectiveEncoding = SelectCharacterEncoding(contentHeaders); Stream transcodingStream = null; if (effectiveEncoding.CodePage != Encoding.UTF8.CodePage) { #if NET5_0_OR_GREATER transcodingStream = Encoding.CreateTranscodingStream(readStream, Encoding.UTF8, effectiveEncoding, leaveOpen: true); #else throw new NotSupportedException("Using non-UTF8 encoding is not supported."); #endif } try { var result = await JsonSerializer.DeserializeAsync(transcodingStream ?? readStream, type, JsonSerializerOptions, cancellationToken); return result; } finally { #if NET5_0_OR_GREATER await (transcodingStream?.DisposeAsync() ?? default); #else transcodingStream?.Dispose(); #endif } } public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext) => WriteToStreamAsync(type, value, writeStream, content, transportContext, default); public override async Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) { if (type == null) { throw new ArgumentNullException("type"); } if (writeStream == null) { throw new ArgumentNullException("writeStream"); } Encoding effectiveEncoding = SelectCharacterEncoding(content == null ? null : content.Headers); Stream transcodingStream = null; if (effectiveEncoding.CodePage != Encoding.UTF8.CodePage) { #if NET5_0_OR_GREATER transcodingStream = Encoding.CreateTranscodingStream(writeStream, Encoding.UTF8, effectiveEncoding, leaveOpen: true); #else throw new NotSupportedException("Using non-UTF8 encoding is not supported."); #endif } try { await JsonSerializer.SerializeAsync(transcodingStream ?? writeStream, value, type, JsonSerializerOptions, cancellationToken); } finally { #if NET5_0_OR_GREATER await (transcodingStream?.DisposeAsync() ?? default); #else transcodingStream?.Dispose(); #endif } } public override bool CanReadType(Type type) => true; public override bool CanWriteType(Type type) => true; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/TypeReflectionExtensions.cs ================================================ using System.Reflection; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; internal static class TypeReflectionExtensions { /// /// /// /// Signature of the method /// /// name of the method /// /// /// internal static TFunc GetDelegateToMethod(this Type type, string methodName, BindingFlags bindingAttr) where TFunc : Delegate { // Find the internal static method using reflection - it's internal and static, so we need to specify those binding flags var method = type.GetMethod(methodName, bindingAttr); // Make sure we found it - this should always be the case if (method == null) throw new InvalidOperationException($"Unable to locate {type.Name}.{methodName}"); // Create a delegate for the method - this will allow us to call it efficiently without reflection after the initial lookup var delegateToInternalMethod = method.CreateDelegate(typeof(TFunc)); return (TFunc)delegateToInternalMethod; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/HttpJson/UseOldNewtonsoftForHttpJsonAttribute.cs ================================================ using System.Net.Http.Formatting; using System.Web.Http.Controllers; namespace ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; /// /// Mark all base classes for custom WebApi controllers which should use the old Newtonsoft. /// Important because it otherwise breaks existing code which may be using Newtonsoft objects - specifically old Mobius WebApi controllers. /// https://github.com/2sic/2sxc/issues/2917 /// Should only be applied to the base classes up to Api14, but not on newer classes /// [ShowApiWhenReleased(ShowApiMode.Never)] // unclear if this needs to be public public class DefaultToNewtonsoftForHttpJsonAttribute : Attribute { /// /// For older apis we need to leave NewtonsoftJson as the serializer. /// /// /// public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) => SetDefaultNewtonsoftJsonFormatter(controllerSettings); private void SetDefaultNewtonsoftJsonFormatter(HttpControllerSettings controllerSettings) { // Remove System.Text.Json JsonMediaTypeFormatter var formatters = controllerSettings.Formatters .OfType() .ToList(); foreach (var f in formatters) controllerSettings.Formatters.Remove(f); // Bring back original JsonFormatter if (!controllerSettings.Formatters.OfType().Any()) controllerSettings.Formatters.Insert(0, controllerSettings.Formatters.JsonFormatter); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Logging/DnnLogExceptions.cs ================================================ using System.Net; using System.Web.Http.Filters; using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn.WebApi.Sys; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnLogExceptions : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { var exception = context.Exception; DotNetNuke.Services.Exceptions.Exceptions.LogException(exception); // try to access log created so far try { LogStoreEntry logEntry = null; if (context.Request?.Properties.TryGetTyped(EavLogKey, out LogStoreEntry logEntryObj) ?? false) logEntry = logEntryObj; if (logEntry != null) { // must to ContainsKey checks, otherwise we get too many errors which is a problem while debugging // var log = logEntry.Log; // context.Request.Properties[DnnConstants.EavLogKey] as ILog; var dnnContext = context.Request.Properties.TryGetValue(DnnContextKey, out var ctxObj) ? ctxObj as IDnnContext : null; DnnLogging.LogToDnn("2sxc-Api", "Auto-Log Exception", logEntry.Log, dnnContext, force: true); } else DnnLogging.LogToDnn("2sxc-Api", "exception, but no additional internal log to add, EavLog doesn't exist", force: true); } catch { DnnLogging.TryToReportLoggingFailure("SxcWebApiExceptionHandling"); } // special manual exception maker, because otherwise IIS at runtime removes all messages // without this, debug-infos like what entity is causing the problem will not be shown to the client context.Response = context.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Bad Request", context.Exception); var httpError = (HttpError)((ObjectContent)context.Response.Content).Value; if (!httpError.ContainsKey("ExceptionType")) httpError.Add("ExceptionType", exception.GetType().FullName); if (!httpError.ContainsKey("ExceptionMessage")) httpError.Add("ExceptionMessage", exception.Message); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Logging/DnnLogWebApi.cs ================================================ using System.Web.Http.Filters; using ToSic.Sxc.Dnn.Run; namespace ToSic.Sxc.Dnn.WebApi.Sys; [ShowApiWhenReleased(ShowApiMode.Never)] public class DnnLogWebApi : ActionFilterAttribute { public override bool AllowMultiple => false; private const string AlreadyLogged = "LogDetailsAlreadyHappened"; public override void OnActionExecuted(HttpActionExecutedContext actionContext) { base.OnActionExecuted(actionContext); try { var reqProps = actionContext.Request.Properties; // check if already logged, and set property to prevent double-logging if (reqProps.ContainsKey(AlreadyLogged)) return; reqProps.Add(AlreadyLogged, true); // check if we have any logging details for this request if (!reqProps.TryGetTyped(EavLogKey, out LogStoreEntry logStoreEntry)) return; // check if we have additional context information (portal, module, etc.) reqProps.TryGetValue(DnnContextKey, out var dnnContext); DnnLogging.LogToDnn("2sxc-Api", actionContext.Request.RequestUri.PathAndQuery, logStoreEntry.Log, dnnContext as IDnnContext); } catch { DnnLogging.TryToReportLoggingFailure("WebApiLogDetails"); } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Providers/ModifiedTabAndModuleInfoProvider.cs ================================================ // This is a copy of the StandardTabAndModuleInfoProvider from DNN 7.4.2 // It's modified to work with the PageId instead of TabId // Note that it will be added to a ConcurrentQueue // So it's not meant to replace the existing one, but add another mechanism of finding it // I hope/assume it will be used if the other one fails. using System.Web; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; using ToSic.Sxc.Context.Sys; namespace ToSic.Sxc.Dnn.WebApi.Sys.Providers; internal sealed class ModifiedTabAndModuleInfoProvider : ITabAndModuleInfoProvider { private const string ModuleIdKey = ContextConstants.ModuleIdKey; // changed 2dm 2021-10-07 private const string TabIdKey = ContextConstants.PageIdKey; // changed by 2dm 2020-11-20 public bool TryFindTabId(HttpRequestMessage request, out int tabId) { tabId = FindInt(request, TabIdKey); return tabId > Null.NullInteger; } public bool TryFindModuleId(HttpRequestMessage request, out int moduleId) { moduleId = FindInt(request, ModuleIdKey); return moduleId > Null.NullInteger; } public bool TryFindModuleInfo(HttpRequestMessage request, out ModuleInfo moduleInfo) { moduleInfo = null; if (TryFindTabId(request, out var tabId) && TryFindModuleId(request, out var moduleId)) moduleInfo = ModuleController.Instance.GetModule(moduleId, tabId, false); return moduleInfo != null; } private static int FindInt(HttpRequestMessage requestMessage, string key) { string value = null; if (requestMessage.Headers.TryGetValues(key, out var values)) { value = values.FirstOrDefault(); } if (string.IsNullOrEmpty(value) && requestMessage.RequestUri != null) { var queryString = HttpUtility.ParseQueryString(requestMessage.RequestUri.Query); value = queryString[key]; } return int.TryParse(value, out var id) ? id : Null.NullInteger; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/AppApiControllerSelector.cs ================================================ using System.Text.RegularExpressions; using System.Web.Http.Controllers; using System.Web.Http.Dispatcher; using ToSic.Sxc.Dnn.Backend.Sys; namespace ToSic.Sxc.Dnn.WebApi.Sys; /// /// /// This controller will check if it's responsible (based on url) /// ...and if yes, compile / run the app-specific api controllers /// ...otherwise hand processing back to next api controller up-stream /// internal class AppApiControllerSelector(HttpConfiguration configuration) : IHttpControllerSelector { public IHttpControllerSelector PreviousSelector { get; set; } public IDictionary GetControllerMapping() => PreviousSelector.GetControllerMapping(); private static readonly string[] AllowedRoutes = [ "desktopmodules/2sxc/api/app-api/", // old routes, dnn 7/8 & dnn 9 "api/2sxc/app-api/" ]; // new in 2sxc 9.34 #1651 - added "([^/]+\/)?" to allow an optional edition parameter private static readonly string[] RegExRoutes = [ @"desktopmodules\/2sxc\/api\/app\/[^/]+\/([^/]+\/)?api", @"api\/2sxc\/app\/[^/]+\/([^/]+\/)?api" ]; /// /// Verify if this request is one which should be handled by this system /// /// /// true if we want to handle it private static bool IsSxcOrEavRequest(HttpRequestMessage request) { var routeData = request.GetRouteData(); var routeTemplateLower = routeData.Route.RouteTemplate.ToLowerInvariant(); var simpleMatch = AllowedRoutes.Any(routeTemplateLower.Contains); if (simpleMatch) return true; var rexMatch = RegExRoutes.Any(a => new Regex(a, RegexOptions.None).IsMatch(routeTemplateLower)); return rexMatch; } public HttpControllerDescriptor SelectController(HttpRequestMessage request) { // Do this once and early, to be really sure we always use the same one var sp = DnnStaticDi.GetPageScopedServiceProvider(); // Log this lookup and add to history for insights var uriToLog = request?.RequestUri?.AbsoluteUri; var log = new Log("Sxc.Http", null, uriToLog); AddToInsightsHistory(sp, uriToLog, log); var l = log.Fn(); if (!IsSxcOrEavRequest(request)) return l.Return(PreviousSelector.SelectController(request), $"not 2sxc request, use upstream ${nameof(HttpControllerDescriptor)}"); // 2024-03-21 New: offload all the work to a separate class, to use more normal DI for most of the code var appControllerSelectorSvc = sp.Build(log); try { var newDescriptor = appControllerSelectorSvc.SelectController(configuration, request); return l.Return(newDescriptor, $"found descriptor for '{newDescriptor?.ControllerName}'. Will hand that over to .net"); } catch (Exception ex) { l.Ex(ex); throw; } } private static void AddToInsightsHistory(IServiceProvider sp, string urlOrNull, ILog log) { // Note: This should never error, but it's too important risk breaking just for logging try { var addToHistory = true; if (InsightsController.InsightsLoggingEnabled) addToHistory = urlOrNull?.Contains(InsightsController.InsightsUrlFragment) ?? true; if (addToHistory) sp.Build().Add("http-request", log); } catch { /* ignore */ } } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/AppApiControllerSelectorService.cs ================================================ using System.Net; using System.Reflection; using System.Web.Compilation; using System.Web.Hosting; using System.Web.Http.Controllers; using ToSic.Eav.Apps.Sys.AppJson; using ToSic.Eav.Context; using ToSic.Eav.Sys; using ToSic.Eav.WebApi.Sys.Routing; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeErrorHelp; using ToSic.Sxc.Code.Sys.HotBuild; using ToSic.Sxc.Code.Sys.SourceCode; using ToSic.Sxc.Context.Sys; using ToSic.Sxc.Dnn.Compile; using ToSic.Sxc.Dnn.Compile.Sys; using ToSic.Sxc.Dnn.Context; using ToSic.Sxc.Dnn.Integration; using ToSic.Sys.Caching; namespace ToSic.Sxc.Dnn.WebApi.Sys; /// /// Special service to handle the selection of the correct API controller. /// /// It's in a separate class, so DI etc. works properly /// internal partial class AppApiControllerSelectorService( DnnAppFolderUtilities folderUtilities, ISite site, LazySvc roslynLazy, LazySvc getBlockLazy, LazySvc analyzerLazy, LazySvc codeErrorSvc, LazySvc assemblyCacheManager, LazySvc appCodeLoader, LazySvc sxcContextResolver, MemoryCacheService memoryCacheService, LazySvc appJson) : ServiceBase("Dnn.ApiSSv", connect: [folderUtilities, site, roslynLazy, getBlockLazy, analyzerLazy, codeErrorSvc, assemblyCacheManager, appCodeLoader, sxcContextResolver, memoryCacheService, appJson]) { #region Setup / Init private void Setup(HttpConfiguration configuration, HttpRequestMessage request) { _configuration = configuration; _request = request; } private HttpRequestMessage Request => _request ?? throw new("Request not available - call Setup(...) first!"); private HttpRequestMessage _request; private HttpConfiguration Configuration => _configuration ?? throw new("Configuration not available - call Setup(...) first!"); private HttpConfiguration _configuration; #endregion public HttpControllerDescriptor SelectController(HttpConfiguration configuration, HttpRequestMessage request) { Setup(configuration, request); var l = Log.Fn(); var routeData = request.GetRouteData(); var controllerTypeName = routeData.Values[VarNames.Controller] + EavConstants.ApiControllerSuffix; l.A($"Controller: {controllerTypeName}"); // Now Handle the 2sxc app-api queries try { // new for 2sxc 9.34 #1651 var edition = VarNames.GetEdition(routeData.Values); l.A($"Edition: {edition}"); // Try to get block - will only work, if the request has all headers var block = getBlockLazy.Value.GetCmsBlock(request); l.A($"has block: {block != null}"); // Figure out the Path, or show error for that var appFolder = folderUtilities.Setup(request).GetAppFolder(true, block); l.A($"AppFolder: {appFolder}"); // Specs for HotBuild - may not be available, but should be retrieved from the block or App-Path HotBuildSpec spec; if (block != null) { // TODO: HAD TO trim last slash, because it was added in the get-call, but causes trouble here // must ensure it's improved and done the same way in Oqtane!!! spec = new(block.AppId, edition: edition.TrimLastSlash(), block.AppOrNull?.Name); l.A($"{nameof(spec)} from Block: {spec}"); } else { // find AppId based on path - otherwise we don't have a proper spec, and things fail var appSpecs = sxcContextResolver.Value.SetAppOrNull(appFolder)?.AppReaderRequired.Specs ?? throw new("App not found"); spec = new(appSpecs.AppId, edition: edition.TrimLastSlash(), appSpecs.Name); l.A($"{nameof(spec)} from App based on path: {spec}"); } // First check local app (in this site), then global var descriptor = Get(appFolder, edition, controllerTypeName, false, spec); if (descriptor != null) return l.ReturnAsOk(descriptor); l.A("path not found, will check on shared location"); descriptor = Get(appFolder, edition, controllerTypeName, true, spec); if (descriptor != null) return l.ReturnAsOk(descriptor); } catch (Exception e) { throw l.Done(DnnHttpErrors.LogAndReturnException(request, HttpStatusCode.InternalServerError, e, DnnHttpErrors.ApiErrMessage, codeErrorSvc.Value)); } // If we got to here we didn't find it. // But we want to throw the exception here, otherwise it's re-wrapped. l.A("Path / Controller not found in shared, error will be thrown in a moment"); var msgFinal = $"2sxc Api Controller Finder: Controller {controllerTypeName} not found in app and paths."; throw l.Done(DnnHttpErrors.LogAndReturnException(request, HttpStatusCode.NotFound, new(), msgFinal, codeErrorSvc.Value)); } private (HttpControllerDescriptorWithPaths descriptor, IEnumerable cacheKeys, IList filePaths) BuildDescriptorIfExists(string appFolder, string edition, string controllerTypeName, bool shared, HotBuildSpec spec) { var l = Log.Fn<(HttpControllerDescriptorWithPaths descriptor, IEnumerable cacheKeys, IList filePaths)>( $"{nameof(appFolder)}:'{appFolder}'; {nameof(edition)}:'{edition}'; {nameof(controllerTypeName)}:'{controllerTypeName}'; {nameof(shared)}:{shared}; {spec}", timer: true ); // 0. Prepare folders which will be used var controllerFolder = GetControllerFolder(appFolder, edition, shared); // 1. Check AppCode Dll if (spec != null) { var appCodeAssemblyResult = appCodeLoader.Value.GetAppCode(spec).AssemblyResult; // If assembly found, check if this controller exists in that dll - if yes, return it var type = appCodeAssemblyResult?.Assembly?.FindControllerTypeByName(controllerTypeName); if (type != null) { // cache dependency on existing cache item with AppCode assembly var appCodeDescriptor = new HttpControllerDescriptor(Configuration, type.Name, type); var fakeFolder = controllerFolder.Replace("/api/", "/AppCode/"); return l.Return((descriptor: new(appCodeDescriptor, fakeFolder, fakeFolder + "AppCode-auto-compiled.dll"), cacheKeys: [appCodeAssemblyResult.CacheDependencyId], filePaths: null), "Api controller from AppCode"); } } // 2. Normal Api, compiled on the fly var controllerPath = GetControllerPath(appFolder, edition, shared, controllerTypeName); l.A($"Controller Folder: '{controllerFolder}' Path: '{controllerPath}'"); // note: this may look like something you could optimize/cache the result, but that's a bad idea // because when the file changes, the type-object will be different, so please don't optimize :) var (descriptor, cacheDependencyKeys) = BuildDescriptorOrThrow(controllerPath, controllerTypeName, spec); var hasCacheKeys = cacheDependencyKeys?.Count > 0; return l.Return((descriptor: new(descriptor, controllerFolder, controllerPath), cacheKeys: hasCacheKeys ? cacheDependencyKeys : null, // cache dependency on existing cache item; filePaths: hasCacheKeys ? null: [HostingEnvironment.MapPath(controllerPath)]), // cache dependency on existing api file $"normal Api controller from '{controllerPath}'"); } private string GetControllerFolder(string appFolder, string edition, bool shared) => Path.Combine(shared ? site.SharedAppsRootRelative() : site.AppsRootPhysical, appFolder, edition + "api/").ForwardSlash(); private string GetControllerPath(string appFolder, string edition, bool shared, string controllerTypeName) => Path.Combine(GetControllerFolder(appFolder, edition, shared), $"{controllerTypeName}.cs"); private (HttpControllerDescriptor HttpControllerDescriptor, List CacheDependecyKeys) BuildDescriptorOrThrow(string fullPath, string typeName, HotBuildSpec spec) { var l = Log.Fn<(HttpControllerDescriptor, List)>($"{nameof(fullPath)}:'{fullPath}'; {nameof(typeName)}:'{typeName}'; {spec}", timer: true); Assembly assembly; List cacheDependencyKeys = null; var codeFileInfo = analyzerLazy.Value.TypeOfVirtualPath(fullPath); var alwaysUseRoslyn = appJson.Value.DnnCompilerAlwaysUseRoslyn(spec.AppId); if (alwaysUseRoslyn || codeFileInfo.AppCode) { l.A("AppCode - use Roslyn"); var result = roslynLazy.Value.GetCompiledAssembly(codeFileInfo, typeName, spec); assembly = result?.Assembly; // build list of cache dependencies keys if (!string.IsNullOrEmpty(result?.CacheDependencyId)) { cacheDependencyKeys = [result.CacheDependencyId]; if (alwaysUseRoslyn) cacheDependencyKeys.Add(appJson.Value.AppJsonCacheKey(spec.AppId)); } l.A($"cache dependency keys: {cacheDependencyKeys?.Count ?? 0}"); } else { l.A("no AppCode - use BuildManager"); assembly = BuildManager.GetCompiledAssembly(fullPath); } if (assembly == null) throw l.Ex(new Exception("Assembly not found or compiled to null (error).")); l.A($"FindControllerTypeByName: '{typeName}'"); var type = assembly.FindControllerTypeByName(typeName) ?? throw l.Ex(new Exception($"Type '{typeName}' not found in assembly. Could be a compile error or name mismatch.")); l.A($"Type found: '{type.Name}'"); return l.Return((new (Configuration, type.Name, type), cacheDependencyKeys)); } ///// ///// help with path resolution for compilers running inside the created controller ///// //private void SetPathForCompilersInsideController(string appFolder, string edition, string controllerTypeName, bool shared) //{ // var controllerPath = GetControllerPath(appFolder, edition, shared, controllerTypeName); // if (!File.Exists(HostingEnvironment.MapPath(controllerPath))) return; // var controllerFolder = GetControllerFolder(appFolder, edition, shared); // PreservePathForGetCodeInController(controllerFolder, controllerPath); //} private void PreservePathForGetCodeInController(string controllerFolder, string controllerPath) { if (Request == null) return; Request.Properties.Add(SourceCodeConstants.SharedCodeRootPathKeyInCache, controllerFolder); Request.Properties.Add(SourceCodeConstants.SharedCodeRootFullPathKeyInCache, controllerPath); } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/AppApiControllerSelectorService_Cache.cs ================================================ using System.Web.Http.Controllers; using ToSic.Sxc.Code.Sys.HotBuild; namespace ToSic.Sxc.Dnn.WebApi.Sys; internal partial class AppApiControllerSelectorService { private static string CacheKey(string appFolder, string controllerTypeName, bool shared, HotBuildSpec spec) => $"AppApiCtrl:Descriptor:{appFolder}:{controllerTypeName}:{shared}:{spec.CacheKey()}"; private HttpControllerDescriptor Get(string appFolder, string editionPath, string controllerTypeName, bool shared, HotBuildSpec spec) { var descriptorCacheKey = CacheKey(appFolder, controllerTypeName, shared, spec); if (memoryCacheService.TryGet(descriptorCacheKey, out var dataWithPaths)) { PreservePathForGetCodeInController(dataWithPaths.Folder, dataWithPaths.FullPath); return dataWithPaths.Descriptor; } Log.A($"Descriptor not found in cache, will try to build it ({nameof(descriptorCacheKey)}:'{descriptorCacheKey}')"); var (data, cacheKeys, filePaths) = BuildDescriptorIfExists(appFolder, editionPath, controllerTypeName, shared, spec); memoryCacheService.Set(key: descriptorCacheKey, value: data, func: p => p .SetSlidingExpiration(new TimeSpan(1, 0, 0)) .WatchCacheKeys(cacheKeys) .WatchFiles(filePaths) ); PreservePathForGetCodeInController(data.Folder, data.FullPath); return data.Descriptor; } } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/HttpControllerDescriptorWithPaths.cs ================================================ using System.Web.Http.Controllers; namespace ToSic.Sxc.Dnn.WebApi.Sys; internal class HttpControllerDescriptorWithPaths(HttpControllerDescriptor descriptor, string folder, string fullPath) { public HttpControllerDescriptor Descriptor { get; } = descriptor; /// /// The folder in which the controller is located. /// For controllers inside AppCode, the folder is the AppCode folder. /// public string Folder { get; } = folder; /// /// The exact path to the controller file. /// Note that I'm not sure what it's actually used for. /// public string FullPath { get; } = fullPath; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/RouteMapper.cs ================================================ using System.Web.Http.Dispatcher; using ToSic.Eav.WebApi.Sys.Routing; using ToSic.Sxc.Dnn.Backend; using ToSic.Sxc.Dnn.Backend.Admin; using ToSic.Sxc.Dnn.Backend.App; using ToSic.Sxc.Dnn.Backend.Cms; using ToSic.Sxc.Dnn.Backend.Module; using ToSic.Sxc.Dnn.Backend.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.Providers; namespace ToSic.Sxc.Dnn.WebApi.Sys; // ReSharper disable once UnusedMember.Global [ShowApiWhenReleased(ShowApiMode.Never)] public class RouteMapper : IServiceRouteMapper { // DNN Module Name used in the route const string Mod2Sxc = "2sxc"; // Route Concept // starting with eav means it's a rather low-level admin function, always needs an AppId // eav // eav-??? // starting with app means that it's a app-specific action, more for the JS developers working with content // app-content will do basic content-actions like get one, edit, update, delete // app-query will try to request a query // app-api will call custom c# web-apis of a specific app private static readonly string[] StdNsWebApi = [typeof(AppDataController).Namespace]; private static readonly string[] AdamNamespaces = [typeof(AdamController).Namespace]; private IMapRoute _mapRouteManager; private static readonly object AppContentDefaults = new { controller = ControllerNames.AppContent, id = RouteParameter.Optional }; [ShowApiWhenReleased(ShowApiMode.Never)] public void RegisterRoutes(IMapRoute mapRouteManager) { _mapRouteManager = mapRouteManager; // #DropOldPre8Routes //// old API routes before 08.10 //RegisterOldRoutesBefore0810(); #region new API routes after 08.10 // ADAM routes AddWithDefaults("adam-auto", $"{AppRoots.AppAutoContent}/{ValueTokens.SetTypeGuidField}", ControllerNames.Adam, AdamNamespaces); AddWithDefaults("adam2-auto", $"{AppRoots.AppAutoContent}/{ValueTokens.SetTypeGuidFieldAction}", ControllerNames.Adam, AdamNamespaces); AddWithDefaults("adam3-auto", $"{AppRoots.AppAutoData}/{ValueTokens.SetTypeGuidField}", ControllerNames.Adam, AdamNamespaces); // new, v13 AddWithDefaults("adam4-auto", $"{AppRoots.AppAutoData}/{ValueTokens.SetTypeGuidFieldAction}", ControllerNames.Adam, AdamNamespaces); // new, v13 // App Content routes - for GET/DELETE/PUT entities using REST // 1. Type and null or int-id // 2. Type and guid-id var idNullOrNumConstraints = ConstraintForIdEmptyOrNumber(); foreach (var part in Roots.Content) { AddWithConstraints($"2sxc-{part.Name}", $"{part.Path}/{ValueTokens.SetTypeAndId}", AppContentDefaults, idNullOrNumConstraints, StdNsWebApi); AddWithDefaults($"2sxc-guid-{part.Name}", $"{part.Path}/{ValueTokens.SetTypeAndGuid}", ControllerNames.AppContent, StdNsWebApi); } // App-API routes - for the custom code API calls of an app foreach (var part in Roots.AppAutoNamedInclEditions) AddBasic($"app-api{part.Name}", $"{part.Path}/{RouteParts.RouteApiControllerAction}", StdNsWebApi); // new, v08.10+ // App-Query routes - to access designed queries // new routes, v08.10+ foreach (var part in Roots.QueryRoots) { AddWithDefaults($"2sxc-auto-{part.Name}", $"{part.Path}/{ValueTokens.Name}", ControllerNames.AppQuery, StdNsWebApi); AddWithDefaults($"2sxc-auto-slash{part.Name}", $"{part.Path}/{ValueTokens.Name}/", ControllerNames.AppQuery, StdNsWebApi); AddWithDefaults($"2sxc-auto-stream{part.Name}", $"{part.Path}/{ValueTokens.Name}/{ValueTokens.Stream}", ControllerNames.AppQuery, StdNsWebApi); } #endregion #region New routes in 2sxc 11.06+ which should replace most previous internal routes // /Sys/ Part 1: Special update v13 - all the insights-commands go through "Details?view=xyz // It's important that this comes first, otherwise the second /sys/ will capture this as well _mapRouteManager.MapHttpRoute(Mod2Sxc, "2sxc-sys-new", $"{Areas.Sys}/Insights/{{View}}", new { controller = "Insights", action = nameof(InsightsController.Details) }, [typeof(InsightsController).Namespace]); // /Sys/ Part 2: All others AddBasic("2sxc-sys", $"{Areas.Sys}/{ValueTokens.SetControllerAction}", [typeof(InstallController).Namespace]); AddBasic("2sxc-cms", $"{Areas.Cms}/{ValueTokens.SetControllerAction}", [typeof(BlockController).Namespace]); AddBasic("2sic-admin", $"{Areas.Admin}/{ValueTokens.SetControllerAction}", [typeof(MetadataController).Namespace]); // Specific admin route to support folder segment for AppController.Extensions AddBasic($"2sxc-admin-app-extensions-{ValueTokens.Name}", url: $"{Areas.Admin}/{ValueTokens.SetControllerAction}/{ValueTokens.Name}", namespaces: [typeof(AppController).Namespace]); #endregion // v21 - app cache/Lightspeed AddBasic("2sxc-app-cache-auto", $"{AppRoots.AppAuto}/{ValueTokens.SetControllerAction}", [typeof(CacheController).Namespace]); AddBasic("2sxc-app-cache-name", $"{AppRoots.AppNamed}/{ValueTokens.SetControllerAction}", [typeof(CacheController).Namespace]); // DNN: System calls to dnn - this is just for module delete AddBasic("dnn", $"dnn/{ValueTokens.SetControllerAction}", [typeof(ModuleController).Namespace]); // Add custom service locator into the chain of service-locators // this is needed to enable custom API controller lookup for the app-api var config = GlobalConfiguration.Configuration; var previousSelector = config.Services.GetService(typeof(IHttpControllerSelector)) as IHttpControllerSelector; config.Services.Replace(typeof(IHttpControllerSelector), new AppApiControllerSelector(config) { PreviousSelector = previousSelector }); // Attempt to add another Module Resolver to the list which will work with the header PageId instead of TabId GlobalConfiguration.Configuration.AddTabAndModuleInfoProvider(new ModifiedTabAndModuleInfoProvider()); } // #DropOldPre8Routes //private void RegisterOldRoutesBefore0810() //{ // // ADAM routes // var oldContentRoot = "app-content"; // AddWD("adam-old-81", $"{oldContentRoot}/{ValueTokens.SetTypeGuidField}", ControllerNames.Adam, AdamNamespace); // AddWD("adam", $"{oldContentRoot}/{ValueTokens.SetTypeGuidFieldAction}", ControllerNames.Adam, AdamNamespace); // // App Content routes - for GET/DELETE/PUT entities using REST // // 1. Type and null or int-id // // 2. Type and guid-id // var idNullOrNumber = ConstraintForIdEmptyOrNumber(); // AddWC("app-content", $"{oldContentRoot}/{ValueTokens.SetTypeAndId}", AppContentDefs, idNullOrNumber, StdNsWebApi); // AddWD("app-content-guid", $"{oldContentRoot}/{ValueTokens.SetTypeAndGuid}", ControllerNames.AppContent, StdNsWebApi); // // App-API routes - for the custom code API calls of an app // // these are the old routes, before 2sxc v08.10 // AddWD(Mod2Sxc, "app-api-old-81", $"app-api/{ValueTokens.SetControllerAction}", StdNsWebApi); // // App-Query routes - to access designed queries // // these are the old routes, before 2sxc v08.10 // const string rootQueryPre0810 = "app-query"; // AddWD("app-query-old-81", $"{rootQueryPre0810}/{ValueTokens.Name}", ControllerNames.AppQuery, StdNsWebApi); //} /// /// Generate a constraint which only matches an ID parameter which is either empty or contains only digits. /// /// private static object ConstraintForIdEmptyOrNumber() => new { id = @"^\d*$" }; #region "Add" shorthands /// /// Add just with namespaces /// void AddBasic(string name, string url, string[] namespaces) => _mapRouteManager.MapHttpRoute(Mod2Sxc, name, url, namespaces); /// /// Add WD - "With Defaults" /// void AddWithDefaults(string name, string url, string controllerName, string[] namespaces) { var objDefaults = new { controller = controllerName }; _mapRouteManager.MapHttpRoute(Mod2Sxc, name, url, objDefaults, namespaces); } /// /// Add WC - "With Constraints" /// void AddWithConstraints(string name, string url, object defaults, object constraints, string[] namespaces) => _mapRouteManager.MapHttpRoute(Mod2Sxc, name, url, defaults, constraints, namespaces); #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Dnn/WebApi/Sys/Routing/RouteParts.cs ================================================ using ToSic.Eav.WebApi.Sys.Routing; namespace ToSic.Sxc.Dnn.WebApi.Sys; internal class Roots { public static RootId[] QueryRoots = [ new("qry-auto", $"{AppRoots.AppAuto}/{AppParts.Query}"), new("qry-name", $"{AppRoots.AppNamed}/{AppParts.Query}") ]; public static RootId[] AppAutoAndNamed = [ new("app-auto", AppRoots.AppAuto), new("app-name", AppRoots.AppNamed) ]; public static RootId[] Content = [ new("cont-auto", AppRoots.AppAutoContent), new("cont-name", AppRoots.AppNamedContent), new("data-auto", AppRoots.AppAutoData), // new, v13 new("data-name", AppRoots.AppNamedData) // new, v13 ]; public static RootId[] AppAutoNamedInclEditions = AppAutoAndNamed .Concat(AppAutoAndNamed.Select(rid => new RootId($"{rid.Name}-edition", $"{rid.Path}/{ValueTokens.Edition}"))) .ToArray(); } internal struct RootId(string name, string path) { public string Name = name; public string Path = path; } internal class RouteParts { public const string RouteApiControllerAction = $"api/{ValueTokens.SetControllerAction}"; } internal class ControllerNames { public const string Adam = "Adam"; public const string AppContent = "AppData"; public const string AppQuery = "AppQuery"; } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/GlobalUsings.cs ================================================ // Global using directives global using System; global using System.Collections.Generic; global using System.Net.Http; global using System.Web.Http; global using DotNetNuke.Security; global using DotNetNuke.Web.Api; global using ToSic.Sys.Coding; global using ToSic.Sys.DI; global using ToSic.Sys.Documentation; global using ToSic.Sys.Data; global using ToSic.Sys.Logging; global using ToSic.Sys.Services; global using ToSic.Sys.Wrappers; global using ToSic.Sxc.WebApi; global using ToSic.Sys.Utils; global using static ToSic.Sxc.Dnn.DnnConstants; ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Obsolete/SexyContent/WebApi/SxcApiController.cs ================================================ using ToSic.Eav.Data; using ToSic.Eav.DataFormats.EavLight; using ToSic.Eav.DataSource; using ToSic.Eav.LookUp.Sys.Engines; using ToSic.Sxc.Adam; using ToSic.Sxc.Blocks.Sys; using ToSic.Sxc.Code; using ToSic.Sxc.Code.Sys; using ToSic.Sxc.Code.Sys.CodeApi; using ToSic.Sxc.Code.Sys.CodeApiService; using ToSic.Sxc.Code.Sys.CodeRunHelpers; using ToSic.Sxc.Compatibility.Sxc; using ToSic.Sxc.Context; using ToSic.Sxc.Dnn.Run; using ToSic.Sxc.Services; using ToSic.Sxc.Dnn.Code; using ToSic.Sxc.Dnn.WebApi.Sys; using ToSic.Sxc.Dnn.WebApi.Sys.HttpJson; using ToSic.Sxc.Sys.ExecutionContext; using IApp = ToSic.Sxc.Apps.IApp; using IFolder = ToSic.Sxc.Adam.IFolder; // ReSharper disable InheritdocInvalidUsage // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.WebApi; /// /// /// This is the base class for API Controllers which need the full context /// incl. the current App, DNN, Data, etc. /// For others, please use the SxiApiControllerBase, which doesn't have all that, and is usually then /// safer because it can't accidentally mix the App with a different appId in the params /// [DnnLogExceptions] [Obsolete("This will continue to work, but you should use the Custom.Hybrid.Api14 or Custom.Dnn.Api12 instead.")] [PrivateApi("This was the official base class a long time ago, Name & APIs must remain stable")] [DefaultToNewtonsoftForHttpJson] [ShowApiWhenReleased(ShowApiMode.Never)] public abstract partial class SxcApiController() : DnnSxcCustomControllerBase("OldApi"), IDynamicCode, IHasDnn, ICreateInstance, IDynamicWebApi, // #RemovedV20 #IAppAndDataHelpers //IDynamicCodeBeforeV10 //#pragma warning disable 618 // IAppAndDataHelpers, //#pragma warning restore 618 IHasCodeLog { internal ICodeDynamicApiHelper CodeApi => field ??= ExCtx.GetDynamicApi(); /// public TService GetService() where TService : class => SysHlp.GetService(); /// public IDnnContext Dnn => (ExCtx as IHasDnn)?.Dnn; [Obsolete] [PrivateApi] public SxcHelper Sxc => field ??= new(CodeApi?.Block?.Context?.Permissions.IsContentAdmin ?? false, SysHlp.GetService ()); /// /// Old API - probably never used, but we shouldn't remove it as we could break some existing code out there /// [PrivateApi] public IBlock Block => SysHlp.GetBlockAndContext(Request); [PrivateApi] public int CompatibilityLevel => CompatibilityLevels.CompatibilityLevel9Old; /// public IApp App => CodeApi.App; /// public IDataSource Data => /*(IBlockDataSource)*/CodeApi.Data; // Explicit implementation of expected interface, but it should not work in the normal code // as the old code sometimes expects Data.Cache.GetContentType /// IDataSource IDynamicCode.Data => CodeApi.Data; #region AsDynamic implementations /// public dynamic AsDynamic(IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity); /// public dynamic AsDynamic(object dynamicEntity) => CodeApi.Cdf.AsDynamicFromObject(dynamicEntity); /// [PublicApi("Careful - still Experimental in 12.02")] public dynamic AsDynamic(params object[] entities) => CodeApi.Cdf.MergeDynamic(entities); /// [PrivateApi("old api, only available in old API controller")] public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => CodeApi.Cdf.CodeAsDyn(entityKeyValuePair.Value); /// public IEnumerable AsDynamic(IDataStream stream) => CodeApi.Cdf.CodeAsDynList(stream.List); /// public IEntity AsEntity(object dynamicEntity) => CodeApi.Cdf.AsEntity(dynamicEntity); /// public IEnumerable AsDynamic(IEnumerable entities) => CodeApi.Cdf.CodeAsDynList(entities); #endregion #region Compatibility with Eav.Interfaces.IEntity - introduced in 10.10 - Removed in v20 //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(Eav.Interfaces.IEntity entity) => CodeApi.Cdf.CodeAsDyn(entity as IEntity); //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public dynamic AsDynamic(KeyValuePair entityKeyValuePair) => CodeApi.Cdf.CodeAsDyn(entityKeyValuePair.Value as IEntity); //[PrivateApi] //[Obsolete("for compatibility only, avoid using this and cast your entities to ToSic.Eav.Data.IEntity")] //public IEnumerable AsDynamic(IEnumerable entities) => CodeApi.Cdf.CodeAsDynList(entities.Cast()); #endregion #region CreateSource implementations [Obsolete] [PrivateApi] public IDataSource CreateSource(string typeName = "", IDataSource inSource = null, ILookUpEngine configurationProvider = null) => new CodeApiServiceObsolete(ExCtx).CreateSource(typeName, inSource, configurationProvider); /// public T CreateSource(IDataSource inSource = null, ILookUpEngine configurationProvider = default) where T : IDataSource => CodeApi.CreateSource(inSource, configurationProvider); /// public T CreateSource(IDataStream source) where T : IDataSource => CodeApi.CreateSource(source); #endregion #region Content, Presentation & List /// /// content item of the current view /// public dynamic Content => CodeApi.Content; /// /// presentation item of the content-item. /// [Obsolete("please use Content.Presentation instead")] public dynamic Presentation => CodeApi.Content?.Presentation; public dynamic Header => CodeApi.Header; [Obsolete("use Header instead")] public dynamic ListContent => CodeApi.Header; /// /// presentation item of the content-item. /// [Obsolete("please use Header.Presentation instead")] public dynamic ListPresentation => CodeApi.Header?.Presentation; // #RemovedV20 #Element //[Obsolete("This is an old way used to loop things. Use Data[\"Default\"] instead. Will be removed in 2sxc v10")] //public List List => new CodeApiServiceObsolete(ExCtx).ElementList; #endregion #region Adam /// public IFolder AsAdam(ICanBeEntity item, string fieldName) => CodeApi.AsAdam(item, fieldName); /// public IFile SaveInAdam(NoParamOrder npo = default, Stream stream = null, string fileName = null, string contentType = null, Guid? guid = null, string field = null, string subFolder = "") => DynHlp.SaveInAdam(stream: stream, fileName: fileName, contentType: contentType, guid: guid, field: field, subFolder: subFolder); #endregion #region CreateInstance string IGetCodePath.CreateInstancePath { get; set; } private CompileCodeHelper CompileCodeHlp => field ??= GetService().Init(this); /// public dynamic CreateInstance(string virtualPath, NoParamOrder npo = default, string name = null, string relativePath = null, bool throwOnError = true) => CompileCodeHlp.CreateInstance(virtualPath: virtualPath, name: name, throwOnError: throwOnError); #endregion #region Link & Edit - added in 2sxc 10.01 /// public ILinkService Link => CodeApi?.Link!; /// public IEditService Edit => CodeApi?.Edit!; #endregion #region CmsContext, Resources and Settings /// public ICmsContext CmsContext => CodeApi.CmsContext; ///// //public dynamic Resources => _DynCodeRoot.Resources; ///// //public dynamic Settings => _DynCodeRoot.Settings; #endregion #region IHasLog /// public new ICodeLog Log => SysHlp.CodeLog; #endregion } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/Obsolete/SexyContent/WebApi/SxcApiController_NotImplemented.cs ================================================ using ToSic.Sxc.Data.Sys.Wrappers; using ApiController = ToSic.Sxc.Dnn.ApiController; // ReSharper disable once CheckNamespace namespace ToSic.SexyContent.WebApi; partial class SxcApiController { #region new AsDynamic - not supported [PrivateApi] public dynamic AsDynamic(string json, string fallback = WrapperConstants.EmptyJson) => throw new($"The AsDynamic(string) is a new feature in 2sxc 10.20. {ApiController.ErrRecommendedNamespaces}"); #endregion #region AsList - only in newer APIs [PrivateApi] public IEnumerable AsList(object list) => throw new($"AsList is a new feature in 2sxc 10.20. {ApiController.ErrRecommendedNamespaces}"); #endregion [PrivateApi] public dynamic File(NoParamOrder npo = default, bool? download = null, string virtualPath = null, string contentType = null, string fileDownloadName = null, object contents = null) => throw new NotSupportedException($"This method is not available in the old {nameof(SxcApiController)}. {ApiController.ErrRecommendedNamespaces}"); } ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/ToSic.Sxc.Dnn.WebApi.csproj ================================================  Debug AnyCPU Library Properties ToSic.Sxc ToSic.Sxc.Dnn.WebApi $(NoWarn);MSB4011 $(NoWarn);NU1902 $(NoWarn);MSB3277 runtime runtime runtime runtime runtime ..\..\..\Dependencies\RazorBlade\Release\net472\ToSic.Razor.dll ================================================ FILE: Src/Dnn/ToSic.Sxc.Dnn.WebApi/ToSic.Sxc.Dnn.WebApi.csproj.DotSettings ================================================  False True True True True True True True True True True True True True True True True True ================================================ FILE: Src/Integration/BasicEav01/.gitignore ================================================ sys-2sxc ================================================ FILE: Src/Integration/BasicEav01/BasicEav01.csproj ================================================  net9.0 false IntegrationSamples.BasicEav01 Debug;Release;DebugOqtane;DebugDnn False ================================================ FILE: Src/Integration/BasicEav01/Context/IntUser.cs ================================================ using System; using System.Collections.Generic; namespace IntegrationSamples.BasicEav01.Context { /// /// #2sxcIntegration /// Dummy user, which always says it's a superuser /// public class IntUser: IUser { public int Id => 0; public string IdentityToken => "impl-user:0"; public Guid? Guid => System.Guid.Empty; public List Roles => new List(); public bool IsSystemAdmin => true; [Obsolete("deprecated in v14.09 2022-10, will be removed ca. v16 #remove16")] public bool IsSuperUser => true; [Obsolete("deprecated in v14.09 2022-10, will be removed ca. v16 #remove16")] public bool IsAdmin => IsSiteAdmin; public bool IsSiteAdmin => true; public bool IsContentAdmin => true; public bool IsDesigner => true; public bool IsAnonymous => false; public string Username => "unknown"; public string Name => Username; public string Email => "unknown@unknown.org"; } } ================================================ FILE: Src/Integration/BasicEav01/Controllers/InsightsController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace IntegrationSamples.BasicEav01.Controllers { [Route("api/sxc/" + Areas.Sys + "/[controller]")] [ApiController] public class InsightsController : ControllerBase { /// /// Constructor which will retrieve the Insights backend for use here /// public InsightsController(InsightsControllerReal insights) => _insights = insights; private readonly InsightsControllerReal _insights; /// /// The main call on this controller, will return all kinds of views with information /// [HttpGet("{view}")] public ContentResult Details( [FromRoute] string view, [FromQuery] int? appId = null, [FromQuery] string key = null, [FromQuery] int? position = null, [FromQuery] string type = null, [FromQuery] bool? toggle = null, [FromQuery] string nameId = null ) => Content(_insights.Details(view, appId, key, position, type, toggle, nameId), "text/html"); } } ================================================ FILE: Src/Integration/BasicEav01/IntegrationConstants.cs ================================================  // #2sxcIntegration namespace IntegrationSamples.BasicEav01 { /// /// This contains constant parameters for the integration demo to work. /// You will probably adjust these to match your needs /// public class IntegrationConstants { /// /// In the demo setup this is the blog app on the PC of 2dm /// public const int ZoneId = 2; public const int AppId = 78; public static IAppIdentity AppIdentity = new AppIdentity(ZoneId, AppId); } } ================================================ FILE: Src/Integration/BasicEav01/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

Error.

An error occurred while processing your request.

@if (Model.ShowRequestId) {

Request ID: @Model.RequestId

}

Development Mode

Swapping to the Development environment displays detailed information about the error that occurred.

The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

================================================ FILE: Src/Integration/BasicEav01/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace IntegrationSamples.BasicEav01.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: Src/Integration/BasicEav01/Pages/Index.cshtml ================================================ @page @using Microsoft.Extensions.Configuration @model IndexModel @inject IConfiguration Configuration; @{ ViewData["Title"] = "2sxc Integration - Read-Only Implementation"; }

2sxc Integration - Read-Only Implementation

This should be the most basic integration possible, where we only read 2sxc data, but do nothing else.

Basics

The following projects / solutions were added. If doing this from an external system, make sure you have the right DLLs.

  1. Eav with all EAV parts (Core, Repository, WebApi etc.)

DB Connection

In this demo the DB Connection String is in appsettings.json - it will be loaded by the Startup.cs

  1. ATM it's set to: @Configuration.GetConnectionString("SiteSqlServer")

App Identity

In this demo we are using a fixed app identity. It is @IntegrationConstants.ZoneId / @IntegrationConstants.AppId

Functionality

This is a super-basic demo. ATM it has only these features

  1. You can read the data from an App out of an existing DB
  2. Insights works, so you can see logs of what happens internally and also see what objects were used in the Unknown implementation.
================================================ FILE: Src/Integration/BasicEav01/Pages/Index.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace IntegrationSamples.BasicEav01.Pages { public class IndexModel : PageModel { private readonly ILogger _logger; public IndexModel(ILogger logger) { _logger = logger; } public void OnGet() { } } } ================================================ FILE: Src/Integration/BasicEav01/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - ReadOnlyWeb
@RenderBody()
@RenderSection("Scripts", required: false) ================================================ FILE: Src/Integration/BasicEav01/Pages/Shared/_ValidationScriptsPartial.cshtml ================================================  ================================================ FILE: Src/Integration/BasicEav01/Pages/ShowEavData.cshtml ================================================ @page @inject IAppStateCacheService AppStateCacheService @{ ViewData["Title"] = "First Read Data from EAV"; // #2sxcIntegration var appIdentity = IntegrationConstants.AppIdentity; var appState = AppStateCacheService.Get(appIdentity); var firstItem = appState.List.FirstOrDefault(); }

@ViewData["Title"]

Here you should see data from EAV

Reading data from EAV Zone/App: @appIdentity.ZoneId / @appIdentity.AppId
  1. State Object: @appState
  2. List Object: @appState.List
  3. List Count: @appState.List.Count
  4. First: @firstItem
  5. Title of first item: @firstItem?.GetBestTitle()
  6. FirstItem modified: @firstItem?.Modified
================================================ FILE: Src/Integration/BasicEav01/Pages/_ViewImports.cshtml ================================================ @namespace IntegrationSamples.BasicEav01.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: Src/Integration/BasicEav01/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: Src/Integration/BasicEav01/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace IntegrationSamples.BasicEav01 { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: Src/Integration/BasicEav01/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:65487", "sslPort": 44384 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } }, "BasicEav01": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } } } } ================================================ FILE: Src/Integration/BasicEav01/Startup.cs ================================================ using System.IO; using IntegrationSamples.BasicEav01.Context; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; namespace IntegrationSamples.BasicEav01 { public class Startup { /// /// This method gets called first by the runtime. Use it to get configuration values. /// public Startup(IConfiguration configuration) { _connStringFromConfig = configuration.GetConnectionString("SiteSqlServer"); } private readonly string _connStringFromConfig; /// /// This method gets called second by the runtime. Use this method to add services to the container. /// public void ConfigureServices(IServiceCollection services) { // #2sxcIntegration // Register our Always-Super-User (to allow Insights to be used) services.TryAddTransient(); // Enable all of EAV services.AddEav(); // RazorPages - standard .net core MVC feature services.AddRazorPages(); } /// /// This method gets called third by the runtime. Use this method to configure the HTTP request pipeline. /// public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ----- Start EAV stuff #2sxcIntegration ----- var serviceProvider = app.ApplicationServices; // Set Connection String serviceProvider.GetRequiredService().ConnectionString = _connStringFromConfig; // Set global path where it will find the .data folder var globalConfig = serviceProvider.GetRequiredService(); globalConfig.GlobalFolder = Path.Combine(env.ContentRootPath, "sys-2sxc"); // Trigger start where the data etc. will be loaded & initialized serviceProvider.GetRequiredService().StartUp(); // ----- End EAV stuff #2sxcIntegration ----- // Standard Stuff if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); // #2sxcIntegration - enable insights controllers endpoints.MapControllers(); }); } } } ================================================ FILE: Src/Integration/BasicEav01/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: Src/Integration/BasicEav01/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "//1": "#2sxcIntegration: Added this to point to the right DB", "ConnectionStrings": { "SiteSqlServer": "Data Source=localhost;Initial Catalog=2sxc-dnn742;Integrated Security=True" } } ================================================ FILE: Src/Integration/BasicEav01/wwwroot/css/site.css ================================================ /* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification for details on configuring this project to bundle and minify static web assets. */ a.navbar-brand { white-space: normal; text-align: center; word-break: break-all; } /* Provide sufficient contrast against white background */ a { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } /* Sticky footer styles -------------------------------------------------- */ html { font-size: 14px; } @media (min-width: 768px) { html { font-size: 16px; } } .border-top { border-top: 1px solid #e5e5e5; } .border-bottom { border-bottom: 1px solid #e5e5e5; } .box-shadow { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); } button.accept-policy { font-size: 1rem; line-height: inherit; } /* Sticky footer styles -------------------------------------------------- */ html { position: relative; min-height: 100%; } body { /* Margin bottom by footer height */ margin-bottom: 60px; } .footer { position: absolute; bottom: 0; width: 100%; white-space: nowrap; line-height: 60px; /* Vertically center the text there */ } ================================================ FILE: Src/Integration/SxcEdit01/.gitignore ================================================  # don't include the js / data files which should always come from elsewhere /wwwroot/system /sys-2sxc/ ================================================ FILE: Src/Integration/SxcEdit01/Context/IntSite.cs ================================================ using ToSic.Eav.Apps.Sys; using ToSic.Eav.Context; namespace IntegrationSamples.SxcEdit01.Context { public class IntSite : ISite { public ISite Init(int siteId, ILog parentLog) { Id = siteId; return this; } public int Id { get; set; }= 1; public string Name => "Demo Integration Site"; public string AppsRootPhysical => "todo apps root phys not set"; public string AppsRootPhysicalFull => "todo apps root physical full not set"; public string AppAssetsLinkTemplate => "todo apps root link not set/" + AppConstants.AppFolderPlaceholder; /// /// #2sxcIntegration /// This is important to set, for ADAM uploads to find out where they go. /// It's the path relative to the project folder, not the URL /// public string ContentPath => "wwwroot"; public string Url => "https://" + UrlRoot; public string UrlRoot => "some-domain/en-us"; public int ZoneId => Id; public string CurrentCultureCode => ""; public string DefaultCultureCode => ""; } } ================================================ FILE: Src/Integration/SxcEdit01/Context/IntUser.cs ================================================ using System; using System.Collections.Generic; namespace IntegrationSamples.SxcEdit01.Context { /// /// #2sxcIntegration /// Dummy user, which always says it's a superuser /// public class IntUser: IUser { public int Id => 0; public string IdentityToken => "impl-user:0"; public Guid? Guid => System.Guid.Empty; public List Roles => new List(); public bool IsSystemAdmin => true; [Obsolete("deprecated in v14.09 2022-10, will be removed ca. v16 #remove16")] public bool IsSuperUser => true; [Obsolete("deprecated in v14.09 2022-10, will be removed ca. v16 #remove16")] public bool IsAdmin => IsSiteAdmin; public bool IsSiteAdmin => true; public bool IsContentAdmin => true; public bool IsDesigner => true; public bool IsAnonymous => false; public string Username => "unknown"; public string Name => Username; public string Email => "unknown@unknown.org"; } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/AdamController.cs ================================================ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using ToSic.Eav.WebApi.PublicApi; using ToSic.Eav.WebApi.Sys.Helpers.Http; // #todo: security checks on APIs still completely missing namespace IntegrationSamples.SxcEdit01.Controllers { /// /// Direct access to app-content items, simple manipulations etc. /// Should check for security at each standard call - to see if the current user may do this /// Then we can reduce security access level to anonymous, because each method will do the security check /// [ApiController] [Route(IntegrationConstants.DefaultRouteRoot + AppRoots.AppAutoData + "/" + ValueTokens.SetTypeGuidField)] public class AdamController : IntControllerBase>, IAdamController { // IMPORTANT: Uses the Proxy/Real concept - see https://r.2sxc.org/proxy-controllers public AdamController() : base("Adam") { } [HttpPost] [HttpPut] public UploadResultDto Upload(int appId, string contentType, Guid guid, string field, string subFolder = "", bool usePortalRoot = false) => Real.Upload(new HttpUploadedFile(Request), appId, contentType, guid, field, subFolder, usePortalRoot); [HttpGet("items")] public IEnumerable Items(int appId, string contentType, Guid guid, string field, string subfolder, bool usePortalRoot = false) => Real.Items(appId, contentType, guid, field, subfolder, usePortalRoot); [HttpPost("folder")] public IEnumerable Folder(int appId, string contentType, Guid guid, string field, string subfolder, string newFolder, bool usePortalRoot) => Real.Folder(appId, contentType, guid, field, subfolder, newFolder, usePortalRoot); [HttpGet("delete")] public bool Delete(int appId, string contentType, Guid guid, string field, string subfolder, bool isFolder, string id, bool usePortalRoot) => Real.Delete(appId, contentType, guid, field, subfolder, isFolder, id, usePortalRoot); [HttpGet("rename")] public bool Rename(int appId, string contentType, Guid guid, string field, string subfolder, bool isFolder, string id, string newName, bool usePortalRoot) => Real.Rename(appId, contentType, guid, field, subfolder, isFolder, id, newName, usePortalRoot); } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/DialogController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace IntegrationSamples.SxcEdit01.Controllers { [Route(IntegrationConstants.DefaultRouteRoot + AreaRoutes.Admin)] [ApiController] public class DialogController : IntControllerBase, IDialogController { // IMPORTANT: Uses the Proxy/Real concept - see https://r.2sxc.org/proxy-controllers public DialogController() :base(DialogControllerReal.LogSuffix) { } [HttpGet] public DialogContextStandaloneDto Settings(int appId) => Real.Settings(appId); } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/EditController.cs ================================================ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Threading.Tasks; using ToSic.Eav.WebApi.Sys.Cms; using ToSic.Eav.WebApi.Sys.Dto; using ToSic.Eav.WebApi.Sys.Routing; using ToSic.Sxc.Backend.Cms; namespace IntegrationSamples.SxcEdit01.Controllers { //[AutoValidateAntiforgeryToken] [Route(IntegrationConstants.DefaultRouteRoot + AreaRoutes.Cms)] [ApiController] public class EditController: IntControllerBase, IEditController { // IMPORTANT: Uses the Proxy/Real concept - see https://r.2sxc.org/proxy-controllers public EditController() : base(EditControllerReal.LogSuffix) { } [HttpPost] [AllowAnonymous] // Anonymous is ok, security check happens internally public async Task Load([FromBody] List items, int appId) => await Real.Load(items, appId); [HttpPost] // todo #mvcSec [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public async Task> Save([FromBody] EditSaveDto package, int appId, bool partOfPage) => await Real.Save(package, appId, partOfPage); /// [HttpGet] //[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public LinkInfoDto LinkInfo(string link, int appId, string contentType = default, Guid guid = default, string field = default) => Real.LinkInfo(link, appId, contentType, guid, field); /// [HttpPost] //[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] public bool Publish(int id) => Real.Publish(id); } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/HistoryController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using ToSic.Eav.Persistence.Versions; using ToSic.Sxc.Backend.Cms; namespace IntegrationSamples.SxcEdit01.Controllers { // Release routes [Route(IntegrationConstants.DefaultRouteRoot + AreaRoutes.Cms)] //[ValidateAntiForgeryToken] public class HistoryController : IntControllerBase, IHistoryController { public HistoryController(): base(HistoryControllerReal.LogSuffix) { } /// [HttpPost] public List Get(int appId, [FromBody] ItemIdentifier item) => Real.Get(appId, item); /// [HttpPost] public bool Restore(int appId, int transactionId, [FromBody] ItemIdentifier item) => Real.Restore(appId, transactionId, item); } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/InsightsController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace IntegrationSamples.SxcEdit01.Controllers { [Route(IntegrationConstants.DefaultRouteRoot + Areas.Sys + "/[controller]")] [ApiController] public class InsightsController : IntControllerBase { // IMPORTANT: Uses the Proxy/Real concept - see https://r.2sxc.org/proxy-controllers public InsightsController(): base(InsightsControllerReal.LogSuffix) {} /// /// The main call on this controller, will return all kinds of views with information /// [HttpGet("{view}")] public ContentResult Details( [FromRoute] string view, [FromQuery] int? appId = null, [FromQuery] string key = null, [FromQuery] int? position = null, [FromQuery] string type = null, [FromQuery] bool? toggle = null, [FromQuery] string nameId = null ) => Content(Real.Details(view, appId, key, position, type, toggle, nameId), "text/html"); } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/IntControllerBase.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using ToSic.Sxc.WebApi.Sys; namespace IntegrationSamples.SxcEdit01.Controllers { /// /// This kind of base controller is recommended for all 2sxc/eav implementations. It solves various problems: /// /// 1. Ensures logging and also times the request for better insights /// 2. Provides a `GetService` command for all API Controllers /// 3. Provides the `Real` controller which was specified /// 4. Standardizes the response ni case of a empty response so it properly reports HTTP 204 /// /// public abstract class IntControllerBase : Controller, IHasLog where TRealController : class, IHasLog { // IMPORTANT: Uses the Proxy/Real concept - see https://r.2sxc.org/proxy-controllers /// /// Constructor initializes the log, and makes sure that the helper is ready for timing and other features /// /// protected IntControllerBase(string logName) { Log = new Log(IntegrationConstants.LogPrefix + logName, null, GetType().Name); _helper = new NetCoreControllersHelper(this); } /// /// The helper to assist in timing and common operations of WebApi Controllers /// private readonly NetCoreControllersHelper _helper; /// public ILog Log { get; } /// /// The group name for log entries in insights. /// Helps group various calls by use case. /// protected virtual string HistoryLogGroup => EavWebApiConstants.HistoryNameWebApi; /// /// Initializer - Prepare the ServiceProvider and start the timer /// /// [NonAction] public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context); _helper.OnActionExecuting(context, HistoryLogGroup); } /// /// Make sure we stop the timer and do some minor fixes /// /// [NonAction] public override void OnActionExecuted(ActionExecutedContext context) { base.OnActionExecuted(context); _helper.OnActionExecuted(context); } /// /// The RealController which is the full backend of this controller. /// Note that it's not available at construction time, because the ServiceProvider isn't ready till later. /// protected TRealController Real => _real ??= _helper.Real(); private TRealController _real; } } ================================================ FILE: Src/Integration/SxcEdit01/Controllers/PongController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace IntegrationSamples.SxcEdit01.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class PongController : IntControllerBase { public PongController() : base("Pong") { } [HttpGet] public string Pong() => "pong"; } } ================================================ FILE: Src/Integration/SxcEdit01/GlobalUsings.cs ================================================ // Global using directives global using ToSic.Sys.Logging; ================================================ FILE: Src/Integration/SxcEdit01/IntegrationConstants.cs ================================================ using ToSic.Eav.Apps; namespace IntegrationSamples.SxcEdit01 { // #2sxcIntegration public class IntegrationConstants { public const string LogPrefix = "Int"; // WebAPI Constants public const string DefaultRouteRoot = "api/sxc/"; /// /// In the demo setup this is the blog app on the PC of 2dm /// public const int ZoneId = 145; public const int AppId = 1369; public static IAppIdentity AppIdentity = new AppIdentity(ZoneId, AppId); //public const int PageId = 4427; // probably not needed TODO: VERIFY //public const int ModuleId = 9771; // probably not needed TODO: VERIFY // An entity in the test-db - yours will be different public const int ItemWithImagesId = 128280; public const string ImagesField = "ImageLibrary"; #region Parameters used in the page to load the scripts and init the $2sxc JS APIs - see _Layout.cshtml // URLs of JS to load public const string UrlTo2sxcJs = EnvUiRoot + "js/2sxc.api.min.js"; public const string UrlTo2sxcInPageJs = EnvUiRoot + "dist/inpage/inpage.min.js"; // Environment settings for the JS to use //public const int EnvPageId = 2742; public const string EnvApiRoot = "/" + DefaultRouteRoot; // the api base path public const string EnvUiRoot = "/system/sxc/"; // the path above the `js` and `dist` which contains everything public const string EnvRvt = "..."; // This sample doesn't use RequestVerificationTokens #endregion } } ================================================ FILE: Src/Integration/SxcEdit01/Pages/Edit.cshtml ================================================ @page @using ToSic.Eav.Apps.Sys.State @using ToSic.Eav.Data @using ToSic.Eav.Data.Sys.Entities @using ToSic.Eav.Metadata @using ToSic.Sxc.Services @using ToSic.Sys.DI @inject IAppStateCacheService AppStateCacheService @inject IServiceProvider ServiceProvider; @{ ViewData["Title"] = "Edit 2sxc data"; // Adjust these values to your testing environment var appIdentity = IntegrationConstants.AppIdentity; var appState = AppStateCacheService.Get(appIdentity); var firstItem = appState.List.First(); }

@ViewData["Title"]

Try using the $2sxc js api for @appIdentity.ZoneId/@appIdentity.AppId - first item @firstItem.EntityId

  1. Check api works - Test
  2. Insights
  3. Call Dialog/Settings?appId=@appIdentity.AppId
  4. Click to open app-dialog
  5. Click to open edit dialog

ADAM Images / Files

  1. Edit something with images!
@{ // Create a log-object (optional) which is used to track what the code does // could also just be null var log = new LogAdapter(new Log("My.Log")); // Get the App execution context since our code here doesn't have it var dynCodeSvc = ServiceProvider.Build(); var dynCode = dynCodeSvc.OfApp(appIdentity); var entityWithAdam = dynCode.App.Data.List.GetOne(IntegrationConstants.ItemWithImagesId); var folder2 = dynCode.AsAdam(entityWithAdam, IntegrationConstants.ImagesField); }

Files in @dynCode.AsDynamic(entityWithAdam).EntityTitle

    @foreach (var img in folder2.Files) {
  1. @img.Url
  2. }

Metadata

@{ var targetType = (int)TargetTypes.CmsItem; // 10; var myItemId = 1234; var md = appState.GetMetadata(targetType, myItemId); } Found Metadata: @md.Count()
    @foreach (var m in md) {
  1. @m.Type.Name: @m.GetBestTitle()
  2. }
wip

Edit Test for @myItemId

@{ var tempId = 2742; } Edit Test for @tempId


Edit Test

kind of works...

Edit Metadata

================================================ FILE: Src/Integration/SxcEdit01/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

Error.

An error occurred while processing your request.

@if (Model.ShowRequestId) {

Request ID: @Model.RequestId

}

Development Mode

Swapping to the Development environment displays detailed information about the error that occurred.

The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

================================================ FILE: Src/Integration/SxcEdit01/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace IntegrationSamples.SxcEdit01.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: Src/Integration/SxcEdit01/Pages/Index.cshtml ================================================ @page @{ ViewData["Title"] = "2sxc Integration - Edit Implementation"; }

2sxc Integration - Edit Entities Implementation

This should be the most basic integration possible, where we only read 2sxc data, but do nothing else.

Basics

The following projects / solutions were added. If doing this from an external system, make sure you have the right DLLs.

  1. Eav
  2. Eav.Core
  3. Sxc.WebApi

Packages

  1. MVC.Newtonsoft 3.1.4

MVC specific stuff

  1. See code, basically have to add routing and add controllers with Newtonsoft

DB Connection

  1. Add DB Connection String to appsettings.json
  2. Create StartupEavAndSxc and add the ConfigureConnectionString - then call it from the normal Startup.cs

JS In-Page integration

  1. Add scripts js / inpage and include in page
  2. add $2sxc.env.load
  3. Add a link which runs a JS to open the edit dialog
================================================ FILE: Src/Integration/SxcEdit01/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - Edit
@RenderBody()
© 2022 - Edit Integration Sample - Privacy
@RenderSection("Scripts", required: false) ================================================ FILE: Src/Integration/SxcEdit01/Pages/Shared/_ValidationScriptsPartial.cshtml ================================================  ================================================ FILE: Src/Integration/SxcEdit01/Pages/_ViewImports.cshtml ================================================ @namespace IntegrationSamples.SxcEdit01.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: Src/Integration/SxcEdit01/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: Src/Integration/SxcEdit01/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace IntegrationSamples.SxcEdit01 { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: Src/Integration/SxcEdit01/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:65487", "sslPort": 44384 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } }, "SxcEdit01": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } } } } ================================================ FILE: Src/Integration/SxcEdit01/Startup.cs ================================================ using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using ToSic.Sxc.Backend; using ToSic.Sxc.Run.Startup; using ToSic.Sys.Configuration; namespace IntegrationSamples.SxcEdit01 { public class Startup { /// /// This method gets called first by the runtime. Use it to get configuration values. /// public Startup(IConfiguration configuration) { _connStringFromConfig = configuration.GetConnectionString("SiteSqlServer"); } private readonly string _connStringFromConfig; /// /// This method gets called second by the runtime. Use this method to add services to the container. /// public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); // #2sxcIntegration services .AddMvcRazor() .AddControllersAndConfigureJson() .AddImplementations() .AddAdamWebApi() .AddSxcWebApi() .AddSxcCore() .AddEav(); } /// /// This method gets called third by the runtime. Use this method to configure the HTTP request pipeline. /// public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ----- Start EAV stuff #2sxcIntegration ----- var serviceProvider = app.ApplicationServices; // Set Connection String serviceProvider.GetRequiredService().ConnectionString = _connStringFromConfig; // Set global path where it will find the .data folder var globalConfig = serviceProvider.GetRequiredService(); globalConfig.GlobalFolder = Path.Combine(env.ContentRootPath, "sys-2sxc"); // Trigger start where the data etc. will be loaded & initialized serviceProvider.GetRequiredService().StartUp(); // ----- End EAV stuff #2sxcIntegration ----- if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); // #2sxcIntegration - enable controllers endpoints.MapControllers(); }); } } } ================================================ FILE: Src/Integration/SxcEdit01/StartupEavAndSxc.cs ================================================ using IntegrationSamples.SxcEdit01.Context; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav.Context; namespace IntegrationSamples.SxcEdit01 { /// /// #2sxcIntegration /// This static class contains the important bits to connect the EAV with the Dependency Injection of this test site /// public static class StartupEavAndSxc { internal static IServiceCollection AddImplementations(this IServiceCollection services) { // Context services.TryAddTransient(); services.TryAddTransient(); // ADAM services.TryAddTransient>(); services.TryAddTransient(); return services; } internal static IServiceCollection AddMvcRazor(this IServiceCollection services) { // enable use of HttpContext services.AddHttpContextAccessor(); // enable use of UrlHelper for AbsolutePath // used by LinkPath - but this is only for older .net services.AddSingleton(); services.AddSingleton(); services.AddScoped(it => it.GetService() .GetUrlHelper(it.GetService().ActionContext)); return services; } internal static IServiceCollection AddControllersAndConfigureJson(this IServiceCollection services) { services.AddControllers(options => { options.AllowEmptyInputInBodyModelBinding = true; }) // This is needed to preserve compatibility with previous api usage // Set the JSON serializer options .AddJsonOptions(options => options.JsonSerializerOptions.SetUnsafeJsonSerializerOptions()); return services; } } } ================================================ FILE: Src/Integration/SxcEdit01/SxcEdit01.csproj ================================================  net9.0 false IntegrationSamples.SxcEdit01 Debug;Release;DebugOqtane;DebugDnn False ================================================ FILE: Src/Integration/SxcEdit01/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: Src/Integration/SxcEdit01/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "//1": "#2sxcIntegration: Added this to point to the right DB", "ConnectionStrings": { "SiteSqlServer": "Data Source=localhost;Initial Catalog=2sxc-dnn742;Integrated Security=True" } } ================================================ FILE: Src/Integration/SxcEdit01/wwwroot/css/site.css ================================================ /* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification for details on configuring this project to bundle and minify static web assets. */ a.navbar-brand { white-space: normal; text-align: center; word-break: break-all; } /* Provide sufficient contrast against white background */ a { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } /* Sticky footer styles -------------------------------------------------- */ html { font-size: 14px; } @media (min-width: 768px) { html { font-size: 16px; } } .border-top { border-top: 1px solid #e5e5e5; } .border-bottom { border-bottom: 1px solid #e5e5e5; } .box-shadow { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); } button.accept-policy { font-size: 1rem; line-height: inherit; } /* Sticky footer styles -------------------------------------------------- */ html { position: relative; min-height: 100%; } body { /* Margin bottom by footer height */ margin-bottom: 60px; } .footer { position: absolute; bottom: 0; width: 100%; white-space: nowrap; line-height: 60px; /* Vertically center the text there */ } ================================================ FILE: Src/Mvc/.gitignore ================================================ ################################################################################ # This .gitignore file was automatically created by Microsoft(R) Visual Studio. ################################################################################ /Website/bin /Website/obj ToSic.Sxc.Mvc/bin ToSic.Sxc.Mvc/obj Website/wwwroot/System/Sxc/** ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Dev/InstanceId.cs ================================================ using System; namespace ToSic.Sxc.Mvc.Dev { public class InstanceId { public InstanceId(int t, int p, int a, int c, Guid b) { Zone = t; Page = p; App = a; Container = c; Block = b; } public int Zone; public int Page; public int App; public int Container; public Guid Block; } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Dev/TestIds.cs ================================================ using System; using System.Collections.Generic; using System.Linq; namespace ToSic.Sxc.Mvc.Dev { public class TestIds { // Global, valid for all public const int PrimaryZone = 2; public const string DefaultLanguage = "en-us"; public const string DefaultLanguageText = "MVC English!"; public const int PrimaryApp = 2; public static InstanceId Blog = new InstanceId(2, 680, 78, 3002, new Guid("9cbcee9d-49d5-4fe0-8e74-1e20f74a5916")); public static InstanceId ContentOnHome = new InstanceId(2, 56, 2, 6935, new Guid("f8ae3d07-5805-4650-a46d-a047e113ab53")); // Token app here: http://2sexycontent.2dm.2sic/features/Tokens public static InstanceId Token = new InstanceId(128, 4062, 1262,9170, new Guid("584b7398-8517-4bdf-b05d-71d64b935f4f")); public static List FakeDb = new List { Blog, ContentOnHome, Token, }; public static InstanceId FindInstance(int containerId) => FakeDb.FirstOrDefault(i => i.Container == containerId); } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Factory.cs ================================================ using ToSic.Eav.Apps; using ToSic.Eav.Context; using ToSic.Lib.Logging; using ToSic.Eav.Run; using ToSic.Lib.Documentation; using ToSic.Sxc.LookUp; using App = ToSic.Sxc.Apps.App; using IApp = ToSic.Sxc.Apps.IApp; namespace ToSic.Sxc.Mvc { public class Factory { [InternalApi_DoNotUse_MayChangeWithoutNotice] public static IApp App( int zoneId, int appId, ISite site, bool showDrafts, ILog parentLog) { var log = new Log("Mvc.Factry", parentLog); log.A($"Create App(z:{zoneId}, a:{appId}, tenantObj:{site != null}, showDrafts: {showDrafts}, parentLog: {parentLog != null})"); var app = Eav.Factory.StaticBuild(); if (site != null) app.PreInit(site); // debugging var appIdentity = new AppIdentity(zoneId, appId); var configDelegate = Eav.Factory.StaticBuild().Init(parentLog).Build(showDrafts); var appStuff = app.Init(appIdentity, configDelegate, parentLog); return appStuff; } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // This is needed for our code to access internal-properties [assembly: InternalsVisibleTo("Website")] ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcFileSystem.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using ToSic.Lib.Logging; using ToSic.Eav.Run; using ToSic.Sxc.Adam; using ToSic.Sxc.Mvc.Web; namespace ToSic.Sxc.Mvc.Run { public class MvcFileSystem: HasLog, IAdamFileSystem { private readonly IServerPaths _serverPaths; #region Constructor / DI / Init public MvcFileSystem(IServerPaths serverPaths) : base("Dnn.FilSys") => _serverPaths = serverPaths; public IAdamFileSystem Init(AdamManager adamContext, ILog parentLog) { Log.LinkTo(parentLog); AdamContext = adamContext; return this; } protected AdamManager AdamContext; #endregion // #todo MVC public int MaxUploadKb() => 25000; public File GetFile(string fileId) { var dir = AdjustPathToSiteRoot(fileId); return FileToAdam(dir); } public List> GetFiles(IFolder folder) { var dir = Directory.GetFiles(AdjustPathToSiteRoot(folder.Path)); return dir.Select(FileToAdam).ToList(); } public void Rename(IFile file, string newName) => throw new NotImplementedException(); public void Delete(IFile file) => throw new NotImplementedException(); public File Add(IFolder parent, Stream body, string fileName, bool ensureUniqueName) => throw new NotImplementedException(); public void AddFolder(string path) { path = PathOnDrive(path); Directory.CreateDirectory(path); } public bool FolderExists(string path) { var serverPath = PathOnDrive(path); var exists = Directory.Exists(serverPath); return exists; } private string PathOnDrive(string path) { if (path.Contains("..")) throw new ArgumentException("path may not contain ..", nameof(path)); // check if it already has the root path attached, otherwise add path = path.StartsWith(AdamContext.Site.ContentPath) ? path : Path.Combine(AdamContext.Site.ContentPath, path); path = path.Replace("//", "/").Replace("\\\\", "\\"); return _serverPaths.FullContentPath(path); } public Folder GetFolder(string folderId) => AdamFolder(AdjustPathToSiteRoot(folderId)); public List> GetFolders(IFolder folder) { var dir = Directory.GetDirectories(AdjustPathToSiteRoot(folder.Path)); return dir.Select(AdamFolder).ToList(); } private static string AdjustPathToSiteRoot(string path) { return path.StartsWith("adam", StringComparison.CurrentCultureIgnoreCase) ? Path.Combine(MvcConstants.WwwRoot, path) : path; } public void Rename(IFolder folder, string newName) => throw new NotImplementedException(); public void Delete(IFolder folder) => throw new NotImplementedException(); public Folder Get(string path) => AdamFolder(path); #region DnnToAdam private Folder AdamFolder(string path) { var f = new DirectoryInfo(PathOnDrive(path)); return new Folder(AdamContext) { Path = path, SysId = path, ParentSysId = FindParentPath(path), Name = f.Name, Created = f.CreationTime, Modified = f.LastWriteTime, Url = AdamContext.Site.ContentPath + path, }; } private static string FindParentPath(string path) { var cleanedPath = path.TrimEnd('/').TrimEnd('\\'); var prevSlashF = cleanedPath.LastIndexOf('/'); var prevSlashB = cleanedPath.LastIndexOf('\\'); var lastSlash = prevSlashB > prevSlashF ? prevSlashB : prevSlashF; var parentPath = lastSlash == -1 ? "" : cleanedPath.Substring(0, lastSlash); return parentPath; } private File FileToAdam(string path) { var f = new FileInfo(PathOnDrive(path)); var directoryName = f.Directory.Name; return new File(AdamContext) { FullName = f.Name, Extension = f.Extension, Size = Convert.ToInt32(f.Length), SysId = path, Folder = directoryName, ParentSysId = path.Replace(f.Name, "", StringComparison.InvariantCultureIgnoreCase), // "todo mvc",// Constants.NullId, Path = path, Created = f.CreationTime, Modified = f.LastWriteTime, Name = Path.GetFileNameWithoutExtension(f.Name), Url = AdamContext.Site.ContentPath + directoryName + f.Name }; } #endregion } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcGlobalFolderRepository.cs ================================================ //using System.Collections.Generic; //using ToSic.Eav.Repositories; //using ToSic.Eav.Run; //namespace ToSic.Sxc.Mvc.Run //{ // public class MvcGlobalFolderRepository: FolderBasedRepository // { // #region Constructor and DI // public MvcGlobalFolderRepository(IServerPaths serverPaths) => _serverPaths = serverPaths; // private readonly IServerPaths _serverPaths; // #endregion // public override List RootPaths => new List // { // // todo: fix, as FullSystemPath should now come from Configuration // //_serverPaths.FullSystemPath("wwwroot/System/Sxc/.data"), // }; // } //} ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcModule.cs ================================================ using System; using ToSic.Eav.Apps.Run; using ToSic.Lib.Logging; using ToSic.Sxc.Context; using ToSic.Sxc.Mvc.Dev; namespace ToSic.Sxc.Mvc.Run { public class MvcModule: IModule { public MvcModule() {} public MvcModule Init(int? tenantId = null, int? id = null, int? appId = null, Guid? block = null) { TenantId = tenantId ?? TestIds.Blog.Zone; Id = id ?? TestIds.Blog.Container; AppId = appId ?? TestIds.Blog.App; Block = block ?? TestIds.Blog.Block; return this; } // Temp implementation, don't support im MVC public IModule Init(int id, ILog parentLog) => throw new System.NotImplementedException(); /// public int Id { get; set; } public bool IsContent { get; } /// public int TenantId { get; set; } /// public bool IsPrimary => BlockIdentifier.AppId == TestIds.PrimaryApp; public IBlockIdentifier BlockIdentifier => _blockIdentifier ??= new BlockIdentifier(TenantId, AppId, Block, Guid.Empty); private IBlockIdentifier _blockIdentifier; // special while testing public int AppId; public Guid Block; } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcPermissionCheck.cs ================================================ using System; using System.Collections.Generic; using ToSic.Eav.Apps.Security; using ToSic.Eav.Security; namespace ToSic.Sxc.Mvc.Run { public class MvcPermissionCheck: AppPermissionCheck { public MvcPermissionCheck(): base("Mvc") { } // todo: #permissions protected override bool EnvironmentAllows(List grants) => true; protected override bool VerifyConditionOfEnvironment(string condition) { if (condition.Equals("SecurityAccessLevel.Anonymous", StringComparison.CurrentCultureIgnoreCase)) return true; return false; } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcSite.cs ================================================ using System.IO; using Microsoft.AspNetCore.Http; using ToSic.Eav.Context; using ToSic.Eav.Run; using ToSic.Lib.Documentation; using ToSic.Sxc.Context; using ToSic.Sxc.Mvc.Dev; using ToSic.Sxc.Mvc.Web; // #todo: not really multi-tenant, incl. url namespace ToSic.Sxc.Mvc.Run { /// /// This is a Mvc implementation of a Tenant-object. /// [InternalApi_DoNotUse_MayChangeWithoutNotice("this is just fyi")] public sealed class MvcSite : Site, ICmsSite { /// /// Constructor for DI /// /// public MvcSite(IHttpContextAccessor httpContextAccessor) { UnwrappedContents = null; HttpContext = httpContextAccessor.HttpContext; } private HttpContext HttpContext { get; } public override ISite Init(int siteId) { _siteId = siteId; return this; } /// public override string DefaultCultureCode => TestIds.DefaultLanguage; /// public override string CurrentCultureCode => TestIds.DefaultLanguage; /// public override int Id => _siteId; private int _siteId; // https://localhost:44361 public override string Url => HttpContext?.Request.Host.ToString(); /// public override string Name => "Dummy Site Name"; [PrivateApi] public override string AppsRootPhysical => AppsRootPartial(); private string AppsRootPartial() { return Path.Combine(MvcConstants.WwwRoot, Settings.AppsRootFolder); } public override string AppsRootPhysicalFull => Eav.Factory.Resolve().FullAppPath(AppsRootPartial()); /// public override string ContentPath => MvcConstants.WwwRoot; public override int ZoneId => _siteId; } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcUser.cs ================================================ using System; using System.Collections.Generic; using ToSic.Eav.Context; using ToSic.Sxc.Context; namespace ToSic.Sxc.Mvc.Run { public class MvcUser: IUser, ICmsUser { public int Id => 1; public new string IdentityToken => "mvcuser:1"; public Guid? Guid => System.Guid.Empty; public List Roles => new List(); public bool IsSuperUser => true; public bool IsAdmin => true; public bool IsDesigner => true; public bool IsAnonymous => false; #region New Permission properties for v12 /// // This is a hopefully clearer implementation of what the user can do public bool IsSiteAdmin => IsAdmin; /// // This is a hopefully clearer implementation of what the user can do public bool IsSiteDeveloper => IsDesigner; /// // This is a hopefully clearer implementation of what the user can do public bool IsSystemAdmin => IsSuperUser; #endregion } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Run/MvcZoneMapper.cs ================================================ using System; using System.Collections.Generic; using ToSic.Eav.Apps.Run; using ToSic.Eav.Context; using ToSic.Eav.Plumbing; using ToSic.Eav.Run; namespace ToSic.Sxc.Mvc.Run { public class MvcZoneMapper : ZoneMapperBase { /// public MvcZoneMapper(IServiceProvider serviceProvider) : base("Mvc.ZoneMp") { _serviceProvider = serviceProvider; } private readonly IServiceProvider _serviceProvider; public override int GetZoneId(int tenantId) => tenantId; public override ISite SiteOfZone(int zoneId) => _serviceProvider.Build().Init(zoneId); public override List CulturesWithState(int tenantId, int zoneId) { return new List { new TempTempCulture("en-us", "English USA", true) }; } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/StartUpMvc.cs ================================================ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using ToSic.Eav.Apps.Security; using ToSic.Eav.Context; using ToSic.Eav.Run; using ToSic.Sxc.Adam; using ToSic.Sxc.Context; using ToSic.Sxc.Mvc.Run; using ToSic.Sxc.Mvc.Web; using ToSic.Sxc.Mvc.WebApi.Adam; using ToSic.Sxc.Mvc.WebApi.Context; using ToSic.Sxc.Web.JsContext; using ToSic.Sxc.WebApi.Adam; namespace ToSic.Sxc.Mvc { public static class StartUpMvc { public static IServiceCollection AddSxcMvc(this IServiceCollection services) { services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); // MVC Specific stuff services.AddScoped(); // Add SxcEngineTest services.AddTransient(); services.AddTransient, MvcFileSystem>(); // Still pending... //sc.AddTransient(); //sc.AddTransient(); //sc.AddTransient(); // v16 services.AddScoped(); return services; } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/StartupNotImplemented.cs ================================================ using Microsoft.Extensions.DependencyInjection; namespace ToSic.Sxc.Mvc { /// /// Register types which are necessary for the system to boot, but are not used in a basic /// headless setup /// public static class StartupNotImplemented { public static IServiceCollection AddNotImplemented(this IServiceCollection services) { return services; } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/SxcMvc.cs ================================================ using System; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Http; using ToSic.Eav.Context; using ToSic.Lib.Logging; using ToSic.Eav.Plumbing; using ToSic.Sxc.Blocks; using ToSic.Sxc.Context; using ToSic.Sxc.Mvc.Dev; using ToSic.Sxc.Mvc.Run; using ToSic.Sxc.Mvc.Web; namespace ToSic.Sxc.Mvc { public class SxcMvc: HasLog { #region Constructor and DI public SxcMvc(IHttpContextAccessor httpContextAccessor, MvcPageProperties pageProperties) : base("Mvc.View") { PageProperties = pageProperties; _httpContext = httpContextAccessor.HttpContext; // add log to history! History.Add("sxc-mvc-view", Log); } private readonly HttpContext _httpContext; public MvcPageProperties PageProperties; #endregion public HtmlString Render(InstanceId id) { var blockBuilder = CreateBlock(id.Zone, id.Page, id.Container, id.App, id.Block, Log); var result = blockBuilder.BlockBuilder.Render(); // todo: set parameters for loading scripts etc. //PageProperties.Headers += "hello!!!"; return new HtmlString(result); } //public DynamicCodeRoot CreateDynCode(InstanceId id, ILog log) => // new MvcDynamicCode().Init(CreateBlock(id.Zone, id.Page, id.Container, id.App, id.Block, log), log); public IBlock CreateBlock(int zoneId, int pageId, int containerId, int appId, Guid blockGuid, ILog log) { var context = CreateContext(zoneId, pageId, containerId, appId, blockGuid); var block = _httpContext.RequestServices.Build().Init(context, log); return block; } private IContextOfBlock CreateContext(int zoneId, int pageId, int containerId, int appId, Guid blockGuid) => CreateContext(_httpContext.RequestServices, zoneId, appId, containerId, appId, blockGuid); public static IContextOfBlock CreateContext(IServiceProvider sp, int zoneId, int pageId, int containerId, int appId, Guid blockGuid) { var ctx = sp.Build(); ctx.Init(null); ctx.Site.Init(zoneId); ctx.Page.Init(pageId); ((MvcModule) ctx.Module).Init(tenantId: zoneId, id: containerId, appId: appId, block: blockGuid); return ctx; //var publishing = sp.Build(); //return new ContextOfBlock( // sp, // sp.Build().Init(zoneId), // //new SxcPage(pageId, null, http.RequestServices.Build().QueryStringKeyValuePairs()), // //new MvcContainer(tenantId: zoneId, id: containerId, appId: appId, block: blockGuid), // new MvcUser() // //publishing.GetPublishingState(containerId) //).Init( // sp.Build().Init(pageId), // new MvcContainer(tenantId: zoneId, id: containerId, appId: appId, block: blockGuid), // publishing.GetPublishingState(containerId) //); } } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/ToSic.Sxc.Mvc.csproj ================================================  netstandard2.1 Debug;Release;DebugOqtane;DebugDnn False ..\..\..\Dependencies\RazorBlade\Release\netstandard2.0\ToSic.Razor.dll ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Web/MvcConstants.cs ================================================ namespace ToSic.Sxc.Mvc.Web { public class MvcConstants { public const string SiteRoot = "/"; public const string UiRoot = "/system/sxc/"; public const string WwwRoot = "wwwroot/"; } } ================================================ FILE: Src/Mvc/ToSic.Sxc.Mvc/Web/MvcPageProperties.cs ================================================ using System.Text; using Microsoft.AspNetCore.Html; using ToSic.Lib.Logging; using ToSic.Sxc.Edit; using ToSic.Razor.Blade; using ToSic.Sxc.Web.JsContext; namespace ToSic.Sxc.Mvc.Web { public class MvcPageProperties: HasLog { private readonly JsApiCache _jsApiCache; #region Constructor and DI public MvcPageProperties(JsApiCache jsApiCache) : base("Mvc.PgProp") { _jsApiCache = jsApiCache; } #endregion public bool AddContextMeta = true; public bool AddJsCore = true; //public bool AddJsAdvanced = true; public bool AddCmsJs = true; public bool AddCmsCss = true; public string Headers = ""; public HtmlString FinalHeaders() { var headers = new StringBuilder(); headers.AppendLine(""); if (AddContextMeta) headers.AppendLine(ContextHeader()); if(AddJsCore) headers.AppendLine(Tag.Script().Src($"{MvcConstants.UiRoot}{InpageCms.CoreJs}").ToString()); if(AddCmsJs) headers.AppendLine(Tag.Script().Src($"{MvcConstants.UiRoot}{InpageCms.EditJs}").ToString()); if(AddCmsCss) headers.AppendLine(Tag.Link().Href($"{MvcConstants.UiRoot}{InpageCms.EditCss}").Rel("stylesheet").ToString()); headers.AppendLine($"{Headers}"); return new HtmlString(headers.ToString()); } public HtmlString FinalFooter() { return new HtmlString(""; }

Test API Insights

  1. Insights Help

Content / Query API

  1. Tags List or One (#6628)
  2. BlogPost List or One with AppIdentity (#1057) or One with guAppIdentity (#d5fce6dd-c16a-4374-aaff-dc223e45b540)
  3. Tags Query List or
  4. Routing Table Routing debug table

Other stuff

@Model.Hello changed ================================================ FILE: Src/Mvc/Website/Pages/Index.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace Website.Pages { public class IndexModel : PageModel { private readonly ILogger _logger; public IndexModel(ILogger logger) { _logger = logger; } public void OnGet() { } public string Hello => "hello daniel"; } } ================================================ FILE: Src/Mvc/Website/Pages/Shared/Components/ComponentWithParams/Default.cshtml ================================================ inherits ToSic.Sxc.Mvc.RazorPages.Page @inherits ToSic.Sxc.Mvc.RazorPages.Exp.SxcTestPageViewParams @{ ViewData["Title"] = "Default"; }

ComponentWith Params

    foreach (var name in Model) {
  1. name
  2. }

Type info

@GetType().FullName ================================================ FILE: Src/Mvc/Website/Pages/Shared/Components/Second/Default.cshtml ================================================ @page @model Website.Pages.Shared.Components.Second.DefaultModel @{ ViewData["Title"] = "Default"; }

Second component

================================================ FILE: Src/Mvc/Website/Pages/Shared/Components/Second/Default.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc.RazorPages; namespace Website.Pages.Shared.Components.Second { public class DefaultModel : PageModel { public void OnGet() { } } } ================================================ FILE: Src/Mvc/Website/Pages/Shared/Components/Third/Default.cshtml ================================================ @model List @{ ViewData["Title"] = "Default"; }

Third component

    @foreach (var name in Model) {
  1. @name
  2. }
================================================ FILE: Src/Mvc/Website/Pages/Shared/RenderPartial/_RenderPartialMail.cshtml ================================================ @model ContactForm @{ Layout = null; } Contact Email Partial #1

Contact Form

@Model.Name sent a message via the contact form at @DateTime.Now as follows:

@Model.Message

@Model.Name is using the email address @Model.Email and considers the message to be @Model.Priority.ToString() priority.

================================================ FILE: Src/Mvc/Website/Pages/Shared/RenderPartial2/_RenderPartial2.cshtml ================================================ @inherits ToSic.Custom.Razor12 @model ContactForm @{ Layout = null; }

Render Partial 2

@Model.Name sent a message via the contact form at @DateTime.Now as follows:

@Model.Message

@Model.Name is using the email address @Model.Email and considers the message to be @Model.Priority.ToString() priority.

Test call for debugging the parent class...
App: @App.Name ================================================ FILE: Src/Mvc/Website/Pages/Shared/_Layout.cshtml ================================================  @using ToSic.Sxc.Mvc.Web @inject MvcPageProperties PageProperties @ViewData["Title"] - Website @* For now - include jquery on the top*@ @* DynamicHeaders from the page *@ @PageProperties.FinalHeaders()
@RenderBody()
@RenderSection("Scripts", required: false) @* Dynamic Footer from the page *@ @PageProperties.FinalFooter() ================================================ FILE: Src/Mvc/Website/Pages/Shared/_ValidationScriptsPartial.cshtml ================================================  ================================================ FILE: Src/Mvc/Website/Pages/Standalone/Standalone.cshtml ================================================ @page @using ToSic.Eav.Plumbing @{ ViewData["Title"] = "Eav.Core"; }

Standalone to open dialogs

Things which must work:
  1. Scripts added
  2. Page Context?
  1. An EAV Constant: @ToSic.Eav.Constants.ContentAppName
  2. A DataSource Object: @(HttpContext.RequestServices.Build().GetType().AssemblyQualifiedName)
  3. Repository type Code: @(ToSic.Eav.Repositories.RepositoryTypes.Code)
  4. 2sxc constant: @(ToSic.Sxc.Settings.PortalHostDirectory)
  5. App Cache: @(ToSic.Eav.Factory.Resolve().GetType().Name)

State of App 4 (Blog)

  1. Timestamp : @(ToSic.Eav.Apps.State.Get(4).CacheTimestamp)
  2. Items in it : @(ToSic.Eav.Apps.State.Get(4).List.Count)
  3. Query AllQueries: @ToSic.Eav.Apps.State.Get(4) can't work yet, this object doesn't have queries!
================================================ FILE: Src/Mvc/Website/Pages/Standalone/Standalone.cshtml.cs ================================================ using System.Linq; using Microsoft.AspNetCore.Mvc.RazorPages; using ToSic.Eav.Apps; using ToSic.Eav.Context; using ToSic.Eav.Data; using ToSic.Eav.DataSources; using ToSic.Eav.LookUp; using ToSic.Eav.Plumbing; using ToSic.Eav.Run; using ToSic.Sxc.Mvc.Dev; using ToSic.Sxc.Mvc.Run; namespace Website.Pages { } ================================================ FILE: Src/Mvc/Website/Pages/_ViewImports.cshtml ================================================ @using Website @namespace Website.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: Src/Mvc/Website/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: Src/Mvc/Website/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace Website { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: Src/Mvc/Website/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:50363", "sslPort": 44361 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } }, "Website": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } } } } ================================================ FILE: Src/Mvc/Website/RazorPartialToString/IRazorPartialToStringRenderer.cs ================================================ using System.Threading.Tasks; namespace RazorPartialToString.Services { public interface IRazorPartialToStringRenderer { Task RenderPartialToStringAsync(string partialName, TModel model); } } ================================================ FILE: Src/Mvc/Website/RazorPartialToString/RazorPartialToStringRenderer.cs ================================================ using System; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Routing; namespace RazorPartialToString.Services { public class RazorPartialToStringRenderer : IRazorPartialToStringRenderer { private IRazorViewEngine _viewEngine; private ITempDataProvider _tempDataProvider; private IServiceProvider _serviceProvider; public RazorPartialToStringRenderer( IRazorViewEngine viewEngine, ITempDataProvider tempDataProvider, IServiceProvider serviceProvider) { _viewEngine = viewEngine; _tempDataProvider = tempDataProvider; _serviceProvider = serviceProvider; } public async Task RenderPartialToStringAsync(string partialName, TModel model) { var actionContext = GetActionContext(); var partial = FindView(actionContext, partialName); using (var output = new StringWriter()) { var viewContext = new ViewContext( actionContext, partial, new ViewDataDictionary( metadataProvider: new EmptyModelMetadataProvider(), modelState: new ModelStateDictionary()) { Model = model }, new TempDataDictionary( actionContext.HttpContext, _tempDataProvider), output, new HtmlHelperOptions() ); await partial.RenderAsync(viewContext); return output.ToString(); } } private IView FindView(ActionContext actionContext, string partialName) { var getPartialResult = _viewEngine.GetView(null, partialName, false); if (getPartialResult.Success) { return getPartialResult.View; } var findPartialResult = _viewEngine.FindView(actionContext, partialName, false); if (findPartialResult.Success) { return findPartialResult.View; } var searchedLocations = getPartialResult.SearchedLocations.Concat(findPartialResult.SearchedLocations); var errorMessage = string.Join( Environment.NewLine, new[] { $"Unable to find partial '{partialName}'. The following locations were searched:" }.Concat(searchedLocations)); ; throw new InvalidOperationException(errorMessage); } private ActionContext GetActionContext() { var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider }; return new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); } } } ================================================ FILE: Src/Mvc/Website/Startup.cs ================================================ using System.IO; using System.Text.Json; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using RazorPartialToString.Services; using ToSic.Eav.Serialization; using ToSic.Sxc.Mvc; namespace Website { public class Startup { public Startup(IConfiguration configuration, IWebHostEnvironment environment) { Configuration = configuration; HostEnvironment = environment; } public IConfiguration Configuration { get; } public IWebHostEnvironment HostEnvironment { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add razor pages dynamic compilation WIP services.AddRazorPages() // experiment // https://github.com/aspnet/samples/blob/master/samples/aspnetcore/mvc/runtimecompilation/MyApp/Startup.cs#L26 .AddRazorRuntimeCompilation(options => { var configuredPath = Configuration["SxcRoot"]; var libraryPath = Path.GetFullPath(Path.Combine(HostEnvironment.ContentRootPath, configuredPath)); options.FileProviders.Add(new PhysicalFileProvider(libraryPath)); }); // enable use of HttpContext services.AddHttpContextAccessor(); // enable webapi - include all controllers in the Sxc.Mvc assembly services.AddControllers(options => { options.AllowEmptyInputInBodyModelBinding = true; }) // This is needed to preserve compatibility with previous api usage // Set the JSON serializer options .AddJsonOptions(options => options.JsonSerializerOptions.SetUnsafeJsonSerializerOptions()) .PartManager.ApplicationParts.Add(new AssemblyPart(typeof(SxcMvc).Assembly)); // enable use of UrlHelper for AbsolutePath services.AddSingleton(); services.AddSingleton(); services.AddScoped(it => it.GetService() .GetUrlHelper(it.GetService().ActionContext)); // Try to get partial to string rendering services.AddTransient(); //services.AddTransient(); StartupEavAndSxc.ConfigureIoC(services, Configuration); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseRouteDebugger(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); var defFiles = new DefaultFilesOptions(); defFiles.DefaultFileNames.Clear(); defFiles.DefaultFileNames.Add("index.html"); app.UseDefaultFiles(defFiles); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllers(); }); } } } ================================================ FILE: Src/Mvc/Website/StartupEavAndSxc.cs ================================================ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using ToSic.Eav; using ToSic.Eav.Configuration; using ToSic.Eav.Plumbing; using ToSic.Sxc; using ToSic.Sxc.Mvc; using ToSic.Sxc.Razor; using ToSic.Sxc.WebApi; namespace Website { public class StartupEavAndSxc { internal static void ConfigureIoC(IServiceCollection services, IConfiguration configuration) { ToSic.Eav.Factory.UseExistingServices(services); ToSic.Eav.Factory.ActivateNetCoreDi(services2 => { services2 .AddSxcMvc() .AddNotImplemented() .AddSxcRazor() // probably the basics needed to read data .AddAdamWebApi() .AddSxcWebApi() .AddSxcCore() .AddEav(); }); var connectionString = configuration.GetConnectionString("SiteSqlServer"); services.BuildServiceProvider().Build().ConnectionString = connectionString; } } } ================================================ FILE: Src/Mvc/Website/Website.csproj ================================================  net9.0 false false none Debug;Release;DebugOqtane;DebugDnn False ================================================ FILE: Src/Mvc/Website/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ConnectionStrings": { "SiteSqlServer": "Data Source=localhost;Initial Catalog=2sxc-dnn742;Integrated Security=True" } } ================================================ FILE: Src/Mvc/Website/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "SxcRoot": "wwwroot/2sxc" } ================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Blog App/_1 Main blog view.cshtml ================================================ @inherits ToSic.Custom.Razor12

Main Blog List file

My type: @GetType().FullName The App being shown: @App.Name
Content Title: @Content.Title

Details

  1. App: @App (AppId: @App.AppId)
    Items: @App.Data (@App.Data.List.Count())
  2. AsDynamic entity: @AsDynamic(App.Data.List.First()).EntityTitle
  3. AsDynamic Json: @AsDynamic("{\"test\": 25}").test
  4. @if (App.Data.Out.ContainsKey("BlogPost")) {
  5. Get data BlogPost: @App.Data["BlogPost"].List.Count() @{ var last = AsList(App.Data["BlogPost"]).Last(); } First: @last.Title (image is @last.Image)
    Body: @last.Body
    @Html.Raw(last.Body)
  6. }

Content

Content is null: "@(Content == null)" @Content "@Content.EntityTitle"

Data

  1. Data: @Data
  2. Out Streams: (@Data.Out.Count) @String.Join(',', Data.Out.Keys)
  3. Out Default: (@Data.List.Count())

Blog Items List

    @foreach (var item in AsList(Data)) {
  1. @item.EntityTitle
  2. }

================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Blog App/_List.cshtml ================================================ @inherits ToSic.Sxc.Mvc.RazorPages.Exp.SxcTestPageViewParams

Blog List file

My type: @GetType().FullName The App being shown: @App.Name
Content Title: @Content.Title

Details

  1. App: @App (AppId: @App.AppId)
    Items: @App.Data (@App.Data.List.Count())
  2. AsDynamic entity: @AsDynamic(App.Data.List.First()).EntityTitle
  3. AsDynamic Json: @AsDynamic("{\"test\": 25}").test
  4. @if (App.Data.Out.ContainsKey("BlogPost")) {
  5. Get data BlogPost: @App.Data["BlogPost"].List.Count() @{ var last = AsList(App.Data["BlogPost"]).Last(); } First: @last.Title (image is @last.Image)
    Body: @last.Body
    @Html.Raw(last.Body)
  6. }

Content

Content is null: "@(Content == null)" @Content "@Content.EntityTitle"

Data

  1. Data: @Data
  2. Out Streams: (@Data.Out.Count) @String.Join(',', Data.Out.Keys)
  3. Out Default: (@Data.List.Count())

Items List

    @foreach (var item in AsList(Data)) {
  1. @item.EntityTitle
  2. }

================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Blog App/_Post Details.cshtml ================================================ @inherits ToSic.Custom.Razor12 @{ ViewData["Title"] = "Default"; }

Post Details - should have same name as in real blog app

My type: @GetType().FullName The App being shown: @App.Name
Content Title: @Content.Title

Details

  1. App: @App (AppId: @App.AppId)
    Items: @App.Data (@App.Data.List.Count())
  2. AsDynamic entity: @AsDynamic(App.Data.List.First()).EntityTitle
  3. AsDynamic Json: @AsDynamic("{\"test\": 25}").test
  4. @if (App.Data.Out.ContainsKey("BlogPost")) {
  5. Get data BlogPost: @App.Data["BlogPost"].List.Count() @{ var last = AsList(App.Data["BlogPost"]).Last(); } First: @last.Title (image is @last.Image)
    Body: @last.Body
    @Html.Raw(last.Body)
  6. }

Content

Content is null: "@(Content == null)" @Content "@Content.EntityTitle"

Data

  1. Data: @Data
  2. Out Streams: (@Data.Out.Count) @String.Join(',', Data.Out.Keys)
  3. Out Default: (@Data.List.Count())

================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Content/Helpers.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Website.wwwroot._2sxc.Content { public class Helpers { public string Hello() => "hello from Helpers"; } } ================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Content/RunContent.cshtml ================================================ @inherits ToSic.Sxc.Mvc.RazorPages.Exp.SxcTestPageViewParams @{ ViewData["Title"] = "Default"; }

Dynamically compiled razor file

My type: @GetType().FullName The App being shown: @App.Name
Content Title: @Content.Title @Html.Partial("_InnerPart.cshtml") ================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Content/_InnerPart.cshtml ================================================ @inherits ToSic.Custom.Razor12 @{ ViewData["Title"] = "Default"; }

Inner Part - loaded with Partial

My type: @GetType().FullName
My Path: @this.Path
CreateInstance Path: @this.CreateInstancePath
================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Tokens/Details.html ================================================

Details of [Content:EntityTitle] [Content:Toolbar]

[Content:Body]
================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/Tokens/List.html ================================================

You successfully created your own template. Start editing it by hovering the "Manage" button and opening the "Edit Template" dialog.

  1. [Item:Title] [Item:Toolbar]
    Details...
  2. [Employee:Repeater:Alternator4]
================================================ FILE: Src/Mvc/Website/wwwroot/2sxc/readme.md ================================================ # 2sxc Directory This is a directory for 2sxc apps. ATM it's still empty ================================================ FILE: Src/Mvc/Website/wwwroot/css/site.css ================================================ /* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification for details on configuring this project to bundle and minify static web assets. */ a.navbar-brand { white-space: normal; text-align: center; word-break: break-all; } /* Provide sufficient contrast against white background */ a { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } /* Sticky footer styles -------------------------------------------------- */ html { font-size: 14px; } @media (min-width: 768px) { html { font-size: 16px; } } .border-top { border-top: 1px solid #e5e5e5; } .border-bottom { border-bottom: 1px solid #e5e5e5; } .box-shadow { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); } button.accept-policy { font-size: 1rem; line-height: inherit; } /* Sticky footer styles -------------------------------------------------- */ html { position: relative; min-height: 100%; } body { /* Margin bottom by footer height */ margin-bottom: 60px; } .footer { position: absolute; bottom: 0; width: 100%; white-space: nowrap; line-height: 60px; /* Vertically center the text there */ } ================================================ FILE: Src/Mvc/Website/wwwroot/js/site.js ================================================ // Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification // for details on configuring this project to bundle and minify static web assets. // Write your Javascript code. ================================================ FILE: Src/Mvc/Website/wwwroot/lib/bootstrap/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2011-2018 Twitter, Inc. Copyright (c) 2011-2018 The Bootstrap Authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Src/Mvc/Website/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css ================================================ /*! * Bootstrap Grid v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ html { box-sizing: border-box; -ms-overflow-style: scrollbar; } *, *::before, *::after { box-sizing: inherit; } .container { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container { max-width: 540px; } } @media (min-width: 768px) { .container { max-width: 720px; } } @media (min-width: 992px) { .container { max-width: 960px; } } @media (min-width: 1200px) { .container { max-width: 1140px; } } .container-fluid { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; } .no-gutters { margin-right: 0; margin-left: 0; } .no-gutters > .col, .no-gutters > [class*="col-"] { padding-right: 0; padding-left: 0; } .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { position: relative; width: 100%; padding-right: 15px; padding-left: 15px; } .col { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-first { -ms-flex-order: -1; order: -1; } .order-last { -ms-flex-order: 13; order: 13; } .order-0 { -ms-flex-order: 0; order: 0; } .order-1 { -ms-flex-order: 1; order: 1; } .order-2 { -ms-flex-order: 2; order: 2; } .order-3 { -ms-flex-order: 3; order: 3; } .order-4 { -ms-flex-order: 4; order: 4; } .order-5 { -ms-flex-order: 5; order: 5; } .order-6 { -ms-flex-order: 6; order: 6; } .order-7 { -ms-flex-order: 7; order: 7; } .order-8 { -ms-flex-order: 8; order: 8; } .order-9 { -ms-flex-order: 9; order: 9; } .order-10 { -ms-flex-order: 10; order: 10; } .order-11 { -ms-flex-order: 11; order: 11; } .order-12 { -ms-flex-order: 12; order: 12; } .offset-1 { margin-left: 8.333333%; } .offset-2 { margin-left: 16.666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.333333%; } .offset-5 { margin-left: 41.666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.333333%; } .offset-8 { margin-left: 66.666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.333333%; } .offset-11 { margin-left: 91.666667%; } @media (min-width: 576px) { .col-sm { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-sm-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-sm-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-sm-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-sm-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-sm-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-sm-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-sm-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-sm-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-sm-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-sm-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-sm-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-sm-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-sm-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-sm-first { -ms-flex-order: -1; order: -1; } .order-sm-last { -ms-flex-order: 13; order: 13; } .order-sm-0 { -ms-flex-order: 0; order: 0; } .order-sm-1 { -ms-flex-order: 1; order: 1; } .order-sm-2 { -ms-flex-order: 2; order: 2; } .order-sm-3 { -ms-flex-order: 3; order: 3; } .order-sm-4 { -ms-flex-order: 4; order: 4; } .order-sm-5 { -ms-flex-order: 5; order: 5; } .order-sm-6 { -ms-flex-order: 6; order: 6; } .order-sm-7 { -ms-flex-order: 7; order: 7; } .order-sm-8 { -ms-flex-order: 8; order: 8; } .order-sm-9 { -ms-flex-order: 9; order: 9; } .order-sm-10 { -ms-flex-order: 10; order: 10; } .order-sm-11 { -ms-flex-order: 11; order: 11; } .order-sm-12 { -ms-flex-order: 12; order: 12; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.333333%; } .offset-sm-2 { margin-left: 16.666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.333333%; } .offset-sm-5 { margin-left: 41.666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.333333%; } .offset-sm-8 { margin-left: 66.666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.333333%; } .offset-sm-11 { margin-left: 91.666667%; } } @media (min-width: 768px) { .col-md { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-md-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-md-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-md-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-md-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-md-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-md-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-md-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-md-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-md-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-md-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-md-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-md-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-md-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-md-first { -ms-flex-order: -1; order: -1; } .order-md-last { -ms-flex-order: 13; order: 13; } .order-md-0 { -ms-flex-order: 0; order: 0; } .order-md-1 { -ms-flex-order: 1; order: 1; } .order-md-2 { -ms-flex-order: 2; order: 2; } .order-md-3 { -ms-flex-order: 3; order: 3; } .order-md-4 { -ms-flex-order: 4; order: 4; } .order-md-5 { -ms-flex-order: 5; order: 5; } .order-md-6 { -ms-flex-order: 6; order: 6; } .order-md-7 { -ms-flex-order: 7; order: 7; } .order-md-8 { -ms-flex-order: 8; order: 8; } .order-md-9 { -ms-flex-order: 9; order: 9; } .order-md-10 { -ms-flex-order: 10; order: 10; } .order-md-11 { -ms-flex-order: 11; order: 11; } .order-md-12 { -ms-flex-order: 12; order: 12; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.333333%; } .offset-md-2 { margin-left: 16.666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.333333%; } .offset-md-5 { margin-left: 41.666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.333333%; } .offset-md-8 { margin-left: 66.666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.333333%; } .offset-md-11 { margin-left: 91.666667%; } } @media (min-width: 992px) { .col-lg { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-lg-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-lg-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-lg-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-lg-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-lg-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-lg-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-lg-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-lg-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-lg-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-lg-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-lg-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-lg-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-lg-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-lg-first { -ms-flex-order: -1; order: -1; } .order-lg-last { -ms-flex-order: 13; order: 13; } .order-lg-0 { -ms-flex-order: 0; order: 0; } .order-lg-1 { -ms-flex-order: 1; order: 1; } .order-lg-2 { -ms-flex-order: 2; order: 2; } .order-lg-3 { -ms-flex-order: 3; order: 3; } .order-lg-4 { -ms-flex-order: 4; order: 4; } .order-lg-5 { -ms-flex-order: 5; order: 5; } .order-lg-6 { -ms-flex-order: 6; order: 6; } .order-lg-7 { -ms-flex-order: 7; order: 7; } .order-lg-8 { -ms-flex-order: 8; order: 8; } .order-lg-9 { -ms-flex-order: 9; order: 9; } .order-lg-10 { -ms-flex-order: 10; order: 10; } .order-lg-11 { -ms-flex-order: 11; order: 11; } .order-lg-12 { -ms-flex-order: 12; order: 12; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.333333%; } .offset-lg-2 { margin-left: 16.666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.333333%; } .offset-lg-5 { margin-left: 41.666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.333333%; } .offset-lg-8 { margin-left: 66.666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.333333%; } .offset-lg-11 { margin-left: 91.666667%; } } @media (min-width: 1200px) { .col-xl { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-xl-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-xl-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-xl-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-xl-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-xl-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-xl-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-xl-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-xl-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-xl-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-xl-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-xl-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-xl-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-xl-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-xl-first { -ms-flex-order: -1; order: -1; } .order-xl-last { -ms-flex-order: 13; order: 13; } .order-xl-0 { -ms-flex-order: 0; order: 0; } .order-xl-1 { -ms-flex-order: 1; order: 1; } .order-xl-2 { -ms-flex-order: 2; order: 2; } .order-xl-3 { -ms-flex-order: 3; order: 3; } .order-xl-4 { -ms-flex-order: 4; order: 4; } .order-xl-5 { -ms-flex-order: 5; order: 5; } .order-xl-6 { -ms-flex-order: 6; order: 6; } .order-xl-7 { -ms-flex-order: 7; order: 7; } .order-xl-8 { -ms-flex-order: 8; order: 8; } .order-xl-9 { -ms-flex-order: 9; order: 9; } .order-xl-10 { -ms-flex-order: 10; order: 10; } .order-xl-11 { -ms-flex-order: 11; order: 11; } .order-xl-12 { -ms-flex-order: 12; order: 12; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.333333%; } .offset-xl-2 { margin-left: 16.666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.333333%; } .offset-xl-5 { margin-left: 41.666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.333333%; } .offset-xl-8 { margin-left: 66.666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.333333%; } .offset-xl-11 { margin-left: 91.666667%; } } .d-none { display: none !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: -ms-flexbox !important; display: flex !important; } .d-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } @media (min-width: 576px) { .d-sm-none { display: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: -ms-flexbox !important; display: flex !important; } .d-sm-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 768px) { .d-md-none { display: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: -ms-flexbox !important; display: flex !important; } .d-md-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 992px) { .d-lg-none { display: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: -ms-flexbox !important; display: flex !important; } .d-lg-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 1200px) { .d-xl-none { display: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: -ms-flexbox !important; display: flex !important; } .d-xl-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media print { .d-print-none { display: none !important; } .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: -ms-flexbox !important; display: flex !important; } .d-print-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } .flex-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } @media (min-width: 576px) { .flex-sm-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-sm-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-sm-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-sm-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-sm-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-sm-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-sm-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-sm-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-sm-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-sm-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-sm-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-sm-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-sm-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-sm-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-sm-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-sm-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-sm-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-sm-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-sm-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-sm-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-sm-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-sm-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-sm-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-sm-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-sm-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-sm-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-sm-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-sm-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-sm-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-sm-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-sm-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-sm-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-sm-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 768px) { .flex-md-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-md-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-md-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-md-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-md-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-md-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-md-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-md-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-md-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-md-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-md-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-md-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-md-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-md-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-md-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-md-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-md-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-md-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-md-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-md-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-md-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-md-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-md-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-md-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-md-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-md-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-md-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-md-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-md-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-md-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-md-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-md-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-md-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-md-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 992px) { .flex-lg-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-lg-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-lg-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-lg-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-lg-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-lg-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-lg-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-lg-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-lg-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-lg-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-lg-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-lg-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-lg-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-lg-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-lg-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-lg-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-lg-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-lg-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-lg-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-lg-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-lg-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-lg-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-lg-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-lg-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-lg-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-lg-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-lg-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-lg-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-lg-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-lg-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-lg-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-lg-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-lg-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 1200px) { .flex-xl-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-xl-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-xl-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-xl-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-xl-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-xl-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-xl-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-xl-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-xl-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-xl-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-xl-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-xl-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-xl-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-xl-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-xl-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-xl-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-xl-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-xl-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-xl-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-xl-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-xl-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-xl-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-xl-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-xl-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-xl-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-xl-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-xl-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-xl-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-xl-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-xl-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-xl-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-xl-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-xl-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } .m-0 { margin: 0 !important; } .mt-0, .my-0 { margin-top: 0 !important; } .mr-0, .mx-0 { margin-right: 0 !important; } .mb-0, .my-0 { margin-bottom: 0 !important; } .ml-0, .mx-0 { margin-left: 0 !important; } .m-1 { margin: 0.25rem !important; } .mt-1, .my-1 { margin-top: 0.25rem !important; } .mr-1, .mx-1 { margin-right: 0.25rem !important; } .mb-1, .my-1 { margin-bottom: 0.25rem !important; } .ml-1, .mx-1 { margin-left: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .mt-2, .my-2 { margin-top: 0.5rem !important; } .mr-2, .mx-2 { margin-right: 0.5rem !important; } .mb-2, .my-2 { margin-bottom: 0.5rem !important; } .ml-2, .mx-2 { margin-left: 0.5rem !important; } .m-3 { margin: 1rem !important; } .mt-3, .my-3 { margin-top: 1rem !important; } .mr-3, .mx-3 { margin-right: 1rem !important; } .mb-3, .my-3 { margin-bottom: 1rem !important; } .ml-3, .mx-3 { margin-left: 1rem !important; } .m-4 { margin: 1.5rem !important; } .mt-4, .my-4 { margin-top: 1.5rem !important; } .mr-4, .mx-4 { margin-right: 1.5rem !important; } .mb-4, .my-4 { margin-bottom: 1.5rem !important; } .ml-4, .mx-4 { margin-left: 1.5rem !important; } .m-5 { margin: 3rem !important; } .mt-5, .my-5 { margin-top: 3rem !important; } .mr-5, .mx-5 { margin-right: 3rem !important; } .mb-5, .my-5 { margin-bottom: 3rem !important; } .ml-5, .mx-5 { margin-left: 3rem !important; } .p-0 { padding: 0 !important; } .pt-0, .py-0 { padding-top: 0 !important; } .pr-0, .px-0 { padding-right: 0 !important; } .pb-0, .py-0 { padding-bottom: 0 !important; } .pl-0, .px-0 { padding-left: 0 !important; } .p-1 { padding: 0.25rem !important; } .pt-1, .py-1 { padding-top: 0.25rem !important; } .pr-1, .px-1 { padding-right: 0.25rem !important; } .pb-1, .py-1 { padding-bottom: 0.25rem !important; } .pl-1, .px-1 { padding-left: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .pt-2, .py-2 { padding-top: 0.5rem !important; } .pr-2, .px-2 { padding-right: 0.5rem !important; } .pb-2, .py-2 { padding-bottom: 0.5rem !important; } .pl-2, .px-2 { padding-left: 0.5rem !important; } .p-3 { padding: 1rem !important; } .pt-3, .py-3 { padding-top: 1rem !important; } .pr-3, .px-3 { padding-right: 1rem !important; } .pb-3, .py-3 { padding-bottom: 1rem !important; } .pl-3, .px-3 { padding-left: 1rem !important; } .p-4 { padding: 1.5rem !important; } .pt-4, .py-4 { padding-top: 1.5rem !important; } .pr-4, .px-4 { padding-right: 1.5rem !important; } .pb-4, .py-4 { padding-bottom: 1.5rem !important; } .pl-4, .px-4 { padding-left: 1.5rem !important; } .p-5 { padding: 3rem !important; } .pt-5, .py-5 { padding-top: 3rem !important; } .pr-5, .px-5 { padding-right: 3rem !important; } .pb-5, .py-5 { padding-bottom: 3rem !important; } .pl-5, .px-5 { padding-left: 3rem !important; } .m-n1 { margin: -0.25rem !important; } .mt-n1, .my-n1 { margin-top: -0.25rem !important; } .mr-n1, .mx-n1 { margin-right: -0.25rem !important; } .mb-n1, .my-n1 { margin-bottom: -0.25rem !important; } .ml-n1, .mx-n1 { margin-left: -0.25rem !important; } .m-n2 { margin: -0.5rem !important; } .mt-n2, .my-n2 { margin-top: -0.5rem !important; } .mr-n2, .mx-n2 { margin-right: -0.5rem !important; } .mb-n2, .my-n2 { margin-bottom: -0.5rem !important; } .ml-n2, .mx-n2 { margin-left: -0.5rem !important; } .m-n3 { margin: -1rem !important; } .mt-n3, .my-n3 { margin-top: -1rem !important; } .mr-n3, .mx-n3 { margin-right: -1rem !important; } .mb-n3, .my-n3 { margin-bottom: -1rem !important; } .ml-n3, .mx-n3 { margin-left: -1rem !important; } .m-n4 { margin: -1.5rem !important; } .mt-n4, .my-n4 { margin-top: -1.5rem !important; } .mr-n4, .mx-n4 { margin-right: -1.5rem !important; } .mb-n4, .my-n4 { margin-bottom: -1.5rem !important; } .ml-n4, .mx-n4 { margin-left: -1.5rem !important; } .m-n5 { margin: -3rem !important; } .mt-n5, .my-n5 { margin-top: -3rem !important; } .mr-n5, .mx-n5 { margin-right: -3rem !important; } .mb-n5, .my-n5 { margin-bottom: -3rem !important; } .ml-n5, .mx-n5 { margin-left: -3rem !important; } .m-auto { margin: auto !important; } .mt-auto, .my-auto { margin-top: auto !important; } .mr-auto, .mx-auto { margin-right: auto !important; } .mb-auto, .my-auto { margin-bottom: auto !important; } .ml-auto, .mx-auto { margin-left: auto !important; } @media (min-width: 576px) { .m-sm-0 { margin: 0 !important; } .mt-sm-0, .my-sm-0 { margin-top: 0 !important; } .mr-sm-0, .mx-sm-0 { margin-right: 0 !important; } .mb-sm-0, .my-sm-0 { margin-bottom: 0 !important; } .ml-sm-0, .mx-sm-0 { margin-left: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1, .my-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1, .mx-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1, .my-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1, .mx-sm-1 { margin-left: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2, .my-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2, .mx-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2, .my-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2, .mx-sm-2 { margin-left: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .mt-sm-3, .my-sm-3 { margin-top: 1rem !important; } .mr-sm-3, .mx-sm-3 { margin-right: 1rem !important; } .mb-sm-3, .my-sm-3 { margin-bottom: 1rem !important; } .ml-sm-3, .mx-sm-3 { margin-left: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .mt-sm-4, .my-sm-4 { margin-top: 1.5rem !important; } .mr-sm-4, .mx-sm-4 { margin-right: 1.5rem !important; } .mb-sm-4, .my-sm-4 { margin-bottom: 1.5rem !important; } .ml-sm-4, .mx-sm-4 { margin-left: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .mt-sm-5, .my-sm-5 { margin-top: 3rem !important; } .mr-sm-5, .mx-sm-5 { margin-right: 3rem !important; } .mb-sm-5, .my-sm-5 { margin-bottom: 3rem !important; } .ml-sm-5, .mx-sm-5 { margin-left: 3rem !important; } .p-sm-0 { padding: 0 !important; } .pt-sm-0, .py-sm-0 { padding-top: 0 !important; } .pr-sm-0, .px-sm-0 { padding-right: 0 !important; } .pb-sm-0, .py-sm-0 { padding-bottom: 0 !important; } .pl-sm-0, .px-sm-0 { padding-left: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1, .py-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1, .px-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1, .py-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1, .px-sm-1 { padding-left: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2, .py-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2, .px-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2, .py-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2, .px-sm-2 { padding-left: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .pt-sm-3, .py-sm-3 { padding-top: 1rem !important; } .pr-sm-3, .px-sm-3 { padding-right: 1rem !important; } .pb-sm-3, .py-sm-3 { padding-bottom: 1rem !important; } .pl-sm-3, .px-sm-3 { padding-left: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .pt-sm-4, .py-sm-4 { padding-top: 1.5rem !important; } .pr-sm-4, .px-sm-4 { padding-right: 1.5rem !important; } .pb-sm-4, .py-sm-4 { padding-bottom: 1.5rem !important; } .pl-sm-4, .px-sm-4 { padding-left: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .pt-sm-5, .py-sm-5 { padding-top: 3rem !important; } .pr-sm-5, .px-sm-5 { padding-right: 3rem !important; } .pb-sm-5, .py-sm-5 { padding-bottom: 3rem !important; } .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } .m-sm-n1 { margin: -0.25rem !important; } .mt-sm-n1, .my-sm-n1 { margin-top: -0.25rem !important; } .mr-sm-n1, .mx-sm-n1 { margin-right: -0.25rem !important; } .mb-sm-n1, .my-sm-n1 { margin-bottom: -0.25rem !important; } .ml-sm-n1, .mx-sm-n1 { margin-left: -0.25rem !important; } .m-sm-n2 { margin: -0.5rem !important; } .mt-sm-n2, .my-sm-n2 { margin-top: -0.5rem !important; } .mr-sm-n2, .mx-sm-n2 { margin-right: -0.5rem !important; } .mb-sm-n2, .my-sm-n2 { margin-bottom: -0.5rem !important; } .ml-sm-n2, .mx-sm-n2 { margin-left: -0.5rem !important; } .m-sm-n3 { margin: -1rem !important; } .mt-sm-n3, .my-sm-n3 { margin-top: -1rem !important; } .mr-sm-n3, .mx-sm-n3 { margin-right: -1rem !important; } .mb-sm-n3, .my-sm-n3 { margin-bottom: -1rem !important; } .ml-sm-n3, .mx-sm-n3 { margin-left: -1rem !important; } .m-sm-n4 { margin: -1.5rem !important; } .mt-sm-n4, .my-sm-n4 { margin-top: -1.5rem !important; } .mr-sm-n4, .mx-sm-n4 { margin-right: -1.5rem !important; } .mb-sm-n4, .my-sm-n4 { margin-bottom: -1.5rem !important; } .ml-sm-n4, .mx-sm-n4 { margin-left: -1.5rem !important; } .m-sm-n5 { margin: -3rem !important; } .mt-sm-n5, .my-sm-n5 { margin-top: -3rem !important; } .mr-sm-n5, .mx-sm-n5 { margin-right: -3rem !important; } .mb-sm-n5, .my-sm-n5 { margin-bottom: -3rem !important; } .ml-sm-n5, .mx-sm-n5 { margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, .my-sm-auto { margin-top: auto !important; } .mr-sm-auto, .mx-sm-auto { margin-right: auto !important; } .mb-sm-auto, .my-sm-auto { margin-bottom: auto !important; } .ml-sm-auto, .mx-sm-auto { margin-left: auto !important; } } @media (min-width: 768px) { .m-md-0 { margin: 0 !important; } .mt-md-0, .my-md-0 { margin-top: 0 !important; } .mr-md-0, .mx-md-0 { margin-right: 0 !important; } .mb-md-0, .my-md-0 { margin-bottom: 0 !important; } .ml-md-0, .mx-md-0 { margin-left: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .mt-md-1, .my-md-1 { margin-top: 0.25rem !important; } .mr-md-1, .mx-md-1 { margin-right: 0.25rem !important; } .mb-md-1, .my-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1, .mx-md-1 { margin-left: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .mt-md-2, .my-md-2 { margin-top: 0.5rem !important; } .mr-md-2, .mx-md-2 { margin-right: 0.5rem !important; } .mb-md-2, .my-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2, .mx-md-2 { margin-left: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .mt-md-3, .my-md-3 { margin-top: 1rem !important; } .mr-md-3, .mx-md-3 { margin-right: 1rem !important; } .mb-md-3, .my-md-3 { margin-bottom: 1rem !important; } .ml-md-3, .mx-md-3 { margin-left: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .mt-md-4, .my-md-4 { margin-top: 1.5rem !important; } .mr-md-4, .mx-md-4 { margin-right: 1.5rem !important; } .mb-md-4, .my-md-4 { margin-bottom: 1.5rem !important; } .ml-md-4, .mx-md-4 { margin-left: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .mt-md-5, .my-md-5 { margin-top: 3rem !important; } .mr-md-5, .mx-md-5 { margin-right: 3rem !important; } .mb-md-5, .my-md-5 { margin-bottom: 3rem !important; } .ml-md-5, .mx-md-5 { margin-left: 3rem !important; } .p-md-0 { padding: 0 !important; } .pt-md-0, .py-md-0 { padding-top: 0 !important; } .pr-md-0, .px-md-0 { padding-right: 0 !important; } .pb-md-0, .py-md-0 { padding-bottom: 0 !important; } .pl-md-0, .px-md-0 { padding-left: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1, .py-md-1 { padding-top: 0.25rem !important; } .pr-md-1, .px-md-1 { padding-right: 0.25rem !important; } .pb-md-1, .py-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1, .px-md-1 { padding-left: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2, .py-md-2 { padding-top: 0.5rem !important; } .pr-md-2, .px-md-2 { padding-right: 0.5rem !important; } .pb-md-2, .py-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2, .px-md-2 { padding-left: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .pt-md-3, .py-md-3 { padding-top: 1rem !important; } .pr-md-3, .px-md-3 { padding-right: 1rem !important; } .pb-md-3, .py-md-3 { padding-bottom: 1rem !important; } .pl-md-3, .px-md-3 { padding-left: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .pt-md-4, .py-md-4 { padding-top: 1.5rem !important; } .pr-md-4, .px-md-4 { padding-right: 1.5rem !important; } .pb-md-4, .py-md-4 { padding-bottom: 1.5rem !important; } .pl-md-4, .px-md-4 { padding-left: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .pt-md-5, .py-md-5 { padding-top: 3rem !important; } .pr-md-5, .px-md-5 { padding-right: 3rem !important; } .pb-md-5, .py-md-5 { padding-bottom: 3rem !important; } .pl-md-5, .px-md-5 { padding-left: 3rem !important; } .m-md-n1 { margin: -0.25rem !important; } .mt-md-n1, .my-md-n1 { margin-top: -0.25rem !important; } .mr-md-n1, .mx-md-n1 { margin-right: -0.25rem !important; } .mb-md-n1, .my-md-n1 { margin-bottom: -0.25rem !important; } .ml-md-n1, .mx-md-n1 { margin-left: -0.25rem !important; } .m-md-n2 { margin: -0.5rem !important; } .mt-md-n2, .my-md-n2 { margin-top: -0.5rem !important; } .mr-md-n2, .mx-md-n2 { margin-right: -0.5rem !important; } .mb-md-n2, .my-md-n2 { margin-bottom: -0.5rem !important; } .ml-md-n2, .mx-md-n2 { margin-left: -0.5rem !important; } .m-md-n3 { margin: -1rem !important; } .mt-md-n3, .my-md-n3 { margin-top: -1rem !important; } .mr-md-n3, .mx-md-n3 { margin-right: -1rem !important; } .mb-md-n3, .my-md-n3 { margin-bottom: -1rem !important; } .ml-md-n3, .mx-md-n3 { margin-left: -1rem !important; } .m-md-n4 { margin: -1.5rem !important; } .mt-md-n4, .my-md-n4 { margin-top: -1.5rem !important; } .mr-md-n4, .mx-md-n4 { margin-right: -1.5rem !important; } .mb-md-n4, .my-md-n4 { margin-bottom: -1.5rem !important; } .ml-md-n4, .mx-md-n4 { margin-left: -1.5rem !important; } .m-md-n5 { margin: -3rem !important; } .mt-md-n5, .my-md-n5 { margin-top: -3rem !important; } .mr-md-n5, .mx-md-n5 { margin-right: -3rem !important; } .mb-md-n5, .my-md-n5 { margin-bottom: -3rem !important; } .ml-md-n5, .mx-md-n5 { margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, .my-md-auto { margin-top: auto !important; } .mr-md-auto, .mx-md-auto { margin-right: auto !important; } .mb-md-auto, .my-md-auto { margin-bottom: auto !important; } .ml-md-auto, .mx-md-auto { margin-left: auto !important; } } @media (min-width: 992px) { .m-lg-0 { margin: 0 !important; } .mt-lg-0, .my-lg-0 { margin-top: 0 !important; } .mr-lg-0, .mx-lg-0 { margin-right: 0 !important; } .mb-lg-0, .my-lg-0 { margin-bottom: 0 !important; } .ml-lg-0, .mx-lg-0 { margin-left: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1, .my-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1, .mx-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1, .my-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1, .mx-lg-1 { margin-left: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2, .my-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2, .mx-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2, .my-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2, .mx-lg-2 { margin-left: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .mt-lg-3, .my-lg-3 { margin-top: 1rem !important; } .mr-lg-3, .mx-lg-3 { margin-right: 1rem !important; } .mb-lg-3, .my-lg-3 { margin-bottom: 1rem !important; } .ml-lg-3, .mx-lg-3 { margin-left: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .mt-lg-4, .my-lg-4 { margin-top: 1.5rem !important; } .mr-lg-4, .mx-lg-4 { margin-right: 1.5rem !important; } .mb-lg-4, .my-lg-4 { margin-bottom: 1.5rem !important; } .ml-lg-4, .mx-lg-4 { margin-left: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .mt-lg-5, .my-lg-5 { margin-top: 3rem !important; } .mr-lg-5, .mx-lg-5 { margin-right: 3rem !important; } .mb-lg-5, .my-lg-5 { margin-bottom: 3rem !important; } .ml-lg-5, .mx-lg-5 { margin-left: 3rem !important; } .p-lg-0 { padding: 0 !important; } .pt-lg-0, .py-lg-0 { padding-top: 0 !important; } .pr-lg-0, .px-lg-0 { padding-right: 0 !important; } .pb-lg-0, .py-lg-0 { padding-bottom: 0 !important; } .pl-lg-0, .px-lg-0 { padding-left: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1, .py-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1, .px-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1, .py-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1, .px-lg-1 { padding-left: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2, .py-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2, .px-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2, .py-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2, .px-lg-2 { padding-left: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .pt-lg-3, .py-lg-3 { padding-top: 1rem !important; } .pr-lg-3, .px-lg-3 { padding-right: 1rem !important; } .pb-lg-3, .py-lg-3 { padding-bottom: 1rem !important; } .pl-lg-3, .px-lg-3 { padding-left: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .pt-lg-4, .py-lg-4 { padding-top: 1.5rem !important; } .pr-lg-4, .px-lg-4 { padding-right: 1.5rem !important; } .pb-lg-4, .py-lg-4 { padding-bottom: 1.5rem !important; } .pl-lg-4, .px-lg-4 { padding-left: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .pt-lg-5, .py-lg-5 { padding-top: 3rem !important; } .pr-lg-5, .px-lg-5 { padding-right: 3rem !important; } .pb-lg-5, .py-lg-5 { padding-bottom: 3rem !important; } .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } .m-lg-n1 { margin: -0.25rem !important; } .mt-lg-n1, .my-lg-n1 { margin-top: -0.25rem !important; } .mr-lg-n1, .mx-lg-n1 { margin-right: -0.25rem !important; } .mb-lg-n1, .my-lg-n1 { margin-bottom: -0.25rem !important; } .ml-lg-n1, .mx-lg-n1 { margin-left: -0.25rem !important; } .m-lg-n2 { margin: -0.5rem !important; } .mt-lg-n2, .my-lg-n2 { margin-top: -0.5rem !important; } .mr-lg-n2, .mx-lg-n2 { margin-right: -0.5rem !important; } .mb-lg-n2, .my-lg-n2 { margin-bottom: -0.5rem !important; } .ml-lg-n2, .mx-lg-n2 { margin-left: -0.5rem !important; } .m-lg-n3 { margin: -1rem !important; } .mt-lg-n3, .my-lg-n3 { margin-top: -1rem !important; } .mr-lg-n3, .mx-lg-n3 { margin-right: -1rem !important; } .mb-lg-n3, .my-lg-n3 { margin-bottom: -1rem !important; } .ml-lg-n3, .mx-lg-n3 { margin-left: -1rem !important; } .m-lg-n4 { margin: -1.5rem !important; } .mt-lg-n4, .my-lg-n4 { margin-top: -1.5rem !important; } .mr-lg-n4, .mx-lg-n4 { margin-right: -1.5rem !important; } .mb-lg-n4, .my-lg-n4 { margin-bottom: -1.5rem !important; } .ml-lg-n4, .mx-lg-n4 { margin-left: -1.5rem !important; } .m-lg-n5 { margin: -3rem !important; } .mt-lg-n5, .my-lg-n5 { margin-top: -3rem !important; } .mr-lg-n5, .mx-lg-n5 { margin-right: -3rem !important; } .mb-lg-n5, .my-lg-n5 { margin-bottom: -3rem !important; } .ml-lg-n5, .mx-lg-n5 { margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, .my-lg-auto { margin-top: auto !important; } .mr-lg-auto, .mx-lg-auto { margin-right: auto !important; } .mb-lg-auto, .my-lg-auto { margin-bottom: auto !important; } .ml-lg-auto, .mx-lg-auto { margin-left: auto !important; } } @media (min-width: 1200px) { .m-xl-0 { margin: 0 !important; } .mt-xl-0, .my-xl-0 { margin-top: 0 !important; } .mr-xl-0, .mx-xl-0 { margin-right: 0 !important; } .mb-xl-0, .my-xl-0 { margin-bottom: 0 !important; } .ml-xl-0, .mx-xl-0 { margin-left: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1, .my-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1, .mx-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1, .my-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1, .mx-xl-1 { margin-left: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2, .my-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2, .mx-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2, .my-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2, .mx-xl-2 { margin-left: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .mt-xl-3, .my-xl-3 { margin-top: 1rem !important; } .mr-xl-3, .mx-xl-3 { margin-right: 1rem !important; } .mb-xl-3, .my-xl-3 { margin-bottom: 1rem !important; } .ml-xl-3, .mx-xl-3 { margin-left: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .mt-xl-4, .my-xl-4 { margin-top: 1.5rem !important; } .mr-xl-4, .mx-xl-4 { margin-right: 1.5rem !important; } .mb-xl-4, .my-xl-4 { margin-bottom: 1.5rem !important; } .ml-xl-4, .mx-xl-4 { margin-left: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .mt-xl-5, .my-xl-5 { margin-top: 3rem !important; } .mr-xl-5, .mx-xl-5 { margin-right: 3rem !important; } .mb-xl-5, .my-xl-5 { margin-bottom: 3rem !important; } .ml-xl-5, .mx-xl-5 { margin-left: 3rem !important; } .p-xl-0 { padding: 0 !important; } .pt-xl-0, .py-xl-0 { padding-top: 0 !important; } .pr-xl-0, .px-xl-0 { padding-right: 0 !important; } .pb-xl-0, .py-xl-0 { padding-bottom: 0 !important; } .pl-xl-0, .px-xl-0 { padding-left: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1, .py-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1, .px-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1, .py-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1, .px-xl-1 { padding-left: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2, .py-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2, .px-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2, .py-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2, .px-xl-2 { padding-left: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .pt-xl-3, .py-xl-3 { padding-top: 1rem !important; } .pr-xl-3, .px-xl-3 { padding-right: 1rem !important; } .pb-xl-3, .py-xl-3 { padding-bottom: 1rem !important; } .pl-xl-3, .px-xl-3 { padding-left: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .pt-xl-4, .py-xl-4 { padding-top: 1.5rem !important; } .pr-xl-4, .px-xl-4 { padding-right: 1.5rem !important; } .pb-xl-4, .py-xl-4 { padding-bottom: 1.5rem !important; } .pl-xl-4, .px-xl-4 { padding-left: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .pt-xl-5, .py-xl-5 { padding-top: 3rem !important; } .pr-xl-5, .px-xl-5 { padding-right: 3rem !important; } .pb-xl-5, .py-xl-5 { padding-bottom: 3rem !important; } .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } .m-xl-n1 { margin: -0.25rem !important; } .mt-xl-n1, .my-xl-n1 { margin-top: -0.25rem !important; } .mr-xl-n1, .mx-xl-n1 { margin-right: -0.25rem !important; } .mb-xl-n1, .my-xl-n1 { margin-bottom: -0.25rem !important; } .ml-xl-n1, .mx-xl-n1 { margin-left: -0.25rem !important; } .m-xl-n2 { margin: -0.5rem !important; } .mt-xl-n2, .my-xl-n2 { margin-top: -0.5rem !important; } .mr-xl-n2, .mx-xl-n2 { margin-right: -0.5rem !important; } .mb-xl-n2, .my-xl-n2 { margin-bottom: -0.5rem !important; } .ml-xl-n2, .mx-xl-n2 { margin-left: -0.5rem !important; } .m-xl-n3 { margin: -1rem !important; } .mt-xl-n3, .my-xl-n3 { margin-top: -1rem !important; } .mr-xl-n3, .mx-xl-n3 { margin-right: -1rem !important; } .mb-xl-n3, .my-xl-n3 { margin-bottom: -1rem !important; } .ml-xl-n3, .mx-xl-n3 { margin-left: -1rem !important; } .m-xl-n4 { margin: -1.5rem !important; } .mt-xl-n4, .my-xl-n4 { margin-top: -1.5rem !important; } .mr-xl-n4, .mx-xl-n4 { margin-right: -1.5rem !important; } .mb-xl-n4, .my-xl-n4 { margin-bottom: -1.5rem !important; } .ml-xl-n4, .mx-xl-n4 { margin-left: -1.5rem !important; } .m-xl-n5 { margin: -3rem !important; } .mt-xl-n5, .my-xl-n5 { margin-top: -3rem !important; } .mr-xl-n5, .mx-xl-n5 { margin-right: -3rem !important; } .mb-xl-n5, .my-xl-n5 { margin-bottom: -3rem !important; } .ml-xl-n5, .mx-xl-n5 { margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, .my-xl-auto { margin-top: auto !important; } .mr-xl-auto, .mx-xl-auto { margin-right: auto !important; } .mb-xl-auto, .my-xl-auto { margin-bottom: auto !important; } .ml-xl-auto, .mx-xl-auto { margin-left: auto !important; } } /*# sourceMappingURL=bootstrap-grid.css.map */ ================================================ FILE: Src/Mvc/Website/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css ================================================ /*! * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */ *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: left; background-color: #fff; } [tabindex="-1"]:focus { outline: 0 !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0.5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; border-bottom: 0; -webkit-text-decoration-skip-ink: none; text-decoration-skip-ink: none; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: 700; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #007bff; text-decoration: none; background-color: transparent; } a:hover { color: #0056b3; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; caption-side: bottom; } th { text-align: inherit; } label { display: inline-block; margin-bottom: 0.5rem; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } select { word-wrap: normal; } button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button:not(:disabled), [type="button"]:not(:disabled), [type="reset"]:not(:disabled), [type="submit"]:not(:disabled) { cursor: pointer; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; cursor: pointer; } template { display: none; } [hidden] { display: none !important; } /*# sourceMappingURL=bootstrap-reboot.css.map */ ================================================ FILE: Src/Mvc/Website/wwwroot/lib/bootstrap/dist/css/bootstrap.css ================================================ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ :root { --blue: #007bff; --indigo: #6610f2; --purple: #6f42c1; --pink: #e83e8c; --red: #dc3545; --orange: #fd7e14; --yellow: #ffc107; --green: #28a745; --teal: #20c997; --cyan: #17a2b8; --white: #fff; --gray: #6c757d; --gray-dark: #343a40; --primary: #007bff; --secondary: #6c757d; --success: #28a745; --info: #17a2b8; --warning: #ffc107; --danger: #dc3545; --light: #f8f9fa; --dark: #343a40; --breakpoint-xs: 0; --breakpoint-sm: 576px; --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: left; background-color: #fff; } [tabindex="-1"]:focus { outline: 0 !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0.5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; border-bottom: 0; -webkit-text-decoration-skip-ink: none; text-decoration-skip-ink: none; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: 700; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #007bff; text-decoration: none; background-color: transparent; } a:hover { color: #0056b3; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; caption-side: bottom; } th { text-align: inherit; } label { display: inline-block; margin-bottom: 0.5rem; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } select { word-wrap: normal; } button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button:not(:disabled), [type="button"]:not(:disabled), [type="reset"]:not(:disabled), [type="submit"]:not(:disabled) { cursor: pointer; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; cursor: pointer; } template { display: none; } [hidden] { display: none !important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: 0.5rem; font-weight: 500; line-height: 1.2; } h1, .h1 { font-size: 2.5rem; } h2, .h2 { font-size: 2rem; } h3, .h3 { font-size: 1.75rem; } h4, .h4 { font-size: 1.5rem; } h5, .h5 { font-size: 1.25rem; } h6, .h6 { font-size: 1rem; } .lead { font-size: 1.25rem; font-weight: 300; } .display-1 { font-size: 6rem; font-weight: 300; line-height: 1.2; } .display-2 { font-size: 5.5rem; font-weight: 300; line-height: 1.2; } .display-3 { font-size: 4.5rem; font-weight: 300; line-height: 1.2; } .display-4 { font-size: 3.5rem; font-weight: 300; line-height: 1.2; } hr { margin-top: 1rem; margin-bottom: 1rem; border: 0; border-top: 1px solid rgba(0, 0, 0, 0.1); } small, .small { font-size: 80%; font-weight: 400; } mark, .mark { padding: 0.2em; background-color: #fcf8e3; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline-item { display: inline-block; } .list-inline-item:not(:last-child) { margin-right: 0.5rem; } .initialism { font-size: 90%; text-transform: uppercase; } .blockquote { margin-bottom: 1rem; font-size: 1.25rem; } .blockquote-footer { display: block; font-size: 80%; color: #6c757d; } .blockquote-footer::before { content: "\2014\00A0"; } .img-fluid { max-width: 100%; height: auto; } .img-thumbnail { padding: 0.25rem; background-color: #fff; border: 1px solid #dee2e6; border-radius: 0.25rem; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 90%; color: #6c757d; } code { font-size: 87.5%; color: #e83e8c; word-break: break-word; } a > code { color: inherit; } kbd { padding: 0.2rem 0.4rem; font-size: 87.5%; color: #fff; background-color: #212529; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; } pre { display: block; font-size: 87.5%; color: #212529; } pre code { font-size: inherit; color: inherit; word-break: normal; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container { max-width: 540px; } } @media (min-width: 768px) { .container { max-width: 720px; } } @media (min-width: 992px) { .container { max-width: 960px; } } @media (min-width: 1200px) { .container { max-width: 1140px; } } .container-fluid { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; } .no-gutters { margin-right: 0; margin-left: 0; } .no-gutters > .col, .no-gutters > [class*="col-"] { padding-right: 0; padding-left: 0; } .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { position: relative; width: 100%; padding-right: 15px; padding-left: 15px; } .col { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-first { -ms-flex-order: -1; order: -1; } .order-last { -ms-flex-order: 13; order: 13; } .order-0 { -ms-flex-order: 0; order: 0; } .order-1 { -ms-flex-order: 1; order: 1; } .order-2 { -ms-flex-order: 2; order: 2; } .order-3 { -ms-flex-order: 3; order: 3; } .order-4 { -ms-flex-order: 4; order: 4; } .order-5 { -ms-flex-order: 5; order: 5; } .order-6 { -ms-flex-order: 6; order: 6; } .order-7 { -ms-flex-order: 7; order: 7; } .order-8 { -ms-flex-order: 8; order: 8; } .order-9 { -ms-flex-order: 9; order: 9; } .order-10 { -ms-flex-order: 10; order: 10; } .order-11 { -ms-flex-order: 11; order: 11; } .order-12 { -ms-flex-order: 12; order: 12; } .offset-1 { margin-left: 8.333333%; } .offset-2 { margin-left: 16.666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.333333%; } .offset-5 { margin-left: 41.666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.333333%; } .offset-8 { margin-left: 66.666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.333333%; } .offset-11 { margin-left: 91.666667%; } @media (min-width: 576px) { .col-sm { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-sm-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-sm-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-sm-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-sm-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-sm-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-sm-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-sm-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-sm-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-sm-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-sm-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-sm-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-sm-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-sm-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-sm-first { -ms-flex-order: -1; order: -1; } .order-sm-last { -ms-flex-order: 13; order: 13; } .order-sm-0 { -ms-flex-order: 0; order: 0; } .order-sm-1 { -ms-flex-order: 1; order: 1; } .order-sm-2 { -ms-flex-order: 2; order: 2; } .order-sm-3 { -ms-flex-order: 3; order: 3; } .order-sm-4 { -ms-flex-order: 4; order: 4; } .order-sm-5 { -ms-flex-order: 5; order: 5; } .order-sm-6 { -ms-flex-order: 6; order: 6; } .order-sm-7 { -ms-flex-order: 7; order: 7; } .order-sm-8 { -ms-flex-order: 8; order: 8; } .order-sm-9 { -ms-flex-order: 9; order: 9; } .order-sm-10 { -ms-flex-order: 10; order: 10; } .order-sm-11 { -ms-flex-order: 11; order: 11; } .order-sm-12 { -ms-flex-order: 12; order: 12; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.333333%; } .offset-sm-2 { margin-left: 16.666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.333333%; } .offset-sm-5 { margin-left: 41.666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.333333%; } .offset-sm-8 { margin-left: 66.666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.333333%; } .offset-sm-11 { margin-left: 91.666667%; } } @media (min-width: 768px) { .col-md { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-md-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-md-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-md-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-md-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-md-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-md-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-md-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-md-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-md-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-md-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-md-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-md-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-md-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-md-first { -ms-flex-order: -1; order: -1; } .order-md-last { -ms-flex-order: 13; order: 13; } .order-md-0 { -ms-flex-order: 0; order: 0; } .order-md-1 { -ms-flex-order: 1; order: 1; } .order-md-2 { -ms-flex-order: 2; order: 2; } .order-md-3 { -ms-flex-order: 3; order: 3; } .order-md-4 { -ms-flex-order: 4; order: 4; } .order-md-5 { -ms-flex-order: 5; order: 5; } .order-md-6 { -ms-flex-order: 6; order: 6; } .order-md-7 { -ms-flex-order: 7; order: 7; } .order-md-8 { -ms-flex-order: 8; order: 8; } .order-md-9 { -ms-flex-order: 9; order: 9; } .order-md-10 { -ms-flex-order: 10; order: 10; } .order-md-11 { -ms-flex-order: 11; order: 11; } .order-md-12 { -ms-flex-order: 12; order: 12; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.333333%; } .offset-md-2 { margin-left: 16.666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.333333%; } .offset-md-5 { margin-left: 41.666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.333333%; } .offset-md-8 { margin-left: 66.666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.333333%; } .offset-md-11 { margin-left: 91.666667%; } } @media (min-width: 992px) { .col-lg { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-lg-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-lg-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-lg-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-lg-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-lg-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-lg-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-lg-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-lg-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-lg-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-lg-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-lg-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-lg-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-lg-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-lg-first { -ms-flex-order: -1; order: -1; } .order-lg-last { -ms-flex-order: 13; order: 13; } .order-lg-0 { -ms-flex-order: 0; order: 0; } .order-lg-1 { -ms-flex-order: 1; order: 1; } .order-lg-2 { -ms-flex-order: 2; order: 2; } .order-lg-3 { -ms-flex-order: 3; order: 3; } .order-lg-4 { -ms-flex-order: 4; order: 4; } .order-lg-5 { -ms-flex-order: 5; order: 5; } .order-lg-6 { -ms-flex-order: 6; order: 6; } .order-lg-7 { -ms-flex-order: 7; order: 7; } .order-lg-8 { -ms-flex-order: 8; order: 8; } .order-lg-9 { -ms-flex-order: 9; order: 9; } .order-lg-10 { -ms-flex-order: 10; order: 10; } .order-lg-11 { -ms-flex-order: 11; order: 11; } .order-lg-12 { -ms-flex-order: 12; order: 12; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.333333%; } .offset-lg-2 { margin-left: 16.666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.333333%; } .offset-lg-5 { margin-left: 41.666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.333333%; } .offset-lg-8 { margin-left: 66.666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.333333%; } .offset-lg-11 { margin-left: 91.666667%; } } @media (min-width: 1200px) { .col-xl { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-xl-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: 100%; } .col-xl-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-xl-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-xl-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-xl-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-xl-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-xl-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-xl-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-xl-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-xl-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-xl-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-xl-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-xl-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-xl-first { -ms-flex-order: -1; order: -1; } .order-xl-last { -ms-flex-order: 13; order: 13; } .order-xl-0 { -ms-flex-order: 0; order: 0; } .order-xl-1 { -ms-flex-order: 1; order: 1; } .order-xl-2 { -ms-flex-order: 2; order: 2; } .order-xl-3 { -ms-flex-order: 3; order: 3; } .order-xl-4 { -ms-flex-order: 4; order: 4; } .order-xl-5 { -ms-flex-order: 5; order: 5; } .order-xl-6 { -ms-flex-order: 6; order: 6; } .order-xl-7 { -ms-flex-order: 7; order: 7; } .order-xl-8 { -ms-flex-order: 8; order: 8; } .order-xl-9 { -ms-flex-order: 9; order: 9; } .order-xl-10 { -ms-flex-order: 10; order: 10; } .order-xl-11 { -ms-flex-order: 11; order: 11; } .order-xl-12 { -ms-flex-order: 12; order: 12; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.333333%; } .offset-xl-2 { margin-left: 16.666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.333333%; } .offset-xl-5 { margin-left: 41.666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.333333%; } .offset-xl-8 { margin-left: 66.666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.333333%; } .offset-xl-11 { margin-left: 91.666667%; } } .table { width: 100%; margin-bottom: 1rem; color: #212529; } .table th, .table td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #dee2e6; } .table thead th { vertical-align: bottom; border-bottom: 2px solid #dee2e6; } .table tbody + tbody { border-top: 2px solid #dee2e6; } .table-sm th, .table-sm td { padding: 0.3rem; } .table-bordered { border: 1px solid #dee2e6; } .table-bordered th, .table-bordered td { border: 1px solid #dee2e6; } .table-bordered thead th, .table-bordered thead td { border-bottom-width: 2px; } .table-borderless th, .table-borderless td, .table-borderless thead th, .table-borderless tbody + tbody { border: 0; } .table-striped tbody tr:nth-of-type(odd) { background-color: rgba(0, 0, 0, 0.05); } .table-hover tbody tr:hover { color: #212529; background-color: rgba(0, 0, 0, 0.075); } .table-primary, .table-primary > th, .table-primary > td { background-color: #b8daff; } .table-primary th, .table-primary td, .table-primary thead th, .table-primary tbody + tbody { border-color: #7abaff; } .table-hover .table-primary:hover { background-color: #9fcdff; } .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { background-color: #9fcdff; } .table-secondary, .table-secondary > th, .table-secondary > td { background-color: #d6d8db; } .table-secondary th, .table-secondary td, .table-secondary thead th, .table-secondary tbody + tbody { border-color: #b3b7bb; } .table-hover .table-secondary:hover { background-color: #c8cbcf; } .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { background-color: #c8cbcf; } .table-success, .table-success > th, .table-success > td { background-color: #c3e6cb; } .table-success th, .table-success td, .table-success thead th, .table-success tbody + tbody { border-color: #8fd19e; } .table-hover .table-success:hover { background-color: #b1dfbb; } .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { background-color: #b1dfbb; } .table-info, .table-info > th, .table-info > td { background-color: #bee5eb; } .table-info th, .table-info td, .table-info thead th, .table-info tbody + tbody { border-color: #86cfda; } .table-hover .table-info:hover { background-color: #abdde5; } .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { background-color: #abdde5; } .table-warning, .table-warning > th, .table-warning > td { background-color: #ffeeba; } .table-warning th, .table-warning td, .table-warning thead th, .table-warning tbody + tbody { border-color: #ffdf7e; } .table-hover .table-warning:hover { background-color: #ffe8a1; } .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { background-color: #ffe8a1; } .table-danger, .table-danger > th, .table-danger > td { background-color: #f5c6cb; } .table-danger th, .table-danger td, .table-danger thead th, .table-danger tbody + tbody { border-color: #ed969e; } .table-hover .table-danger:hover { background-color: #f1b0b7; } .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { background-color: #f1b0b7; } .table-light, .table-light > th, .table-light > td { background-color: #fdfdfe; } .table-light th, .table-light td, .table-light thead th, .table-light tbody + tbody { border-color: #fbfcfc; } .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { background-color: #ececf6; } .table-dark, .table-dark > th, .table-dark > td { background-color: #c6c8ca; } .table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody { border-color: #95999c; } .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { background-color: #b9bbbe; } .table-active, .table-active > th, .table-active > td { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover > td, .table-hover .table-active:hover > th { background-color: rgba(0, 0, 0, 0.075); } .table .thead-dark th { color: #fff; background-color: #343a40; border-color: #454d55; } .table .thead-light th { color: #495057; background-color: #e9ecef; border-color: #dee2e6; } .table-dark { color: #fff; background-color: #343a40; } .table-dark th, .table-dark td, .table-dark thead th { border-color: #454d55; } .table-dark.table-bordered { border: 0; } .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-dark.table-hover tbody tr:hover { color: #fff; background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 575.98px) { .table-responsive-sm { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-sm > .table-bordered { border: 0; } } @media (max-width: 767.98px) { .table-responsive-md { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-md > .table-bordered { border: 0; } } @media (max-width: 991.98px) { .table-responsive-lg { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-lg > .table-bordered { border: 0; } } @media (max-width: 1199.98px) { .table-responsive-xl { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-xl > .table-bordered { border: 0; } } .table-responsive { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive > .table-bordered { border: 0; } .form-control { display: block; width: 100%; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; background-clip: padding-box; border: 1px solid #ced4da; border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { background-color: transparent; border: 0; } .form-control:focus { color: #495057; background-color: #fff; border-color: #80bdff; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .form-control::-webkit-input-placeholder { color: #6c757d; opacity: 1; } .form-control::-moz-placeholder { color: #6c757d; opacity: 1; } .form-control:-ms-input-placeholder { color: #6c757d; opacity: 1; } .form-control::-ms-input-placeholder { color: #6c757d; opacity: 1; } .form-control::placeholder { color: #6c757d; opacity: 1; } .form-control:disabled, .form-control[readonly] { background-color: #e9ecef; opacity: 1; } select.form-control:focus::-ms-value { color: #495057; background-color: #fff; } .form-control-file, .form-control-range { display: block; width: 100%; } .col-form-label { padding-top: calc(0.375rem + 1px); padding-bottom: calc(0.375rem + 1px); margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { padding-top: calc(0.5rem + 1px); padding-bottom: calc(0.5rem + 1px); font-size: 1.25rem; line-height: 1.5; } .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.875rem; line-height: 1.5; } .form-control-plaintext { display: block; width: 100%; padding-top: 0.375rem; padding-bottom: 0.375rem; margin-bottom: 0; line-height: 1.5; color: #212529; background-color: transparent; border: solid transparent; border-width: 1px 0; } .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { padding-right: 0; padding-left: 0; } .form-control-sm { height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } select.form-control[size], select.form-control[multiple] { height: auto; } textarea.form-control { height: auto; } .form-group { margin-bottom: 1rem; } .form-text { display: block; margin-top: 0.25rem; } .form-row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -5px; margin-left: -5px; } .form-row > .col, .form-row > [class*="col-"] { padding-right: 5px; padding-left: 5px; } .form-check { position: relative; display: block; padding-left: 1.25rem; } .form-check-input { position: absolute; margin-top: 0.3rem; margin-left: -1.25rem; } .form-check-input:disabled ~ .form-check-label { color: #6c757d; } .form-check-label { margin-bottom: 0; } .form-check-inline { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: center; align-items: center; padding-left: 0; margin-right: 0.75rem; } .form-check-inline .form-check-input { position: static; margin-top: 0; margin-right: 0.3125rem; margin-left: 0; } .valid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 80%; color: #28a745; } .valid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: .1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; background-color: rgba(40, 167, 69, 0.9); border-radius: 0.25rem; } .was-validated .form-control:valid, .form-control.is-valid { border-color: #28a745; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: center right calc(0.375em + 0.1875rem); background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, .form-control.is-valid ~ .valid-tooltip { display: block; } .was-validated textarea.form-control:valid, textarea.form-control.is-valid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .custom-select:valid, .custom-select.is-valid { border-color: #28a745; padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .custom-select:valid ~ .valid-feedback, .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip { display: block; } .was-validated .form-control-file:valid ~ .valid-feedback, .was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, .form-control-file.is-valid ~ .valid-tooltip { display: block; } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #28a745; } .was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip { display: block; } .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #28a745; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { border-color: #28a745; } .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, .custom-control-input.is-valid ~ .valid-tooltip { display: block; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { border-color: #34ce57; background-color: #34ce57; } .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { border-color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #28a745; } .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, .custom-file-input.is-valid ~ .valid-tooltip { display: block; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 80%; color: #dc3545; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: .1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } .was-validated .form-control:invalid, .form-control.is-invalid { border-color: #dc3545; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); background-repeat: no-repeat; background-position: center right calc(0.375em + 0.1875rem); background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip { display: block; } .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .custom-select:invalid, .custom-select.is-invalid { border-color: #dc3545; padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .custom-select:invalid ~ .invalid-feedback, .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-control-file:invalid ~ .invalid-feedback, .was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, .form-control-file.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #dc3545; } .was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #dc3545; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { border-color: #dc3545; } .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, .custom-control-input.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { border-color: #e4606d; background-color: #e4606d; } .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, .custom-file-input.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .form-inline { display: -ms-flexbox; display: flex; -ms-flex-flow: row wrap; flex-flow: row wrap; -ms-flex-align: center; align-items: center; } .form-inline .form-check { width: 100%; } @media (min-width: 576px) { .form-inline label { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; margin-bottom: 0; } .form-inline .form-group { display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; -ms-flex-flow: row wrap; flex-flow: row wrap; -ms-flex-align: center; align-items: center; margin-bottom: 0; } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } .form-inline .form-control-plaintext { display: inline-block; } .form-inline .input-group, .form-inline .custom-select { width: auto; } .form-inline .form-check { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; width: auto; padding-left: 0; } .form-inline .form-check-input { position: relative; -ms-flex-negative: 0; flex-shrink: 0; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } .form-inline .custom-control { -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; } .form-inline .custom-control-label { margin-bottom: 0; } } .btn { display: inline-block; font-weight: 400; color: #212529; text-align: center; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; line-height: 1.5; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } .btn:hover { color: #212529; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .btn.disabled, .btn:disabled { opacity: 0.65; } a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; } .btn-primary { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-primary:hover { color: #fff; background-color: #0069d9; border-color: #0062cc; } .btn-primary:focus, .btn-primary.focus { box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #0062cc; border-color: #005cbf; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); } .btn-secondary { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-secondary:hover { color: #fff; background-color: #5a6268; border-color: #545b62; } .btn-secondary:focus, .btn-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle { color: #fff; background-color: #545b62; border-color: #4e555b; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); } .btn-success { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-success:hover { color: #fff; background-color: #218838; border-color: #1e7e34; } .btn-success:focus, .btn-success.focus { box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #1e7e34; border-color: #1c7430; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } .btn-info { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-info:hover { color: #fff; background-color: #138496; border-color: #117a8b; } .btn-info:focus, .btn-info.focus { box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle { color: #fff; background-color: #117a8b; border-color: #10707f; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } .btn-warning { color: #212529; background-color: #ffc107; border-color: #ffc107; } .btn-warning:hover { color: #212529; background-color: #e0a800; border-color: #d39e00; } .btn-warning:focus, .btn-warning.focus { box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #212529; background-color: #ffc107; border-color: #ffc107; } .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle { color: #212529; background-color: #d39e00; border-color: #c69500; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } .btn-danger { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-danger:hover { color: #fff; background-color: #c82333; border-color: #bd2130; } .btn-danger:focus, .btn-danger.focus { box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #bd2130; border-color: #b21f2d; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } .btn-light { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:hover { color: #212529; background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle { color: #212529; background-color: #dae0e5; border-color: #d3d9df; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-dark { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-dark:hover { color: #fff; background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #1d2124; border-color: #171a1d; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-outline-primary { color: #007bff; border-color: #007bff; } .btn-outline-primary:hover { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-outline-primary:focus, .btn-outline-primary.focus { box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); } .btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #007bff; background-color: transparent; } .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, .show > .btn-outline-primary.dropdown-toggle { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); } .btn-outline-secondary { color: #6c757d; border-color: #6c757d; } .btn-outline-secondary:hover { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); } .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #6c757d; background-color: transparent; } .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, .show > .btn-outline-secondary.dropdown-toggle { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); } .btn-outline-success { color: #28a745; border-color: #28a745; } .btn-outline-success:hover { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-outline-success:focus, .btn-outline-success.focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } .btn-outline-success.disabled, .btn-outline-success:disabled { color: #28a745; background-color: transparent; } .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, .show > .btn-outline-success.dropdown-toggle { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } .btn-outline-info { color: #17a2b8; border-color: #17a2b8; } .btn-outline-info:hover { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } .btn-outline-info.disabled, .btn-outline-info:disabled { color: #17a2b8; background-color: transparent; } .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, .show > .btn-outline-info.dropdown-toggle { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } .btn-outline-warning { color: #ffc107; border-color: #ffc107; } .btn-outline-warning:hover { color: #212529; background-color: #ffc107; border-color: #ffc107; } .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #ffc107; background-color: transparent; } .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, .show > .btn-outline-warning.dropdown-toggle { color: #212529; background-color: #ffc107; border-color: #ffc107; } .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } .btn-outline-danger { color: #dc3545; border-color: #dc3545; } .btn-outline-danger:hover { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-outline-danger:focus, .btn-outline-danger.focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } .btn-outline-danger.disabled, .btn-outline-danger:disabled { color: #dc3545; background-color: transparent; } .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, .show > .btn-outline-danger.dropdown-toggle { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } .btn-outline-light { color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:hover { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:focus, .btn-outline-light.focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .btn-outline-light.disabled, .btn-outline-light:disabled { color: #f8f9fa; background-color: transparent; } .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, .show > .btn-outline-light.dropdown-toggle { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .btn-outline-dark { color: #343a40; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-outline-dark:focus, .btn-outline-dark.focus { box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #343a40; background-color: transparent; } .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, .show > .btn-outline-dark.dropdown-toggle { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .btn-link { font-weight: 400; color: #007bff; text-decoration: none; } .btn-link:hover { color: #0056b3; text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; box-shadow: none; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; pointer-events: none; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .btn-block { display: block; width: 100%; } .btn-block + .btn-block { margin-top: 0.5rem; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .fade { transition: opacity 0.15s linear; } @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { opacity: 0; } .collapse:not(.show) { display: none; } .collapsing { position: relative; height: 0; overflow: hidden; transition: height 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } .dropup, .dropright, .dropdown, .dropleft { position: relative; } .dropdown-toggle { white-space: nowrap; } .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-bottom: 0; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 10rem; padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; color: #212529; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .dropdown-menu-left { right: auto; left: 0; } .dropdown-menu-right { right: 0; left: auto; } @media (min-width: 576px) { .dropdown-menu-sm-left { right: auto; left: 0; } .dropdown-menu-sm-right { right: 0; left: auto; } } @media (min-width: 768px) { .dropdown-menu-md-left { right: auto; left: 0; } .dropdown-menu-md-right { right: 0; left: auto; } } @media (min-width: 992px) { .dropdown-menu-lg-left { right: auto; left: 0; } .dropdown-menu-lg-right { right: 0; left: auto; } } @media (min-width: 1200px) { .dropdown-menu-xl-left { right: auto; left: 0; } .dropdown-menu-xl-right { right: 0; left: auto; } } .dropup .dropdown-menu { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0; border-right: 0.3em solid transparent; border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } .dropup .dropdown-toggle:empty::after { margin-left: 0; } .dropright .dropdown-menu { top: 0; right: auto; left: 100%; margin-top: 0; margin-left: 0.125rem; } .dropright .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0; border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } .dropright .dropdown-toggle:empty::after { margin-left: 0; } .dropright .dropdown-toggle::after { vertical-align: 0; } .dropleft .dropdown-menu { top: 0; right: 100%; left: auto; margin-top: 0; margin-right: 0.125rem; } .dropleft .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } .dropleft .dropdown-toggle::after { display: none; } .dropleft .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } .dropleft .dropdown-toggle:empty::after { margin-left: 0; } .dropleft .dropdown-toggle::before { vertical-align: 0; } .dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { right: auto; bottom: auto; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: 1px solid #e9ecef; } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1.5rem; clear: both; font-weight: 400; color: #212529; text-align: inherit; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #16181b; text-decoration: none; background-color: #f8f9fa; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #007bff; } .dropdown-item.disabled, .dropdown-item:disabled { color: #6c757d; pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1.5rem; margin-bottom: 0; font-size: 0.875rem; color: #6c757d; white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1.5rem; color: #212529; } .btn-group, .btn-group-vertical { position: relative; display: -ms-inline-flexbox; display: inline-flex; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; -ms-flex: 1 1 auto; flex: 1 1 auto; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } .btn-toolbar { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: start; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) { margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropright .dropdown-toggle-split::after { margin-left: 0; } .dropleft .dropdown-toggle-split::before { margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { -ms-flex-direction: column; flex-direction: column; -ms-flex-align: start; align-items: flex-start; -ms-flex-pack: center; justify-content: center; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group { width: 100%; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) { margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn { margin-bottom: 0; } .btn-group-toggle > .btn input[type="radio"], .btn-group-toggle > .btn input[type="checkbox"], .btn-group-toggle > .btn-group > .btn input[type="radio"], .btn-group-toggle > .btn-group > .btn input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .input-group { position: relative; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: stretch; align-items: stretch; width: 100%; } .input-group > .form-control, .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; margin-bottom: 0; } .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, .input-group > .form-control-plaintext + .form-control, .input-group > .form-control-plaintext + .custom-select, .input-group > .form-control-plaintext + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, .input-group > .custom-file + .form-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .custom-file { margin-left: -1px; } .input-group > .form-control:focus, .input-group > .custom-select:focus, .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { z-index: 3; } .input-group > .custom-file .custom-file-input:focus { z-index: 4; } .input-group > .form-control:not(:last-child), .input-group > .custom-select:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group > .custom-file { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; } .input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .custom-file:not(:first-child) .custom-file-label { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group-prepend, .input-group-append { display: -ms-flexbox; display: flex; } .input-group-prepend .btn, .input-group-append .btn { position: relative; z-index: 2; } .input-group-prepend .btn:focus, .input-group-append .btn:focus { z-index: 3; } .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-append .btn + .btn, .input-group-append .btn + .input-group-text, .input-group-append .input-group-text + .input-group-text, .input-group-append .input-group-text + .btn { margin-left: -1px; } .input-group-prepend { margin-right: -1px; } .input-group-append { margin-left: -1px; } .input-group-text { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; padding: 0.375rem 0.75rem; margin-bottom: 0; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #495057; text-align: center; white-space: nowrap; background-color: #e9ecef; border: 1px solid #ced4da; border-radius: 0.25rem; } .input-group-text input[type="radio"], .input-group-text input[type="checkbox"] { margin-top: 0; } .input-group-lg > .form-control:not(textarea), .input-group-lg > .custom-select { height: calc(1.5em + 1rem + 2px); } .input-group-lg > .form-control, .input-group-lg > .custom-select, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } .input-group-sm > .form-control:not(textarea), .input-group-sm > .custom-select { height: calc(1.5em + 0.5rem + 2px); } .input-group-sm > .form-control, .input-group-sm > .custom-select, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .input-group-lg > .custom-select, .input-group-sm > .custom-select { padding-right: 1.75rem; } .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, .input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .custom-control { position: relative; display: block; min-height: 1.5rem; padding-left: 1.5rem; } .custom-control-inline { display: -ms-inline-flexbox; display: inline-flex; margin-right: 1rem; } .custom-control-input { position: absolute; z-index: -1; opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; border-color: #007bff; background-color: #007bff; } .custom-control-input:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { border-color: #80bdff; } .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; background-color: #b3d7ff; border-color: #b3d7ff; } .custom-control-input:disabled ~ .custom-control-label { color: #6c757d; } .custom-control-input:disabled ~ .custom-control-label::before { background-color: #e9ecef; } .custom-control-label { position: relative; margin-bottom: 0; vertical-align: top; } .custom-control-label::before { position: absolute; top: 0.25rem; left: -1.5rem; display: block; width: 1rem; height: 1rem; pointer-events: none; content: ""; background-color: #fff; border: #adb5bd solid 1px; } .custom-control-label::after { position: absolute; top: 0.25rem; left: -1.5rem; display: block; width: 1rem; height: 1rem; content: ""; background: no-repeat 50% / 50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.25rem; } .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { border-color: #007bff; background-color: #007bff; } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } .custom-radio .custom-control-label::before { border-radius: 50%; } .custom-radio .custom-control-input:checked ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } .custom-switch { padding-left: 2.25rem; } .custom-switch .custom-control-label::before { left: -2.25rem; width: 1.75rem; pointer-events: all; border-radius: 0.5rem; } .custom-switch .custom-control-label::after { top: calc(0.25rem + 2px); left: calc(-2.25rem + 2px); width: calc(1rem - 4px); height: calc(1rem - 4px); background-color: #adb5bd; border-radius: 0.5rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .custom-switch .custom-control-label::after { transition: none; } } .custom-switch .custom-control-input:checked ~ .custom-control-label::after { background-color: #fff; -webkit-transform: translateX(0.75rem); transform: translateX(0.75rem); } .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } .custom-select { display: inline-block; width: 100%; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #495057; vertical-align: middle; background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .custom-select:focus { border-color: #80bdff; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-select:focus::-ms-value { color: #495057; background-color: #fff; } .custom-select[multiple], .custom-select[size]:not([size="1"]) { height: auto; padding-right: 0.75rem; background-image: none; } .custom-select:disabled { color: #6c757d; background-color: #e9ecef; } .custom-select::-ms-expand { display: none; } .custom-select-sm { height: calc(1.5em + 0.5rem + 2px); padding-top: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.5rem; font-size: 0.875rem; } .custom-select-lg { height: calc(1.5em + 1rem + 2px); padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; font-size: 1.25rem; } .custom-file { position: relative; display: inline-block; width: 100%; height: calc(1.5em + 0.75rem + 2px); margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; height: calc(1.5em + 0.75rem + 2px); margin: 0; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-file-input:disabled ~ .custom-file-label { background-color: #e9ecef; } .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } .custom-file-input ~ .custom-file-label[data-browse]::after { content: attr(data-browse); } .custom-file-label { position: absolute; top: 0; right: 0; left: 0; z-index: 1; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; } .custom-file-label::after { position: absolute; top: 0; right: 0; bottom: 0; z-index: 3; display: block; height: calc(1.5em + 0.75rem); padding: 0.375rem 0.75rem; line-height: 1.5; color: #495057; content: "Browse"; background-color: #e9ecef; border-left: inherit; border-radius: 0 0.25rem 0.25rem 0; } .custom-range { width: 100%; height: calc(1rem + 0.4rem); padding: 0; background-color: transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .custom-range:focus { outline: none; } .custom-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-range:focus::-ms-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-range::-moz-focus-outer { border: 0; } .custom-range::-webkit-slider-thumb { width: 1rem; height: 1rem; margin-top: -0.25rem; background-color: #007bff; border: 0; border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -webkit-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { transition: none; } } .custom-range::-webkit-slider-thumb:active { background-color: #b3d7ff; } .custom-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .custom-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #007bff; border: 0; border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -moz-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { transition: none; } } .custom-range::-moz-range-thumb:active { background-color: #b3d7ff; } .custom-range::-moz-range-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .custom-range::-ms-thumb { width: 1rem; height: 1rem; margin-top: 0; margin-right: 0.2rem; margin-left: 0.2rem; background-color: #007bff; border: 0; border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { transition: none; } } .custom-range::-ms-thumb:active { background-color: #b3d7ff; } .custom-range::-ms-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: transparent; border-color: transparent; border-width: 0.5rem; } .custom-range::-ms-fill-lower { background-color: #dee2e6; border-radius: 1rem; } .custom-range::-ms-fill-upper { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } .custom-range:disabled::-webkit-slider-thumb { background-color: #adb5bd; } .custom-range:disabled::-webkit-slider-runnable-track { cursor: default; } .custom-range:disabled::-moz-range-thumb { background-color: #adb5bd; } .custom-range:disabled::-moz-range-track { cursor: default; } .custom-range:disabled::-ms-thumb { background-color: #adb5bd; } .custom-control-label::before, .custom-file-label, .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .custom-control-label::before, .custom-file-label, .custom-select { transition: none; } } .nav { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; } .nav-link:hover, .nav-link:focus { text-decoration: none; } .nav-link.disabled { color: #6c757d; pointer-events: none; cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } .nav-tabs .nav-item { margin-bottom: -1px; } .nav-tabs .nav-link { border: 1px solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: #e9ecef #e9ecef #dee2e6; } .nav-tabs .nav-link.disabled { color: #6c757d; background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: #495057; background-color: #fff; border-color: #dee2e6 #dee2e6 #fff; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { border-radius: 0.25rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #007bff; } .nav-fill .nav-item { -ms-flex: 1 1 auto; flex: 1 1 auto; text-align: center; } .nav-justified .nav-item { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; text-align: center; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: center; align-items: center; -ms-flex-pack: justify; justify-content: space-between; padding: 0.5rem 1rem; } .navbar > .container, .navbar > .container-fluid { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: center; align-items: center; -ms-flex-pack: justify; justify-content: space-between; } .navbar-brand { display: inline-block; padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; line-height: inherit; white-space: nowrap; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } .navbar-nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; float: none; } .navbar-text { display: inline-block; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { -ms-flex-preferred-size: 100%; flex-basis: 100%; -ms-flex-positive: 1; flex-grow: 1; -ms-flex-align: center; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background-color: transparent; border: 1px solid transparent; border-radius: 0.25rem; } .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; content: ""; background: no-repeat center center; background-size: 100% 100%; } @media (max-width: 575.98px) { .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 576px) { .navbar-expand-sm { -ms-flex-flow: row nowrap; flex-flow: row nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-sm .navbar-collapse { display: -ms-flexbox !important; display: flex !important; -ms-flex-preferred-size: auto; flex-basis: auto; } .navbar-expand-sm .navbar-toggler { display: none; } } @media (max-width: 767.98px) { .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 768px) { .navbar-expand-md { -ms-flex-flow: row nowrap; flex-flow: row nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-md .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-md .navbar-collapse { display: -ms-flexbox !important; display: flex !important; -ms-flex-preferred-size: auto; flex-basis: auto; } .navbar-expand-md .navbar-toggler { display: none; } } @media (max-width: 991.98px) { .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 992px) { .navbar-expand-lg { -ms-flex-flow: row nowrap; flex-flow: row nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-lg .navbar-collapse { display: -ms-flexbox !important; display: flex !important; -ms-flex-preferred-size: auto; flex-basis: auto; } .navbar-expand-lg .navbar-toggler { display: none; } } @media (max-width: 1199.98px) { .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 1200px) { .navbar-expand-xl { -ms-flex-flow: row nowrap; flex-flow: row nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-xl .navbar-collapse { display: -ms-flexbox !important; display: flex !important; -ms-flex-preferred-size: auto; flex-basis: auto; } .navbar-expand-xl .navbar-toggler { display: none; } } .navbar-expand { -ms-flex-flow: row nowrap; flex-flow: row nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand > .container, .navbar-expand > .container-fluid { padding-right: 0; padding-left: 0; } .navbar-expand .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand > .container, .navbar-expand > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand .navbar-collapse { display: -ms-flexbox !important; display: flex !important; -ms-flex-preferred-size: auto; flex-basis: auto; } .navbar-expand .navbar-toggler { display: none; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.5); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.5); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } .navbar-light .navbar-text a { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } .navbar-dark .navbar-brand { color: #fff; } .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { color: #fff; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.5); } .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active { color: #fff; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.5); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } .navbar-dark .navbar-text a { color: #fff; } .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: #fff; } .card { position: relative; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; } .card > hr { margin-right: 0; margin-left: 0; } .card > .list-group:first-child .list-group-item:first-child { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .card > .list-group:last-child .list-group-item:last-child { border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 1.25rem; } .card-title { margin-bottom: 0.75rem; } .card-subtitle { margin-top: -0.375rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link:hover { text-decoration: none; } .card-link + .card-link { margin-left: 1.25rem; } .card-header { padding: 0.75rem 1.25rem; margin-bottom: 0; background-color: rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.125); } .card-header:first-child { border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } .card-header + .list-group .list-group-item:first-child { border-top: 0; } .card-footer { padding: 0.75rem 1.25rem; background-color: rgba(0, 0, 0, 0.03); border-top: 1px solid rgba(0, 0, 0, 0.125); } .card-footer:last-child { border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } .card-header-tabs { margin-right: -0.625rem; margin-bottom: -0.75rem; margin-left: -0.625rem; border-bottom: 0; } .card-header-pills { margin-right: -0.625rem; margin-left: -0.625rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1.25rem; } .card-img { width: 100%; border-radius: calc(0.25rem - 1px); } .card-img-top { width: 100%; border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card-img-bottom { width: 100%; border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } .card-deck { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .card-deck .card { margin-bottom: 15px; } @media (min-width: 576px) { .card-deck { -ms-flex-flow: row wrap; flex-flow: row wrap; margin-right: -15px; margin-left: -15px; } .card-deck .card { display: -ms-flexbox; display: flex; -ms-flex: 1 0 0%; flex: 1 0 0%; -ms-flex-direction: column; flex-direction: column; margin-right: 15px; margin-bottom: 0; margin-left: 15px; } } .card-group { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .card-group > .card { margin-bottom: 15px; } @media (min-width: 576px) { .card-group { -ms-flex-flow: row wrap; flex-flow: row wrap; } .card-group > .card { -ms-flex: 1 0 0%; flex: 1 0 0%; margin-bottom: 0; } .card-group > .card + .card { margin-left: 0; border-left: 0; } .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-columns { -webkit-column-count: 3; -moz-column-count: 3; column-count: 3; -webkit-column-gap: 1.25rem; -moz-column-gap: 1.25rem; column-gap: 1.25rem; orphans: 1; widows: 1; } .card-columns .card { display: inline-block; width: 100%; } } .accordion > .card { overflow: hidden; } .accordion > .card:not(:first-of-type) .card-header:first-child { border-radius: 0; } .accordion > .card:not(:first-of-type):not(:last-of-type) { border-bottom: 0; border-radius: 0; } .accordion > .card:first-of-type { border-bottom: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .accordion > .card:last-of-type { border-top-left-radius: 0; border-top-right-radius: 0; } .accordion > .card .card-header { margin-bottom: -1px; } .breadcrumb { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; padding: 0.75rem 1rem; margin-bottom: 1rem; list-style: none; background-color: #e9ecef; border-radius: 0.25rem; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: 0.5rem; color: #6c757d; content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: none; } .breadcrumb-item.active { color: #6c757d; } .pagination { display: -ms-flexbox; display: flex; padding-left: 0; list-style: none; border-radius: 0.25rem; } .page-link { position: relative; display: block; padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.25; color: #007bff; background-color: #fff; border: 1px solid #dee2e6; } .page-link:hover { z-index: 2; color: #0056b3; text-decoration: none; background-color: #e9ecef; border-color: #dee2e6; } .page-link:focus { z-index: 2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .page-item:first-child .page-link { margin-left: 0; border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .page-item.active .page-link { z-index: 1; color: #fff; background-color: #007bff; border-color: #007bff; } .page-item.disabled .page-link { color: #6c757d; pointer-events: none; cursor: auto; background-color: #fff; border-color: #dee2e6; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; line-height: 1.5; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.25em 0.4em; font-size: 75%; font-weight: 700; line-height: 1; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .badge { transition: none; } } a.badge:hover, a.badge:focus { text-decoration: none; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .badge-pill { padding-right: 0.6em; padding-left: 0.6em; border-radius: 10rem; } .badge-primary { color: #fff; background-color: #007bff; } a.badge-primary:hover, a.badge-primary:focus { color: #fff; background-color: #0062cc; } a.badge-primary:focus, a.badge-primary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); } .badge-secondary { color: #fff; background-color: #6c757d; } a.badge-secondary:hover, a.badge-secondary:focus { color: #fff; background-color: #545b62; } a.badge-secondary:focus, a.badge-secondary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); } .badge-success { color: #fff; background-color: #28a745; } a.badge-success:hover, a.badge-success:focus { color: #fff; background-color: #1e7e34; } a.badge-success:focus, a.badge-success.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } .badge-info { color: #fff; background-color: #17a2b8; } a.badge-info:hover, a.badge-info:focus { color: #fff; background-color: #117a8b; } a.badge-info:focus, a.badge-info.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } .badge-warning { color: #212529; background-color: #ffc107; } a.badge-warning:hover, a.badge-warning:focus { color: #212529; background-color: #d39e00; } a.badge-warning:focus, a.badge-warning.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } .badge-danger { color: #fff; background-color: #dc3545; } a.badge-danger:hover, a.badge-danger:focus { color: #fff; background-color: #bd2130; } a.badge-danger:focus, a.badge-danger.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } .badge-light { color: #212529; background-color: #f8f9fa; } a.badge-light:hover, a.badge-light:focus { color: #212529; background-color: #dae0e5; } a.badge-light:focus, a.badge-light.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .badge-dark { color: #fff; background-color: #343a40; } a.badge-dark:hover, a.badge-dark:focus { color: #fff; background-color: #1d2124; } a.badge-dark:focus, a.badge-dark.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; background-color: #e9ecef; border-radius: 0.3rem; } @media (min-width: 576px) { .jumbotron { padding: 4rem 2rem; } } .jumbotron-fluid { padding-right: 0; padding-left: 0; border-radius: 0; } .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 4rem; } .alert-dismissible .close { position: absolute; top: 0; right: 0; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #004085; background-color: #cce5ff; border-color: #b8daff; } .alert-primary hr { border-top-color: #9fcdff; } .alert-primary .alert-link { color: #002752; } .alert-secondary { color: #383d41; background-color: #e2e3e5; border-color: #d6d8db; } .alert-secondary hr { border-top-color: #c8cbcf; } .alert-secondary .alert-link { color: #202326; } .alert-success { color: #155724; background-color: #d4edda; border-color: #c3e6cb; } .alert-success hr { border-top-color: #b1dfbb; } .alert-success .alert-link { color: #0b2e13; } .alert-info { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; } .alert-info hr { border-top-color: #abdde5; } .alert-info .alert-link { color: #062c33; } .alert-warning { color: #856404; background-color: #fff3cd; border-color: #ffeeba; } .alert-warning hr { border-top-color: #ffe8a1; } .alert-warning .alert-link { color: #533f03; } .alert-danger { color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; } .alert-danger hr { border-top-color: #f1b0b7; } .alert-danger .alert-link { color: #491217; } .alert-light { color: #818182; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686868; } .alert-dark { color: #1b1e21; background-color: #d6d8d9; border-color: #c6c8ca; } .alert-dark hr { border-top-color: #b9bbbe; } .alert-dark .alert-link { color: #040505; } @-webkit-keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } .progress { display: -ms-flexbox; display: flex; height: 1rem; overflow: hidden; font-size: 0.75rem; background-color: #e9ecef; border-radius: 0.25rem; } .progress-bar { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: center; justify-content: center; color: #fff; text-align: center; white-space: nowrap; background-color: #007bff; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite; } @media (prefers-reduced-motion: reduce) { .progress-bar-animated { -webkit-animation: none; animation: none; } } .media { display: -ms-flexbox; display: flex; -ms-flex-align: start; align-items: flex-start; } .media-body { -ms-flex: 1; flex: 1; } .list-group { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; padding-left: 0; margin-bottom: 0; } .list-group-item-action { width: 100%; color: #495057; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { z-index: 1; color: #495057; text-decoration: none; background-color: #f8f9fa; } .list-group-item-action:active { color: #212529; background-color: #e9ecef; } .list-group-item { position: relative; display: block; padding: 0.75rem 1.25rem; margin-bottom: -1px; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #007bff; border-color: #007bff; } .list-group-horizontal { -ms-flex-direction: row; flex-direction: row; } .list-group-horizontal .list-group-item { margin-right: -1px; margin-bottom: 0; } .list-group-horizontal .list-group-item:first-child { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal .list-group-item:last-child { margin-right: 0; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0; } @media (min-width: 576px) { .list-group-horizontal-sm { -ms-flex-direction: row; flex-direction: row; } .list-group-horizontal-sm .list-group-item { margin-right: -1px; margin-bottom: 0; } .list-group-horizontal-sm .list-group-item:first-child { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-sm .list-group-item:last-child { margin-right: 0; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0; } } @media (min-width: 768px) { .list-group-horizontal-md { -ms-flex-direction: row; flex-direction: row; } .list-group-horizontal-md .list-group-item { margin-right: -1px; margin-bottom: 0; } .list-group-horizontal-md .list-group-item:first-child { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-md .list-group-item:last-child { margin-right: 0; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0; } } @media (min-width: 992px) { .list-group-horizontal-lg { -ms-flex-direction: row; flex-direction: row; } .list-group-horizontal-lg .list-group-item { margin-right: -1px; margin-bottom: 0; } .list-group-horizontal-lg .list-group-item:first-child { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-lg .list-group-item:last-child { margin-right: 0; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0; } } @media (min-width: 1200px) { .list-group-horizontal-xl { -ms-flex-direction: row; flex-direction: row; } .list-group-horizontal-xl .list-group-item { margin-right: -1px; margin-bottom: 0; } .list-group-horizontal-xl .list-group-item:first-child { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xl .list-group-item:last-child { margin-right: 0; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0; } } .list-group-flush .list-group-item { border-right: 0; border-left: 0; border-radius: 0; } .list-group-flush .list-group-item:last-child { margin-bottom: -1px; } .list-group-flush:first-child .list-group-item:first-child { border-top: 0; } .list-group-flush:last-child .list-group-item:last-child { margin-bottom: 0; border-bottom: 0; } .list-group-item-primary { color: #004085; background-color: #b8daff; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #004085; background-color: #9fcdff; } .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #004085; border-color: #004085; } .list-group-item-secondary { color: #383d41; background-color: #d6d8db; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #383d41; background-color: #c8cbcf; } .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #383d41; border-color: #383d41; } .list-group-item-success { color: #155724; background-color: #c3e6cb; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #155724; background-color: #b1dfbb; } .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #155724; border-color: #155724; } .list-group-item-info { color: #0c5460; background-color: #bee5eb; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #0c5460; background-color: #abdde5; } .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #0c5460; border-color: #0c5460; } .list-group-item-warning { color: #856404; background-color: #ffeeba; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #856404; background-color: #ffe8a1; } .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #856404; border-color: #856404; } .list-group-item-danger { color: #721c24; background-color: #f5c6cb; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #721c24; background-color: #f1b0b7; } .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #721c24; border-color: #721c24; } .list-group-item-light { color: #818182; background-color: #fdfdfe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #818182; background-color: #ececf6; } .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #818182; border-color: #818182; } .list-group-item-dark { color: #1b1e21; background-color: #c6c8ca; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #1b1e21; background-color: #b9bbbe; } .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #1b1e21; border-color: #1b1e21; } .close { float: right; font-size: 1.5rem; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } .close:hover { color: #000; text-decoration: none; } .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { opacity: .75; } button.close { padding: 0; background-color: transparent; border: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none; } a.close.disabled { pointer-events: none; } .toast { max-width: 350px; overflow: hidden; font-size: 0.875rem; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); opacity: 0; border-radius: 0.25rem; } .toast:not(:last-child) { margin-bottom: 0.75rem; } .toast.showing { opacity: 1; } .toast.show { display: block; opacity: 1; } .toast.hide { display: none; } .toast-header { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; padding: 0.25rem 0.75rem; color: #6c757d; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .toast-body { padding: 0.75rem; } .modal-open { overflow: hidden; } .modal-open .modal { overflow-x: hidden; overflow-y: auto; } .modal { position: fixed; top: 0; left: 0; z-index: 1050; display: none; width: 100%; height: 100%; overflow: hidden; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: -webkit-transform 0.3s ease-out; transition: transform 0.3s ease-out; transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; -webkit-transform: translate(0, -50px); transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { -webkit-transform: none; transform: none; } .modal-dialog-scrollable { display: -ms-flexbox; display: flex; max-height: calc(100% - 1rem); } .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 1rem); overflow: hidden; } .modal-dialog-scrollable .modal-header, .modal-dialog-scrollable .modal-footer { -ms-flex-negative: 0; flex-shrink: 0; } .modal-dialog-scrollable .modal-body { overflow-y: auto; } .modal-dialog-centered { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; min-height: calc(100% - 1rem); } .modal-dialog-centered::before { display: block; height: calc(100vh - 1rem); content: ""; } .modal-dialog-centered.modal-dialog-scrollable { -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: center; justify-content: center; height: 100%; } .modal-dialog-centered.modal-dialog-scrollable .modal-content { max-height: none; } .modal-dialog-centered.modal-dialog-scrollable::before { content: none; } .modal-content { position: relative; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; left: 0; z-index: 1040; width: 100vw; height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: -ms-flexbox; display: flex; -ms-flex-align: start; align-items: flex-start; -ms-flex-pack: justify; justify-content: space-between; padding: 1rem 1rem; border-bottom: 1px solid #dee2e6; border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; } .modal-header .close { padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 1rem; } .modal-footer { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: end; justify-content: flex-end; padding: 1rem; border-top: 1px solid #dee2e6; border-bottom-right-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .modal-footer > :not(:first-child) { margin-left: .25rem; } .modal-footer > :not(:last-child) { margin-right: .25rem; } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-scrollable { max-height: calc(100% - 3.5rem); } .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 3.5rem); } .modal-dialog-centered { min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { height: calc(100vh - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg, .modal-xl { max-width: 800px; } } @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } .tooltip .arrow::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } .bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { padding: 0.4rem 0; } .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { bottom: 0; } .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { top: 0; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } .bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { padding: 0 0.4rem; } .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { left: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { right: 0; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } .bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { padding: 0.4rem 0; } .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { top: 0; } .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { bottom: 0; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } .bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { padding: 0 0.4rem; } .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { right: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { left: 0; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; } .tooltip-inner { max-width: 200px; padding: 0.25rem 0.5rem; color: #fff; text-align: center; background-color: #000; border-radius: 0.25rem; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: block; max-width: 276px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; margin: 0 0.3rem; } .popover .arrow::before, .popover .arrow::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } .bs-popover-top, .bs-popover-auto[x-placement^="top"] { margin-bottom: 0.5rem; } .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { bottom: calc((0.5rem + 1px) * -1); } .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { bottom: 1px; border-width: 0.5rem 0.5rem 0; border-top-color: #fff; } .bs-popover-right, .bs-popover-auto[x-placement^="right"] { margin-left: 0.5rem; } .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { left: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { left: 1px; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: #fff; } .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { margin-top: 0.5rem; } .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { top: calc((0.5rem + 1px) * -1); } .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { top: 1px; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 1rem; margin-left: -0.5rem; content: ""; border-bottom: 1px solid #f7f7f7; } .bs-popover-left, .bs-popover-auto[x-placement^="left"] { margin-right: 0.5rem; } .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { right: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { right: 1px; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: #fff; } .popover-header { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .popover-header:empty { display: none; } .popover-body { padding: 0.5rem 0.75rem; color: #212529; } .carousel { position: relative; } .carousel.pointer-event { -ms-touch-action: pan-y; touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner::after { display: block; clear: both; content: ""; } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: -webkit-transform 0.6s ease-in-out; transition: transform 0.6s ease-in-out; transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; } @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } .carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { -webkit-transform: translateX(100%); transform: translateX(100%); } .carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { -webkit-transform: translateX(-100%); transform: translateX(-100%); } .carousel-fade .carousel-item { opacity: 0; transition-property: opacity; -webkit-transform: none; transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { z-index: 0; opacity: 0; transition: 0s 0.6s opacity; } @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; width: 15%; color: #fff; text-align: center; opacity: 0.5; transition: opacity 0.15s ease; } @media (prefers-reduced-motion: reduce) { .carousel-control-prev, .carousel-control-next { transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; opacity: 0.9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 20px; height: 20px; background: no-repeat 50% / 100% 100%; } .carousel-control-prev-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 15; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; padding-left: 0; margin-right: 15%; margin-left: 15%; list-style: none; } .carousel-indicators li { box-sizing: content-box; -ms-flex: 0 1 auto; flex: 0 1 auto; width: 30px; height: 3px; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: #fff; background-clip: padding-box; border-top: 10px solid transparent; border-bottom: 10px solid transparent; opacity: .5; transition: opacity 0.6s ease; } @media (prefers-reduced-motion: reduce) { .carousel-indicators li { transition: none; } } .carousel-indicators .active { opacity: 1; } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; } @-webkit-keyframes spinner-border { to { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes spinner-border { to { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } .spinner-border { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; -webkit-animation: spinner-border .75s linear infinite; animation: spinner-border .75s linear infinite; } .spinner-border-sm { width: 1rem; height: 1rem; border-width: 0.2em; } @-webkit-keyframes spinner-grow { 0% { -webkit-transform: scale(0); transform: scale(0); } 50% { opacity: 1; } } @keyframes spinner-grow { 0% { -webkit-transform: scale(0); transform: scale(0); } 50% { opacity: 1; } } .spinner-grow { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; background-color: currentColor; border-radius: 50%; opacity: 0; -webkit-animation: spinner-grow .75s linear infinite; animation: spinner-grow .75s linear infinite; } .spinner-grow-sm { width: 1rem; height: 1rem; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .bg-primary { background-color: #007bff !important; } a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus { background-color: #0062cc !important; } .bg-secondary { background-color: #6c757d !important; } a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus { background-color: #545b62 !important; } .bg-success { background-color: #28a745 !important; } a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus { background-color: #1e7e34 !important; } .bg-info { background-color: #17a2b8 !important; } a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus { background-color: #117a8b !important; } .bg-warning { background-color: #ffc107 !important; } a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus { background-color: #d39e00 !important; } .bg-danger { background-color: #dc3545 !important; } a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus { background-color: #bd2130 !important; } .bg-light { background-color: #f8f9fa !important; } a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus { background-color: #dae0e5 !important; } .bg-dark { background-color: #343a40 !important; } a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus { background-color: #1d2124 !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .border { border: 1px solid #dee2e6 !important; } .border-top { border-top: 1px solid #dee2e6 !important; } .border-right { border-right: 1px solid #dee2e6 !important; } .border-bottom { border-bottom: 1px solid #dee2e6 !important; } .border-left { border-left: 1px solid #dee2e6 !important; } .border-0 { border: 0 !important; } .border-top-0 { border-top: 0 !important; } .border-right-0 { border-right: 0 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-left-0 { border-left: 0 !important; } .border-primary { border-color: #007bff !important; } .border-secondary { border-color: #6c757d !important; } .border-success { border-color: #28a745 !important; } .border-info { border-color: #17a2b8 !important; } .border-warning { border-color: #ffc107 !important; } .border-danger { border-color: #dc3545 !important; } .border-light { border-color: #f8f9fa !important; } .border-dark { border-color: #343a40 !important; } .border-white { border-color: #fff !important; } .rounded-sm { border-radius: 0.2rem !important; } .rounded { border-radius: 0.25rem !important; } .rounded-top { border-top-left-radius: 0.25rem !important; border-top-right-radius: 0.25rem !important; } .rounded-right { border-top-right-radius: 0.25rem !important; border-bottom-right-radius: 0.25rem !important; } .rounded-bottom { border-bottom-right-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-left { border-top-left-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-lg { border-radius: 0.3rem !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: 50rem !important; } .rounded-0 { border-radius: 0 !important; } .clearfix::after { display: block; clear: both; content: ""; } .d-none { display: none !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: -ms-flexbox !important; display: flex !important; } .d-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } @media (min-width: 576px) { .d-sm-none { display: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: -ms-flexbox !important; display: flex !important; } .d-sm-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 768px) { .d-md-none { display: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: -ms-flexbox !important; display: flex !important; } .d-md-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 992px) { .d-lg-none { display: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: -ms-flexbox !important; display: flex !important; } .d-lg-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 1200px) { .d-xl-none { display: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: -ms-flexbox !important; display: flex !important; } .d-xl-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media print { .d-print-none { display: none !important; } .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: -ms-flexbox !important; display: flex !important; } .d-print-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } .embed-responsive { position: relative; display: block; width: 100%; padding: 0; overflow: hidden; } .embed-responsive::before { display: block; content: ""; } .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0; } .embed-responsive-21by9::before { padding-top: 42.857143%; } .embed-responsive-16by9::before { padding-top: 56.25%; } .embed-responsive-4by3::before { padding-top: 75%; } .embed-responsive-1by1::before { padding-top: 100%; } .flex-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } @media (min-width: 576px) { .flex-sm-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-sm-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-sm-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-sm-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-sm-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-sm-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-sm-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-sm-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-sm-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-sm-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-sm-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-sm-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-sm-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-sm-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-sm-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-sm-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-sm-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-sm-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-sm-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-sm-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-sm-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-sm-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-sm-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-sm-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-sm-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-sm-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-sm-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-sm-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-sm-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-sm-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-sm-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-sm-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-sm-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 768px) { .flex-md-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-md-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-md-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-md-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-md-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-md-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-md-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-md-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-md-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-md-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-md-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-md-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-md-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-md-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-md-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-md-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-md-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-md-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-md-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-md-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-md-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-md-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-md-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-md-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-md-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-md-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-md-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-md-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-md-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-md-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-md-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-md-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-md-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-md-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 992px) { .flex-lg-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-lg-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-lg-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-lg-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-lg-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-lg-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-lg-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-lg-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-lg-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-lg-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-lg-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-lg-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-lg-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-lg-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-lg-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-lg-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-lg-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-lg-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-lg-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-lg-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-lg-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-lg-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-lg-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-lg-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-lg-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-lg-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-lg-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-lg-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-lg-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-lg-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-lg-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-lg-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-lg-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 1200px) { .flex-xl-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-xl-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-xl-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-xl-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-xl-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-xl-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .flex-xl-fill { -ms-flex: 1 1 auto !important; flex: 1 1 auto !important; } .flex-xl-grow-0 { -ms-flex-positive: 0 !important; flex-grow: 0 !important; } .flex-xl-grow-1 { -ms-flex-positive: 1 !important; flex-grow: 1 !important; } .flex-xl-shrink-0 { -ms-flex-negative: 0 !important; flex-shrink: 0 !important; } .flex-xl-shrink-1 { -ms-flex-negative: 1 !important; flex-shrink: 1 !important; } .justify-content-xl-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-xl-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-xl-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-xl-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-xl-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-xl-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-xl-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-xl-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-xl-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-xl-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-xl-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-xl-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-xl-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-xl-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-xl-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-xl-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-xl-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-xl-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-xl-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-xl-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-xl-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-xl-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } .float-left { float: left !important; } .float-right { float: right !important; } .float-none { float: none !important; } @media (min-width: 576px) { .float-sm-left { float: left !important; } .float-sm-right { float: right !important; } .float-sm-none { float: none !important; } } @media (min-width: 768px) { .float-md-left { float: left !important; } .float-md-right { float: right !important; } .float-md-none { float: none !important; } } @media (min-width: 992px) { .float-lg-left { float: left !important; } .float-lg-right { float: right !important; } .float-lg-none { float: none !important; } } @media (min-width: 1200px) { .float-xl-left { float: left !important; } .float-xl-right { float: right !important; } .float-xl-none { float: none !important; } } .overflow-auto { overflow: auto !important; } .overflow-hidden { overflow: hidden !important; } .position-static { position: static !important; } .position-relative { position: relative !important; } .position-absolute { position: absolute !important; } .position-fixed { position: fixed !important; } .position-sticky { position: -webkit-sticky !important; position: sticky !important; } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } @supports ((position: -webkit-sticky) or (position: sticky)) { .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; overflow: visible; clip: auto; white-space: normal; } .shadow-sm { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } .shadow { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } .shadow-none { box-shadow: none !important; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .w-auto { width: auto !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .h-auto { height: auto !important; } .mw-100 { max-width: 100% !important; } .mh-100 { max-height: 100% !important; } .min-vw-100 { min-width: 100vw !important; } .min-vh-100 { min-height: 100vh !important; } .vw-100 { width: 100vw !important; } .vh-100 { height: 100vh !important; } .stretched-link::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; pointer-events: auto; content: ""; background-color: rgba(0, 0, 0, 0); } .m-0 { margin: 0 !important; } .mt-0, .my-0 { margin-top: 0 !important; } .mr-0, .mx-0 { margin-right: 0 !important; } .mb-0, .my-0 { margin-bottom: 0 !important; } .ml-0, .mx-0 { margin-left: 0 !important; } .m-1 { margin: 0.25rem !important; } .mt-1, .my-1 { margin-top: 0.25rem !important; } .mr-1, .mx-1 { margin-right: 0.25rem !important; } .mb-1, .my-1 { margin-bottom: 0.25rem !important; } .ml-1, .mx-1 { margin-left: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .mt-2, .my-2 { margin-top: 0.5rem !important; } .mr-2, .mx-2 { margin-right: 0.5rem !important; } .mb-2, .my-2 { margin-bottom: 0.5rem !important; } .ml-2, .mx-2 { margin-left: 0.5rem !important; } .m-3 { margin: 1rem !important; } .mt-3, .my-3 { margin-top: 1rem !important; } .mr-3, .mx-3 { margin-right: 1rem !important; } .mb-3, .my-3 { margin-bottom: 1rem !important; } .ml-3, .mx-3 { margin-left: 1rem !important; } .m-4 { margin: 1.5rem !important; } .mt-4, .my-4 { margin-top: 1.5rem !important; } .mr-4, .mx-4 { margin-right: 1.5rem !important; } .mb-4, .my-4 { margin-bottom: 1.5rem !important; } .ml-4, .mx-4 { margin-left: 1.5rem !important; } .m-5 { margin: 3rem !important; } .mt-5, .my-5 { margin-top: 3rem !important; } .mr-5, .mx-5 { margin-right: 3rem !important; } .mb-5, .my-5 { margin-bottom: 3rem !important; } .ml-5, .mx-5 { margin-left: 3rem !important; } .p-0 { padding: 0 !important; } .pt-0, .py-0 { padding-top: 0 !important; } .pr-0, .px-0 { padding-right: 0 !important; } .pb-0, .py-0 { padding-bottom: 0 !important; } .pl-0, .px-0 { padding-left: 0 !important; } .p-1 { padding: 0.25rem !important; } .pt-1, .py-1 { padding-top: 0.25rem !important; } .pr-1, .px-1 { padding-right: 0.25rem !important; } .pb-1, .py-1 { padding-bottom: 0.25rem !important; } .pl-1, .px-1 { padding-left: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .pt-2, .py-2 { padding-top: 0.5rem !important; } .pr-2, .px-2 { padding-right: 0.5rem !important; } .pb-2, .py-2 { padding-bottom: 0.5rem !important; } .pl-2, .px-2 { padding-left: 0.5rem !important; } .p-3 { padding: 1rem !important; } .pt-3, .py-3 { padding-top: 1rem !important; } .pr-3, .px-3 { padding-right: 1rem !important; } .pb-3, .py-3 { padding-bottom: 1rem !important; } .pl-3, .px-3 { padding-left: 1rem !important; } .p-4 { padding: 1.5rem !important; } .pt-4, .py-4 { padding-top: 1.5rem !important; } .pr-4, .px-4 { padding-right: 1.5rem !important; } .pb-4, .py-4 { padding-bottom: 1.5rem !important; } .pl-4, .px-4 { padding-left: 1.5rem !important; } .p-5 { padding: 3rem !important; } .pt-5, .py-5 { padding-top: 3rem !important; } .pr-5, .px-5 { padding-right: 3rem !important; } .pb-5, .py-5 { padding-bottom: 3rem !important; } .pl-5, .px-5 { padding-left: 3rem !important; } .m-n1 { margin: -0.25rem !important; } .mt-n1, .my-n1 { margin-top: -0.25rem !important; } .mr-n1, .mx-n1 { margin-right: -0.25rem !important; } .mb-n1, .my-n1 { margin-bottom: -0.25rem !important; } .ml-n1, .mx-n1 { margin-left: -0.25rem !important; } .m-n2 { margin: -0.5rem !important; } .mt-n2, .my-n2 { margin-top: -0.5rem !important; } .mr-n2, .mx-n2 { margin-right: -0.5rem !important; } .mb-n2, .my-n2 { margin-bottom: -0.5rem !important; } .ml-n2, .mx-n2 { margin-left: -0.5rem !important; } .m-n3 { margin: -1rem !important; } .mt-n3, .my-n3 { margin-top: -1rem !important; } .mr-n3, .mx-n3 { margin-right: -1rem !important; } .mb-n3, .my-n3 { margin-bottom: -1rem !important; } .ml-n3, .mx-n3 { margin-left: -1rem !important; } .m-n4 { margin: -1.5rem !important; } .mt-n4, .my-n4 { margin-top: -1.5rem !important; } .mr-n4, .mx-n4 { margin-right: -1.5rem !important; } .mb-n4, .my-n4 { margin-bottom: -1.5rem !important; } .ml-n4, .mx-n4 { margin-left: -1.5rem !important; } .m-n5 { margin: -3rem !important; } .mt-n5, .my-n5 { margin-top: -3rem !important; } .mr-n5, .mx-n5 { margin-right: -3rem !important; } .mb-n5, .my-n5 { margin-bottom: -3rem !important; } .ml-n5, .mx-n5 { margin-left: -3rem !important; } .m-auto { margin: auto !important; } .mt-auto, .my-auto { margin-top: auto !important; } .mr-auto, .mx-auto { margin-right: auto !important; } .mb-auto, .my-auto { margin-bottom: auto !important; } .ml-auto, .mx-auto { margin-left: auto !important; } @media (min-width: 576px) { .m-sm-0 { margin: 0 !important; } .mt-sm-0, .my-sm-0 { margin-top: 0 !important; } .mr-sm-0, .mx-sm-0 { margin-right: 0 !important; } .mb-sm-0, .my-sm-0 { margin-bottom: 0 !important; } .ml-sm-0, .mx-sm-0 { margin-left: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1, .my-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1, .mx-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1, .my-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1, .mx-sm-1 { margin-left: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2, .my-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2, .mx-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2, .my-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2, .mx-sm-2 { margin-left: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .mt-sm-3, .my-sm-3 { margin-top: 1rem !important; } .mr-sm-3, .mx-sm-3 { margin-right: 1rem !important; } .mb-sm-3, .my-sm-3 { margin-bottom: 1rem !important; } .ml-sm-3, .mx-sm-3 { margin-left: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .mt-sm-4, .my-sm-4 { margin-top: 1.5rem !important; } .mr-sm-4, .mx-sm-4 { margin-right: 1.5rem !important; } .mb-sm-4, .my-sm-4 { margin-bottom: 1.5rem !important; } .ml-sm-4, .mx-sm-4 { margin-left: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .mt-sm-5, .my-sm-5 { margin-top: 3rem !important; } .mr-sm-5, .mx-sm-5 { margin-right: 3rem !important; } .mb-sm-5, .my-sm-5 { margin-bottom: 3rem !important; } .ml-sm-5, .mx-sm-5 { margin-left: 3rem !important; } .p-sm-0 { padding: 0 !important; } .pt-sm-0, .py-sm-0 { padding-top: 0 !important; } .pr-sm-0, .px-sm-0 { padding-right: 0 !important; } .pb-sm-0, .py-sm-0 { padding-bottom: 0 !important; } .pl-sm-0, .px-sm-0 { padding-left: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1, .py-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1, .px-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1, .py-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1, .px-sm-1 { padding-left: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2, .py-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2, .px-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2, .py-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2, .px-sm-2 { padding-left: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .pt-sm-3, .py-sm-3 { padding-top: 1rem !important; } .pr-sm-3, .px-sm-3 { padding-right: 1rem !important; } .pb-sm-3, .py-sm-3 { padding-bottom: 1rem !important; } .pl-sm-3, .px-sm-3 { padding-left: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .pt-sm-4, .py-sm-4 { padding-top: 1.5rem !important; } .pr-sm-4, .px-sm-4 { padding-right: 1.5rem !important; } .pb-sm-4, .py-sm-4 { padding-bottom: 1.5rem !important; } .pl-sm-4, .px-sm-4 { padding-left: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .pt-sm-5, .py-sm-5 { padding-top: 3rem !important; } .pr-sm-5, .px-sm-5 { padding-right: 3rem !important; } .pb-sm-5, .py-sm-5 { padding-bottom: 3rem !important; } .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } .m-sm-n1 { margin: -0.25rem !important; } .mt-sm-n1, .my-sm-n1 { margin-top: -0.25rem !important; } .mr-sm-n1, .mx-sm-n1 { margin-right: -0.25rem !important; } .mb-sm-n1, .my-sm-n1 { margin-bottom: -0.25rem !important; } .ml-sm-n1, .mx-sm-n1 { margin-left: -0.25rem !important; } .m-sm-n2 { margin: -0.5rem !important; } .mt-sm-n2, .my-sm-n2 { margin-top: -0.5rem !important; } .mr-sm-n2, .mx-sm-n2 { margin-right: -0.5rem !important; } .mb-sm-n2, .my-sm-n2 { margin-bottom: -0.5rem !important; } .ml-sm-n2, .mx-sm-n2 { margin-left: -0.5rem !important; } .m-sm-n3 { margin: -1rem !important; } .mt-sm-n3, .my-sm-n3 { margin-top: -1rem !important; } .mr-sm-n3, .mx-sm-n3 { margin-right: -1rem !important; } .mb-sm-n3, .my-sm-n3 { margin-bottom: -1rem !important; } .ml-sm-n3, .mx-sm-n3 { margin-left: -1rem !important; } .m-sm-n4 { margin: -1.5rem !important; } .mt-sm-n4, .my-sm-n4 { margin-top: -1.5rem !important; } .mr-sm-n4, .mx-sm-n4 { margin-right: -1.5rem !important; } .mb-sm-n4, .my-sm-n4 { margin-bottom: -1.5rem !important; } .ml-sm-n4, .mx-sm-n4 { margin-left: -1.5rem !important; } .m-sm-n5 { margin: -3rem !important; } .mt-sm-n5, .my-sm-n5 { margin-top: -3rem !important; } .mr-sm-n5, .mx-sm-n5 { margin-right: -3rem !important; } .mb-sm-n5, .my-sm-n5 { margin-bottom: -3rem !important; } .ml-sm-n5, .mx-sm-n5 { margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, .my-sm-auto { margin-top: auto !important; } .mr-sm-auto, .mx-sm-auto { margin-right: auto !important; } .mb-sm-auto, .my-sm-auto { margin-bottom: auto !important; } .ml-sm-auto, .mx-sm-auto { margin-left: auto !important; } } @media (min-width: 768px) { .m-md-0 { margin: 0 !important; } .mt-md-0, .my-md-0 { margin-top: 0 !important; } .mr-md-0, .mx-md-0 { margin-right: 0 !important; } .mb-md-0, .my-md-0 { margin-bottom: 0 !important; } .ml-md-0, .mx-md-0 { margin-left: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .mt-md-1, .my-md-1 { margin-top: 0.25rem !important; } .mr-md-1, .mx-md-1 { margin-right: 0.25rem !important; } .mb-md-1, .my-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1, .mx-md-1 { margin-left: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .mt-md-2, .my-md-2 { margin-top: 0.5rem !important; } .mr-md-2, .mx-md-2 { margin-right: 0.5rem !important; } .mb-md-2, .my-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2, .mx-md-2 { margin-left: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .mt-md-3, .my-md-3 { margin-top: 1rem !important; } .mr-md-3, .mx-md-3 { margin-right: 1rem !important; } .mb-md-3, .my-md-3 { margin-bottom: 1rem !important; } .ml-md-3, .mx-md-3 { margin-left: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .mt-md-4, .my-md-4 { margin-top: 1.5rem !important; } .mr-md-4, .mx-md-4 { margin-right: 1.5rem !important; } .mb-md-4, .my-md-4 { margin-bottom: 1.5rem !important; } .ml-md-4, .mx-md-4 { margin-left: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .mt-md-5, .my-md-5 { margin-top: 3rem !important; } .mr-md-5, .mx-md-5 { margin-right: 3rem !important; } .mb-md-5, .my-md-5 { margin-bottom: 3rem !important; } .ml-md-5, .mx-md-5 { margin-left: 3rem !important; } .p-md-0 { padding: 0 !important; } .pt-md-0, .py-md-0 { padding-top: 0 !important; } .pr-md-0, .px-md-0 { padding-right: 0 !important; } .pb-md-0, .py-md-0 { padding-bottom: 0 !important; } .pl-md-0, .px-md-0 { padding-left: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1, .py-md-1 { padding-top: 0.25rem !important; } .pr-md-1, .px-md-1 { padding-right: 0.25rem !important; } .pb-md-1, .py-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1, .px-md-1 { padding-left: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2, .py-md-2 { padding-top: 0.5rem !important; } .pr-md-2, .px-md-2 { padding-right: 0.5rem !important; } .pb-md-2, .py-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2, .px-md-2 { padding-left: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .pt-md-3, .py-md-3 { padding-top: 1rem !important; } .pr-md-3, .px-md-3 { padding-right: 1rem !important; } .pb-md-3, .py-md-3 { padding-bottom: 1rem !important; } .pl-md-3, .px-md-3 { padding-left: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .pt-md-4, .py-md-4 { padding-top: 1.5rem !important; } .pr-md-4, .px-md-4 { padding-right: 1.5rem !important; } .pb-md-4, .py-md-4 { padding-bottom: 1.5rem !important; } .pl-md-4, .px-md-4 { padding-left: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .pt-md-5, .py-md-5 { padding-top: 3rem !important; } .pr-md-5, .px-md-5 { padding-right: 3rem !important; } .pb-md-5, .py-md-5 { padding-bottom: 3rem !important; } .pl-md-5, .px-md-5 { padding-left: 3rem !important; } .m-md-n1 { margin: -0.25rem !important; } .mt-md-n1, .my-md-n1 { margin-top: -0.25rem !important; } .mr-md-n1, .mx-md-n1 { margin-right: -0.25rem !important; } .mb-md-n1, .my-md-n1 { margin-bottom: -0.25rem !important; } .ml-md-n1, .mx-md-n1 { margin-left: -0.25rem !important; } .m-md-n2 { margin: -0.5rem !important; } .mt-md-n2, .my-md-n2 { margin-top: -0.5rem !important; } .mr-md-n2, .mx-md-n2 { margin-right: -0.5rem !important; } .mb-md-n2, .my-md-n2 { margin-bottom: -0.5rem !important; } .ml-md-n2, .mx-md-n2 { margin-left: -0.5rem !important; } .m-md-n3 { margin: -1rem !important; } .mt-md-n3, .my-md-n3 { margin-top: -1rem !important; } .mr-md-n3, .mx-md-n3 { margin-right: -1rem !important; } .mb-md-n3, .my-md-n3 { margin-bottom: -1rem !important; } .ml-md-n3, .mx-md-n3 { margin-left: -1rem !important; } .m-md-n4 { margin: -1.5rem !important; } .mt-md-n4, .my-md-n4 { margin-top: -1.5rem !important; } .mr-md-n4, .mx-md-n4 { margin-right: -1.5rem !important; } .mb-md-n4, .my-md-n4 { margin-bottom: -1.5rem !important; } .ml-md-n4, .mx-md-n4 { margin-left: -1.5rem !important; } .m-md-n5 { margin: -3rem !important; } .mt-md-n5, .my-md-n5 { margin-top: -3rem !important; } .mr-md-n5, .mx-md-n5 { margin-right: -3rem !important; } .mb-md-n5, .my-md-n5 { margin-bottom: -3rem !important; } .ml-md-n5, .mx-md-n5 { margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, .my-md-auto { margin-top: auto !important; } .mr-md-auto, .mx-md-auto { margin-right: auto !important; } .mb-md-auto, .my-md-auto { margin-bottom: auto !important; } .ml-md-auto, .mx-md-auto { margin-left: auto !important; } } @media (min-width: 992px) { .m-lg-0 { margin: 0 !important; } .mt-lg-0, .my-lg-0 { margin-top: 0 !important; } .mr-lg-0, .mx-lg-0 { margin-right: 0 !important; } .mb-lg-0, .my-lg-0 { margin-bottom: 0 !important; } .ml-lg-0, .mx-lg-0 { margin-left: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1, .my-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1, .mx-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1, .my-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1, .mx-lg-1 { margin-left: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2, .my-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2, .mx-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2, .my-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2, .mx-lg-2 { margin-left: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .mt-lg-3, .my-lg-3 { margin-top: 1rem !important; } .mr-lg-3, .mx-lg-3 { margin-right: 1rem !important; } .mb-lg-3, .my-lg-3 { margin-bottom: 1rem !important; } .ml-lg-3, .mx-lg-3 { margin-left: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .mt-lg-4, .my-lg-4 { margin-top: 1.5rem !important; } .mr-lg-4, .mx-lg-4 { margin-right: 1.5rem !important; } .mb-lg-4, .my-lg-4 { margin-bottom: 1.5rem !important; } .ml-lg-4, .mx-lg-4 { margin-left: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .mt-lg-5, .my-lg-5 { margin-top: 3rem !important; } .mr-lg-5, .mx-lg-5 { margin-right: 3rem !important; } .mb-lg-5, .my-lg-5 { margin-bottom: 3rem !important; } .ml-lg-5, .mx-lg-5 { margin-left: 3rem !important; } .p-lg-0 { padding: 0 !important; } .pt-lg-0, .py-lg-0 { padding-top: 0 !important; } .pr-lg-0, .px-lg-0 { padding-right: 0 !important; } .pb-lg-0, .py-lg-0 { padding-bottom: 0 !important; } .pl-lg-0, .px-lg-0 { padding-left: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1, .py-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1, .px-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1, .py-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1, .px-lg-1 { padding-left: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2, .py-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2, .px-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2, .py-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2, .px-lg-2 { padding-left: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .pt-lg-3, .py-lg-3 { padding-top: 1rem !important; } .pr-lg-3, .px-lg-3 { padding-right: 1rem !important; } .pb-lg-3, .py-lg-3 { padding-bottom: 1rem !important; } .pl-lg-3, .px-lg-3 { padding-left: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .pt-lg-4, .py-lg-4 { padding-top: 1.5rem !important; } .pr-lg-4, .px-lg-4 { padding-right: 1.5rem !important; } .pb-lg-4, .py-lg-4 { padding-bottom: 1.5rem !important; } .pl-lg-4, .px-lg-4 { padding-left: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .pt-lg-5, .py-lg-5 { padding-top: 3rem !important; } .pr-lg-5, .px-lg-5 { padding-right: 3rem !important; } .pb-lg-5, .py-lg-5 { padding-bottom: 3rem !important; } .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } .m-lg-n1 { margin: -0.25rem !important; } .mt-lg-n1, .my-lg-n1 { margin-top: -0.25rem !important; } .mr-lg-n1, .mx-lg-n1 { margin-right: -0.25rem !important; } .mb-lg-n1, .my-lg-n1 { margin-bottom: -0.25rem !important; } .ml-lg-n1, .mx-lg-n1 { margin-left: -0.25rem !important; } .m-lg-n2 { margin: -0.5rem !important; } .mt-lg-n2, .my-lg-n2 { margin-top: -0.5rem !important; } .mr-lg-n2, .mx-lg-n2 { margin-right: -0.5rem !important; } .mb-lg-n2, .my-lg-n2 { margin-bottom: -0.5rem !important; } .ml-lg-n2, .mx-lg-n2 { margin-left: -0.5rem !important; } .m-lg-n3 { margin: -1rem !important; } .mt-lg-n3, .my-lg-n3 { margin-top: -1rem !important; } .mr-lg-n3, .mx-lg-n3 { margin-right: -1rem !important; } .mb-lg-n3, .my-lg-n3 { margin-bottom: -1rem !important; } .ml-lg-n3, .mx-lg-n3 { margin-left: -1rem !important; } .m-lg-n4 { margin: -1.5rem !important; } .mt-lg-n4, .my-lg-n4 { margin-top: -1.5rem !important; } .mr-lg-n4, .mx-lg-n4 { margin-right: -1.5rem !important; } .mb-lg-n4, .my-lg-n4 { margin-bottom: -1.5rem !important; } .ml-lg-n4, .mx-lg-n4 { margin-left: -1.5rem !important; } .m-lg-n5 { margin: -3rem !important; } .mt-lg-n5, .my-lg-n5 { margin-top: -3rem !important; } .mr-lg-n5, .mx-lg-n5 { margin-right: -3rem !important; } .mb-lg-n5, .my-lg-n5 { margin-bottom: -3rem !important; } .ml-lg-n5, .mx-lg-n5 { margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, .my-lg-auto { margin-top: auto !important; } .mr-lg-auto, .mx-lg-auto { margin-right: auto !important; } .mb-lg-auto, .my-lg-auto { margin-bottom: auto !important; } .ml-lg-auto, .mx-lg-auto { margin-left: auto !important; } } @media (min-width: 1200px) { .m-xl-0 { margin: 0 !important; } .mt-xl-0, .my-xl-0 { margin-top: 0 !important; } .mr-xl-0, .mx-xl-0 { margin-right: 0 !important; } .mb-xl-0, .my-xl-0 { margin-bottom: 0 !important; } .ml-xl-0, .mx-xl-0 { margin-left: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1, .my-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1, .mx-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1, .my-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1, .mx-xl-1 { margin-left: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2, .my-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2, .mx-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2, .my-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2, .mx-xl-2 { margin-left: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .mt-xl-3, .my-xl-3 { margin-top: 1rem !important; } .mr-xl-3, .mx-xl-3 { margin-right: 1rem !important; } .mb-xl-3, .my-xl-3 { margin-bottom: 1rem !important; } .ml-xl-3, .mx-xl-3 { margin-left: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .mt-xl-4, .my-xl-4 { margin-top: 1.5rem !important; } .mr-xl-4, .mx-xl-4 { margin-right: 1.5rem !important; } .mb-xl-4, .my-xl-4 { margin-bottom: 1.5rem !important; } .ml-xl-4, .mx-xl-4 { margin-left: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .mt-xl-5, .my-xl-5 { margin-top: 3rem !important; } .mr-xl-5, .mx-xl-5 { margin-right: 3rem !important; } .mb-xl-5, .my-xl-5 { margin-bottom: 3rem !important; } .ml-xl-5, .mx-xl-5 { margin-left: 3rem !important; } .p-xl-0 { padding: 0 !important; } .pt-xl-0, .py-xl-0 { padding-top: 0 !important; } .pr-xl-0, .px-xl-0 { padding-right: 0 !important; } .pb-xl-0, .py-xl-0 { padding-bottom: 0 !important; } .pl-xl-0, .px-xl-0 { padding-left: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1, .py-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1, .px-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1, .py-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1, .px-xl-1 { padding-left: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2, .py-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2, .px-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2, .py-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2, .px-xl-2 { padding-left: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .pt-xl-3, .py-xl-3 { padding-top: 1rem !important; } .pr-xl-3, .px-xl-3 { padding-right: 1rem !important; } .pb-xl-3, .py-xl-3 { padding-bottom: 1rem !important; } .pl-xl-3, .px-xl-3 { padding-left: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .pt-xl-4, .py-xl-4 { padding-top: 1.5rem !important; } .pr-xl-4, .px-xl-4 { padding-right: 1.5rem !important; } .pb-xl-4, .py-xl-4 { padding-bottom: 1.5rem !important; } .pl-xl-4, .px-xl-4 { padding-left: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .pt-xl-5, .py-xl-5 { padding-top: 3rem !important; } .pr-xl-5, .px-xl-5 { padding-right: 3rem !important; } .pb-xl-5, .py-xl-5 { padding-bottom: 3rem !important; } .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } .m-xl-n1 { margin: -0.25rem !important; } .mt-xl-n1, .my-xl-n1 { margin-top: -0.25rem !important; } .mr-xl-n1, .mx-xl-n1 { margin-right: -0.25rem !important; } .mb-xl-n1, .my-xl-n1 { margin-bottom: -0.25rem !important; } .ml-xl-n1, .mx-xl-n1 { margin-left: -0.25rem !important; } .m-xl-n2 { margin: -0.5rem !important; } .mt-xl-n2, .my-xl-n2 { margin-top: -0.5rem !important; } .mr-xl-n2, .mx-xl-n2 { margin-right: -0.5rem !important; } .mb-xl-n2, .my-xl-n2 { margin-bottom: -0.5rem !important; } .ml-xl-n2, .mx-xl-n2 { margin-left: -0.5rem !important; } .m-xl-n3 { margin: -1rem !important; } .mt-xl-n3, .my-xl-n3 { margin-top: -1rem !important; } .mr-xl-n3, .mx-xl-n3 { margin-right: -1rem !important; } .mb-xl-n3, .my-xl-n3 { margin-bottom: -1rem !important; } .ml-xl-n3, .mx-xl-n3 { margin-left: -1rem !important; } .m-xl-n4 { margin: -1.5rem !important; } .mt-xl-n4, .my-xl-n4 { margin-top: -1.5rem !important; } .mr-xl-n4, .mx-xl-n4 { margin-right: -1.5rem !important; } .mb-xl-n4, .my-xl-n4 { margin-bottom: -1.5rem !important; } .ml-xl-n4, .mx-xl-n4 { margin-left: -1.5rem !important; } .m-xl-n5 { margin: -3rem !important; } .mt-xl-n5, .my-xl-n5 { margin-top: -3rem !important; } .mr-xl-n5, .mx-xl-n5 { margin-right: -3rem !important; } .mb-xl-n5, .my-xl-n5 { margin-bottom: -3rem !important; } .ml-xl-n5, .mx-xl-n5 { margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, .my-xl-auto { margin-top: auto !important; } .mr-xl-auto, .mx-xl-auto { margin-right: auto !important; } .mb-xl-auto, .my-xl-auto { margin-bottom: auto !important; } .ml-xl-auto, .mx-xl-auto { margin-left: auto !important; } } .text-monospace { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } .text-justify { text-align: justify !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-left { text-align: left !important; } .text-right { text-align: right !important; } .text-center { text-align: center !important; } @media (min-width: 576px) { .text-sm-left { text-align: left !important; } .text-sm-right { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .text-md-left { text-align: left !important; } .text-md-right { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .text-lg-left { text-align: left !important; } .text-lg-right { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .text-xl-left { text-align: left !important; } .text-xl-right { text-align: right !important; } .text-xl-center { text-align: center !important; } } .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .font-weight-light { font-weight: 300 !important; } .font-weight-lighter { font-weight: lighter !important; } .font-weight-normal { font-weight: 400 !important; } .font-weight-bold { font-weight: 700 !important; } .font-weight-bolder { font-weight: bolder !important; } .font-italic { font-style: italic !important; } .text-white { color: #fff !important; } .text-primary { color: #007bff !important; } a.text-primary:hover, a.text-primary:focus { color: #0056b3 !important; } .text-secondary { color: #6c757d !important; } a.text-secondary:hover, a.text-secondary:focus { color: #494f54 !important; } .text-success { color: #28a745 !important; } a.text-success:hover, a.text-success:focus { color: #19692c !important; } .text-info { color: #17a2b8 !important; } a.text-info:hover, a.text-info:focus { color: #0f6674 !important; } .text-warning { color: #ffc107 !important; } a.text-warning:hover, a.text-warning:focus { color: #ba8b00 !important; } .text-danger { color: #dc3545 !important; } a.text-danger:hover, a.text-danger:focus { color: #a71d2a !important; } .text-light { color: #f8f9fa !important; } a.text-light:hover, a.text-light:focus { color: #cbd3da !important; } .text-dark { color: #343a40 !important; } a.text-dark:hover, a.text-dark:focus { color: #121416 !important; } .text-body { color: #212529 !important; } .text-muted { color: #6c757d !important; } .text-black-50 { color: rgba(0, 0, 0, 0.5) !important; } .text-white-50 { color: rgba(255, 255, 255, 0.5) !important; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .text-decoration-none { text-decoration: none !important; } .text-break { word-break: break-word !important; overflow-wrap: break-word !important; } .text-reset { color: inherit !important; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } @media print { *, *::before, *::after { text-shadow: none !important; box-shadow: none !important; } a:not(.btn) { text-decoration: underline; } abbr[title]::after { content: " (" attr(title) ")"; } pre { white-space: pre-wrap !important; } pre, blockquote { border: 1px solid #adb5bd; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } @page { size: a3; } body { min-width: 992px !important; } .container { min-width: 992px !important; } .navbar { display: none; } .badge { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table td, .table th { background-color: #fff !important; } .table-bordered th, .table-bordered td { border: 1px solid #dee2e6 !important; } .table-dark { color: inherit; } .table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody { border-color: #dee2e6; } .table .thead-dark th { color: inherit; border-color: #dee2e6; } } /*# sourceMappingURL=bootstrap.css.map */ ================================================ FILE: Src/Mvc/Website/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js ================================================ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : (global = global || self, factory(global.bootstrap = {}, global.jQuery)); }(this, function (exports, $) { 'use strict'; $ = $ && $.hasOwnProperty('default') ? $['default'] : $; function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } /** * -------------------------------------------------------------------------- * Bootstrap (v4.3.1): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ var TRANSITION_END = 'transitionend'; var MAX_UID = 1000000; var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) function toType(obj) { return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); } function getSpecialTransitionEndEvent() { return { bindType: TRANSITION_END, delegateType: TRANSITION_END, handle: function handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params } return undefined; // eslint-disable-line no-undefined } }; } function transitionEndEmulator(duration) { var _this = this; var called = false; $(this).one(Util.TRANSITION_END, function () { called = true; }); setTimeout(function () { if (!called) { Util.triggerTransitionEnd(_this); } }, duration); return this; } function setTransitionEndSupport() { $.fn.emulateTransitionEnd = transitionEndEmulator; $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } /** * -------------------------------------------------------------------------- * Public Util Api * -------------------------------------------------------------------------- */ var Util = { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { do { // eslint-disable-next-line no-bitwise prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here } while (document.getElementById(prefix)); return prefix; }, getSelectorFromElement: function getSelectorFromElement(element) { var selector = element.getAttribute('data-target'); if (!selector || selector === '#') { var hrefAttr = element.getAttribute('href'); selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; } try { return document.querySelector(selector) ? selector : null; } catch (err) { return null; } }, getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { if (!element) { return 0; } // Get transition-duration of the element var transitionDuration = $(element).css('transition-duration'); var transitionDelay = $(element).css('transition-delay'); var floatTransitionDuration = parseFloat(transitionDuration); var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }, reflow: function reflow(element) { return element.offsetHeight; }, triggerTransitionEnd: function triggerTransitionEnd(element) { $(element).trigger(TRANSITION_END); }, // TODO: Remove in v5 supportsTransitionEnd: function supportsTransitionEnd() { return Boolean(TRANSITION_END); }, isElement: function isElement(obj) { return (obj[0] || obj).nodeType; }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { for (var property in configTypes) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) { var expectedTypes = configTypes[property]; var value = config[property]; var valueType = value && Util.isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); } } } }, findShadowRoot: function findShadowRoot(element) { if (!document.documentElement.attachShadow) { return null; } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { var root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } if (element instanceof ShadowRoot) { return element; } // when we don't find a shadow root if (!element.parentNode) { return null; } return Util.findShadowRoot(element.parentNode); } }; setTransitionEndSupport(); /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'alert'; var VERSION = '4.3.1'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var Selector = { DISMISS: '[data-dismiss="alert"]' }; var Event = { CLOSE: "close" + EVENT_KEY, CLOSED: "closed" + EVENT_KEY, CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY }; var ClassName = { ALERT: 'alert', FADE: 'fade', SHOW: 'show' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Alert = /*#__PURE__*/ function () { function Alert(element) { this._element = element; } // Getters var _proto = Alert.prototype; // Public _proto.close = function close(element) { var rootElement = this._element; if (element) { rootElement = this._getRootElement(element); } var customEvent = this._triggerCloseEvent(rootElement); if (customEvent.isDefaultPrevented()) { return; } this._removeElement(rootElement); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY); this._element = null; } // Private ; _proto._getRootElement = function _getRootElement(element) { var selector = Util.getSelectorFromElement(element); var parent = false; if (selector) { parent = document.querySelector(selector); } if (!parent) { parent = $(element).closest("." + ClassName.ALERT)[0]; } return parent; }; _proto._triggerCloseEvent = function _triggerCloseEvent(element) { var closeEvent = $.Event(Event.CLOSE); $(element).trigger(closeEvent); return closeEvent; }; _proto._removeElement = function _removeElement(element) { var _this = this; $(element).removeClass(ClassName.SHOW); if (!$(element).hasClass(ClassName.FADE)) { this._destroyElement(element); return; } var transitionDuration = Util.getTransitionDurationFromElement(element); $(element).one(Util.TRANSITION_END, function (event) { return _this._destroyElement(element, event); }).emulateTransitionEnd(transitionDuration); }; _proto._destroyElement = function _destroyElement(element) { $(element).detach().trigger(Event.CLOSED).remove(); } // Static ; Alert._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $element = $(this); var data = $element.data(DATA_KEY); if (!data) { data = new Alert(this); $element.data(DATA_KEY, data); } if (config === 'close') { data[config](this); } }); }; Alert._handleDismiss = function _handleDismiss(alertInstance) { return function (event) { if (event) { event.preventDefault(); } alertInstance.close(this); }; }; _createClass(Alert, null, [{ key: "VERSION", get: function get() { return VERSION; } }]); return Alert; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Alert._jQueryInterface; $.fn[NAME].Constructor = Alert; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Alert._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$1 = 'button'; var VERSION$1 = '4.3.1'; var DATA_KEY$1 = 'bs.button'; var EVENT_KEY$1 = "." + DATA_KEY$1; var DATA_API_KEY$1 = '.data-api'; var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; var ClassName$1 = { ACTIVE: 'active', BUTTON: 'btn', FOCUS: 'focus' }; var Selector$1 = { DATA_TOGGLE_CARROT: '[data-toggle^="button"]', DATA_TOGGLE: '[data-toggle="buttons"]', INPUT: 'input:not([type="hidden"])', ACTIVE: '.active', BUTTON: '.btn' }; var Event$1 = { CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1) /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Button = /*#__PURE__*/ function () { function Button(element) { this._element = element; } // Getters var _proto = Button.prototype; // Public _proto.toggle = function toggle() { var triggerChangeEvent = true; var addAriaPressed = true; var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0]; if (rootElement) { var input = this._element.querySelector(Selector$1.INPUT); if (input) { if (input.type === 'radio') { if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { triggerChangeEvent = false; } else { var activeElement = rootElement.querySelector(Selector$1.ACTIVE); if (activeElement) { $(activeElement).removeClass(ClassName$1.ACTIVE); } } } if (triggerChangeEvent) { if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { return; } input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); $(input).trigger('change'); } input.focus(); addAriaPressed = false; } } if (addAriaPressed) { this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); } if (triggerChangeEvent) { $(this._element).toggleClass(ClassName$1.ACTIVE); } }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$1); this._element = null; } // Static ; Button._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$1); if (!data) { data = new Button(this); $(this).data(DATA_KEY$1, data); } if (config === 'toggle') { data[config](); } }); }; _createClass(Button, null, [{ key: "VERSION", get: function get() { return VERSION$1; } }]); return Button; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { event.preventDefault(); var button = event.target; if (!$(button).hasClass(ClassName$1.BUTTON)) { button = $(button).closest(Selector$1.BUTTON); } Button._jQueryInterface.call($(button), 'toggle'); }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { var button = $(event.target).closest(Selector$1.BUTTON)[0]; $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$1] = Button._jQueryInterface; $.fn[NAME$1].Constructor = Button; $.fn[NAME$1].noConflict = function () { $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; return Button._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$2 = 'carousel'; var VERSION$2 = '4.3.1'; var DATA_KEY$2 = 'bs.carousel'; var EVENT_KEY$2 = "." + DATA_KEY$2; var DATA_API_KEY$2 = '.data-api'; var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch var SWIPE_THRESHOLD = 40; var Default = { interval: 5000, keyboard: true, slide: false, pause: 'hover', wrap: true, touch: true }; var DefaultType = { interval: '(number|boolean)', keyboard: 'boolean', slide: '(boolean|string)', pause: '(string|boolean)', wrap: 'boolean', touch: 'boolean' }; var Direction = { NEXT: 'next', PREV: 'prev', LEFT: 'left', RIGHT: 'right' }; var Event$2 = { SLIDE: "slide" + EVENT_KEY$2, SLID: "slid" + EVENT_KEY$2, KEYDOWN: "keydown" + EVENT_KEY$2, MOUSEENTER: "mouseenter" + EVENT_KEY$2, MOUSELEAVE: "mouseleave" + EVENT_KEY$2, TOUCHSTART: "touchstart" + EVENT_KEY$2, TOUCHMOVE: "touchmove" + EVENT_KEY$2, TOUCHEND: "touchend" + EVENT_KEY$2, POINTERDOWN: "pointerdown" + EVENT_KEY$2, POINTERUP: "pointerup" + EVENT_KEY$2, DRAG_START: "dragstart" + EVENT_KEY$2, LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 }; var ClassName$2 = { CAROUSEL: 'carousel', ACTIVE: 'active', SLIDE: 'slide', RIGHT: 'carousel-item-right', LEFT: 'carousel-item-left', NEXT: 'carousel-item-next', PREV: 'carousel-item-prev', ITEM: 'carousel-item', POINTER_EVENT: 'pointer-event' }; var Selector$2 = { ACTIVE: '.active', ACTIVE_ITEM: '.active.carousel-item', ITEM: '.carousel-item', ITEM_IMG: '.carousel-item img', NEXT_PREV: '.carousel-item-next, .carousel-item-prev', INDICATORS: '.carousel-indicators', DATA_SLIDE: '[data-slide], [data-slide-to]', DATA_RIDE: '[data-ride="carousel"]' }; var PointerType = { TOUCH: 'touch', PEN: 'pen' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Carousel = /*#__PURE__*/ function () { function Carousel(element, config) { this._items = null; this._interval = null; this._activeElement = null; this._isPaused = false; this._isSliding = false; this.touchTimeout = null; this.touchStartX = 0; this.touchDeltaX = 0; this._config = this._getConfig(config); this._element = element; this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); this._addEventListeners(); } // Getters var _proto = Carousel.prototype; // Public _proto.next = function next() { if (!this._isSliding) { this._slide(Direction.NEXT); } }; _proto.nextWhenVisible = function nextWhenVisible() { // Don't call next when the page isn't visible // or the carousel or its parent isn't visible if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { this.next(); } }; _proto.prev = function prev() { if (!this._isSliding) { this._slide(Direction.PREV); } }; _proto.pause = function pause(event) { if (!event) { this._isPaused = true; } if (this._element.querySelector(Selector$2.NEXT_PREV)) { Util.triggerTransitionEnd(this._element); this.cycle(true); } clearInterval(this._interval); this._interval = null; }; _proto.cycle = function cycle(event) { if (!event) { this._isPaused = false; } if (this._interval) { clearInterval(this._interval); this._interval = null; } if (this._config.interval && !this._isPaused) { this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); } }; _proto.to = function to(index) { var _this = this; this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); var activeIndex = this._getItemIndex(this._activeElement); if (index > this._items.length - 1 || index < 0) { return; } if (this._isSliding) { $(this._element).one(Event$2.SLID, function () { return _this.to(index); }); return; } if (activeIndex === index) { this.pause(); this.cycle(); return; } var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; this._slide(direction, this._items[index]); }; _proto.dispose = function dispose() { $(this._element).off(EVENT_KEY$2); $.removeData(this._element, DATA_KEY$2); this._items = null; this._config = null; this._element = null; this._interval = null; this._isPaused = null; this._isSliding = null; this._activeElement = null; this._indicatorsElement = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, Default, config); Util.typeCheckConfig(NAME$2, config, DefaultType); return config; }; _proto._handleSwipe = function _handleSwipe() { var absDeltax = Math.abs(this.touchDeltaX); if (absDeltax <= SWIPE_THRESHOLD) { return; } var direction = absDeltax / this.touchDeltaX; // swipe left if (direction > 0) { this.prev(); } // swipe right if (direction < 0) { this.next(); } }; _proto._addEventListeners = function _addEventListeners() { var _this2 = this; if (this._config.keyboard) { $(this._element).on(Event$2.KEYDOWN, function (event) { return _this2._keydown(event); }); } if (this._config.pause === 'hover') { $(this._element).on(Event$2.MOUSEENTER, function (event) { return _this2.pause(event); }).on(Event$2.MOUSELEAVE, function (event) { return _this2.cycle(event); }); } if (this._config.touch) { this._addTouchEventListeners(); } }; _proto._addTouchEventListeners = function _addTouchEventListeners() { var _this3 = this; if (!this._touchSupported) { return; } var start = function start(event) { if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { _this3.touchStartX = event.originalEvent.clientX; } else if (!_this3._pointerEvent) { _this3.touchStartX = event.originalEvent.touches[0].clientX; } }; var move = function move(event) { // ensure swiping with one touch and not pinching if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { _this3.touchDeltaX = 0; } else { _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; } }; var end = function end(event) { if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; } _this3._handleSwipe(); if (_this3._config.pause === 'hover') { // If it's a touch-enabled device, mouseenter/leave are fired as // part of the mouse compatibility events on first tap - the carousel // would stop cycling until user tapped out of it; // here, we listen for touchend, explicitly pause the carousel // (as if it's the second time we tap on it, mouseenter compat event // is NOT fired) and after a timeout (to allow for mouse compatibility // events to fire) we explicitly restart cycling _this3.pause(); if (_this3.touchTimeout) { clearTimeout(_this3.touchTimeout); } _this3.touchTimeout = setTimeout(function (event) { return _this3.cycle(event); }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); } }; $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { return e.preventDefault(); }); if (this._pointerEvent) { $(this._element).on(Event$2.POINTERDOWN, function (event) { return start(event); }); $(this._element).on(Event$2.POINTERUP, function (event) { return end(event); }); this._element.classList.add(ClassName$2.POINTER_EVENT); } else { $(this._element).on(Event$2.TOUCHSTART, function (event) { return start(event); }); $(this._element).on(Event$2.TOUCHMOVE, function (event) { return move(event); }); $(this._element).on(Event$2.TOUCHEND, function (event) { return end(event); }); } }; _proto._keydown = function _keydown(event) { if (/input|textarea/i.test(event.target.tagName)) { return; } switch (event.which) { case ARROW_LEFT_KEYCODE: event.preventDefault(); this.prev(); break; case ARROW_RIGHT_KEYCODE: event.preventDefault(); this.next(); break; default: } }; _proto._getItemIndex = function _getItemIndex(element) { this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; return this._items.indexOf(element); }; _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { var isNextDirection = direction === Direction.NEXT; var isPrevDirection = direction === Direction.PREV; var activeIndex = this._getItemIndex(activeElement); var lastItemIndex = this._items.length - 1; var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; if (isGoingToWrap && !this._config.wrap) { return activeElement; } var delta = direction === Direction.PREV ? -1 : 1; var itemIndex = (activeIndex + delta) % this._items.length; return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; }; _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { var targetIndex = this._getItemIndex(relatedTarget); var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); var slideEvent = $.Event(Event$2.SLIDE, { relatedTarget: relatedTarget, direction: eventDirectionName, from: fromIndex, to: targetIndex }); $(this._element).trigger(slideEvent); return slideEvent; }; _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { if (this._indicatorsElement) { var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); $(indicators).removeClass(ClassName$2.ACTIVE); var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; if (nextIndicator) { $(nextIndicator).addClass(ClassName$2.ACTIVE); } } }; _proto._slide = function _slide(direction, element) { var _this4 = this; var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); var activeElementIndex = this._getItemIndex(activeElement); var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); var nextElementIndex = this._getItemIndex(nextElement); var isCycling = Boolean(this._interval); var directionalClassName; var orderClassName; var eventDirectionName; if (direction === Direction.NEXT) { directionalClassName = ClassName$2.LEFT; orderClassName = ClassName$2.NEXT; eventDirectionName = Direction.LEFT; } else { directionalClassName = ClassName$2.RIGHT; orderClassName = ClassName$2.PREV; eventDirectionName = Direction.RIGHT; } if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { this._isSliding = false; return; } var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); if (slideEvent.isDefaultPrevented()) { return; } if (!activeElement || !nextElement) { // Some weirdness is happening, so we bail return; } this._isSliding = true; if (isCycling) { this.pause(); } this._setActiveIndicatorElement(nextElement); var slidEvent = $.Event(Event$2.SLID, { relatedTarget: nextElement, direction: eventDirectionName, from: activeElementIndex, to: nextElementIndex }); if ($(this._element).hasClass(ClassName$2.SLIDE)) { $(nextElement).addClass(orderClassName); Util.reflow(nextElement); $(activeElement).addClass(directionalClassName); $(nextElement).addClass(directionalClassName); var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); if (nextElementInterval) { this._config.defaultInterval = this._config.defaultInterval || this._config.interval; this._config.interval = nextElementInterval; } else { this._config.interval = this._config.defaultInterval || this._config.interval; } var transitionDuration = Util.getTransitionDurationFromElement(activeElement); $(activeElement).one(Util.TRANSITION_END, function () { $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); _this4._isSliding = false; setTimeout(function () { return $(_this4._element).trigger(slidEvent); }, 0); }).emulateTransitionEnd(transitionDuration); } else { $(activeElement).removeClass(ClassName$2.ACTIVE); $(nextElement).addClass(ClassName$2.ACTIVE); this._isSliding = false; $(this._element).trigger(slidEvent); } if (isCycling) { this.cycle(); } } // Static ; Carousel._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$2); var _config = _objectSpread({}, Default, $(this).data()); if (typeof config === 'object') { _config = _objectSpread({}, _config, config); } var action = typeof config === 'string' ? config : _config.slide; if (!data) { data = new Carousel(this, _config); $(this).data(DATA_KEY$2, data); } if (typeof config === 'number') { data.to(config); } else if (typeof action === 'string') { if (typeof data[action] === 'undefined') { throw new TypeError("No method named \"" + action + "\""); } data[action](); } else if (_config.interval && _config.ride) { data.pause(); data.cycle(); } }); }; Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { var selector = Util.getSelectorFromElement(this); if (!selector) { return; } var target = $(selector)[0]; if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { return; } var config = _objectSpread({}, $(target).data(), $(this).data()); var slideIndex = this.getAttribute('data-slide-to'); if (slideIndex) { config.interval = false; } Carousel._jQueryInterface.call($(target), config); if (slideIndex) { $(target).data(DATA_KEY$2).to(slideIndex); } event.preventDefault(); }; _createClass(Carousel, null, [{ key: "VERSION", get: function get() { return VERSION$2; } }, { key: "Default", get: function get() { return Default; } }]); return Carousel; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); $(window).on(Event$2.LOAD_DATA_API, function () { var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); for (var i = 0, len = carousels.length; i < len; i++) { var $carousel = $(carousels[i]); Carousel._jQueryInterface.call($carousel, $carousel.data()); } }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$2] = Carousel._jQueryInterface; $.fn[NAME$2].Constructor = Carousel; $.fn[NAME$2].noConflict = function () { $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; return Carousel._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$3 = 'collapse'; var VERSION$3 = '4.3.1'; var DATA_KEY$3 = 'bs.collapse'; var EVENT_KEY$3 = "." + DATA_KEY$3; var DATA_API_KEY$3 = '.data-api'; var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; var Default$1 = { toggle: true, parent: '' }; var DefaultType$1 = { toggle: 'boolean', parent: '(string|element)' }; var Event$3 = { SHOW: "show" + EVENT_KEY$3, SHOWN: "shown" + EVENT_KEY$3, HIDE: "hide" + EVENT_KEY$3, HIDDEN: "hidden" + EVENT_KEY$3, CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 }; var ClassName$3 = { SHOW: 'show', COLLAPSE: 'collapse', COLLAPSING: 'collapsing', COLLAPSED: 'collapsed' }; var Dimension = { WIDTH: 'width', HEIGHT: 'height' }; var Selector$3 = { ACTIVES: '.show, .collapsing', DATA_TOGGLE: '[data-toggle="collapse"]' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Collapse = /*#__PURE__*/ function () { function Collapse(element, config) { this._isTransitioning = false; this._element = element; this._config = this._getConfig(config); this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); for (var i = 0, len = toggleList.length; i < len; i++) { var elem = toggleList[i]; var selector = Util.getSelectorFromElement(elem); var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { return foundElem === element; }); if (selector !== null && filterElement.length > 0) { this._selector = selector; this._triggerArray.push(elem); } } this._parent = this._config.parent ? this._getParent() : null; if (!this._config.parent) { this._addAriaAndCollapsedClass(this._element, this._triggerArray); } if (this._config.toggle) { this.toggle(); } } // Getters var _proto = Collapse.prototype; // Public _proto.toggle = function toggle() { if ($(this._element).hasClass(ClassName$3.SHOW)) { this.hide(); } else { this.show(); } }; _proto.show = function show() { var _this = this; if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { return; } var actives; var activesData; if (this._parent) { actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { if (typeof _this._config.parent === 'string') { return elem.getAttribute('data-parent') === _this._config.parent; } return elem.classList.contains(ClassName$3.COLLAPSE); }); if (actives.length === 0) { actives = null; } } if (actives) { activesData = $(actives).not(this._selector).data(DATA_KEY$3); if (activesData && activesData._isTransitioning) { return; } } var startEvent = $.Event(Event$3.SHOW); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } if (actives) { Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); if (!activesData) { $(actives).data(DATA_KEY$3, null); } } var dimension = this._getDimension(); $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); this._element.style[dimension] = 0; if (this._triggerArray.length) { $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); } this.setTransitioning(true); var complete = function complete() { $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); _this._element.style[dimension] = ''; _this.setTransitioning(false); $(_this._element).trigger(Event$3.SHOWN); }; var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var scrollSize = "scroll" + capitalizedDimension; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); this._element.style[dimension] = this._element[scrollSize] + "px"; }; _proto.hide = function hide() { var _this2 = this; if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { return; } var startEvent = $.Event(Event$3.HIDE); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } var dimension = this._getDimension(); this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; Util.reflow(this._element); $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); var triggerArrayLength = this._triggerArray.length; if (triggerArrayLength > 0) { for (var i = 0; i < triggerArrayLength; i++) { var trigger = this._triggerArray[i]; var selector = Util.getSelectorFromElement(trigger); if (selector !== null) { var $elem = $([].slice.call(document.querySelectorAll(selector))); if (!$elem.hasClass(ClassName$3.SHOW)) { $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); } } } } this.setTransitioning(true); var complete = function complete() { _this2.setTransitioning(false); $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); }; this._element.style[dimension] = ''; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); }; _proto.setTransitioning = function setTransitioning(isTransitioning) { this._isTransitioning = isTransitioning; }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$3); this._config = null; this._parent = null; this._element = null; this._triggerArray = null; this._isTransitioning = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, Default$1, config); config.toggle = Boolean(config.toggle); // Coerce string values Util.typeCheckConfig(NAME$3, config, DefaultType$1); return config; }; _proto._getDimension = function _getDimension() { var hasWidth = $(this._element).hasClass(Dimension.WIDTH); return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; }; _proto._getParent = function _getParent() { var _this3 = this; var parent; if (Util.isElement(this._config.parent)) { parent = this._config.parent; // It's a jQuery object if (typeof this._config.parent.jquery !== 'undefined') { parent = this._config.parent[0]; } } else { parent = document.querySelector(this._config.parent); } var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; var children = [].slice.call(parent.querySelectorAll(selector)); $(children).each(function (i, element) { _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); }); return parent; }; _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { var isOpen = $(element).hasClass(ClassName$3.SHOW); if (triggerArray.length) { $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); } } // Static ; Collapse._getTargetFromElement = function _getTargetFromElement(element) { var selector = Util.getSelectorFromElement(element); return selector ? document.querySelector(selector) : null; }; Collapse._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $this = $(this); var data = $this.data(DATA_KEY$3); var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); if (!data && _config.toggle && /show|hide/.test(config)) { _config.toggle = false; } if (!data) { data = new Collapse(this, _config); $this.data(DATA_KEY$3, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Collapse, null, [{ key: "VERSION", get: function get() { return VERSION$3; } }, { key: "Default", get: function get() { return Default$1; } }]); return Collapse; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { // preventDefault only for elements (which change the URL) not inside the collapsible element if (event.currentTarget.tagName === 'A') { event.preventDefault(); } var $trigger = $(this); var selector = Util.getSelectorFromElement(this); var selectors = [].slice.call(document.querySelectorAll(selector)); $(selectors).each(function () { var $target = $(this); var data = $target.data(DATA_KEY$3); var config = data ? 'toggle' : $trigger.data(); Collapse._jQueryInterface.call($target, config); }); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$3] = Collapse._jQueryInterface; $.fn[NAME$3].Constructor = Collapse; $.fn[NAME$3].noConflict = function () { $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; return Collapse._jQueryInterface; }; /**! * @fileOverview Kickass library to create and place poppers near their reference elements. * @version 1.14.7 * @license * Copyright (c) 2016 Federico Zivolo and contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var timeoutDuration = 0; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { timeoutDuration = 1; break; } } function microtaskDebounce(fn) { var called = false; return function () { if (called) { return; } called = true; window.Promise.resolve().then(function () { called = false; fn(); }); }; } function taskDebounce(fn) { var scheduled = false; return function () { if (!scheduled) { scheduled = true; setTimeout(function () { scheduled = false; fn(); }, timeoutDuration); } }; } var supportsMicroTasks = isBrowser && window.Promise; /** * Create a debounced version of a method, that's asynchronously deferred * but called in the minimum time possible. * * @method * @memberof Popper.Utils * @argument {Function} fn * @returns {Function} */ var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; /** * Check if the given variable is a function * @method * @memberof Popper.Utils * @argument {Any} functionToCheck - variable to check * @returns {Boolean} answer to: is a function? */ function isFunction(functionToCheck) { var getType = {}; return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; } /** * Get CSS computed property of the given element * @method * @memberof Popper.Utils * @argument {Eement} element * @argument {String} property */ function getStyleComputedProperty(element, property) { if (element.nodeType !== 1) { return []; } // NOTE: 1 DOM access here var window = element.ownerDocument.defaultView; var css = window.getComputedStyle(element, null); return property ? css[property] : css; } /** * Returns the parentNode or the host of the element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} parent */ function getParentNode(element) { if (element.nodeName === 'HTML') { return element; } return element.parentNode || element.host; } /** * Returns the scrolling parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} scroll parent */ function getScrollParent(element) { // Return body, `getScroll` will take care to get the correct `scrollTop` from it if (!element) { return document.body; } switch (element.nodeName) { case 'HTML': case 'BODY': return element.ownerDocument.body; case '#document': return element.body; } // Firefox want us to check `-x` and `-y` variations as well var _getStyleComputedProp = getStyleComputedProperty(element), overflow = _getStyleComputedProp.overflow, overflowX = _getStyleComputedProp.overflowX, overflowY = _getStyleComputedProp.overflowY; if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { return element; } return getScrollParent(getParentNode(element)); } var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); /** * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils * @param {Number} version to check * @returns {Boolean} isIE */ function isIE(version) { if (version === 11) { return isIE11; } if (version === 10) { return isIE10; } return isIE11 || isIE10; } /** * Returns the offset parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} offset parent */ function getOffsetParent(element) { if (!element) { return document.documentElement; } var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent while (offsetParent === noOffsetParent && element.nextElementSibling) { offsetParent = (element = element.nextElementSibling).offsetParent; } var nodeName = offsetParent && offsetParent.nodeName; if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { return element ? element.ownerDocument.documentElement : document.documentElement; } // .offsetParent will return the closest TH, TD or TABLE in case // no offsetParent is present, I hate this job... if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { return getOffsetParent(offsetParent); } return offsetParent; } function isOffsetContainer(element) { var nodeName = element.nodeName; if (nodeName === 'BODY') { return false; } return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; } /** * Finds the root node (document, shadowDOM root) of the given element * @method * @memberof Popper.Utils * @argument {Element} node * @returns {Element} root node */ function getRoot(node) { if (node.parentNode !== null) { return getRoot(node.parentNode); } return node; } /** * Finds the offset parent common to the two provided nodes * @method * @memberof Popper.Utils * @argument {Element} element1 * @argument {Element} element2 * @returns {Element} common offset parent */ function findCommonOffsetParent(element1, element2) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { return document.documentElement; } // Here we make sure to give as "start" the element that comes first in the DOM var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; var start = order ? element1 : element2; var end = order ? element2 : element1; // Get common ancestor container var range = document.createRange(); range.setStart(start, 0); range.setEnd(end, 0); var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { if (isOffsetContainer(commonAncestorContainer)) { return commonAncestorContainer; } return getOffsetParent(commonAncestorContainer); } // one of the nodes is inside shadowDOM, find which one var element1root = getRoot(element1); if (element1root.host) { return findCommonOffsetParent(element1root.host, element2); } else { return findCommonOffsetParent(element1, getRoot(element2).host); } } /** * Gets the scroll value of the given element in the given side (top and left) * @method * @memberof Popper.Utils * @argument {Element} element * @argument {String} side `top` or `left` * @returns {number} amount of scrolled pixels */ function getScroll(element) { var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { var html = element.ownerDocument.documentElement; var scrollingElement = element.ownerDocument.scrollingElement || html; return scrollingElement[upperSide]; } return element[upperSide]; } /* * Sum or subtract the element scroll values (left and top) from a given rect object * @method * @memberof Popper.Utils * @param {Object} rect - Rect object you want to change * @param {HTMLElement} element - The element from the function reads the scroll values * @param {Boolean} subtract - set to true if you want to subtract the scroll values * @return {Object} rect - The modifier rect object */ function includeScroll(rect, element) { var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); var modifier = subtract ? -1 : 1; rect.top += scrollTop * modifier; rect.bottom += scrollTop * modifier; rect.left += scrollLeft * modifier; rect.right += scrollLeft * modifier; return rect; } /* * Helper to detect borders of a given element * @method * @memberof Popper.Utils * @param {CSSStyleDeclaration} styles * Result of `getStyleComputedProperty` on the given element * @param {String} axis - `x` or `y` * @return {number} borders - The borders size of the given axis */ function getBordersSize(styles, axis) { var sideA = axis === 'x' ? 'Left' : 'Top'; var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); } function getSize(axis, body, html, computedStyle) { return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); } function getWindowSizes(document) { var body = document.body; var html = document.documentElement; var computedStyle = isIE(10) && getComputedStyle(html); return { height: getSize('Height', body, html, computedStyle), width: getSize('Width', body, html, computedStyle) }; } var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var defineProperty = function (obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * Given element offsets, generate an output similar to getBoundingClientRect * @method * @memberof Popper.Utils * @argument {Object} offsets * @returns {Object} ClientRect like output */ function getClientRect(offsets) { return _extends({}, offsets, { right: offsets.left + offsets.width, bottom: offsets.top + offsets.height }); } /** * Get bounding client rect of given element * @method * @memberof Popper.Utils * @param {HTMLElement} element * @return {Object} client rect */ function getBoundingClientRect(element) { var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 try { if (isIE(10)) { rect = element.getBoundingClientRect(); var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); rect.top += scrollTop; rect.left += scrollLeft; rect.bottom += scrollTop; rect.right += scrollLeft; } else { rect = element.getBoundingClientRect(); } } catch (e) {} var result = { left: rect.left, top: rect.top, width: rect.right - rect.left, height: rect.bottom - rect.top }; // subtract scrollbar size from sizes var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; var width = sizes.width || element.clientWidth || result.right - result.left; var height = sizes.height || element.clientHeight || result.bottom - result.top; var horizScrollbar = element.offsetWidth - width; var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if (horizScrollbar || vertScrollbar) { var styles = getStyleComputedProperty(element); horizScrollbar -= getBordersSize(styles, 'x'); vertScrollbar -= getBordersSize(styles, 'y'); result.width -= horizScrollbar; result.height -= vertScrollbar; } return getClientRect(result); } function getOffsetRectRelativeToArbitraryNode(children, parent) { var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isIE10 = isIE(10); var isHTML = parent.nodeName === 'HTML'; var childrenRect = getBoundingClientRect(children); var parentRect = getBoundingClientRect(parent); var scrollParent = getScrollParent(children); var styles = getStyleComputedProperty(parent); var borderTopWidth = parseFloat(styles.borderTopWidth, 10); var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); // In cases where the parent is fixed, we must ignore negative scroll in offset calc if (fixedPosition && isHTML) { parentRect.top = Math.max(parentRect.top, 0); parentRect.left = Math.max(parentRect.left, 0); } var offsets = getClientRect({ top: childrenRect.top - parentRect.top - borderTopWidth, left: childrenRect.left - parentRect.left - borderLeftWidth, width: childrenRect.width, height: childrenRect.height }); offsets.marginTop = 0; offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent // we do this only on HTML because it's the only element that behaves // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { var marginTop = parseFloat(styles.marginTop, 10); var marginLeft = parseFloat(styles.marginLeft, 10); offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; offsets.left -= borderLeftWidth - marginLeft; offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them offsets.marginTop = marginTop; offsets.marginLeft = marginLeft; } if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { offsets = includeScroll(offsets, parent); } return offsets; } function getViewportOffsetRectRelativeToArtbitraryNode(element) { var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var html = element.ownerDocument.documentElement; var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); var width = Math.max(html.clientWidth, window.innerWidth || 0); var height = Math.max(html.clientHeight, window.innerHeight || 0); var scrollTop = !excludeScroll ? getScroll(html) : 0; var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; var offset = { top: scrollTop - relativeOffset.top + relativeOffset.marginTop, left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, width: width, height: height }; return getClientRect(offset); } /** * Check if the given element is fixed or is inside a fixed parent * @method * @memberof Popper.Utils * @argument {Element} element * @argument {Element} customContainer * @returns {Boolean} answer to "isFixed?" */ function isFixed(element) { var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { return false; } if (getStyleComputedProperty(element, 'position') === 'fixed') { return true; } var parentNode = getParentNode(element); if (!parentNode) { return false; } return isFixed(parentNode); } /** * Finds the first parent of an element that has a transformed property defined * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} first transformed parent or documentElement */ function getFixedPositionOffsetParent(element) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element || !element.parentElement || isIE()) { return document.documentElement; } var el = element.parentElement; while (el && getStyleComputedProperty(el, 'transform') === 'none') { el = el.parentElement; } return el || document.documentElement; } /** * Computed the boundaries limits and return them * @method * @memberof Popper.Utils * @param {HTMLElement} popper * @param {HTMLElement} reference * @param {number} padding * @param {HTMLElement} boundariesElement - Element used to define the boundaries * @param {Boolean} fixedPosition - Is in fixed position mode * @returns {Object} Coordinates of the boundaries */ function getBoundaries(popper, reference, padding, boundariesElement) { var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here var boundaries = { top: 0, left: 0 }; var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); // Handle viewport case if (boundariesElement === 'viewport') { boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); } else { // Handle other cases based on DOM element used as boundaries var boundariesNode = void 0; if (boundariesElement === 'scrollParent') { boundariesNode = getScrollParent(getParentNode(reference)); if (boundariesNode.nodeName === 'BODY') { boundariesNode = popper.ownerDocument.documentElement; } } else if (boundariesElement === 'window') { boundariesNode = popper.ownerDocument.documentElement; } else { boundariesNode = boundariesElement; } var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { var _getWindowSizes = getWindowSizes(popper.ownerDocument), height = _getWindowSizes.height, width = _getWindowSizes.width; boundaries.top += offsets.top - offsets.marginTop; boundaries.bottom = height + offsets.top; boundaries.left += offsets.left - offsets.marginLeft; boundaries.right = width + offsets.left; } else { // for all the other DOM elements, this one is good boundaries = offsets; } } // Add paddings padding = padding || 0; var isPaddingNumber = typeof padding === 'number'; boundaries.left += isPaddingNumber ? padding : padding.left || 0; boundaries.top += isPaddingNumber ? padding : padding.top || 0; boundaries.right -= isPaddingNumber ? padding : padding.right || 0; boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; return boundaries; } function getArea(_ref) { var width = _ref.width, height = _ref.height; return width * height; } /** * Utility used to transform the `auto` placement to the placement with more * available space. * @method * @memberof Popper.Utils * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; if (placement.indexOf('auto') === -1) { return placement; } var boundaries = getBoundaries(popper, reference, padding, boundariesElement); var rects = { top: { width: boundaries.width, height: refRect.top - boundaries.top }, right: { width: boundaries.right - refRect.right, height: boundaries.height }, bottom: { width: boundaries.width, height: boundaries.bottom - refRect.bottom }, left: { width: refRect.left - boundaries.left, height: boundaries.height } }; var sortedAreas = Object.keys(rects).map(function (key) { return _extends({ key: key }, rects[key], { area: getArea(rects[key]) }); }).sort(function (a, b) { return b.area - a.area; }); var filteredAreas = sortedAreas.filter(function (_ref2) { var width = _ref2.width, height = _ref2.height; return width >= popper.clientWidth && height >= popper.clientHeight; }); var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; var variation = placement.split('-')[1]; return computedPlacement + (variation ? '-' + variation : ''); } /** * Get offsets to the reference element * @method * @memberof Popper.Utils * @param {Object} state * @param {Element} popper - the popper element * @param {Element} reference - the reference element (the popper will be relative to this) * @param {Element} fixedPosition - is in fixed position mode * @returns {Object} An object containing the offsets which will be applied to the popper */ function getReferenceOffsets(state, popper, reference) { var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); } /** * Get the outer sizes of the given element (offset size + margins) * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Object} object containing width and height properties */ function getOuterSizes(element) { var window = element.ownerDocument.defaultView; var styles = window.getComputedStyle(element); var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); var result = { width: element.offsetWidth + y, height: element.offsetHeight + x }; return result; } /** * Get the opposite placement of the given one * @method * @memberof Popper.Utils * @argument {String} placement * @returns {String} flipped placement */ function getOppositePlacement(placement) { var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return placement.replace(/left|right|bottom|top/g, function (matched) { return hash[matched]; }); } /** * Get offsets to the popper * @method * @memberof Popper.Utils * @param {Object} position - CSS position the Popper will get applied * @param {HTMLElement} popper - the popper element * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) * @param {String} placement - one of the valid placement options * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper */ function getPopperOffsets(popper, referenceOffsets, placement) { placement = placement.split('-')[0]; // Get popper node sizes var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object var popperOffsets = { width: popperRect.width, height: popperRect.height }; // depending by the popper placement we have to compute its offsets slightly differently var isHoriz = ['right', 'left'].indexOf(placement) !== -1; var mainSide = isHoriz ? 'top' : 'left'; var secondarySide = isHoriz ? 'left' : 'top'; var measurement = isHoriz ? 'height' : 'width'; var secondaryMeasurement = !isHoriz ? 'height' : 'width'; popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; if (placement === secondarySide) { popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; } else { popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; } return popperOffsets; } /** * Mimics the `find` method of Array * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function find(arr, check) { // use native find if supported if (Array.prototype.find) { return arr.find(check); } // use `filter` to obtain the same behavior of `find` return arr.filter(check)[0]; } /** * Return the index of the matching object * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function findIndex(arr, prop, value) { // use native findIndex if supported if (Array.prototype.findIndex) { return arr.findIndex(function (cur) { return cur[prop] === value; }); } // use `find` + `indexOf` if `findIndex` isn't supported var match = find(arr, function (obj) { return obj[prop] === value; }); return arr.indexOf(match); } /** * Loop trough the list of modifiers and run them in order, * each of them will then edit the data object. * @method * @memberof Popper.Utils * @param {dataObject} data * @param {Array} modifiers * @param {String} ends - Optional modifier name used as stopper * @returns {dataObject} */ function runModifiers(modifiers, data, ends) { var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); modifiersToRun.forEach(function (modifier) { if (modifier['function']) { // eslint-disable-line dot-notation console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); } var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation if (modifier.enabled && isFunction(fn)) { // Add properties to offsets to make them a complete clientRect object // we do this before each modifier to make sure the previous one doesn't // mess with these values data.offsets.popper = getClientRect(data.offsets.popper); data.offsets.reference = getClientRect(data.offsets.reference); data = fn(data, modifier); } }); return data; } /** * Updates the position of the popper, computing the new offsets and applying * the new style.
* Prefer `scheduleUpdate` over `update` because of performance reasons. * @method * @memberof Popper */ function update() { // if popper is destroyed, don't perform any further update if (this.state.isDestroyed) { return; } var data = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: false, offsets: {} }; // compute reference element offsets data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement` data.originalPlacement = data.placement; data.positionFixed = this.options.positionFixed; // compute the popper offsets data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback // the other ones will call `onUpdate` callback if (!this.state.isCreated) { this.state.isCreated = true; this.options.onCreate(data); } else { this.options.onUpdate(data); } } /** * Helper used to know if the given modifier is enabled. * @method * @memberof Popper.Utils * @returns {Boolean} */ function isModifierEnabled(modifiers, modifierName) { return modifiers.some(function (_ref) { var name = _ref.name, enabled = _ref.enabled; return enabled && name === modifierName; }); } /** * Get the prefixed supported property name * @method * @memberof Popper.Utils * @argument {String} property (camelCase) * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) */ function getSupportedPropertyName(property) { var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; var upperProp = property.charAt(0).toUpperCase() + property.slice(1); for (var i = 0; i < prefixes.length; i++) { var prefix = prefixes[i]; var toCheck = prefix ? '' + prefix + upperProp : property; if (typeof document.body.style[toCheck] !== 'undefined') { return toCheck; } } return null; } /** * Destroys the popper. * @method * @memberof Popper */ function destroy() { this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled if (isModifierEnabled(this.modifiers, 'applyStyle')) { this.popper.removeAttribute('x-placement'); this.popper.style.position = ''; this.popper.style.top = ''; this.popper.style.left = ''; this.popper.style.right = ''; this.popper.style.bottom = ''; this.popper.style.willChange = ''; this.popper.style[getSupportedPropertyName('transform')] = ''; } this.disableEventListeners(); // remove the popper if user explicity asked for the deletion on destroy // do not use `remove` because IE11 doesn't support it if (this.options.removeOnDestroy) { this.popper.parentNode.removeChild(this.popper); } return this; } /** * Get the window associated with the element * @argument {Element} element * @returns {Window} */ function getWindow(element) { var ownerDocument = element.ownerDocument; return ownerDocument ? ownerDocument.defaultView : window; } function attachToScrollParents(scrollParent, event, callback, scrollParents) { var isBody = scrollParent.nodeName === 'BODY'; var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; target.addEventListener(event, callback, { passive: true }); if (!isBody) { attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); } scrollParents.push(target); } /** * Setup needed event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function setupEventListeners(reference, options, state, updateBound) { // Resize event listener on window state.updateBound = updateBound; getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); // Scroll event listener on scroll parents var scrollElement = getScrollParent(reference); attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); state.scrollElement = scrollElement; state.eventsEnabled = true; return state; } /** * It will add resize/scroll events and start recalculating * position of the popper element when they are triggered. * @method * @memberof Popper */ function enableEventListeners() { if (!this.state.eventsEnabled) { this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); } } /** * Remove event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function removeEventListeners(reference, state) { // Remove resize event listener on window getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents state.scrollParents.forEach(function (target) { target.removeEventListener('scroll', state.updateBound); }); // Reset state state.updateBound = null; state.scrollParents = []; state.scrollElement = null; state.eventsEnabled = false; return state; } /** * It will remove resize/scroll events and won't recalculate popper position * when they are triggered. It also won't trigger `onUpdate` callback anymore, * unless you call `update` method manually. * @method * @memberof Popper */ function disableEventListeners() { if (this.state.eventsEnabled) { cancelAnimationFrame(this.scheduleUpdate); this.state = removeEventListeners(this.reference, this.state); } } /** * Tells if a given input is a number * @method * @memberof Popper.Utils * @param {*} input to check * @return {Boolean} */ function isNumeric(n) { return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); } /** * Set the style to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the style to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setStyles(element, styles) { Object.keys(styles).forEach(function (prop) { var unit = ''; // add unit if the value is numeric and is one of the following if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { unit = 'px'; } element.style[prop] = styles[prop] + unit; }); } /** * Set the attributes to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the attributes to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setAttributes(element, attributes) { Object.keys(attributes).forEach(function (prop) { var value = attributes[prop]; if (value !== false) { element.setAttribute(prop, attributes[prop]); } else { element.removeAttribute(prop); } }); } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} data.styles - List of style properties - values to apply to popper element * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element * @argument {Object} options - Modifiers configuration and options * @returns {Object} The same data object */ function applyStyle(data) { // any property present in `data.styles` will be applied to the popper, // in this way we can make the 3rd party modifiers add custom styles to it // Be aware, modifiers could override the properties defined in the previous // lines of this modifier! setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper, // they will be set as HTML attributes of the element setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties if (data.arrowElement && Object.keys(data.arrowStyles).length) { setStyles(data.arrowElement, data.arrowStyles); } return data; } /** * Set the x-placement attribute before everything else because it could be used * to add margins to the popper margins needs to be calculated to get the * correct popper offsets. * @method * @memberof Popper.modifiers * @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper * @param {Object} options - Popper.js options */ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { // compute reference element offsets var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because // without the position applied we can't guarantee correct computations setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); return options; } /** * @function * @memberof Popper.Utils * @argument {Object} data - The data object generated by `update` method * @argument {Boolean} shouldRound - If the offsets should be rounded at all * @returns {Object} The popper's position offsets rounded * * The tale of pixel-perfect positioning. It's still not 100% perfect, but as * good as it can be within reason. * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 * * Low DPI screens cause a popper to be blurry if not using full pixels (Safari * as well on High DPI screens). * * Firefox prefers no rounding for positioning and does not have blurriness on * high DPI screens. * * Only horizontal placement and left/right values need to be considered. */ function getRoundedOffsets(data, shouldRound) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var round = Math.round, floor = Math.floor; var noRound = function noRound(v) { return v; }; var referenceWidth = round(reference.width); var popperWidth = round(popper.width); var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; var isVariation = data.placement.indexOf('-') !== -1; var sameWidthParity = referenceWidth % 2 === popperWidth % 2; var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; var verticalToInteger = !shouldRound ? noRound : round; return { left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), top: verticalToInteger(popper.top), bottom: verticalToInteger(popper.bottom), right: horizontalToInteger(popper.right) }; } var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeStyle(data, options) { var x = options.x, y = options.y; var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { return modifier.name === 'applyStyle'; }).gpuAcceleration; if (legacyGpuAccelerationOption !== undefined) { console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); } var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; var offsetParent = getOffsetParent(data.instance.popper); var offsetParentRect = getBoundingClientRect(offsetParent); // Styles var styles = { position: popper.position }; var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); var sideA = x === 'bottom' ? 'top' : 'bottom'; var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported, // we use `translate3d` to apply the position to the popper we // automatically use the supported prefixed version if needed var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?) // If the content of the popper grows once it's been positioned, it // may happen that the popper gets misplaced because of the new content // overflowing its reference element // To avoid this problem, we provide two options (x and y), which allow // the consumer to define the offset origin. // If we position a popper on top of a reference element, we can set // `x` to `top` to make the popper grow towards its top instead of // its bottom. var left = void 0, top = void 0; if (sideA === 'bottom') { // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) // and not the bottom of the html element if (offsetParent.nodeName === 'HTML') { top = -offsetParent.clientHeight + offsets.bottom; } else { top = -offsetParentRect.height + offsets.bottom; } } else { top = offsets.top; } if (sideB === 'right') { if (offsetParent.nodeName === 'HTML') { left = -offsetParent.clientWidth + offsets.right; } else { left = -offsetParentRect.width + offsets.right; } } else { left = offsets.left; } if (gpuAcceleration && prefixedProperty) { styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; styles[sideA] = 0; styles[sideB] = 0; styles.willChange = 'transform'; } else { // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties var invertTop = sideA === 'bottom' ? -1 : 1; var invertLeft = sideB === 'right' ? -1 : 1; styles[sideA] = top * invertTop; styles[sideB] = left * invertLeft; styles.willChange = sideA + ', ' + sideB; } // Attributes var attributes = { 'x-placement': data.placement }; // Update `data` attributes, styles and arrowStyles data.attributes = _extends({}, attributes, data.attributes); data.styles = _extends({}, styles, data.styles); data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); return data; } /** * Helper used to know if the given modifier depends from another one.
* It checks if the needed modifier is listed and enabled. * @method * @memberof Popper.Utils * @param {Array} modifiers - list of modifiers * @param {String} requestingName - name of requesting modifier * @param {String} requestedName - name of requested modifier * @returns {Boolean} */ function isModifierRequired(modifiers, requestingName, requestedName) { var requesting = find(modifiers, function (_ref) { var name = _ref.name; return name === requestingName; }); var isRequired = !!requesting && modifiers.some(function (modifier) { return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; }); if (!isRequired) { var _requesting = '`' + requestingName + '`'; var requested = '`' + requestedName + '`'; console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); } return isRequired; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function arrow(data, options) { var _data$offsets$arrow; // arrow depends on keepTogether in order to work if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { return data; } var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector if (typeof arrowElement === 'string') { arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier if (!arrowElement) { return data; } } else { // if the arrowElement isn't a query selector we must check that the // provided DOM node is child of its popper node if (!data.instance.popper.contains(arrowElement)) { console.warn('WARNING: `arrow.element` must be child of its popper element!'); return data; } } var placement = data.placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isVertical = ['left', 'right'].indexOf(placement) !== -1; var len = isVertical ? 'height' : 'width'; var sideCapitalized = isVertical ? 'Top' : 'Left'; var side = sideCapitalized.toLowerCase(); var altSide = isVertical ? 'left' : 'top'; var opSide = isVertical ? 'bottom' : 'right'; var arrowElementSize = getOuterSizes(arrowElement)[len]; // // extends keepTogether behavior making sure the popper and its // reference have enough pixels in conjunction // // top/left side if (reference[opSide] - arrowElementSize < popper[side]) { data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); } // bottom/right side if (reference[side] + arrowElementSize > popper[opSide]) { data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; } data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available var css = getStyleComputedProperty(data.instance.popper); var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); data.arrowElement = arrowElement; data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); return data; } /** * Get the opposite placement variation of the given one * @method * @memberof Popper.Utils * @argument {String} placement variation * @returns {String} flipped placement variation */ function getOppositeVariation(variation) { if (variation === 'end') { return 'start'; } else if (variation === 'start') { return 'end'; } return variation; } /** * List of accepted placements to use as values of the `placement` option.
* Valid placements are: * - `auto` * - `top` * - `right` * - `bottom` * - `left` * * Each placement can have a variation from this list: * - `-start` * - `-end` * * Variations are interpreted easily if you think of them as the left to right * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` * is right.
* Vertically (`left` and `right`), `start` is top and `end` is bottom. * * Some valid examples are: * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) * - `auto-end` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} * @enum {String} * @readonly * @method placements * @memberof Popper */ var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end` var validPlacements = placements.slice(3); /** * Given an initial placement, returns all the subsequent placements * clockwise (or counter-clockwise). * * @method * @memberof Popper.Utils * @argument {String} placement - A valid placement (it accepts variations) * @argument {Boolean} counter - Set to true to walk the placements counterclockwise * @returns {Array} placements including their variations */ function clockwise(placement) { var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var index = validPlacements.indexOf(placement); var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); return counter ? arr.reverse() : arr; } var BEHAVIORS = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' }; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function flip(data, options) { // if `inner` modifier is enabled, we can't use the `flip` modifier if (isModifierEnabled(data.instance.modifiers, 'inner')) { return data; } if (data.flipped && data.placement === data.originalPlacement) { // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides return data; } var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); var placement = data.placement.split('-')[0]; var placementOpposite = getOppositePlacement(placement); var variation = data.placement.split('-')[1] || ''; var flipOrder = []; switch (options.behavior) { case BEHAVIORS.FLIP: flipOrder = [placement, placementOpposite]; break; case BEHAVIORS.CLOCKWISE: flipOrder = clockwise(placement); break; case BEHAVIORS.COUNTERCLOCKWISE: flipOrder = clockwise(placement, true); break; default: flipOrder = options.behavior; } flipOrder.forEach(function (step, index) { if (placement !== step || flipOrder.length === index + 1) { return data; } placement = data.placement.split('-')[0]; placementOpposite = getOppositePlacement(placement); var popperOffsets = data.offsets.popper; var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here var floor = Math.floor; var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); if (overlapsRef || overflowsBoundaries || flippedVariation) { // this boolean to detect any flip loop data.flipped = true; if (overlapsRef || overflowsBoundaries) { placement = flipOrder[index + 1]; } if (flippedVariation) { variation = getOppositeVariation(variation); } data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with // any additional property we may add in the future data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); data = runModifiers(data.instance.modifiers, data, 'flip'); } }); return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function keepTogether(data) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var placement = data.placement.split('-')[0]; var floor = Math.floor; var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; var side = isVertical ? 'right' : 'bottom'; var opSide = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; if (popper[side] < floor(reference[opSide])) { data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; } if (popper[opSide] > floor(reference[side])) { data.offsets.popper[opSide] = floor(reference[side]); } return data; } /** * Converts a string containing value + unit into a px value number * @function * @memberof {modifiers~offset} * @private * @argument {String} str - Value + unit string * @argument {String} measurement - `height` or `width` * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @returns {Number|String} * Value in pixels, or original string if no values were extracted */ function toValue(str, measurement, popperOffsets, referenceOffsets) { // separate value from unit var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); var value = +split[1]; var unit = split[2]; // If it's not a number it's an operator, I guess if (!value) { return str; } if (unit.indexOf('%') === 0) { var element = void 0; switch (unit) { case '%p': element = popperOffsets; break; case '%': case '%r': default: element = referenceOffsets; } var rect = getClientRect(element); return rect[measurement] / 100 * value; } else if (unit === 'vh' || unit === 'vw') { // if is a vh or vw, we calculate the size based on the viewport var size = void 0; if (unit === 'vh') { size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); } else { size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); } return size / 100 * value; } else { // if is an explicit pixel unit, we get rid of the unit and keep the value // if is an implicit unit, it's px, and we return just the value return value; } } /** * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. * @function * @memberof {modifiers~offset} * @private * @argument {String} offset * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @argument {String} basePlacement * @returns {Array} a two cells array with x and y offsets in numbers */ function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width // in this way the first offset will use an axis and the second one // will use the other one var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands // The regex addresses values with the plus or minus sign in front (+10, -20, etc) var fragments = offset.split(/(\+|\-)/).map(function (frag) { return frag.trim(); }); // Detect if the offset string contains a pair of values or a single one // they could be separated by comma or space var divider = fragments.indexOf(find(fragments, function (frag) { return frag.search(/,|\s/) !== -1; })); if (fragments[divider] && fragments[divider].indexOf(',') === -1) { console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); } // If divider is found, we divide the list of values and operands to divide // them by ofset X and Y. var splitRegex = /\s*,\s*|\s+/; var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations ops = ops.map(function (op, index) { // Most of the units rely on the orientation of the popper var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; var mergeWithPrevious = false; return op // This aggregates any `+` or `-` sign that aren't considered operators // e.g.: 10 + +5 => [10, +, +5] .reduce(function (a, b) { if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { a[a.length - 1] = b; mergeWithPrevious = true; return a; } else if (mergeWithPrevious) { a[a.length - 1] += b; mergeWithPrevious = false; return a; } else { return a.concat(b); } }, []) // Here we convert the string values into number values (in px) .map(function (str) { return toValue(str, measurement, popperOffsets, referenceOffsets); }); }); // Loop trough the offsets arrays and execute the operations ops.forEach(function (op, index) { op.forEach(function (frag, index2) { if (isNumeric(frag)) { offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); } }); }); return offsets; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @argument {Number|String} options.offset=0 * The offset value as described in the modifier description * @returns {Object} The data object, properly modified */ function offset(data, _ref) { var offset = _ref.offset; var placement = data.placement, _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var basePlacement = placement.split('-')[0]; var offsets = void 0; if (isNumeric(+offset)) { offsets = [+offset, 0]; } else { offsets = parseOffset(offset, popper, reference, basePlacement); } if (basePlacement === 'left') { popper.top += offsets[0]; popper.left -= offsets[1]; } else if (basePlacement === 'right') { popper.top += offsets[0]; popper.left += offsets[1]; } else if (basePlacement === 'top') { popper.left += offsets[0]; popper.top -= offsets[1]; } else if (basePlacement === 'bottom') { popper.left += offsets[0]; popper.top += offsets[1]; } data.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function preventOverflow(data, options) { var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to // go one step up and use the next offsetParent as reference to // avoid to make this modifier completely useless and look like broken if (data.instance.reference === boundariesElement) { boundariesElement = getOffsetParent(boundariesElement); } // NOTE: DOM access here // resets the popper's position so that the document size can be calculated excluding // the size of the popper element itself var transformProp = getSupportedPropertyName('transform'); var popperStyles = data.instance.popper.style; // assignment to help minification var top = popperStyles.top, left = popperStyles.left, transform = popperStyles[transformProp]; popperStyles.top = ''; popperStyles.left = ''; popperStyles[transformProp] = ''; var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here // restores the original style properties after the offsets have been computed popperStyles.top = top; popperStyles.left = left; popperStyles[transformProp] = transform; options.boundaries = boundaries; var order = options.priority; var popper = data.offsets.popper; var check = { primary: function primary(placement) { var value = popper[placement]; if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { value = Math.max(popper[placement], boundaries[placement]); } return defineProperty({}, placement, value); }, secondary: function secondary(placement) { var mainSide = placement === 'right' ? 'left' : 'top'; var value = popper[mainSide]; if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); } return defineProperty({}, mainSide, value); } }; order.forEach(function (placement) { var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; popper = _extends({}, popper, check[side](placement)); }); data.offsets.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function shift(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier if (shiftvariation) { var _data$offsets = data.offsets, reference = _data$offsets.reference, popper = _data$offsets.popper; var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; var side = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; var shiftOffsets = { start: defineProperty({}, side, reference[side]), end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) }; data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function hide(data) { if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { return data; } var refRect = data.offsets.reference; var bound = find(data.instance.modifiers, function (modifier) { return modifier.name === 'preventOverflow'; }).boundaries; if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === true) { return data; } data.hide = true; data.attributes['x-out-of-boundaries'] = ''; } else { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === false) { return data; } data.hide = false; data.attributes['x-out-of-boundaries'] = false; } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function inner(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); data.placement = getOppositePlacement(placement); data.offsets.popper = getClientRect(popper); return data; } /** * Modifier function, each modifier can have a function of this type assigned * to its `fn` property.
* These functions will be called on each update, this means that you must * make sure they are performant enough to avoid performance bottlenecks. * * @function ModifierFn * @argument {dataObject} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {dataObject} The data object, properly modified */ /** * Modifiers are plugins used to alter the behavior of your poppers.
* Popper.js uses a set of 9 modifiers to provide all the basic functionalities * needed by the library. * * Usually you don't want to override the `order`, `fn` and `onLoad` props. * All the other properties are configurations that could be tweaked. * @namespace modifiers */ var modifiers = { /** * Modifier used to shift the popper on the start or end of its reference * element.
* It will read the variation of the `placement` property.
* It can be one either `-end` or `-start`. * @memberof modifiers * @inner */ shift: { /** @prop {number} order=100 - Index used to define the order of execution */ order: 100, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: shift }, /** * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: * - `px` or unit-less, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit * - `vh`, CSS viewport height unit * * For length is intended the main axis relative to the placement of the popper.
* This means that if the placement is `top` or `bottom`, the length will be the * `width`. In case of `left` or `right`, it will be the `height`. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.
* The latter is a deprecated method because it leads to confusion and will be * removed in v2.
* Additionally, it accepts additions and subtractions between different units. * Note that multiplications and divisions aren't supported. * * Valid examples are: * ``` * 10 * '10%' * '10, 10' * '10%, 10' * '10 + 10%' * '10 - 5vh + 3%' * '-10px + 5vh, 5px - 6%' * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). * * @memberof modifiers * @inner */ offset: { /** @prop {number} order=200 - Index used to define the order of execution */ order: 200, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: offset, /** @prop {Number|String} offset=0 * The offset value as described in the modifier description */ offset: 0 }, /** * Modifier used to prevent the popper from being positioned outside the boundary. * * A scenario exists where the reference itself is not within the boundaries.
* We can say it has "escaped the boundaries" — or just "escaped".
* In this case we need to decide whether the popper should either: * * - detach from the reference and remain "trapped" in the boundaries, or * - if it should ignore the boundary and "escape with its reference" * * When `escapeWithReference` is set to`true` and reference is completely * outside its boundaries, the popper will overflow (or completely leave) * the boundaries in order to remain attached to the edge of the reference. * * @memberof modifiers * @inner */ preventOverflow: { /** @prop {number} order=300 - Index used to define the order of execution */ order: 300, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: preventOverflow, /** * @prop {Array} [priority=['left','right','top','bottom']] * Popper will try to prevent overflow following these priorities by default, * then, it could overflow on the left and on top of the `boundariesElement` */ priority: ['left', 'right', 'top', 'bottom'], /** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries * and the popper. This makes sure the popper always has a little padding * between the edges of its container */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='scrollParent' * Boundaries used by the modifier. Can be `scrollParent`, `window`, * `viewport` or any DOM element. */ boundariesElement: 'scrollParent' }, /** * Modifier used to make sure the reference and its popper stay near each other * without leaving any gap between the two. Especially useful when the arrow is * enabled and you want to ensure that it points to its reference element. * It cares only about the first axis. You can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner */ keepTogether: { /** @prop {number} order=400 - Index used to define the order of execution */ order: 400, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: keepTogether }, /** * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many * pixels of conjunction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers * @inner */ arrow: { /** @prop {number} order=500 - Index used to define the order of execution */ order: 500, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: arrow, /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ element: '[x-arrow]' }, /** * Modifier used to flip the popper's placement when it starts to overlap its * reference element. * * Requires the `preventOverflow` modifier before it in order to work. * * **NOTE:** this modifier will interrupt the current update cycle and will * restart it if it detects the need to flip the placement. * @memberof modifiers * @inner */ flip: { /** @prop {number} order=600 - Index used to define the order of execution */ order: 600, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: flip, /** * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid * placements (with optional variations) */ behavior: 'flip', /** * @prop {number} padding=5 * The popper will flip if it hits the edges of the `boundariesElement` */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='viewport' * The element which will define the boundaries of the popper position. * The popper will never be placed outside of the defined boundaries * (except if `keepTogether` is enabled) */ boundariesElement: 'viewport' }, /** * Modifier used to make the popper flow toward the inner of the reference element. * By default, when this modifier is disabled, the popper will be placed outside * the reference element. * @memberof modifiers * @inner */ inner: { /** @prop {number} order=700 - Index used to define the order of execution */ order: 700, /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ enabled: false, /** @prop {ModifierFn} */ fn: inner }, /** * Modifier used to hide the popper when its reference element is outside of the * popper boundaries. It will set a `x-out-of-boundaries` attribute which can * be used to hide with a CSS selector the popper when its reference is * out of boundaries. * * Requires the `preventOverflow` modifier before it in order to work. * @memberof modifiers * @inner */ hide: { /** @prop {number} order=800 - Index used to define the order of execution */ order: 800, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: hide }, /** * Computes the style that will be applied to the popper element to gets * properly positioned. * * Note that this modifier will not touch the DOM, it just prepares the styles * so that `applyStyle` modifier can apply it. This separation is useful * in case you need to replace `applyStyle` with a custom implementation. * * This modifier has `850` as `order` value to maintain backward compatibility * with previous versions of Popper.js. Expect the modifiers ordering method * to change in future major versions of the library. * * @memberof modifiers * @inner */ computeStyle: { /** @prop {number} order=850 - Index used to define the order of execution */ order: 850, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: computeStyle, /** * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: true, /** * @prop {string} [x='bottom'] * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. * Change this if your popper should grow in a direction different from `bottom` */ x: 'bottom', /** * @prop {string} [x='left'] * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. * Change this if your popper should grow in a direction different from `right` */ y: 'right' }, /** * Applies the computed styles to the popper element. * * All the DOM manipulations are limited to this modifier. This is useful in case * you want to integrate Popper.js inside a framework or view library and you * want to delegate all the DOM manipulations to it. * * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * * Just disable this modifier and define your own to achieve the desired effect. * * @memberof modifiers * @inner */ applyStyle: { /** @prop {number} order=900 - Index used to define the order of execution */ order: 900, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: applyStyle, /** @prop {Function} */ onLoad: applyStyleOnLoad, /** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: undefined } }; /** * The `dataObject` is an object containing all the information used by Popper.js. * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. * @name dataObject * @property {Object} data.instance The Popper.js instance * @property {String} data.placement Placement applied to popper * @property {String} data.originalPlacement Placement originally defined on init * @property {Boolean} data.flipped True if popper has been flipped by flip modifier * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.boundaries Offsets of the popper boundaries * @property {Object} data.offsets The measurements of popper, reference and arrow elements * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 */ /** * Default options provided to Popper.js constructor.
* These can be overridden using the `options` argument of Popper.js.
* To override an option, simply pass an object with the same * structure of the `options` object, as the 3rd argument. For example: * ``` * new Popper(ref, pop, { * modifiers: { * preventOverflow: { enabled: false } * } * }) * ``` * @type {Object} * @static * @memberof Popper */ var Defaults = { /** * Popper's placement. * @prop {Popper.placements} placement='bottom' */ placement: 'bottom', /** * Set this to true if you want popper to position it self in 'fixed' mode * @prop {Boolean} positionFixed=false */ positionFixed: false, /** * Whether events (resize, scroll) are initially enabled. * @prop {Boolean} eventsEnabled=true */ eventsEnabled: true, /** * Set to true if you want to automatically remove the popper when * you call the `destroy` method. * @prop {Boolean} removeOnDestroy=false */ removeOnDestroy: false, /** * Callback called when the popper is created.
* By default, it is set to no-op.
* Access Popper.js instance with `data.instance`. * @prop {onCreate} */ onCreate: function onCreate() {}, /** * Callback called when the popper is updated. This callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.
* By default, it is set to no-op.
* Access Popper.js instance with `data.instance`. * @prop {onUpdate} */ onUpdate: function onUpdate() {}, /** * List of modifiers used to modify the offsets before they are applied to the popper. * They provide most of the functionalities of Popper.js. * @prop {modifiers} */ modifiers: modifiers }; /** * @callback onCreate * @param {dataObject} data */ /** * @callback onUpdate * @param {dataObject} data */ // Utils // Methods var Popper = function () { /** * Creates a new Popper.js instance. * @class Popper * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as the popper * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */ function Popper(reference, popper) { var _this = this; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; classCallCheck(this, Popper); this.scheduleUpdate = function () { return requestAnimationFrame(_this.update); }; // make update() debounced, so that it only runs at most once-per-tick this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it this.options = _extends({}, Popper.Defaults, options); // init state this.state = { isDestroyed: false, isCreated: false, scrollParents: [] }; // get reference and popper elements (allow jQuery wrappers) this.reference = reference && reference.jquery ? reference[0] : reference; this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options this.options.modifiers = {}; Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); }); // Refactoring modifiers' list (Object => Array) this.modifiers = Object.keys(this.options.modifiers).map(function (name) { return _extends({ name: name }, _this.options.modifiers[name]); }) // sort the modifiers by order .sort(function (a, b) { return a.order - b.order; }); // modifiers have the ability to execute arbitrary code when Popper.js get inited // such code is executed in the same order of its modifier // they could add new properties to their options configuration // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! this.modifiers.forEach(function (modifierOptions) { if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); } }); // fire the first update to position the popper in the right place this.update(); var eventsEnabled = this.options.eventsEnabled; if (eventsEnabled) { // setup event listeners, they will take care of update the position in specific situations this.enableEventListeners(); } this.state.eventsEnabled = eventsEnabled; } // We can't use class properties because they don't get listed in the // class prototype and break stuff like Sinon stubs createClass(Popper, [{ key: 'update', value: function update$$1() { return update.call(this); } }, { key: 'destroy', value: function destroy$$1() { return destroy.call(this); } }, { key: 'enableEventListeners', value: function enableEventListeners$$1() { return enableEventListeners.call(this); } }, { key: 'disableEventListeners', value: function disableEventListeners$$1() { return disableEventListeners.call(this); } /** * Schedules an update. It will run on the next UI update available. * @method scheduleUpdate * @memberof Popper */ /** * Collection of utilities useful when writing custom modifiers. * Starting from version 1.7, this method is available only if you * include `popper-utils.js` before `popper.js`. * * **DEPRECATION**: This way to access PopperUtils is deprecated * and will be removed in v2! Use the PopperUtils module directly instead. * Due to the high instability of the methods contained in Utils, we can't * guarantee them to follow semver. Use them at your own risk! * @static * @private * @type {Object} * @deprecated since version 1.8 * @member Utils * @memberof Popper */ }]); return Popper; }(); /** * The `referenceObject` is an object that provides an interface compatible with Popper.js * and lets you use it as replacement of a real DOM node.
* You can use this method to position a popper relatively to a set of coordinates * in case you don't have a DOM node to use as reference. * * ``` * new Popper(referenceObject, popperNode); * ``` * * NB: This feature isn't supported in Internet Explorer 10. * @name referenceObject * @property {Function} data.getBoundingClientRect * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. * @property {number} data.clientWidth * An ES6 getter that will return the width of the virtual reference element. * @property {number} data.clientHeight * An ES6 getter that will return the height of the virtual reference element. */ Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; Popper.placements = placements; Popper.Defaults = Defaults; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$4 = 'dropdown'; var VERSION$4 = '4.3.1'; var DATA_KEY$4 = 'bs.dropdown'; var EVENT_KEY$4 = "." + DATA_KEY$4; var DATA_API_KEY$4 = '.data-api'; var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); var Event$4 = { HIDE: "hide" + EVENT_KEY$4, HIDDEN: "hidden" + EVENT_KEY$4, SHOW: "show" + EVENT_KEY$4, SHOWN: "shown" + EVENT_KEY$4, CLICK: "click" + EVENT_KEY$4, CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 }; var ClassName$4 = { DISABLED: 'disabled', SHOW: 'show', DROPUP: 'dropup', DROPRIGHT: 'dropright', DROPLEFT: 'dropleft', MENURIGHT: 'dropdown-menu-right', MENULEFT: 'dropdown-menu-left', POSITION_STATIC: 'position-static' }; var Selector$4 = { DATA_TOGGLE: '[data-toggle="dropdown"]', FORM_CHILD: '.dropdown form', MENU: '.dropdown-menu', NAVBAR_NAV: '.navbar-nav', VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' }; var AttachmentMap = { TOP: 'top-start', TOPEND: 'top-end', BOTTOM: 'bottom-start', BOTTOMEND: 'bottom-end', RIGHT: 'right-start', RIGHTEND: 'right-end', LEFT: 'left-start', LEFTEND: 'left-end' }; var Default$2 = { offset: 0, flip: true, boundary: 'scrollParent', reference: 'toggle', display: 'dynamic' }; var DefaultType$2 = { offset: '(number|string|function)', flip: 'boolean', boundary: '(string|element)', reference: '(string|element)', display: 'string' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Dropdown = /*#__PURE__*/ function () { function Dropdown(element, config) { this._element = element; this._popper = null; this._config = this._getConfig(config); this._menu = this._getMenuElement(); this._inNavbar = this._detectNavbar(); this._addEventListeners(); } // Getters var _proto = Dropdown.prototype; // Public _proto.toggle = function toggle() { if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this._element); var isActive = $(this._menu).hasClass(ClassName$4.SHOW); Dropdown._clearMenus(); if (isActive) { return; } var relatedTarget = { relatedTarget: this._element }; var showEvent = $.Event(Event$4.SHOW, relatedTarget); $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { return; } // Disable totally Popper.js for Dropdown in Navbar if (!this._inNavbar) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); } var referenceElement = this._element; if (this._config.reference === 'parent') { referenceElement = parent; } else if (Util.isElement(this._config.reference)) { referenceElement = this._config.reference; // Check if it's jQuery element if (typeof this._config.reference.jquery !== 'undefined') { referenceElement = this._config.reference[0]; } } // If boundary is not `scrollParent`, then set position to `static` // to allow the menu to "escape" the scroll parent's boundaries // https://github.com/twbs/bootstrap/issues/24251 if (this._config.boundary !== 'scrollParent') { $(parent).addClass(ClassName$4.POSITION_STATIC); } this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); } // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { $(document.body).children().on('mouseover', null, $.noop); } this._element.focus(); this._element.setAttribute('aria-expanded', true); $(this._menu).toggleClass(ClassName$4.SHOW); $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); }; _proto.show = function show() { if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { return; } var relatedTarget = { relatedTarget: this._element }; var showEvent = $.Event(Event$4.SHOW, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { return; } $(this._menu).toggleClass(ClassName$4.SHOW); $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); }; _proto.hide = function hide() { if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { return; } var relatedTarget = { relatedTarget: this._element }; var hideEvent = $.Event(Event$4.HIDE, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } $(this._menu).toggleClass(ClassName$4.SHOW); $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$4); $(this._element).off(EVENT_KEY$4); this._element = null; this._menu = null; if (this._popper !== null) { this._popper.destroy(); this._popper = null; } }; _proto.update = function update() { this._inNavbar = this._detectNavbar(); if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Private ; _proto._addEventListeners = function _addEventListeners() { var _this = this; $(this._element).on(Event$4.CLICK, function (event) { event.preventDefault(); event.stopPropagation(); _this.toggle(); }); }; _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); return config; }; _proto._getMenuElement = function _getMenuElement() { if (!this._menu) { var parent = Dropdown._getParentFromElement(this._element); if (parent) { this._menu = parent.querySelector(Selector$4.MENU); } } return this._menu; }; _proto._getPlacement = function _getPlacement() { var $parentDropdown = $(this._element.parentNode); var placement = AttachmentMap.BOTTOM; // Handle dropup if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { placement = AttachmentMap.TOP; if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { placement = AttachmentMap.TOPEND; } } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { placement = AttachmentMap.RIGHT; } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { placement = AttachmentMap.LEFT; } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { placement = AttachmentMap.BOTTOMEND; } return placement; }; _proto._detectNavbar = function _detectNavbar() { return $(this._element).closest('.navbar').length > 0; }; _proto._getOffset = function _getOffset() { var _this2 = this; var offset = {}; if (typeof this._config.offset === 'function') { offset.fn = function (data) { data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); return data; }; } else { offset.offset = this._config.offset; } return offset; }; _proto._getPopperConfig = function _getPopperConfig() { var popperConfig = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } // Disable Popper.js if we have a static display }; if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { enabled: false }; } return popperConfig; } // Static ; Dropdown._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$4); var _config = typeof config === 'object' ? config : null; if (!data) { data = new Dropdown(this, _config); $(this).data(DATA_KEY$4, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; Dropdown._clearMenus = function _clearMenus(event) { if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { return; } var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); for (var i = 0, len = toggles.length; i < len; i++) { var parent = Dropdown._getParentFromElement(toggles[i]); var context = $(toggles[i]).data(DATA_KEY$4); var relatedTarget = { relatedTarget: toggles[i] }; if (event && event.type === 'click') { relatedTarget.clickEvent = event; } if (!context) { continue; } var dropdownMenu = context._menu; if (!$(parent).hasClass(ClassName$4.SHOW)) { continue; } if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { continue; } var hideEvent = $.Event(Event$4.HIDE, relatedTarget); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { continue; } // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } toggles[i].setAttribute('aria-expanded', 'false'); $(dropdownMenu).removeClass(ClassName$4.SHOW); $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); } }; Dropdown._getParentFromElement = function _getParentFromElement(element) { var parent; var selector = Util.getSelectorFromElement(element); if (selector) { parent = document.querySelector(selector); } return parent || element.parentNode; } // eslint-disable-next-line complexity ; Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { // If not input/textarea: // - And not a key in REGEXP_KEYDOWN => not a dropdown command // If input/textarea: // - If space key => not a dropdown command // - If key is other than escape // - If key is not up or down => not a dropdown command // - If trigger inside the menu => not a dropdown command if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { return; } event.preventDefault(); event.stopPropagation(); if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this); var isActive = $(parent).hasClass(ClassName$4.SHOW); if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { if (event.which === ESCAPE_KEYCODE) { var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); $(toggle).trigger('focus'); } $(this).trigger('click'); return; } var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); if (items.length === 0) { return; } var index = items.indexOf(event.target); if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up index--; } if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down index++; } if (index < 0) { index = 0; } items[index].focus(); }; _createClass(Dropdown, null, [{ key: "VERSION", get: function get() { return VERSION$4; } }, { key: "Default", get: function get() { return Default$2; } }, { key: "DefaultType", get: function get() { return DefaultType$2; } }]); return Dropdown; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { event.preventDefault(); event.stopPropagation(); Dropdown._jQueryInterface.call($(this), 'toggle'); }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { e.stopPropagation(); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$4] = Dropdown._jQueryInterface; $.fn[NAME$4].Constructor = Dropdown; $.fn[NAME$4].noConflict = function () { $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; return Dropdown._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$5 = 'modal'; var VERSION$5 = '4.3.1'; var DATA_KEY$5 = 'bs.modal'; var EVENT_KEY$5 = "." + DATA_KEY$5; var DATA_API_KEY$5 = '.data-api'; var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key var Default$3 = { backdrop: true, keyboard: true, focus: true, show: true }; var DefaultType$3 = { backdrop: '(boolean|string)', keyboard: 'boolean', focus: 'boolean', show: 'boolean' }; var Event$5 = { HIDE: "hide" + EVENT_KEY$5, HIDDEN: "hidden" + EVENT_KEY$5, SHOW: "show" + EVENT_KEY$5, SHOWN: "shown" + EVENT_KEY$5, FOCUSIN: "focusin" + EVENT_KEY$5, RESIZE: "resize" + EVENT_KEY$5, CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 }; var ClassName$5 = { SCROLLABLE: 'modal-dialog-scrollable', SCROLLBAR_MEASURER: 'modal-scrollbar-measure', BACKDROP: 'modal-backdrop', OPEN: 'modal-open', FADE: 'fade', SHOW: 'show' }; var Selector$5 = { DIALOG: '.modal-dialog', MODAL_BODY: '.modal-body', DATA_TOGGLE: '[data-toggle="modal"]', DATA_DISMISS: '[data-dismiss="modal"]', FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', STICKY_CONTENT: '.sticky-top' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Modal = /*#__PURE__*/ function () { function Modal(element, config) { this._config = this._getConfig(config); this._element = element; this._dialog = element.querySelector(Selector$5.DIALOG); this._backdrop = null; this._isShown = false; this._isBodyOverflowing = false; this._ignoreBackdropClick = false; this._isTransitioning = false; this._scrollbarWidth = 0; } // Getters var _proto = Modal.prototype; // Public _proto.toggle = function toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); }; _proto.show = function show(relatedTarget) { var _this = this; if (this._isShown || this._isTransitioning) { return; } if ($(this._element).hasClass(ClassName$5.FADE)) { this._isTransitioning = true; } var showEvent = $.Event(Event$5.SHOW, { relatedTarget: relatedTarget }); $(this._element).trigger(showEvent); if (this._isShown || showEvent.isDefaultPrevented()) { return; } this._isShown = true; this._checkScrollbar(); this._setScrollbar(); this._adjustDialog(); this._setEscapeEvent(); this._setResizeEvent(); $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { return _this.hide(event); }); $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { if ($(event.target).is(_this._element)) { _this._ignoreBackdropClick = true; } }); }); this._showBackdrop(function () { return _this._showElement(relatedTarget); }); }; _proto.hide = function hide(event) { var _this2 = this; if (event) { event.preventDefault(); } if (!this._isShown || this._isTransitioning) { return; } var hideEvent = $.Event(Event$5.HIDE); $(this._element).trigger(hideEvent); if (!this._isShown || hideEvent.isDefaultPrevented()) { return; } this._isShown = false; var transition = $(this._element).hasClass(ClassName$5.FADE); if (transition) { this._isTransitioning = true; } this._setEscapeEvent(); this._setResizeEvent(); $(document).off(Event$5.FOCUSIN); $(this._element).removeClass(ClassName$5.SHOW); $(this._element).off(Event$5.CLICK_DISMISS); $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); if (transition) { var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, function (event) { return _this2._hideModal(event); }).emulateTransitionEnd(transitionDuration); } else { this._hideModal(); } }; _proto.dispose = function dispose() { [window, this._element, this._dialog].forEach(function (htmlElement) { return $(htmlElement).off(EVENT_KEY$5); }); /** * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` * Do not move `document` in `htmlElements` array * It will remove `Event.CLICK_DATA_API` event that should remain */ $(document).off(Event$5.FOCUSIN); $.removeData(this._element, DATA_KEY$5); this._config = null; this._element = null; this._dialog = null; this._backdrop = null; this._isShown = null; this._isBodyOverflowing = null; this._ignoreBackdropClick = null; this._isTransitioning = null; this._scrollbarWidth = null; }; _proto.handleUpdate = function handleUpdate() { this._adjustDialog(); } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, Default$3, config); Util.typeCheckConfig(NAME$5, config, DefaultType$3); return config; }; _proto._showElement = function _showElement(relatedTarget) { var _this3 = this; var transition = $(this._element).hasClass(ClassName$5.FADE); if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { // Don't move modal's DOM position document.body.appendChild(this._element); } this._element.style.display = 'block'; this._element.removeAttribute('aria-hidden'); this._element.setAttribute('aria-modal', true); if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; } else { this._element.scrollTop = 0; } if (transition) { Util.reflow(this._element); } $(this._element).addClass(ClassName$5.SHOW); if (this._config.focus) { this._enforceFocus(); } var shownEvent = $.Event(Event$5.SHOWN, { relatedTarget: relatedTarget }); var transitionComplete = function transitionComplete() { if (_this3._config.focus) { _this3._element.focus(); } _this3._isTransitioning = false; $(_this3._element).trigger(shownEvent); }; if (transition) { var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); } else { transitionComplete(); } }; _proto._enforceFocus = function _enforceFocus() { var _this4 = this; $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop .on(Event$5.FOCUSIN, function (event) { if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { _this4._element.focus(); } }); }; _proto._setEscapeEvent = function _setEscapeEvent() { var _this5 = this; if (this._isShown && this._config.keyboard) { $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { if (event.which === ESCAPE_KEYCODE$1) { event.preventDefault(); _this5.hide(); } }); } else if (!this._isShown) { $(this._element).off(Event$5.KEYDOWN_DISMISS); } }; _proto._setResizeEvent = function _setResizeEvent() { var _this6 = this; if (this._isShown) { $(window).on(Event$5.RESIZE, function (event) { return _this6.handleUpdate(event); }); } else { $(window).off(Event$5.RESIZE); } }; _proto._hideModal = function _hideModal() { var _this7 = this; this._element.style.display = 'none'; this._element.setAttribute('aria-hidden', true); this._element.removeAttribute('aria-modal'); this._isTransitioning = false; this._showBackdrop(function () { $(document.body).removeClass(ClassName$5.OPEN); _this7._resetAdjustments(); _this7._resetScrollbar(); $(_this7._element).trigger(Event$5.HIDDEN); }); }; _proto._removeBackdrop = function _removeBackdrop() { if (this._backdrop) { $(this._backdrop).remove(); this._backdrop = null; } }; _proto._showBackdrop = function _showBackdrop(callback) { var _this8 = this; var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; if (this._isShown && this._config.backdrop) { this._backdrop = document.createElement('div'); this._backdrop.className = ClassName$5.BACKDROP; if (animate) { this._backdrop.classList.add(animate); } $(this._backdrop).appendTo(document.body); $(this._element).on(Event$5.CLICK_DISMISS, function (event) { if (_this8._ignoreBackdropClick) { _this8._ignoreBackdropClick = false; return; } if (event.target !== event.currentTarget) { return; } if (_this8._config.backdrop === 'static') { _this8._element.focus(); } else { _this8.hide(); } }); if (animate) { Util.reflow(this._backdrop); } $(this._backdrop).addClass(ClassName$5.SHOW); if (!callback) { return; } if (!animate) { callback(); return; } var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); } else if (!this._isShown && this._backdrop) { $(this._backdrop).removeClass(ClassName$5.SHOW); var callbackRemove = function callbackRemove() { _this8._removeBackdrop(); if (callback) { callback(); } }; if ($(this._element).hasClass(ClassName$5.FADE)) { var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); } else { callbackRemove(); } } else if (callback) { callback(); } } // ---------------------------------------------------------------------- // the following methods are used to handle overflowing modals // todo (fat): these should probably be refactored out of modal.js // ---------------------------------------------------------------------- ; _proto._adjustDialog = function _adjustDialog() { var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; if (!this._isBodyOverflowing && isModalOverflowing) { this._element.style.paddingLeft = this._scrollbarWidth + "px"; } if (this._isBodyOverflowing && !isModalOverflowing) { this._element.style.paddingRight = this._scrollbarWidth + "px"; } }; _proto._resetAdjustments = function _resetAdjustments() { this._element.style.paddingLeft = ''; this._element.style.paddingRight = ''; }; _proto._checkScrollbar = function _checkScrollbar() { var rect = document.body.getBoundingClientRect(); this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; this._scrollbarWidth = this._getScrollbarWidth(); }; _proto._setScrollbar = function _setScrollbar() { var _this9 = this; if (this._isBodyOverflowing) { // Note: DOMNode.style.paddingRight returns the actual value or '' if not set // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding $(fixedContent).each(function (index, element) { var actualPadding = element.style.paddingRight; var calculatedPadding = $(element).css('padding-right'); $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); }); // Adjust sticky content margin $(stickyContent).each(function (index, element) { var actualMargin = element.style.marginRight; var calculatedMargin = $(element).css('margin-right'); $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); }); // Adjust body padding var actualPadding = document.body.style.paddingRight; var calculatedPadding = $(document.body).css('padding-right'); $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); } $(document.body).addClass(ClassName$5.OPEN); }; _proto._resetScrollbar = function _resetScrollbar() { // Restore fixed content padding var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); $(fixedContent).each(function (index, element) { var padding = $(element).data('padding-right'); $(element).removeData('padding-right'); element.style.paddingRight = padding ? padding : ''; }); // Restore sticky content var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); $(elements).each(function (index, element) { var margin = $(element).data('margin-right'); if (typeof margin !== 'undefined') { $(element).css('margin-right', margin).removeData('margin-right'); } }); // Restore body padding var padding = $(document.body).data('padding-right'); $(document.body).removeData('padding-right'); document.body.style.paddingRight = padding ? padding : ''; }; _proto._getScrollbarWidth = function _getScrollbarWidth() { // thx d.walsh var scrollDiv = document.createElement('div'); scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; document.body.appendChild(scrollDiv); var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); return scrollbarWidth; } // Static ; Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { return this.each(function () { var data = $(this).data(DATA_KEY$5); var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); if (!data) { data = new Modal(this, _config); $(this).data(DATA_KEY$5, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](relatedTarget); } else if (_config.show) { data.show(relatedTarget); } }); }; _createClass(Modal, null, [{ key: "VERSION", get: function get() { return VERSION$5; } }, { key: "Default", get: function get() { return Default$3; } }]); return Modal; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { var _this10 = this; var target; var selector = Util.getSelectorFromElement(this); if (selector) { target = document.querySelector(selector); } var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault(); } var $target = $(target).one(Event$5.SHOW, function (showEvent) { if (showEvent.isDefaultPrevented()) { // Only register focus restorer if modal will actually get shown return; } $target.one(Event$5.HIDDEN, function () { if ($(_this10).is(':visible')) { _this10.focus(); } }); }); Modal._jQueryInterface.call($(target), config, this); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$5] = Modal._jQueryInterface; $.fn[NAME$5].Constructor = Modal; $.fn[NAME$5].noConflict = function () { $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; return Modal._jQueryInterface; }; /** * -------------------------------------------------------------------------- * Bootstrap (v4.3.1): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; var DefaultWhitelist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], a: ['target', 'href', 'title', 'rel'], area: [], b: [], br: [], col: [], code: [], div: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ['src', 'alt', 'title', 'width', 'height'], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ }; var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; function allowedAttribute(attr, allowedAttributeList) { var attrName = attr.nodeName.toLowerCase(); if (allowedAttributeList.indexOf(attrName) !== -1) { if (uriAttrs.indexOf(attrName) !== -1) { return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); } return true; } var regExp = allowedAttributeList.filter(function (attrRegex) { return attrRegex instanceof RegExp; }); // Check if a regular expression validates the attribute. for (var i = 0, l = regExp.length; i < l; i++) { if (attrName.match(regExp[i])) { return true; } } return false; } function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { if (unsafeHtml.length === 0) { return unsafeHtml; } if (sanitizeFn && typeof sanitizeFn === 'function') { return sanitizeFn(unsafeHtml); } var domParser = new window.DOMParser(); var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); var whitelistKeys = Object.keys(whiteList); var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); var _loop = function _loop(i, len) { var el = elements[i]; var elName = el.nodeName.toLowerCase(); if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { el.parentNode.removeChild(el); return "continue"; } var attributeList = [].slice.call(el.attributes); var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); attributeList.forEach(function (attr) { if (!allowedAttribute(attr, whitelistedAttributes)) { el.removeAttribute(attr.nodeName); } }); }; for (var i = 0, len = elements.length; i < len; i++) { var _ret = _loop(i, len); if (_ret === "continue") continue; } return createdDocument.body.innerHTML; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$6 = 'tooltip'; var VERSION$6 = '4.3.1'; var DATA_KEY$6 = 'bs.tooltip'; var EVENT_KEY$6 = "." + DATA_KEY$6; var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var CLASS_PREFIX = 'bs-tooltip'; var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; var DefaultType$4 = { animation: 'boolean', template: 'string', title: '(string|element|function)', trigger: 'string', delay: '(number|object)', html: 'boolean', selector: '(string|boolean)', placement: '(string|function)', offset: '(number|string|function)', container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object' }; var AttachmentMap$1 = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' }; var Default$4 = { animation: true, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, selector: false, placement: 'top', offset: 0, container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist }; var HoverState = { SHOW: 'show', OUT: 'out' }; var Event$6 = { HIDE: "hide" + EVENT_KEY$6, HIDDEN: "hidden" + EVENT_KEY$6, SHOW: "show" + EVENT_KEY$6, SHOWN: "shown" + EVENT_KEY$6, INSERTED: "inserted" + EVENT_KEY$6, CLICK: "click" + EVENT_KEY$6, FOCUSIN: "focusin" + EVENT_KEY$6, FOCUSOUT: "focusout" + EVENT_KEY$6, MOUSEENTER: "mouseenter" + EVENT_KEY$6, MOUSELEAVE: "mouseleave" + EVENT_KEY$6 }; var ClassName$6 = { FADE: 'fade', SHOW: 'show' }; var Selector$6 = { TOOLTIP: '.tooltip', TOOLTIP_INNER: '.tooltip-inner', ARROW: '.arrow' }; var Trigger = { HOVER: 'hover', FOCUS: 'focus', CLICK: 'click', MANUAL: 'manual' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Tooltip = /*#__PURE__*/ function () { function Tooltip(element, config) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); } // private this._isEnabled = true; this._timeout = 0; this._hoverState = ''; this._activeTrigger = {}; this._popper = null; // Protected this.element = element; this.config = this._getConfig(config); this.tip = null; this._setListeners(); } // Getters var _proto = Tooltip.prototype; // Public _proto.enable = function enable() { this._isEnabled = true; }; _proto.disable = function disable() { this._isEnabled = false; }; _proto.toggleEnabled = function toggleEnabled() { this._isEnabled = !this._isEnabled; }; _proto.toggle = function toggle(event) { if (!this._isEnabled) { return; } if (event) { var dataKey = this.constructor.DATA_KEY; var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } context._activeTrigger.click = !context._activeTrigger.click; if (context._isWithActiveTrigger()) { context._enter(null, context); } else { context._leave(null, context); } } else { if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { this._leave(null, this); return; } this._enter(null, this); } }; _proto.dispose = function dispose() { clearTimeout(this._timeout); $.removeData(this.element, this.constructor.DATA_KEY); $(this.element).off(this.constructor.EVENT_KEY); $(this.element).closest('.modal').off('hide.bs.modal'); if (this.tip) { $(this.tip).remove(); } this._isEnabled = null; this._timeout = null; this._hoverState = null; this._activeTrigger = null; if (this._popper !== null) { this._popper.destroy(); } this._popper = null; this.element = null; this.config = null; this.tip = null; }; _proto.show = function show() { var _this = this; if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements'); } var showEvent = $.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent); var shadowRoot = Util.findShadowRoot(this.element); var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); if (showEvent.isDefaultPrevented() || !isInTheDom) { return; } var tip = this.getTipElement(); var tipId = Util.getUID(this.constructor.NAME); tip.setAttribute('id', tipId); this.element.setAttribute('aria-describedby', tipId); this.setContent(); if (this.config.animation) { $(tip).addClass(ClassName$6.FADE); } var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; var attachment = this._getAttachment(placement); this.addAttachmentClass(attachment); var container = this._getContainer(); $(tip).data(this.constructor.DATA_KEY, this); if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { $(tip).appendTo(container); } $(this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper(this.element, tip, { placement: attachment, modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: Selector$6.ARROW }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: function onCreate(data) { if (data.originalPlacement !== data.placement) { _this._handlePopperPlacementChange(data); } }, onUpdate: function onUpdate(data) { return _this._handlePopperPlacementChange(data); } }); $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement) { $(document.body).children().on('mouseover', null, $.noop); } var complete = function complete() { if (_this.config.animation) { _this._fixTransition(); } var prevHoverState = _this._hoverState; _this._hoverState = null; $(_this.element).trigger(_this.constructor.Event.SHOWN); if (prevHoverState === HoverState.OUT) { _this._leave(null, _this); } }; if ($(this.tip).hasClass(ClassName$6.FADE)) { var transitionDuration = Util.getTransitionDurationFromElement(this.tip); $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } } }; _proto.hide = function hide(callback) { var _this2 = this; var tip = this.getTipElement(); var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { tip.parentNode.removeChild(tip); } _this2._cleanTipClass(); _this2.element.removeAttribute('aria-describedby'); $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); if (_this2._popper !== null) { _this2._popper.destroy(); } if (callback) { callback(); } }; $(this.element).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.HOVER] = false; if ($(this.tip).hasClass(ClassName$6.FADE)) { var transitionDuration = Util.getTransitionDurationFromElement(tip); $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } this._hoverState = ''; }; _proto.update = function update() { if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Protected ; _proto.isWithContent = function isWithContent() { return Boolean(this.getTitle()); }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); }; _proto.getTipElement = function getTipElement() { this.tip = this.tip || $(this.config.template)[0]; return this.tip; }; _proto.setContent = function setContent() { var tip = this.getTipElement(); this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); }; _proto.setElementContent = function setElementContent($element, content) { if (typeof content === 'object' && (content.nodeType || content.jquery)) { // Content is a DOM node or a jQuery if (this.config.html) { if (!$(content).parent().is($element)) { $element.empty().append(content); } } else { $element.text($(content).text()); } return; } if (this.config.html) { if (this.config.sanitize) { content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); } $element.html(content); } else { $element.text(content); } }; _proto.getTitle = function getTitle() { var title = this.element.getAttribute('data-original-title'); if (!title) { title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; } return title; } // Private ; _proto._getOffset = function _getOffset() { var _this3 = this; var offset = {}; if (typeof this.config.offset === 'function') { offset.fn = function (data) { data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {}); return data; }; } else { offset.offset = this.config.offset; } return offset; }; _proto._getContainer = function _getContainer() { if (this.config.container === false) { return document.body; } if (Util.isElement(this.config.container)) { return $(this.config.container); } return $(document).find(this.config.container); }; _proto._getAttachment = function _getAttachment(placement) { return AttachmentMap$1[placement.toUpperCase()]; }; _proto._setListeners = function _setListeners() { var _this4 = this; var triggers = this.config.trigger.split(' '); triggers.forEach(function (trigger) { if (trigger === 'click') { $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) { return _this4.toggle(event); }); } else if (trigger !== Trigger.MANUAL) { var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN; var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT; $(_this4.element).on(eventIn, _this4.config.selector, function (event) { return _this4._enter(event); }).on(eventOut, _this4.config.selector, function (event) { return _this4._leave(event); }); } }); $(this.element).closest('.modal').on('hide.bs.modal', function () { if (_this4.element) { _this4.hide(); } }); if (this.config.selector) { this.config = _objectSpread({}, this.config, { trigger: 'manual', selector: '' }); } else { this._fixTitle(); } }; _proto._fixTitle = function _fixTitle() { var titleType = typeof this.element.getAttribute('data-original-title'); if (this.element.getAttribute('title') || titleType !== 'string') { this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); this.element.setAttribute('title', ''); } }; _proto._enter = function _enter(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; } if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { context._hoverState = HoverState.SHOW; return; } clearTimeout(context._timeout); context._hoverState = HoverState.SHOW; if (!context.config.delay || !context.config.delay.show) { context.show(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HoverState.SHOW) { context.show(); } }, context.config.delay.show); }; _proto._leave = function _leave(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; } if (context._isWithActiveTrigger()) { return; } clearTimeout(context._timeout); context._hoverState = HoverState.OUT; if (!context.config.delay || !context.config.delay.hide) { context.hide(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HoverState.OUT) { context.hide(); } }, context.config.delay.hide); }; _proto._isWithActiveTrigger = function _isWithActiveTrigger() { for (var trigger in this._activeTrigger) { if (this._activeTrigger[trigger]) { return true; } } return false; }; _proto._getConfig = function _getConfig(config) { var dataAttributes = $(this.element).data(); Object.keys(dataAttributes).forEach(function (dataAttr) { if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { delete dataAttributes[dataAttr]; } }); config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); if (typeof config.delay === 'number') { config.delay = { show: config.delay, hide: config.delay }; } if (typeof config.title === 'number') { config.title = config.title.toString(); } if (typeof config.content === 'number') { config.content = config.content.toString(); } Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); if (config.sanitize) { config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); } return config; }; _proto._getDelegateConfig = function _getDelegateConfig() { var config = {}; if (this.config) { for (var key in this.config) { if (this.constructor.Default[key] !== this.config[key]) { config[key] = this.config[key]; } } } return config; }; _proto._cleanTipClass = function _cleanTipClass() { var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); if (tabClass !== null && tabClass.length) { $tip.removeClass(tabClass.join('')); } }; _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { var popperInstance = popperData.instance; this.tip = popperInstance.popper; this._cleanTipClass(); this.addAttachmentClass(this._getAttachment(popperData.placement)); }; _proto._fixTransition = function _fixTransition() { var tip = this.getTipElement(); var initConfigAnimation = this.config.animation; if (tip.getAttribute('x-placement') !== null) { return; } $(tip).removeClass(ClassName$6.FADE); this.config.animation = false; this.hide(); this.show(); this.config.animation = initConfigAnimation; } // Static ; Tooltip._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$6); var _config = typeof config === 'object' && config; if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Tooltip(this, _config); $(this).data(DATA_KEY$6, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Tooltip, null, [{ key: "VERSION", get: function get() { return VERSION$6; } }, { key: "Default", get: function get() { return Default$4; } }, { key: "NAME", get: function get() { return NAME$6; } }, { key: "DATA_KEY", get: function get() { return DATA_KEY$6; } }, { key: "Event", get: function get() { return Event$6; } }, { key: "EVENT_KEY", get: function get() { return EVENT_KEY$6; } }, { key: "DefaultType", get: function get() { return DefaultType$4; } }]); return Tooltip; }(); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$6] = Tooltip._jQueryInterface; $.fn[NAME$6].Constructor = Tooltip; $.fn[NAME$6].noConflict = function () { $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; return Tooltip._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$7 = 'popover'; var VERSION$7 = '4.3.1'; var DATA_KEY$7 = 'bs.popover'; var EVENT_KEY$7 = "." + DATA_KEY$7; var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; var CLASS_PREFIX$1 = 'bs-popover'; var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); var Default$5 = _objectSpread({}, Tooltip.Default, { placement: 'right', trigger: 'click', content: '', template: '' }); var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, { content: '(string|element|function)' }); var ClassName$7 = { FADE: 'fade', SHOW: 'show' }; var Selector$7 = { TITLE: '.popover-header', CONTENT: '.popover-body' }; var Event$7 = { HIDE: "hide" + EVENT_KEY$7, HIDDEN: "hidden" + EVENT_KEY$7, SHOW: "show" + EVENT_KEY$7, SHOWN: "shown" + EVENT_KEY$7, INSERTED: "inserted" + EVENT_KEY$7, CLICK: "click" + EVENT_KEY$7, FOCUSIN: "focusin" + EVENT_KEY$7, FOCUSOUT: "focusout" + EVENT_KEY$7, MOUSEENTER: "mouseenter" + EVENT_KEY$7, MOUSELEAVE: "mouseleave" + EVENT_KEY$7 /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var Popover = /*#__PURE__*/ function (_Tooltip) { _inheritsLoose(Popover, _Tooltip); function Popover() { return _Tooltip.apply(this, arguments) || this; } var _proto = Popover.prototype; // Overrides _proto.isWithContent = function isWithContent() { return this.getTitle() || this._getContent(); }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); }; _proto.getTipElement = function getTipElement() { this.tip = this.tip || $(this.config.template)[0]; return this.tip; }; _proto.setContent = function setContent() { var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); var content = this._getContent(); if (typeof content === 'function') { content = content.call(this.element); } this.setElementContent($tip.find(Selector$7.CONTENT), content); $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); } // Private ; _proto._getContent = function _getContent() { return this.element.getAttribute('data-content') || this.config.content; }; _proto._cleanTipClass = function _cleanTipClass() { var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); if (tabClass !== null && tabClass.length > 0) { $tip.removeClass(tabClass.join('')); } } // Static ; Popover._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$7); var _config = typeof config === 'object' ? config : null; if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Popover(this, _config); $(this).data(DATA_KEY$7, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Popover, null, [{ key: "VERSION", // Getters get: function get() { return VERSION$7; } }, { key: "Default", get: function get() { return Default$5; } }, { key: "NAME", get: function get() { return NAME$7; } }, { key: "DATA_KEY", get: function get() { return DATA_KEY$7; } }, { key: "Event", get: function get() { return Event$7; } }, { key: "EVENT_KEY", get: function get() { return EVENT_KEY$7; } }, { key: "DefaultType", get: function get() { return DefaultType$5; } }]); return Popover; }(Tooltip); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$7] = Popover._jQueryInterface; $.fn[NAME$7].Constructor = Popover; $.fn[NAME$7].noConflict = function () { $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; return Popover._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$8 = 'scrollspy'; var VERSION$8 = '4.3.1'; var DATA_KEY$8 = 'bs.scrollspy'; var EVENT_KEY$8 = "." + DATA_KEY$8; var DATA_API_KEY$6 = '.data-api'; var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; var Default$6 = { offset: 10, method: 'auto', target: '' }; var DefaultType$6 = { offset: 'number', method: 'string', target: '(string|element)' }; var Event$8 = { ACTIVATE: "activate" + EVENT_KEY$8, SCROLL: "scroll" + EVENT_KEY$8, LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 }; var ClassName$8 = { DROPDOWN_ITEM: 'dropdown-item', DROPDOWN_MENU: 'dropdown-menu', ACTIVE: 'active' }; var Selector$8 = { DATA_SPY: '[data-spy="scroll"]', ACTIVE: '.active', NAV_LIST_GROUP: '.nav, .list-group', NAV_LINKS: '.nav-link', NAV_ITEMS: '.nav-item', LIST_ITEMS: '.list-group-item', DROPDOWN: '.dropdown', DROPDOWN_ITEMS: '.dropdown-item', DROPDOWN_TOGGLE: '.dropdown-toggle' }; var OffsetMethod = { OFFSET: 'offset', POSITION: 'position' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ }; var ScrollSpy = /*#__PURE__*/ function () { function ScrollSpy(element, config) { var _this = this; this._element = element; this._scrollElement = element.tagName === 'BODY' ? window : element; this._config = this._getConfig(config); this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); this._offsets = []; this._targets = []; this._activeTarget = null; this._scrollHeight = 0; $(this._scrollElement).on(Event$8.SCROLL, function (event) { return _this._process(event); }); this.refresh(); this._process(); } // Getters var _proto = ScrollSpy.prototype; // Public _proto.refresh = function refresh() { var _this2 = this; var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; this._offsets = []; this._targets = []; this._scrollHeight = this._getScrollHeight(); var targets = [].slice.call(document.querySelectorAll(this._selector)); targets.map(function (element) { var target; var targetSelector = Util.getSelectorFromElement(element); if (targetSelector) { target = document.querySelector(targetSelector); } if (target) { var targetBCR = target.getBoundingClientRect(); if (targetBCR.width || targetBCR.height) { // TODO (fat): remove sketch reliance on jQuery position/offset return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; } } return null; }).filter(function (item) { return item; }).sort(function (a, b) { return a[0] - b[0]; }).forEach(function (item) { _this2._offsets.push(item[0]); _this2._targets.push(item[1]); }); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$8); $(this._scrollElement).off(EVENT_KEY$8); this._element = null; this._scrollElement = null; this._config = null; this._selector = null; this._offsets = null; this._targets = null; this._activeTarget = null; this._scrollHeight = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); if (typeof config.target !== 'string') { var id = $(config.target).attr('id'); if (!id) { id = Util.getUID(NAME$8); $(config.target).attr('id', id); } config.target = "#" + id; } Util.typeCheckConfig(NAME$8, config, DefaultType$6); return config; }; _proto._getScrollTop = function _getScrollTop() { return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; }; _proto._getScrollHeight = function _getScrollHeight() { return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); }; _proto._getOffsetHeight = function _getOffsetHeight() { return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; }; _proto._process = function _process() { var scrollTop = this._getScrollTop() + this._config.offset; var scrollHeight = this._getScrollHeight(); var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); if (this._scrollHeight !== scrollHeight) { this.refresh(); } if (scrollTop >= maxScroll) { var target = this._targets[this._targets.length - 1]; if (this._activeTarget !== target) { this._activate(target); } return; } if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { this._activeTarget = null; this._clear(); return; } var offsetLength = this._offsets.length; for (var i = offsetLength; i--;) { var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); if (isActiveTarget) { this._activate(this._targets[i]); } } }; _proto._activate = function _activate(target) { this._activeTarget = target; this._clear(); var queries = this._selector.split(',').map(function (selector) { return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; }); var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); $link.addClass(ClassName$8.ACTIVE); } else { // Set triggered link as active $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active // With both