Merge branch 'v8/dev' into v8/bugfix/contentquery-search
This commit is contained in:
+3
-1
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
|
||||
* **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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
+2
-2
@@ -18,5 +18,5 @@ using System.Resources;
|
||||
[assembly: AssemblyVersion("8.0.0")]
|
||||
|
||||
// these are FYI and changed automatically
|
||||
[assembly: AssemblyFileVersion("8.3.0")]
|
||||
[assembly: AssemblyInformationalVersion("8.3.0")]
|
||||
[assembly: AssemblyFileVersion("8.6.0")]
|
||||
[assembly: AssemblyInformationalVersion("8.6.0")]
|
||||
|
||||
@@ -221,7 +221,8 @@ namespace Umbraco.Core
|
||||
FailedPasswordAttempts,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Integer, true, FailedPasswordAttempts)
|
||||
{
|
||||
Name = FailedPasswordAttemptsLabel
|
||||
Name = FailedPasswordAttemptsLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelInt
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -242,35 +243,40 @@ namespace Umbraco.Core
|
||||
LastLockoutDate,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastLockoutDate)
|
||||
{
|
||||
Name = LastLockoutDateLabel
|
||||
Name = LastLockoutDateLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelDateTime
|
||||
}
|
||||
},
|
||||
{
|
||||
LastLoginDate,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastLoginDate)
|
||||
{
|
||||
Name = LastLoginDateLabel
|
||||
Name = LastLoginDateLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelDateTime
|
||||
}
|
||||
},
|
||||
{
|
||||
LastPasswordChangeDate,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastPasswordChangeDate)
|
||||
{
|
||||
Name = LastPasswordChangeDateLabel
|
||||
Name = LastPasswordChangeDateLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelDateTime
|
||||
}
|
||||
},
|
||||
{
|
||||
PasswordAnswer,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Nvarchar, true, PasswordAnswer)
|
||||
{
|
||||
Name = PasswordAnswerLabel
|
||||
Name = PasswordAnswerLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelString
|
||||
}
|
||||
},
|
||||
{
|
||||
PasswordQuestion,
|
||||
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Nvarchar, true, PasswordQuestion)
|
||||
{
|
||||
Name = PasswordQuestionLabel
|
||||
Name = PasswordQuestionLabel,
|
||||
DataTypeId = Constants.DataTypes.LabelString
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -225,8 +225,17 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
if (builtinProperties.ContainsKey(propertyType.Alias))
|
||||
{
|
||||
//this reset's its current data type reference which will be re-assigned based on the property editor assigned on the next line
|
||||
propertyType.DataTypeId = 0;
|
||||
propertyType.DataTypeKey = default;
|
||||
var propDefinition = builtinProperties[propertyType.Alias];
|
||||
if (propDefinition != null)
|
||||
{
|
||||
propertyType.DataTypeId = propDefinition.DataTypeId;
|
||||
propertyType.DataTypeKey = propDefinition.DataTypeKey;
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyType.DataTypeId = 0;
|
||||
propertyType.DataTypeKey = default;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -273,6 +273,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\IPublishedContentType.cs" />
|
||||
@@ -847,7 +848,7 @@
|
||||
<Compile Include="Models\Packaging\InstallationSummary.cs" />
|
||||
<Compile Include="Models\Packaging\PackageAction.cs" />
|
||||
<Compile Include="Models\Packaging\PreInstallWarnings.cs" />
|
||||
<Compile Include="Models\PagedResult.cs" />
|
||||
<Compile Include="Models\PagedResultOfT.cs" />
|
||||
<Compile Include="Models\PartialView.cs" />
|
||||
<Compile Include="Models\PartialViewType.cs" />
|
||||
<Compile Include="Models\Property.cs" />
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
using Examine;
|
||||
using System;
|
||||
using Examine;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using Umbraco.Core.PropertyEditors.ValueConverters;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core.Strings;
|
||||
|
||||
@@ -13,14 +17,16 @@ namespace Umbraco.Examine
|
||||
{
|
||||
private readonly UrlSegmentProviderCollection _urlSegmentProviders;
|
||||
private readonly IUserService _userService;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public MediaValueSetBuilder(PropertyEditorCollection propertyEditors,
|
||||
UrlSegmentProviderCollection urlSegmentProviders,
|
||||
IUserService userService)
|
||||
IUserService userService, ILogger logger)
|
||||
: base(propertyEditors, false)
|
||||
{
|
||||
_urlSegmentProviders = urlSegmentProviders;
|
||||
_userService = userService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -29,6 +35,42 @@ namespace Umbraco.Examine
|
||||
foreach (var m in media)
|
||||
{
|
||||
var urlValue = m.GetUrlSegment(_urlSegmentProviders);
|
||||
|
||||
var umbracoFilePath = string.Empty;
|
||||
var umbracoFile = string.Empty;
|
||||
|
||||
var umbracoFileSource = m.GetValue<string>(Constants.Conventions.Media.File);
|
||||
|
||||
if (umbracoFileSource.DetectIsJson())
|
||||
{
|
||||
ImageCropperValue cropper = null;
|
||||
try
|
||||
{
|
||||
cropper = JsonConvert.DeserializeObject<ImageCropperValue>(
|
||||
m.GetValue<string>(Constants.Conventions.Media.File));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error<MediaValueSetBuilder>(ex, $"Could not Deserialize ImageCropperValue for item with key {m.Key} ");
|
||||
}
|
||||
|
||||
if (cropper != null)
|
||||
{
|
||||
umbracoFilePath = cropper.Src;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
umbracoFilePath = umbracoFileSource;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(umbracoFilePath))
|
||||
{
|
||||
// intentional dummy Uri
|
||||
var uri = new Uri("https://localhost/" + umbracoFilePath);
|
||||
umbracoFile = uri.Segments.Last();
|
||||
}
|
||||
|
||||
var values = new Dictionary<string, IEnumerable<object>>
|
||||
{
|
||||
{"icon", m.ContentType.Icon?.Yield() ?? Enumerable.Empty<string>()},
|
||||
@@ -44,7 +86,8 @@ namespace Umbraco.Examine
|
||||
{"urlName", urlValue?.Yield() ?? Enumerable.Empty<string>()},
|
||||
{"path", m.Path?.Yield() ?? Enumerable.Empty<string>()},
|
||||
{"nodeType", m.ContentType.Id.ToString().Yield() },
|
||||
{"creatorName", (m.GetCreatorProfile(_userService)?.Name ?? "??").Yield()}
|
||||
{"creatorName", (m.GetCreatorProfile(_userService)?.Name ?? "??").Yield()},
|
||||
{UmbracoExamineIndex.UmbracoFileFieldName, umbracoFile.Yield()}
|
||||
};
|
||||
|
||||
foreach (var property in m.Properties)
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Umbraco.Examine
|
||||
/// </summary>
|
||||
public const string IndexPathFieldName = SpecialFieldPrefix + "Path";
|
||||
public const string NodeKeyFieldName = SpecialFieldPrefix + "Key";
|
||||
public const string UmbracoFileFieldName = "umbracoFileSrc";
|
||||
public const string IconFieldName = SpecialFieldPrefix + "Icon";
|
||||
public const string PublishedFieldName = SpecialFieldPrefix + "Published";
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ using Lucene.Net.Analysis;
|
||||
using Lucene.Net.Analysis.Standard;
|
||||
using Lucene.Net.Store;
|
||||
using Moq;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
@@ -44,11 +45,10 @@ namespace Umbraco.Tests.UmbracoExamine
|
||||
|
||||
public static MediaIndexPopulator GetMediaIndexRebuilder(PropertyEditorCollection propertyEditors, IMediaService mediaService)
|
||||
{
|
||||
var mediaValueSetBuilder = new MediaValueSetBuilder(propertyEditors, new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider() }), GetMockUserService());
|
||||
var mediaValueSetBuilder = new MediaValueSetBuilder(propertyEditors, new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider() }), GetMockUserService(), GetMockLogger());
|
||||
var mediaIndexDataSource = new MediaIndexPopulator(null, mediaService, mediaValueSetBuilder);
|
||||
return mediaIndexDataSource;
|
||||
}
|
||||
|
||||
public static IContentService GetMockContentService()
|
||||
{
|
||||
long longTotalRecs;
|
||||
@@ -146,6 +146,11 @@ namespace Umbraco.Tests.UmbracoExamine
|
||||
return mediaTypeServiceMock.Object;
|
||||
}
|
||||
|
||||
public static IProfilingLogger GetMockLogger()
|
||||
{
|
||||
return new ProfilingLogger(Mock.Of<ILogger>(), Mock.Of<IProfiler>());
|
||||
}
|
||||
|
||||
public static UmbracoContentIndex GetUmbracoIndexer(
|
||||
IProfilingLogger profilingLogger,
|
||||
Directory luceneDir,
|
||||
|
||||
@@ -259,19 +259,18 @@ function dependencies() {
|
||||
//css, fonts and image files
|
||||
|
||||
var assetsTask = gulp.src(config.sources.globs.assets, { allowEmpty: true });
|
||||
if (global.isProd === true) {
|
||||
assetsTask = assetsTask.pipe(imagemin([
|
||||
imagemin.gifsicle({interlaced: true}),
|
||||
imagemin.jpegtran({progressive: true}),
|
||||
imagemin.optipng({optimizationLevel: 5}),
|
||||
imagemin.svgo({
|
||||
plugins: [
|
||||
{removeViewBox: true},
|
||||
{cleanupIDs: false}
|
||||
]
|
||||
})
|
||||
]));
|
||||
}
|
||||
assetsTask = assetsTask.pipe(imagemin([
|
||||
imagemin.gifsicle({interlaced: true}),
|
||||
imagemin.jpegtran({progressive: true}),
|
||||
imagemin.optipng({optimizationLevel: 5}),
|
||||
imagemin.svgo({
|
||||
plugins: [
|
||||
{removeViewBox: true},
|
||||
{cleanupIDs: false}
|
||||
]
|
||||
})
|
||||
]));
|
||||
|
||||
assetsTask = assetsTask.pipe(gulp.dest(config.root + config.targets.assets));
|
||||
|
||||
stream.add(assetsTask);
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var gulp = require('gulp');
|
||||
var through2 = require('through2');
|
||||
|
||||
function createEmptyStream() {
|
||||
var pass = through2.obj();
|
||||
process.nextTick(pass.end.bind(pass));
|
||||
return pass;
|
||||
}
|
||||
|
||||
/**************************
|
||||
* Copies all angular JS files into their separate umbraco.*.js file
|
||||
**************************/
|
||||
function removeProductionMode() {
|
||||
|
||||
global.isProd = false;
|
||||
|
||||
return createEmptyStream();
|
||||
};
|
||||
|
||||
module.exports = { removeProductionMode: removeProductionMode };
|
||||
@@ -23,11 +23,10 @@ module.exports = function (files, out) {
|
||||
// sort files in stream by path or any custom sort comparator
|
||||
task = task.pipe(babel())
|
||||
.pipe(sort());
|
||||
|
||||
if (global.isProd === true) {
|
||||
//in production, embed the templates
|
||||
task = task.pipe(embedTemplates({ basePath: "./src/", minimize: { loose: true } }))
|
||||
}
|
||||
|
||||
//in production, embed the templates
|
||||
task = task.pipe(embedTemplates({ basePath: "./src/", minimize: { loose: true } }))
|
||||
|
||||
task = task.pipe(concat(out))
|
||||
.pipe(wrap('(function(){\n%= body %\n})();'))
|
||||
.pipe(gulp.dest(config.root + config.targets.js));
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
* and then add the exports command to add the new item into the task menu.
|
||||
*/
|
||||
|
||||
global.isProd = true;
|
||||
|
||||
const { src, dest, series, parallel, lastRun } = require('gulp');
|
||||
|
||||
const { dependencies } = require('./gulp/tasks/dependencies');
|
||||
@@ -20,7 +18,6 @@ const { less } = require('./gulp/tasks/less');
|
||||
const { testE2e, testUnit } = require('./gulp/tasks/test');
|
||||
const { views } = require('./gulp/tasks/views');
|
||||
const { watchTask } = require('./gulp/tasks/watchTask');
|
||||
const { removeProductionMode } = require('./gulp/tasks/removeProductionMode');
|
||||
|
||||
// Load local overwrites, can be used to overwrite paths in your local setup.
|
||||
var fs = require('fs');
|
||||
@@ -41,7 +38,6 @@ try {
|
||||
// ***********************************************************
|
||||
exports.build = series(parallel(dependencies, js, less, views), testUnit);
|
||||
exports.dev = series(parallel(dependencies, js, less, views), watchTask);
|
||||
exports.fastdev = series(removeProductionMode, parallel(dependencies, js, less, views), watchTask);
|
||||
exports.watch = series(watchTask);
|
||||
//
|
||||
exports.runTests = series(js, testUnit);
|
||||
|
||||
+2
@@ -195,6 +195,7 @@ Use this directive to construct a header inside the main editor window.
|
||||
@param {string=} icon Show and edit the content icon. Opens an overlay to change the icon.
|
||||
@param {boolean=} hideIcon Set to <code>true</code> to hide icon.
|
||||
@param {string=} alias show and edit the content alias.
|
||||
@param {boolean=} aliasLocked Set to <code>true</code> to lock the alias.
|
||||
@param {boolean=} hideAlias Set to <code>true</code> to hide alias.
|
||||
@param {string=} description Add a description to the content.
|
||||
@param {boolean=} hideDescription Set to <code>true</code> to hide description.
|
||||
@@ -347,6 +348,7 @@ Use this directive to construct a header inside the main editor window.
|
||||
icon: "=",
|
||||
hideIcon: "@",
|
||||
alias: "=",
|
||||
aliasLocked: "<",
|
||||
hideAlias: "=",
|
||||
description: "=",
|
||||
hideDescription: "@",
|
||||
|
||||
@@ -56,6 +56,7 @@ function confirmDirective() {
|
||||
onCancel: '=',
|
||||
caption: '@',
|
||||
confirmButtonStyle: '@',
|
||||
confirmDisabled: '<?',
|
||||
confirmLabelKey: '@'
|
||||
},
|
||||
link: function (scope, element, attr, ctrl) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -161,6 +161,7 @@ input.umb-table__input {
|
||||
line-height: 20px;
|
||||
color: @ui-option-type;
|
||||
vertical-align: bottom;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.umb-table-body__checkicon,
|
||||
|
||||
@@ -63,6 +63,10 @@ a.umb-user-details-details__back-link {
|
||||
|
||||
.umb-user-details-details__sidebar {
|
||||
flex: 0 0 @sidebarwidth;
|
||||
|
||||
.umb-button{
|
||||
margin-left:0px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
@@ -101,6 +105,7 @@ a.umb-user-details-details__back-link {
|
||||
.umb-user-details-details__information-item {
|
||||
margin-bottom: 10px;
|
||||
font-size: 13px;
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
.umb-user-details-details__information-item-label {
|
||||
|
||||
@@ -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()"
|
||||
@@ -168,9 +169,9 @@
|
||||
ng-change="updateTemplate(node.template)">
|
||||
<option value="">{{chooseLabel}}...</option>
|
||||
</select>
|
||||
<a href="" ng-show="allowChangeTemplate && node.template !== null" class="umb-node-preview__action" style="margin-left:15px;" ng-click="openTemplate()">
|
||||
<button ng-show="allowChangeTemplate && node.template !== null" class="umb-node-preview__action" style="margin-left:15px;" ng-click="openTemplate()">
|
||||
<localize key="general_open">Open</localize>
|
||||
</a>
|
||||
</button>
|
||||
</div>
|
||||
</umb-control-group>
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
action="confirm()"
|
||||
button-style="{{confirmButtonStyle || 'primary'}}"
|
||||
state="confirmButtonState"
|
||||
disabled="confirmDisabled === true"
|
||||
label-key="{{confirmLabelKey || 'general_ok'}}">
|
||||
</umb-button>
|
||||
</div>
|
||||
|
||||
@@ -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,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—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—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—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—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><compilation /></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><compilation /></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><compilation /></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><compilation /></b> element in web.config.
|
||||
</p>
|
||||
</localize>
|
||||
</div>
|
||||
</umb-box-content>
|
||||
</umb-box>
|
||||
|
||||
@@ -1,14 +1,30 @@
|
||||
<umb-box>
|
||||
<umb-box-content>
|
||||
<h3 class="bold">Start here</h3>
|
||||
<p>This section contains the building blocks for your Umbraco site. Follow the below links to find out more about working with the items in the Settings section:</p>
|
||||
<h5>Find out more:</h5>
|
||||
<h3 class="bold">
|
||||
<localize key="settingsDashboard_start">Start here</localize>
|
||||
</h3>
|
||||
<localize key="settingsDashboard_startDescription">
|
||||
<p>This section contains the building blocks for your Umbraco site. Follow the below links to find out more about working with the items in the Settings section:</p>
|
||||
</localize>:
|
||||
<h5>
|
||||
<localize key="settingsDashboard_more">Find out more</localize>:
|
||||
</h5>
|
||||
<ul>
|
||||
<li>Read more about working with the items in Settings <a class="btn-link -underline" href="https://our.umbraco.com/documentation/Getting-Started/Backoffice/Sections/" target="_blank">in the Documentation section</a> of Our Umbraco</li>
|
||||
<li>Ask a question in the <a class="btn-link -underline" href="https://our.umbraco.com/forum" target="_blank">Community Forum</a></li>
|
||||
<li>Watch our <a class="btn-link -underline" href="https://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</li>
|
||||
<li>Find out about our <a class="btn-link -underline" href="https://umbraco.com/products/" target="_blank">productivity boosting tools and commercial support</a></li>
|
||||
<li>Find out about real-life <a class="btn-link -underline" href="https://umbraco.com/training/" target="_blank">training and certification</a> opportunities</li>
|
||||
<li>
|
||||
<localize key="settingsDashboard_bulletPointOne">Read more about working with the items in Settings <a class="btn-link -underline" href="https://our.umbraco.com/documentation/Getting-Started/Backoffice/Sections/" target="_blank">in the Documentation section</a> of Our Umbraco</localize>
|
||||
</li>
|
||||
<li>
|
||||
<localize key="settingsDashboard_bulletPointTwo">Ask a question in the <a class="btn-link -underline" href="https://our.umbraco.com/forum" target="_blank">Community Forum</a></localize>
|
||||
</li>
|
||||
<li>
|
||||
<localize key="settingsDashboard_bulletPointThree">Watch our <a class="btn-link -underline" href="https://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</localize>
|
||||
</li>
|
||||
<li>
|
||||
<localize key="settingsDashboard_bulletPointFour">Find out about our <a class="btn-link -underline" href="https://umbraco.com/products/" target="_blank">productivity boosting tools and commercial support</a></localize>
|
||||
</li>
|
||||
<li>
|
||||
<localize key="settingsDashboard_bulletPointFive">Find out about real-life <a class="btn-link -underline" href="https://umbraco.com/training/" target="_blank">training and certification</a> opportunities</localize>
|
||||
</li>
|
||||
</ul>
|
||||
</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">
|
||||
|
||||
@@ -51,6 +51,12 @@ function DataTypeDeleteController($scope, dataTypeResource, treeService, navigat
|
||||
navigationService.hideDialog();
|
||||
};
|
||||
|
||||
vm.onReferenceClicked = function(event) {
|
||||
if (event.metaKey !== true) {
|
||||
navigationService.hideDialog();
|
||||
}
|
||||
};
|
||||
|
||||
vm.labels = {};
|
||||
localizationService
|
||||
.localize("editdatatype_acceptDeleteConsequence", [$scope.currentNode.name])
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="relation in vm.references.documentTypes">
|
||||
<td><span title="{{::relation.name}}({{::relation.alias}})"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</span></td>
|
||||
<td><a title="{{::relation.name}}({{::relation.alias}})" href="#/settings/documentTypes/edit/{{::relation.id}}" ng-click="vm.onReferenceClicked($event)"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</a></td>
|
||||
<td><div><p class="red" ng-repeat="property in relation.properties"><i class="icon icon-alert red"></i>{{::property.name}}</p></div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -74,7 +74,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="relation in vm.references.mediaTypes">
|
||||
<td><span title="{{::relation.name}}({{::relation.alias}})"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</span></td>
|
||||
<td><a title="{{::relation.name}}({{::relation.alias}})" href="#/settings/documentTypes/edit/{{::relation.id}}" ng-click="vm.onReferenceClicked($event)"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</a></td>
|
||||
<td><div><p class="red" ng-repeat="property in relation.properties"><i class="icon icon-alert red"></i>{{::property.name}}</p></div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -98,7 +98,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="relation in vm.references.memberTypes">
|
||||
<td><span title="{{::relation.name}}({{::relation.alias}})"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</span></td>
|
||||
<td><a title="{{::relation.name}}({{::relation.alias}})" href="#/settings/documentTypes/edit/{{::relation.id}}" ng-click="vm.onReferenceClicked($event)"><i class="umb-table-body__icon {{relation.icon}}"></i>{{::relation.name}}</a></td>
|
||||
<td><div><p class="red" ng-repeat="property in relation.properties"><i class="icon icon-alert red"></i>{{::property.name}}</p></div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<div class="umb-table-cell umb-table__name"><span>{{::reference.name}}</span></div>
|
||||
<div class="umb-table-cell"><span title="{{::reference.alias}}">{{::reference.alias}}</span></div>
|
||||
<div class="umb-table-cell --noOverflow"><span>{{::reference.properties | umbCmsJoinArray:', ':'name'}}</span></div>
|
||||
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/documentTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
|
||||
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/mediaTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -98,7 +98,7 @@
|
||||
<div class="umb-table-cell umb-table__name"><span>{{::reference.name}}</span></div>
|
||||
<div class="umb-table-cell"><span title="{{::reference.alias}}">{{::reference.alias}}</span></div>
|
||||
<div class="umb-table-cell --noOverflow"><span>{{::reference.properties | umbCmsJoinArray:', ':'name'}}</span></div>
|
||||
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/documentTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
|
||||
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/memberTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -673,6 +673,7 @@ angular.module("umbraco")
|
||||
return ((spans / $scope.model.config.items.columns) * 100).toFixed(8);
|
||||
};
|
||||
|
||||
|
||||
$scope.clearPrompt = function (scopedObject, e) {
|
||||
scopedObject.deletePrompt = false;
|
||||
e.preventDefault();
|
||||
@@ -692,8 +693,15 @@ angular.module("umbraco")
|
||||
};
|
||||
|
||||
$scope.getTemplateName = function (control) {
|
||||
if (control.editor.nameExp) return control.editor.nameExp(control)
|
||||
return control.editor.name;
|
||||
var templateName = control.editor.name;
|
||||
if (control.editor.nameExp) {
|
||||
var valueOfTemplate = control.editor.nameExp(control);
|
||||
if (valueOfTemplate != "") {
|
||||
templateName += ": ";
|
||||
templateName += valueOfTemplate;
|
||||
}
|
||||
}
|
||||
return templateName;
|
||||
}
|
||||
|
||||
// *********************************************
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
</div>
|
||||
|
||||
<div class="cell-tools-remove row-tool">
|
||||
<i class="icon-trash" ng-click="togglePrompt(row)"></i>
|
||||
<i class="icon-trash" ng-click="togglePrompt(row)" localize="title" title="@delete"></i>
|
||||
<umb-confirm-action
|
||||
ng-if="row.deletePrompt"
|
||||
direction="left"
|
||||
@@ -200,7 +200,7 @@
|
||||
</div>
|
||||
|
||||
<div class="umb-control-tool">
|
||||
<i class="umb-control-tool-icon icon-trash" ng-click="togglePrompt(control)"></i>
|
||||
<i class="umb-control-tool-icon icon-trash" ng-click="togglePrompt(control)" localize="title" title="@delete"></i>
|
||||
<umb-confirm-action ng-if="control.deletePrompt"
|
||||
direction="left"
|
||||
on-confirm="removeControl(area, $index)"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
rows="4">
|
||||
</textarea>
|
||||
<umb-button type="button"
|
||||
button-style="[info,block]"
|
||||
button-style="[action,block]"
|
||||
action="model.resendInvite()"
|
||||
state="model.resendInviteButtonState"
|
||||
label="Resend Invite"
|
||||
|
||||
@@ -85,8 +85,8 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CSharpTest.Net.Collections" Version="14.906.1403.1082" />
|
||||
<PackageReference Include="ClientDependency" Version="1.9.7" />
|
||||
<PackageReference Include="ClientDependency-Mvc5" Version="1.8.0.0" />
|
||||
<PackageReference Include="ClientDependency" Version="1.9.8" />
|
||||
<PackageReference Include="ClientDependency-Mvc5" Version="1.9.3" />
|
||||
<PackageReference Include="Examine" Version="1.0.2" />
|
||||
<PackageReference Include="ImageProcessor.Web" Version="4.10.0.100" />
|
||||
<PackageReference Include="ImageProcessor.Web.Config" Version="2.5.0.100" />
|
||||
@@ -347,9 +347,9 @@
|
||||
<WebProjectProperties>
|
||||
<UseIIS>False</UseIIS>
|
||||
<AutoAssignPort>True</AutoAssignPort>
|
||||
<DevelopmentServerPort>8300</DevelopmentServerPort>
|
||||
<DevelopmentServerPort>8600</DevelopmentServerPort>
|
||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||
<IISUrl>http://localhost:8300/</IISUrl>
|
||||
<IISUrl>http://localhost:8600/</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");
|
||||
|
||||
@@ -85,7 +85,7 @@ else
|
||||
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
|
||||
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
|
||||
render your specific editor template like:
|
||||
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
|
||||
@Html.EditorFor(m => registerModel.MemberProperties[i].Value, "MyEditor")
|
||||
*@
|
||||
@Html.EditorFor(m => registerModel.MemberProperties[i].Value)
|
||||
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -7,14 +7,14 @@
|
||||
},
|
||||
{
|
||||
"name": "Image",
|
||||
"nameTemplate": "{{ 'Image: ' + (value.udi | ncNodeName) }}",
|
||||
"nameTemplate": "{{ value && value.udi ? (value.udi | ncNodeName) : '' }}",
|
||||
"alias": "media",
|
||||
"view": "media",
|
||||
"icon": "icon-picture"
|
||||
},
|
||||
{
|
||||
"name": "Macro",
|
||||
"nameTemplate": "{{ 'Macro: ' + value.macroAlias }}",
|
||||
"nameTemplate": "{{ value && value.macroAlias ? value.macroAlias : '' }}",
|
||||
"alias": "macro",
|
||||
"view": "macro",
|
||||
"icon": "icon-settings-alt"
|
||||
@@ -27,7 +27,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Headline",
|
||||
"nameTemplate": "{{ 'Headline: ' + value }}",
|
||||
"nameTemplate": "{{ value }}",
|
||||
"alias": "headline",
|
||||
"view": "textstring",
|
||||
"icon": "icon-coin",
|
||||
@@ -38,6 +38,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Quote",
|
||||
"nameTemplate": "{{ value ? value.substring(0,32) + (value.length > 32 ? '...' : '') : '' }}",
|
||||
"alias": "quote",
|
||||
"view": "textstring",
|
||||
"icon": "icon-quote",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -177,6 +177,14 @@ namespace Umbraco.Web.Models.Mapping
|
||||
|
||||
target.Name = source.Values.ContainsKey("nodeName") ? source.Values["nodeName"] : "[no name]";
|
||||
|
||||
if (source.Values.TryGetValue(UmbracoExamineIndex.UmbracoFileFieldName, out var umbracoFile))
|
||||
{
|
||||
if (umbracoFile != null)
|
||||
{
|
||||
target.Name = $"{target.Name} ({umbracoFile})";
|
||||
}
|
||||
}
|
||||
|
||||
if (source.Values.ContainsKey(UmbracoExamineIndex.NodeKeyFieldName))
|
||||
{
|
||||
if (Guid.TryParse(source.Values[UmbracoExamineIndex.NodeKeyFieldName], out var key))
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace Umbraco.Web.Search
|
||||
|
||||
string type;
|
||||
var indexName = Constants.UmbracoIndexes.InternalIndexName;
|
||||
var fields = new[] { "id", "__NodeId", "__Key" };
|
||||
var fields = new List<string> { "id", "__NodeId", "__Key" };
|
||||
|
||||
// TODO: WE should try to allow passing in a lucene raw query, however we will still need to do some manual string
|
||||
// manipulation for things like start paths, member types, etc...
|
||||
@@ -87,7 +87,7 @@ namespace Umbraco.Web.Search
|
||||
case UmbracoEntityTypes.Member:
|
||||
indexName = Constants.UmbracoIndexes.MembersIndexName;
|
||||
type = "member";
|
||||
fields = new[] { "id", "__NodeId", "__Key", "email", "loginName" };
|
||||
fields.AddRange(new[]{ "email", "loginName"});
|
||||
if (searchFrom != null && searchFrom != Constants.Conventions.MemberTypes.AllMembersListId && searchFrom.Trim() != "-1")
|
||||
{
|
||||
sb.Append("+__NodeTypeAlias:");
|
||||
@@ -97,6 +97,7 @@ namespace Umbraco.Web.Search
|
||||
break;
|
||||
case UmbracoEntityTypes.Media:
|
||||
type = "media";
|
||||
fields.AddRange(new[] { UmbracoExamineIndex.UmbracoFileFieldName });
|
||||
var allMediaStartNodes = _umbracoContext.Security.CurrentUser.CalculateMediaStartNodeIds(_entityService);
|
||||
AppendPath(sb, UmbracoObjectTypes.Media, allMediaStartNodes, searchFrom, ignoreUserStartNodes, _entityService);
|
||||
break;
|
||||
@@ -161,7 +162,7 @@ namespace Umbraco.Web.Search
|
||||
return _mapper.MapEnumerable<IEntitySlim, SearchResultEntity>(results);
|
||||
}
|
||||
|
||||
private bool BuildQuery(StringBuilder sb, string query, string searchFrom, string[] fields, string type)
|
||||
private bool BuildQuery(StringBuilder sb, string query, string searchFrom, List<string> fields, string type)
|
||||
{
|
||||
//build a lucene query:
|
||||
// the nodeName will be boosted 10x without wildcards
|
||||
@@ -234,11 +235,26 @@ namespace Umbraco.Web.Search
|
||||
|
||||
foreach (var f in fields)
|
||||
{
|
||||
var queryWordsReplaced = new string[querywords.Length];
|
||||
|
||||
// when searching file names containing hyphens we need to replace the hyphens with spaces
|
||||
if (f.Equals(UmbracoExamineIndex.UmbracoFileFieldName))
|
||||
{
|
||||
for (var index = 0; index < querywords.Length; index++)
|
||||
{
|
||||
queryWordsReplaced[index] = querywords[index].Replace("\\-", " ").Replace("_", " ").Trim(" ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
queryWordsReplaced = querywords;
|
||||
}
|
||||
|
||||
//additional fields normally
|
||||
sb.Append(f);
|
||||
sb.Append(":");
|
||||
sb.Append("(");
|
||||
foreach (var w in querywords)
|
||||
foreach (var w in queryWordsReplaced)
|
||||
{
|
||||
sb.Append(w.ToLower());
|
||||
sb.Append("* ");
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ClientDependency" Version="1.9.7" />
|
||||
<PackageReference Include="ClientDependency" Version="1.9.8" />
|
||||
<PackageReference Include="CSharpTest.Net.Collections" Version="14.906.1403.1082" />
|
||||
<PackageReference Include="Examine" Version="1.0.2" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.8.14" />
|
||||
|
||||
Reference in New Issue
Block a user