Merge remote-tracking branch 'origin/v8/dev' into netcore/dev

# Conflicts:
#	src/SolutionInfo.cs
This commit is contained in:
Bjarke Berg
2019-11-07 14:34:45 +01:00
35 changed files with 2682 additions and 2410 deletions
+3 -1
View File
@@ -39,6 +39,8 @@ To build Umbraco, fire up PowerShell and move to Umbraco's repository root (the
build/build.ps1
If you only see a build.bat-file, you're probably on the wrong branch. If you switch to the correct branch (dev-v8) the file will appear and you can build it.
You might run into [Powershell quirks](#powershell-quirks).
### Build Infrastructure
@@ -209,4 +211,4 @@ The best solution is to unblock the Zip file before un-zipping: right-click the
### Git Quirks
Git might have issues dealing with long file paths during build. You may want/need to enable `core.longpaths` support (see [this page](https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) for details).
Git might have issues dealing with long file paths during build. You may want/need to enable `core.longpaths` support (see [this page](https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) for details).
+2 -1
View File
@@ -59,7 +59,8 @@ Great question! The short version goes like this:
* **Clone** - when GitHub has created your fork, you can clone it in your favorite Git tool
![Clone the fork](img/clonefork.png)
* **Switch to the correct branch** - switch to the v8-dev branch
* **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](BUILD.md)
* **Change** - make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](#questions)
* **Commit** - done? Yay! 🎉 **Important:** create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `12345`. When you have a branch, commit your changes. Don't commit to `v8/dev`, create a new branch first.
+5 -5
View File
@@ -7,15 +7,15 @@ A brief description of the issue goes here.
<!--
If you haven't yet done so, please read the "contributing guidelines"
thoroughly. Then, proceed by filling out the rest of the details in the issue
template below. The more details you can give us, the easier it will be for us
Please fill out the rest of the details in the issue template below.
The more details you can give us, the easier it will be for us
to determine the cause of a problem.
See: https://github.com/umbraco/Umbraco-CMS/blob/v8/dev/.github/CONTRIBUTING.md
-->
## Umbraco version
I am seeing this issue on Umbraco version: <!-- please note the version here -->
Reproduction
+2 -7
View File
@@ -11,17 +11,12 @@ Y88 88Y 888 888 888 888 d88P 888 888 888 Y88b. Y88..88P
Don't forget to build!
We've done our best to transform your configuration files but in case something is not quite right: remember we
backed up your files in App_Data\NuGetBackup so you can find the original files before they were transformed.
We've overwritten all the files in the Umbraco folder, these have been backed up in
App_Data\NuGetBackup. We didn't overwrite the UI.xml file nor did we remove any files or folders that you or
a package might have added. Only the existing files were overwritten. If you customized anything then make
sure to do a compare and merge with the NuGetBackup folder.
We've done our best to transform your configuration files but in case something is not quite right: we recommmend you look in source control for the previous version so you can find the original files before they were transformed.
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, config\splashes and global.asax.
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Umbraco.Core.Models
@@ -9,7 +8,7 @@ namespace Umbraco.Core.Models
/// </summary>
/// <typeparam name="T"></typeparam>
[DataContract(Name = "pagedCollection", Namespace = "")]
public class PagedResult<T>
public abstract class PagedResult
{
public PagedResult(long totalItems, long pageNumber, long pageSize)
{
@@ -39,9 +38,6 @@ namespace Umbraco.Core.Models
[DataMember(Name = "totalItems")]
public long TotalItems { get; private set; }
[DataMember(Name = "items")]
public IEnumerable<T> Items { get; set; }
/// <summary>
/// Calculates the skip size based on the paged parameters specified
/// </summary>
+20
View File
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Umbraco.Core.Models
{
/// <summary>
/// Represents a paged result for a model collection
/// </summary>
/// <typeparam name="T"></typeparam>
[DataContract(Name = "pagedCollection", Namespace = "")]
public class PagedResult<T> : PagedResult
{
public PagedResult(long totalItems, long pageNumber, long pageSize)
: base(totalItems, pageNumber, pageSize)
{ }
[DataMember(Name = "items")]
public IEnumerable<T> Items { get; set; }
}
}
@@ -3083,7 +3083,7 @@ namespace Umbraco.Core.Services.Implement
var version = GetVersion(versionId);
//Good ole null checks
if (content == null || version == null)
if (content == null || version == null || content.Trashed)
{
return new OperationResult(OperationResultType.FailedCannot, evtMsgs);
}
@@ -405,6 +405,21 @@ namespace Umbraco.Core.Services.Implement
/// <returns></returns>
public ITemplate CreateTemplateWithIdentity(string name, string alias, string content, ITemplate masterTemplate = null, int userId = Constants.Security.SuperUserId)
{
if (name == null)
{
throw new ArgumentNullException(nameof(name));
}
if (string.IsNullOrWhiteSpace(name))
{
throw new ArgumentException("Name cannot be empty or contain only white-space characters", nameof(name));
}
if (name.Length > 255)
{
throw new ArgumentOutOfRangeException(nameof(name), "Name cannot be more than 255 characters in length.");
}
// file might already be on disk, if so grab the content to avoid overwriting
var template = new Template(name, alias)
{
@@ -539,6 +554,17 @@ namespace Umbraco.Core.Services.Implement
/// <param name="userId"></param>
public void SaveTemplate(ITemplate template, int userId = Constants.Security.SuperUserId)
{
if (template == null)
{
throw new ArgumentNullException(nameof(template));
}
if (string.IsNullOrWhiteSpace(template.Name) || template.Name.Length > 255)
{
throw new InvalidOperationException("Name cannot be null, empty, contain only white-space characters or be more than 255 characters in length.");
}
using (var scope = ScopeProvider.CreateScope())
{
if (scope.Events.DispatchCancelable(SavingTemplate, this, new SaveEventArgs<ITemplate>(template)))
@@ -816,8 +816,8 @@ namespace Umbraco.Core.Services.Implement
{
//trimming username and email to make sure we have no trailing space
member.Username = member.Username.Trim();
member.Email = member.Email.Trim();
member.Email = member.Email.Trim();
using (var scope = ScopeProvider.CreateScope())
{
var saveEventArgs = new SaveEventArgs<IMember>(member);
+6
View File
@@ -254,6 +254,7 @@
<Compile Include="Models\Entities\IMediaEntitySlim.cs" />
<Compile Include="Models\Entities\IMemberEntitySlim.cs" />
<Compile Include="Models\Entities\MediaEntitySlim.cs" />
<Compile Include="Models\PagedResult.cs" />
<Compile Include="Models\Entities\MemberEntitySlim.cs" />
<Compile Include="Models\PublishedContent\ILivePublishedModelFactory.cs" />
<Compile Include="Models\PublishedContent\IndexedArrayItem.cs" />
@@ -603,6 +604,11 @@
<Compile Include="Models\MemberTypePropertyProfileAccess.cs" />
<Compile Include="Models\Packaging\InstallationSummary.cs" />
<Compile Include="Models\Packaging\PreInstallWarnings.cs" />
<Compile Include="Models\PagedResultOfT.cs" />
<Compile Include="Models\PartialView.cs" />
<Compile Include="Models\PartialViewType.cs" />
<Compile Include="Models\Property.cs" />
<Compile Include="Models\PropertyCollection.cs" />
<Compile Include="Models\PropertyGroup.cs" />
<Compile Include="Models\PropertyGroupCollection.cs" />
<Compile Include="Models\PropertyType.cs" />
@@ -239,12 +239,13 @@ Use this directive to construct a header inside the main editor window.
if (scope.editorfor) {
localizeVars.push(scope.editorfor);
}
localizationService.localizeMany(localizeVars).then(function (data) {
localizationService.localizeMany(localizeVars).then(function(data) {
setAccessibilityForEditor(data);
scope.loading = false;
});
} else {
scope.loading = false;
}
scope.goBack = function () {
if (scope.onBack) {
scope.onBack();
@@ -389,7 +389,7 @@ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) {
(umbRequestHelper.getApiUrl(
"dataTypeApiBaseUrl",
"PostRenameContainer",
{ id: id, name: name })),
{ id: id, name: encodeURIComponent(name) })),
"Failed to rename the folder with id " + id);
}
};
@@ -107,5 +107,5 @@
.umb-panel-group__details-status-action-description {
margin-top: 5px;
font-size: 12px;
padding-left: 165px;
padding-left:165px;
}
@@ -8,7 +8,6 @@
.umb-healthcheck-help-text {
line-height: 1.6em;
max-width: 750px;
}
.umb-healthcheck-action-bar {
@@ -415,8 +415,6 @@
text-decoration: none;
display: flex;
flex-direction: row;
opacity: 0;
visibility: hidden;
}
.umb-sortable-thumbnails.ui-sortable:not(.ui-sortable-disabled) {
@@ -425,9 +423,8 @@
}
}
.umb-sortable-thumbnails li:hover .umb-sortable-thumbnails__actions {
.umb-sortable-thumbnails li:hover .umb-sortable-thumbnails__action {
opacity: 1;
visibility: visible;
}
.umb-sortable-thumbnails .umb-sortable-thumbnails__action {
@@ -443,6 +440,12 @@
margin-left: 5px;
text-decoration: none;
.box-shadow(0 1px 2px rgba(0,0,0,0.25));
opacity: 0;
transition: opacity .1s ease-in-out;
.tabbing-active &:focus {
opacity: 1;
}
}
.umb-sortable-thumbnails .umb-sortable-thumbnails__action.-red {
@@ -46,6 +46,7 @@
title="{{historyLabel}}">
<umb-button
ng-hide="node.trashed"
type="button"
button-style="outline"
action="openRollback()"
@@ -4,13 +4,15 @@
<umb-box>
<umb-box-content>
<h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="https://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<h3><localize key="settingsDashboardVideos_trainingHeadline">Hours of Umbraco training videos are only a click away</localize></h3>
<localize key="settingsDashboardVideos_trainingDescription">
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
</localize>
</umb-box-content>
</umb-box>
<div ng-show="videos.length">
<h4>To get you started:</h4>
<h4><localize key="settingsDashboardVideos_getStarted">To get you started</localize>:</h4>
<ul class="thumbnails" >
<li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px">
@@ -100,8 +100,12 @@
<div class="umb-panel-group__details-check">
<div class="umb-panel-group__details-check-title">
<div class="umb-panel-group__details-check-name">Search</div>
<div class="umb-panel-group__details-check-description">Search the index and view the results</div>
<div class="umb-panel-group__details-check-name">
<localize key="general_search">Search</localize>
</div>
<div class="umb-panel-group__details-check-description">
<localize key="examineManagement_searchDescription">Search the index and view the results</localize>
</div>
</div>
<div class="umb-panel-group__details-status">
@@ -225,7 +229,7 @@
<div class="umb-panel-group__details-status-text">
<div>{{vm.selectedIndex.healthStatus}}</div>
<div ng-show="!vm.selectedIndex" class="color-red">
The index cannot be read and will need to be rebuilt
<localize key="examineManagement_indexCannotRead">The index cannot be read and will need to be rebuilt</localize>
</div>
<!--<div ng-if="status.description" ng-bind-html="status.description"></div>-->
</div>
@@ -377,13 +381,14 @@
</div>
<div ng-show="vm.selectedIndex.processingAttempts >= 100">
The process is taking longer than expected, check the umbraco log to see if there have been any errors during this operation
<localize key="examineManagement_processIsTakingLonger">The process is taking longer than expected, check the umbraco log to see if there have been any errors during this operation</localize>
</div>
</ng-form>
<div class="umb-panel-group__details-status-action-description" ng-show="!vm.selectedIndex.canRebuild">
This index cannot be rebuilt because it has no assigned <code>IIndexPopulator</code>
<localize key="examineManagement_indexCannotRebuild">This index cannot be rebuilt because it has no assigned </localize>
<code><localize key="examineManagement_iIndexPopulator">IIndexPopulator</localize></code>
</div>
</div>
</div>
@@ -4,78 +4,70 @@
<umb-box>
<umb-box-content>
<div class="flex justify-between items-center">
<h3 class="bold">Health Check</h3>
<umb-button
type="button"
button-style="success"
label="Check All Groups"
action="vm.checkAllGroups(vm.groups)">
</umb-button>
</div>
<div class="umb-healthcheck-help-text">
<p>The health checker evaluates various areas of your site for best practice settings, configuration, potential problems, etc. You can easily fix problems by pressing a button.
You can add your own health checks, have a look at <a href="https://our.umbraco.com/documentation/Extending/Healthcheck/" target="_blank" class="btn-link -underline">the documentation for more information</a> about custom health checks.</p>
<p>
The health checker evaluates various areas of your site for best practice settings, configuration, potential problems, etc. You can easily fix problems by pressing a button.
You can add your own health checks, have a look at <a href="https://our.umbraco.com/documentation/Extending/Healthcheck/" target="_blank" class="btn-link -underline">the documentation for more information</a> about custom health checks.
</p>
</div>
<div class="umb-panel-group__details-status-actions">
<umb-button type="button"
button-style="success"
label="Check All Groups"
action="vm.checkAllGroups(vm.groups)">
</umb-button>
</div>
</umb-box-content>
</umb-box>
<div class="umb-healthcheck">
<div class="umb-air" ng-repeat="group in vm.groups">
<button type="button" class="umb-healthcheck-group" ng-click="vm.openGroup(group);">
<div class="umb-healthcheck-title">{{group.name}}</div>
<div class="umb-healthcheck-title">{{group.name}}</div>
<div class="umb-healthcheck-group__load-container" ng-if="group.loading">
<umb-load-indicator></umb-load-indicator>
<div class="umb-healthcheck-group__load-container" ng-if="group.loading">
<umb-load-indicator></umb-load-indicator>
</div>
<div class="umb-healthcheck-messages"
ng-hide="group.loading || !group.totalSuccess && !group.totalWarning && !group.totalError && !group.totalInfo">
<div class="umb-healthcheck-message" ng-if="group.totalSuccess > 0">
<i class="icon-check color-green" aria-hidden="true"></i>
{{ group.totalSuccess }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_passed">passed</localize>
</span>
</div>
<div
class="umb-healthcheck-messages"
ng-hide="group.loading || !group.totalSuccess && !group.totalWarning && !group.totalError && !group.totalInfo"
>
<div class="umb-healthcheck-message" ng-if="group.totalSuccess > 0">
<i class="icon-check color-green" aria-hidden="true"></i>
{{ group.totalSuccess }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_passed">passed</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalWarning > 0">
<i class="icon-alert color-orange" aria-hidden="true"></i>
{{ group.totalWarning }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_warning">warning</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalError > 0">
<i class="icon-delete color-red" aria-hidden="true"></i>
{{ group.totalError }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_failed">failed</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalInfo > 0">
<i class="umb-healthcheck-status-icon icon-info" aria-hidden="true"></i>
{{ group.totalInfo }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_suggestion">suggestion</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalWarning > 0">
<i class="icon-alert color-orange" aria-hidden="true"></i>
{{ group.totalWarning }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_warning">warning</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalError > 0">
<i class="icon-delete color-red" aria-hidden="true"></i>
{{ group.totalError }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_failed">failed</localize>
</span>
</div>
<div class="umb-healthcheck-message" ng-if="group.totalInfo > 0">
<i class="umb-healthcheck-status-icon icon-info" aria-hidden="true"></i>
{{ group.totalInfo }}
<span class="sr-only">
<localize key="visuallyHiddenTexts_suggestion">suggestion</localize>
</span>
</div>
</div>
</button>
</div>
</div>
</div>
<div ng-if="vm.viewState === 'details'">
@@ -88,31 +80,25 @@
</umb-editor-sub-header-content-left>
</umb-editor-sub-header>
<div class="umb-panel-group__details">
<div class="umb-panel-group__details-group">
<div class="umb-panel-group__details-group-title">
<div class="umb-panel-group__details-group-name">{{ vm.selectedGroup.name }}</div>
<umb-button
type="button"
action="vm.checkAllInGroup(vm.selectedGroup, vm.selectedGroup.checks)"
label="Check group">
<umb-button type="button" button-style="success"
action="vm.checkAllInGroup(vm.selectedGroup, vm.selectedGroup.checks)"
label="Check group">
</umb-button>
</div>
<div class="umb-panel-group__details-checks">
<div class="umb-panel-group__details-check" ng-repeat="check in vm.selectedGroup.checks">
<div class="umb-panel-group__details-check-title">
<div class="umb-panel-group__details-check-name">{{ check.name }}</div>
<div class="umb-panel-group__details-check-description">{{ check.description }}</div>
</div>
<div class="umb-panel-group__details-status" ng-repeat="status in check.status">
<div class="umb-panel-group__details-status-icon-container" aria-hidden="true">
<i class="umb-healthcheck-status-icon icon-check color-green" ng-if="status.resultType === 0"></i>
<i class="umb-healthcheck-status-icon icon-alert icon-alert color-yellow" ng-if="status.resultType === 1"></i>
@@ -121,7 +107,6 @@
</div>
<div class="umb-panel-group__details-status-content">
<div class="umb-panel-group__details-status-text">
<span class="sr-only" ng-if="status.resultType === 0">
<localize key="visuallyHiddenTexts_checkPassed">Check passed</localize>:
@@ -145,16 +130,15 @@
<div ng-if="action.valueRequired">
<div><label class="bold">Set new value:</label></div>
<input name="providedValue" type="text" ng-model="action.providedValue" required val-email/>
<input name="providedValue" type="text" ng-model="action.providedValue" required val-email />
</div>
<umb-button
type="button"
button-style="success"
size="s"
disabled="healthCheckAction.providedValue.$invalid"
action="vm.executeAction(check, $parent.$index, action)"
label="{{action.name}}">
<umb-button type="button"
button-style="success"
size="s"
disabled="healthCheckAction.providedValue.$invalid"
action="vm.executeAction(check, $parent.$index, action)"
label="{{action.name}}">
</umb-button>
</ng-form>
@@ -162,9 +146,7 @@
<div class="umb-panel-group__details-status-action-description" ng-if="action.description" ng-bind-html="action.description"></div>
</div>
</div>
</div>
</div>
<div ng-show="check.loading">
@@ -173,13 +155,8 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -4,12 +4,14 @@
<umb-load-indicator></umb-load-indicator>
</div>
<p>
<span ng-show="vm.working">(wait)</span>
<span ng-show="vm.working">(<localize key="nuCache_wait">wait</localize>)</span>
</p>
<div class="umb-panel-group__details-group">
<div class="umb-panel-group__details-group-title">
<div class="umb-panel-group__details-group-name">Published Cache Status</div>
<div class="umb-panel-group__details-group-name">
<localize key="nuCache_publishedCacheStatus">Published Cache Status</localize>
</div>
</div>
<div class="umb-panel-group__details-checks">
<div class="umb-panel-group__details-check">
@@ -20,7 +22,9 @@
</div>
<div class="umb-panel-group__details-status-actions">
<div class="umb-panel-group__details-status-action no-background no-left-padding">
<button type="button" ng-click="vm.verify($event)" class="btn btn-danger">Refresh status</button>
<button type="button" ng-click="vm.verify($event)" class="btn btn-danger">
<localize key="nuCache_refreshStatus">Refresh status</localize>
</button>
</div>
</div>
</div>
@@ -31,53 +35,75 @@
<br />
<div class="umb-panel-group__details-group">
<div class="umb-panel-group__details-group-title">
<div class="umb-panel-group__details-group-name">Caches</div>
<div class="umb-panel-group__details-group-name">
<localize key="nuCache_caches">Caches</localize>
</div>
</div>
<div class="umb-panel-group__details-checks">
<div class="umb-panel-group__details-check">
<div class="umb-panel-group__details-check-title">
<div class="umb-panel-group__details-check-name">Memory Cache</div>
<div class="umb-panel-group__details-check-name">
<localize key="nuCache_memoryCache">Memory Cache</localize>
</div>
<div class="umb-panel-group__details-check-description">
This button lets you reload the in-memory cache, by entirely reloading it from the database
cache (but it does not rebuild that database cache). This is relatively fast.
Use it when you think that the memory cache has not been properly refreshed, after some events
triggered&mdash;which would indicate a minor Umbraco issue.
(note: triggers the reload on all servers in an LB environment).
<localize key="nuCache_memoryCacheDescription">
This button lets you reload the in-memory cache, by entirely reloading it from the database
cache (but it does not rebuild that database cache). This is relatively fast.
Use it when you think that the memory cache has not been properly refreshed, after some events
triggered&mdash;which would indicate a minor Umbraco issue.
(note: triggers the reload on all servers in an LB environment).
</localize>
</div>
<div class="umb-panel-group__details-status-actions">
<div class="umb-panel-group__details-status-action no-background no-left-padding">
<button type="button" ng-click="vm.reload($event)" class="btn btn-danger">Reload</button>
<button type="button" ng-click="vm.reload($event)" class="btn btn-danger">
<localize key="nuCache_reload">Reload</localize>
</button>
</div>
</div>
</div>
<div class="umb-panel-group__details-check-title top-border">
<div class="umb-panel-group__details-check-name">Database Cache</div>
<div class="umb-panel-group__details-check-name">
<localize key="nuCache_databaseCache">Database Cache</localize>
</div>
<div class="umb-panel-group__details-check-description">
This button lets you rebuild the database cache, ie the content of the cmsContentNu table.
<strong>Rebuilding can be expensive.</strong>
Use it when reloading is not enough, and you think that the database cache has not been
properly generated&mdash;which would indicate some critical Umbraco issue.
<localize key="nuCache_databaseCacheDescription">
This button lets you rebuild the database cache, ie the content of the cmsContentNu table.
<strong>Rebuilding can be expensive.</strong>
Use it when reloading is not enough, and you think that the database cache has not been
properly generated&mdash;which would indicate some critical Umbraco issue.
</localize>
</div>
<div class="umb-panel-group__details-status-actions">
<div class="umb-panel-group__details-status-action no-background no-left-padding">
<button type="button" ng-click="vm.rebuild($event)" class="btn btn-danger">Rebuild</button>
<button type="button" ng-click="vm.rebuild($event)" class="btn btn-danger">
<localize key="nuCache_rebuild">Rebuild</localize>
</button>
</div>
</div>
</div>
<div class="umb-panel-group__details-check-title top-border">
<div class="umb-panel-group__details-check-name">Internals</div>
<div class="umb-panel-group__details-check-name">
<localize key="nuCache_internals">Internals</localize>
</div>
<div class="umb-panel-group__details-check-description">
This button lets you trigger a NuCache snapshots collection (after running a fullCLR GC).
Unless you know what that means, you probably do <em>not</em> need to use it.
<localize key="nuCache_internalsDescription">
This button lets you trigger a NuCache snapshots collection (after running a fullCLR GC).
Unless you know what that means, you probably do <em>not</em> need to use it.
</localize>
</div>
<div class="umb-panel-group__details-status-actions">
<div class="umb-panel-group__details-status-action no-background no-left-padding">
<button type="button" ng-click="vm.collect($event)" class="btn btn-danger">Collect</button>
<button type="button" ng-click="vm.collect($event)" class="btn btn-danger">
<localize key="nuCache_collect">Collect</localize>
</button>
</div>
</div>
</div>
@@ -6,39 +6,51 @@
<umb-box ng-hide="vm.loading">
<umb-box-content>
<h3 class="bold">Performance profiling</h3>
<h3 class="bold">
<localize key="profiling_performanceProfiling">Performance profiling</localize>
</h3>
<div ng-show="vm.profilerEnabled">
<div class="mb4">
<p>
Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.
</p>
<p>
If you want to activate the profiler for a specific page rendering, simply add <b>umbDebug=true</b> to the querystring when requesting the page.
</p>
<p>
If you want the profiler to be activated by default for all page renderings, you can use the toggle below.
It will set a cookie in your browser, which then activates the profiler automatically.
In other words, the profiler will only be active by default in <i>your</i> browser - not everyone else's.
</p>
<localize key="profiling_performanceProfilingDescription">
<p>
Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.
</p>
<p>
If you want to activate the profiler for a specific page rendering, simply add <b>umbDebug=true</b> to the querystring when requesting the page.
</p>
<p>
If you want the profiler to be activated by default for all page renderings, you can use the toggle below.
It will set a cookie in your browser, which then activates the profiler automatically.
In other words, the profiler will only be active by default in <i>your</i> browser - not everyone else's.
</p>
</localize>
</div>
<div class="mb4">
<div class="flex items-center">
<umb-toggle checked="vm.alwaysOn" id="profilerAlwaysOn" on-click="vm.toggle()"></umb-toggle>
<label for="profilerAlwaysOn" class="mb0 ml2">Activate the profiler by default</label>
<label for="profilerAlwaysOn" class="mb0 ml2">
<localize key="profiling_activateByDefault">Activate the profiler by default</localize>
</label>
</div>
</div>
<h4>Friendly reminder</h4>
<p>
You should never let a production site run in debug mode. Debug mode is turned off by setting <b>debug="false"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
<h4>
<localize key="profiling_reminder">Friendly reminder</localize>
</h4>
<localize key="profiling_reminderDescription">
<p>
You should never let a production site run in debug mode. Debug mode is turned off by setting <b>debug="false"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
</localize>
</div>
<div ng-hide="vm.profilerEnabled">
<p>
Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.
</p>
<p>
Debug mode is turned on by setting <b>debug="true"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
<localize key="profiling_profilerEnabledDescription">
<p>
Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.
</p>
<p>
Debug mode is turned on by setting <b>debug="true"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
</localize>
</div>
</umb-box-content>
</umb-box>
@@ -1,12 +1,18 @@
<h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<h3>
<localize key="settingsDashboardVideos_trainingHeadline">Hours of Umbraco training videos are only a click away</localize>
</h3>
<localize key="settingsDashboardVideos_trainingDescription">
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
</localize>
<div class="row-fluid"
ng-init="init('https://umbraco.tv/videos/implementor/chapterrss?sort=no')"
ng-controller="Umbraco.Dashboard.StartupVideosController">
<div ng-show="videos.length">
<h4>To get you started:</h4>
<h4>
<localize key="settingsDashboardVideos_getStarted">To get you started</localize>:
</h4>
<ul class="thumbnails" >
<li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px">
@@ -54,7 +54,7 @@
</div>
<umb-control-group label="Enter a folder name" hide-label="false">
<input type="text" name="folderName" ng-model="model.folderName" class="umb-textstring textstring input-block-level" umb-auto-focus required />
<input type="text" name="folderName" maxlength="255" ng-model="model.folderName" class="umb-textstring textstring input-block-level" umb-auto-focus required />
</umb-control-group>
<button type="submit" class="btn btn-primary"><localize key="general_create">Create</localize></button>
@@ -81,7 +81,7 @@
<umb-control-group>
<label for="collectionName" class="control-label">Name of the Parent Document Type</label>
<input type="text" name="collectionName" id="collectionName" ng-model="model.collectionName" class="umb-textstring textstring input-block-level" umb-auto-focus required />
<input type="text" name="collectionName" id="collectionName" ng-model="model.collectionName" maxlength="255" class="umb-textstring textstring input-block-level" umb-auto-focus required />
<umb-checkbox ng-if="model.disableTemplates === false"
name="collectionCreateTemplate"
@@ -91,7 +91,7 @@
<umb-control-group>
<label for="collectionItemName" class="control-label">Name of the Item Document Type</label>
<input type="text" name="collectionItemName" id="collectionItemName" ng-model="model.collectionItemName" class="umb-textstring textstring input-block-level" required />
<input type="text" name="collectionItemName" id="collectionItemName" ng-model="model.collectionItemName" maxlength="255" class="umb-textstring textstring input-block-level" required />
<umb-checkbox ng-if="model.disableTemplates === false"
name="collectionItemCreateTemplate"
@@ -18,6 +18,8 @@
var documentTypeId = $routeParams.id;
var create = $routeParams.create;
var noTemplate = $routeParams.notemplate;
var isElement = $routeParams.iselement;
var allowVaryByCulture = $routeParams.culturevary;
var infiniteMode = $scope.model && $scope.model.infiniteMode;
vm.save = save;
@@ -63,6 +65,8 @@
documentTypeId = $scope.model.id;
create = $scope.model.create;
noTemplate = $scope.model.notemplate;
isElement = $scope.model.isElement;
allowVaryByCulture = $scope.model.allowVaryByCulture;
vm.submitButtonKey = "buttons_saveAndClose";
vm.generateModelsKey = "buttons_generateModelsAndClose";
}
@@ -430,7 +434,14 @@
contentType.defaultTemplate = contentTypeHelper.insertDefaultTemplatePlaceholder(contentType.defaultTemplate);
contentType.allowedTemplates = contentTypeHelper.insertTemplatePlaceholder(contentType.allowedTemplates);
}
// set isElement checkbox by default
if (isElement) {
contentType.isElement = true;
}
// set vary by culture checkbox by default
if (allowVaryByCulture) {
contentType.allowCultureVariant = true;
}
// convert icons for content type
convertLegacyIcons(contentType);
@@ -58,7 +58,9 @@
</td>
<td>
<span ng-if="language.fallbackLanguageId">{{vm.getLanguageById(language.fallbackLanguageId).name}}</span>
<span ng-if="!language.fallbackLanguageId">(none)</span>
<span ng-if="!language.fallbackLanguageId">
(<localize key="languages_none">none</localize>)
</span>
</td>
<td style="text-align: right;">
<umb-button ng-if="!language.isDefault"
@@ -20,16 +20,16 @@
<div class="umb-sortable-thumbnails__actions" data-element="sortable-thumbnail-actions">
<a role="button" aria-label="Remove" class="umb-sortable-thumbnails__action -red" data-element="action-remove" ng-click="remove()">
<i class="icon icon-delete"></i>
</a>
<button aria-label="Remove" class="umb-sortable-thumbnails__action -red btn-reset" data-element="action-remove" ng-click="remove()">
<i class="icon icon-delete" aria-hidden="true"></i>
</button>
</div>
</li>
<li style="border: none;" class="add-wrapper unsortable" ng-hide="model.value">
<a role="button" aria-label="Open media picker" data-element="sortable-thumbnails-add" class="add-link add-link-square" ng-click="add()" prevent-default>
<i class="icon icon-add large"></i>
</a>
<button aria-label="Open media picker" data-element="sortable-thumbnails-add" class="add-link add-link-square btn-reset" ng-click="add()" prevent-default>
<i class="icon icon-add large" aria-hidden="true"></i>
</button>
</li>
</ul>
</div>
@@ -36,18 +36,18 @@
</umb-file-icon>
<div class="umb-sortable-thumbnails__actions" data-element="sortable-thumbnail-actions">
<a role="button" aria-label="Edit media" ng-if="allowEditMedia" class="umb-sortable-thumbnails__action" data-element="action-edit" ng-click="vm.editItem(media)">
<i class="icon icon-edit"></i>
</a>
<a role="button" aria-label="Remove" class="umb-sortable-thumbnails__action -red" data-element="action-remove" ng-click="vm.remove($index)">
<i class="icon icon-delete"></i>
</a>
<button aria-label="Edit media" ng-if="allowEditMedia" class="umb-sortable-thumbnails__action btn-reset" data-element="action-edit" ng-click="vm.editItem(media)">
<i class="icon icon-edit" aria-hidden="true"></i>
</button>
<button aria-label="Remove" class="umb-sortable-thumbnails__action -red btn-reset" data-element="action-remove" ng-click="vm.remove($index)">
<i class="icon icon-delete" aria-hidden="true"></i>
</button>
</div>
</li>
<li style="border: none;" class="add-wrapper unsortable" ng-if="vm.showAdd() && allowAddMedia">
<a role="button" aria-label="Open media picker" data-element="sortable-thumbnails-add" class="add-link" ng-click="vm.add()" ng-class="{'add-link-square': (mediaItems.length === 0 || isMultiPicker)}" prevent-default>
<i class="icon icon-add large"></i>
</a>
<button aria-label="Open media picker" data-element="sortable-thumbnails-add" class="add-link btn-reset" ng-click="vm.add()" ng-class="{'add-link-square': (mediaItems.length === 0 || isMultiPicker)}" prevent-default>
<i class="icon icon-add large" aria-hidden="true"></i>
</button>
</li>
</ul>
</div>
+3
View File
@@ -351,6 +351,9 @@
<DevelopmentServerPort>9000</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:9000/</IISUrl>
<DevelopmentServerPort>8400</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:8400/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
@@ -9,7 +9,7 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
@@ -11,7 +11,7 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
}
@@ -33,7 +33,7 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js");
Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js");
@@ -514,6 +514,10 @@
<key alias="tools">Værktøjer</key>
<key alias="toolsDescription">Værktøjer til at administrere indekset</key>
<key alias="fields">felter</key>
<key alias="indexCannotRead">Indexet skal bygges igen, for at kunne læses</key>
<key alias="processIsTakingLonger">Processen tager længere tid end forventet. Kontrollér Umbraco loggen for at se om der er sket fejl under operationen</key>
<key alias="indexCannotRebuild">Dette index kan ikke genbygess for det ikke har nogen</key>
<key alias="iIndexPopulator">IIndexPopulator</key>
</area>
<area alias="placeholders">
<key alias="username">Indtast dit brugernavn</key>
@@ -1411,6 +1415,7 @@ Mange hilsner fra Umbraco robotten
<key alias="noFallbackLanguageOption">Intet fallback-sprog</key>
<key alias="fallbackLanguageDescription">For at tillade flersproget indhold, som ikke er tilgængeligt i det anmodede sprog, skal du her vælge et sprog at falde tilbage på.</key>
<key alias="fallbackLanguage">Fallback-sprog</key>
<key alias="none">ingen</key>
</area>
<area alias="macro">
<key alias="addParameter">Tilføj parameter</key>
File diff suppressed because it is too large Load Diff
@@ -523,6 +523,10 @@
<key alias="tools">Tools</key>
<key alias="toolsDescription">Tools to manage the index</key>
<key alias="fields">fields</key>
<key alias="indexCannotRead">The index cannot be read and will need to be rebuilt</key>
<key alias="processIsTakingLonger">The process is taking longer than expected, check the umbraco log to see if there have been any errors during this operation</key>
<key alias="indexCannotRebuild">This index cannot be rebuilt because it has no assigned</key>
<key alias="iIndexPopulator">IIndexPopulator</key>
</area>
<area alias="placeholders">
<key alias="username">Enter your username</key>
@@ -1649,6 +1653,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="noFallbackLanguageOption">No fall back language</key>
<key alias="fallbackLanguageDescription">To allow multi-lingual content to fall back to another language if not present in the requested language, select it here.</key>
<key alias="fallbackLanguage">Fall back language</key>
<key alias="none">none</key>
</area>
<area alias="macro">
<key alias="addParameter">Add parameter</key>
@@ -2233,4 +2238,85 @@ To manage your website, simply open the Umbraco back office and start adding con
<area alias="propertyActions">
<key alias="tooltipForPropertyActionsMenu">Open Property Actions</key>
</area>
<area alias="nuCache">
<key alias="wait">Wait</key>
<key alias="refreshStatus">Refresh status</key>
<key alias="memoryCache">Memory Cache</key>
<key alias="memoryCacheDescription">
<![CDATA[
This button lets you reload the in-memory cache, by entirely reloading it from the database
cache (but it does not rebuild that database cache). This is relatively fast.
Use it when you think that the memory cache has not been properly refreshed, after some events
triggered&mdash;which would indicate a minor Umbraco issue.
(note: triggers the reload on all servers in an LB environment).
]]>
</key>
<key alias="reload">Reload</key>
<key alias="databaseCache">Database Cache</key>
<key alias="databaseCacheDescription">
<![CDATA[
This button lets you rebuild the database cache, ie the content of the cmsContentNu table.
<strong>Rebuilding can be expensive.</strong>
Use it when reloading is not enough, and you think that the database cache has not been
properly generated&mdash;which would indicate some critical Umbraco issue.
]]>
</key>
<key alias="rebuild">Rebuild</key>
<key alias="internals">Internals</key>
<key alias="internalsDescription">
<![CDATA[
This button lets you trigger a NuCache snapshots collection (after running a fullCLR GC).
Unless you know what that means, you probably do <em>not</em> need to use it.
]]>
</key>
<key alias="collect">Collect</key>
<key alias="publishedCacheStatus">Published Cache Status</key>
<key alias="caches">Caches</key>
</area>
<area alias="profiling">
<key alias="performanceProfiling">Performance profiling</key>
<key alias="performanceProfilingDescription">
<![CDATA[
<p>
Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.
</p>
<p>
If you want to activate the profiler for a specific page rendering, simply add <b>umbDebug=true</b> to the querystring when requesting the page.
</p>
<p>
If you want the profiler to be activated by default for all page renderings, you can use the toggle below.
It will set a cookie in your browser, which then activates the profiler automatically.
In other words, the profiler will only be active by default in <i>your</i> browser - not everyone else's.
</p>
]]>
</key>
<key alias="activateByDefault">Activate the profiler by default</key>
<key alias="reminder">Friendly reminder</key>
<key alias="reminderDescription">
<![CDATA[
<p>
You should never let a production site run in debug mode. Debug mode is turned off by setting <b>debug="false"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
]]>
</key>
<key alias="profilerEnabledDescription">
<![CDATA[
<p>
Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.
</p>
<p>
Debug mode is turned on by setting <b>debug="true"</b> on the <b>&lt;compilation /&gt;</b> element in web.config.
</p>
]]>
</key>
</area>
<area alias="settingsDashboardVideos">
<key alias="trainingHeadline">Hours of Umbraco training videos are only a click away</key>
<key alias="trainingDescription">
<![CDATA[
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
]]>
</key>
<key alias="getStarted">To get you started</key>
</area>
</language>
@@ -39,7 +39,8 @@ namespace Umbraco.Web.Install.InstallSteps
var fileName = IOHelper.MapPath($"{SystemDirectories.Root}/web.config");
var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace);
var systemWeb = xml.Root.DescendantsAndSelf("system.web").Single();
// we only want to get the element that is under the root, (there may be more under <location> tags we don't want them)
var systemWeb = xml.Root.Element("system.web");
// Update appSetting if it exists, or else create a new appSetting for the given key and value
var machineKey = systemWeb.Descendants("machineKey").FirstOrDefault();