Merge remote-tracking branch 'origin/v8/dev' into netcore/dev
@@ -41,6 +41,7 @@
|
||||
<dependency id="Microsoft.Owin.Security.Cookies" version="[4.0.1,4.999999)" />
|
||||
<dependency id="Microsoft.Owin.Security.OAuth" version="[4.0.1,4.999999)" />
|
||||
<dependency id="System.Threading.Tasks.Dataflow" version="[4.9.0,4.999999)" />
|
||||
<dependency id="HtmlSanitizer" version="[4.0.217,4.999999)" />
|
||||
|
||||
</group>
|
||||
|
||||
|
||||
@@ -146,6 +146,9 @@ namespace Umbraco.Core.Configuration.Legacy
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the configuration status. This will return the version number of the currently installed umbraco instance.
|
||||
/// </summary>
|
||||
@@ -315,6 +318,15 @@ namespace Umbraco.Core.Configuration.Legacy
|
||||
private string _databaseFactoryServerVersion;
|
||||
public string DatabaseFactoryServerVersion => GetterWithDefaultValue(Constants.AppSettings.Debug.DatabaseFactoryServerVersion, string.Empty, ref _databaseFactoryServerVersion);
|
||||
|
||||
|
||||
|
||||
private string _iconsPath;
|
||||
/// <summary>
|
||||
/// Gets the path to folder containing the icons used in the umbraco backoffice (/umbraco/assets/icons by default).
|
||||
/// </summary>
|
||||
/// <value>The icons path.</value>
|
||||
public string IconsPath => GetterWithDefaultValue(Constants.AppSettings.IconsPath, $"{UmbracoPath}/assets/icons", ref _iconsPath);
|
||||
|
||||
private string _mainDomLock;
|
||||
|
||||
public string MainDomLock => GetterWithDefaultValue(Constants.AppSettings.MainDomLock, string.Empty, ref _mainDomLock);
|
||||
|
||||
@@ -47,6 +47,8 @@ namespace Umbraco.Configuration.Models
|
||||
public bool UseHttps => _configuration.GetValue(Prefix + "UseHttps", false);
|
||||
public int VersionCheckPeriod => _configuration.GetValue(Prefix + "VersionCheckPeriod", 7);
|
||||
public string UmbracoPath => _configuration.GetValue(Prefix + "UmbracoPath", "~/umbraco");
|
||||
public string IconsPath => _configuration.GetValue(Prefix + "IconsPath", $"{UmbracoPath}/assets/icons");
|
||||
|
||||
public string UmbracoCssPath => _configuration.GetValue(Prefix + "UmbracoCssPath", "~/css");
|
||||
|
||||
public string UmbracoScriptsPath =>
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
/// <value>The reserved paths.</value>
|
||||
string ReservedPaths { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to umbraco's icons directory (/umbraco/assets/icons by default).
|
||||
/// </summary>
|
||||
string IconsPath { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the configuration status. This will return the version number of the currently installed umbraco instance.
|
||||
/// </summary>
|
||||
|
||||
@@ -39,15 +39,20 @@ namespace Umbraco.Core
|
||||
public const string ConfigurationStatus = "Umbraco.Core.ConfigurationStatus";
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to umbraco's root directory (/umbraco by default).
|
||||
/// The path to umbraco's root directory (/umbraco by default).
|
||||
/// </summary>
|
||||
public const string UmbracoPath = "Umbraco.Core.Path";
|
||||
|
||||
/// <summary>
|
||||
/// Gets the path to umbraco's icons directory (/umbraco/assets/icons by default).
|
||||
/// </summary>
|
||||
public const string IconsPath = "Umbraco.Icons.Path";
|
||||
|
||||
/// <summary>
|
||||
/// The reserved urls from web.config.
|
||||
/// </summary>
|
||||
public const string ReservedUrls = "Umbraco.Core.ReservedUrls";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The path of the stylesheet folder.
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Umbraco.Core
|
||||
{
|
||||
public static partial class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the alias identifiers for Umbraco's core application sections.
|
||||
/// </summary>
|
||||
public static class SvgSanitizer
|
||||
{
|
||||
/// <summary>
|
||||
/// Allowlist for SVG attributes.
|
||||
/// </summary>
|
||||
public static readonly IList<string> Attributes = new [] { "accent-height", "accumulate", "additive", "alignment-baseline", "allowReorder", "alphabetic", "amplitude", "arabic-form", "ascent", "attributeName", "attributeType", "autoReverse", "azimuth", "baseFrequency", "baseline-shift", "baseProfile", "bbox", "begin", "bias", "by", "calcMode", "cap-height", "class", "clip", "clipPathUnits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "contentScriptType", "contentStyleType", "cursor", "cx", "cy", "d", "decelerate", "descent", "diffuseConstant", "direction", "display", "divisor", "dominant-baseline", "dur", "dx", "dy", "edgeMode", "elevation", "enable-background", "end", "exponent", "externalResourcesRequired", "Section", "fill", "fill-opacity", "fill-rule", "filter", "filterRes", "filterUnits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "format", "from", "fr", "fx", "fy", "g1", "g2", "glyph-name", "glyph-orientation-horizontal", "glyph-orientation-vertical", "glyphRef", "gradientTransform", "gradientUnits", "hanging", "height", "href", "hreflang", "horiz-adv-x", "horiz-origin-x", "ISection", "id", "ideographic", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kernelMatrix", "kernelUnitLength", "kerning", "keyPoints", "keySplines", "keyTimes", "lang", "lengthAdjust", "letter-spacing", "lighting-color", "limitingConeAngle", "local", "MSection", "marker-end", "marker-mid", "marker-start", "markerHeight", "markerUnits", "markerWidth", "mask", "maskContentUnits", "maskUnits", "mathematical", "max", "media", "method", "min", "mode", "NSection", "name", "numOctaves", "offset", "opacity", "operator", "order", "orient", "orientation", "origin", "overflow", "overline-position", "overline-thickness", "panose-1", "paint-order", "path", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "ping", "pointer-events", "points", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "r", "radius", "referrerPolicy", "refX", "refY", "rel", "rendering-intent", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "result", "rotate", "rx", "ry", "scale", "seed", "shape-rendering", "slope", "spacing", "specularConstant", "specularExponent", "speed", "spreadMethod", "startOffset", "stdDeviation", "stemh", "stemv", "stitchTiles", "stop-color", "stop-opacity", "strikethrough-position", "strikethrough-thickness", "string", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "surfaceScale", "systemLanguage", "tabindex", "tableValues", "target", "targetX", "targetY", "text-anchor", "text-decoration", "text-rendering", "textLength", "to", "transform", "type", "u1", "u2", "underline-position", "underline-thickness", "unicode", "unicode-bidi", "unicode-range", "units-per-em", "v-alphabetic", "v-hanging", "v-ideographic", "v-mathematical", "values", "vector-effect", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "viewBox", "viewTarget", "visibility", "width", "widths", "word-spacing", "writing-mode", "x", "x-height", "x1", "x2", "xChannelSelector", "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "y", "y1", "y2", "yChannelSelector", "z", "zoomAndPan" };
|
||||
|
||||
/// <summary>
|
||||
/// Allowlist for SVG tabs.
|
||||
/// </summary>
|
||||
public static readonly IList<string> Tags = new [] { "a", "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor", "animateMotion", "animateTransform", "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "discard", "ellipse", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignObject", "g", "glyph", "glyphRef", "hatch", "hatchpath", "hkern", "image", "line", "linearGradient", "marker", "mask", "mesh", "meshgradient", "meshpatch", "meshrow", "metadata", "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "set", "solidcolor", "stop", "style", "svg", "switch", "symbol", "text", "textPath", "title", "tref", "tspan", "unknown", "use", "view", "vkern" };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,8 @@
|
||||
public const string Packages = Data + "/packages";
|
||||
|
||||
public const string Preview = Data + "/preview";
|
||||
|
||||
public const string LogFiles= "~/Logs";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,14 @@ namespace Umbraco.Web.Models.ContentEditing
|
||||
[ReadOnly(true)]
|
||||
public Guid DataTypeKey { get; set; }
|
||||
|
||||
[DataMember(Name = "dataTypeName")]
|
||||
[ReadOnly(true)]
|
||||
public string DataTypeName { get; set; }
|
||||
|
||||
[DataMember(Name = "dataTypeIcon")]
|
||||
[ReadOnly(true)]
|
||||
public string DataTypeIcon { get; set; }
|
||||
|
||||
//SD: Is this really needed ?
|
||||
[DataMember(Name = "groupId")]
|
||||
public int GroupId { get; set; }
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Umbraco.Core.Models;
|
||||
|
||||
namespace Umbraco.Core.Persistence.Repositories
|
||||
{
|
||||
public interface IMemberGroupRepository : IReadWriteQueryRepository<int, IMemberGroup>
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a member group by it's uniqueId
|
||||
/// </summary>
|
||||
/// <param name="uniqueId"></param>
|
||||
/// <returns></returns>
|
||||
IMemberGroup Get(Guid uniqueId);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a member group by it's name
|
||||
/// </summary>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using System;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
|
||||
namespace Umbraco.Web.PropertyEditors
|
||||
{
|
||||
@@ -7,7 +8,8 @@ namespace Umbraco.Web.PropertyEditors
|
||||
/// </summary>
|
||||
public class EmailAddressConfiguration
|
||||
{
|
||||
[ConfigurationField("IsRequired", "Required?", "boolean")]
|
||||
[ConfigurationField("IsRequired", "Required?", "hidden", Description = "Deprecated; Make this required by selecting mandatory when adding to the document type")]
|
||||
[Obsolete("No longer used, use `Mandatory` for the property instead. Will be removed in the next major version")]
|
||||
public bool IsRequired { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,35 +4,43 @@ using Umbraco.Core.Models.PublishedContent;
|
||||
namespace Umbraco.Core.PropertyEditors
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a default overridable implementation for <see cref="IPropertyValueConverter"/> that does nothing.
|
||||
/// Provides a default implementation for <see cref="IPropertyValueConverter" />.
|
||||
/// </summary>
|
||||
/// <seealso cref="Umbraco.Core.PropertyEditors.IPropertyValueConverter" />
|
||||
public abstract class PropertyValueConverterBase : IPropertyValueConverter
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public virtual bool IsConverter(IPublishedPropertyType propertyType)
|
||||
=> false;
|
||||
|
||||
/// <inheritdoc />
|
||||
public virtual bool? IsValue(object value, PropertyValueLevel level)
|
||||
{
|
||||
switch (level)
|
||||
{
|
||||
case PropertyValueLevel.Source:
|
||||
return value != null && (!(value is string) || string.IsNullOrWhiteSpace((string) value) == false);
|
||||
// the default implementation uses the old magic null & string comparisons,
|
||||
// other implementations may be more clever, and/or test the final converted object values
|
||||
return value != null && (!(value is string stringValue) || !string.IsNullOrWhiteSpace(stringValue));
|
||||
case PropertyValueLevel.Inter:
|
||||
return null;
|
||||
case PropertyValueLevel.Object:
|
||||
return null;
|
||||
default:
|
||||
throw new NotSupportedException($"Invalid level: {level}.");
|
||||
}
|
||||
}
|
||||
|
||||
[Obsolete("This method is not part of the IPropertyValueConverter contract, therefore not used and will be removed in future versions; use IsValue instead.")]
|
||||
public virtual bool HasValue(IPublishedProperty property, string culture, string segment)
|
||||
{
|
||||
// the default implementation uses the old magic null & string comparisons,
|
||||
// other implementations may be more clever, and/or test the final converted object values
|
||||
var value = property.GetSourceValue(culture, segment);
|
||||
return value != null && (!(value is string) || string.IsNullOrWhiteSpace((string) value) == false);
|
||||
return value != null && (!(value is string stringValue) || !string.IsNullOrWhiteSpace(stringValue));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public virtual Type GetPropertyValueType(IPublishedPropertyType propertyType)
|
||||
=> typeof (object);
|
||||
=> typeof(object);
|
||||
|
||||
/// <inheritdoc />
|
||||
public virtual PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType)
|
||||
|
||||
@@ -7,10 +7,16 @@ namespace Umbraco.Web.PropertyEditors
|
||||
/// </summary>
|
||||
public class TrueFalseConfiguration
|
||||
{
|
||||
[ConfigurationField("default", "Default Value", "boolean")]
|
||||
public string Default { get; set; } // TODO: well, true or false?!
|
||||
[ConfigurationField("default", "Initial State", "boolean", Description = "The initial state for the toggle, when it is displayed for the first time in the backoffice, eg. for a new content item.")]
|
||||
public bool Default { get; set; }
|
||||
|
||||
[ConfigurationField("labelOn", "Write a label text", "textstring")]
|
||||
public string Label { get; set; }
|
||||
[ConfigurationField("showLabels", "Show toggle labels", "boolean", Description = "Show labels next to toggle button.")]
|
||||
public bool ShowLabels { get; set; }
|
||||
|
||||
[ConfigurationField("labelOn", "Label On", "textstring", Description = "Label text when enabled.")]
|
||||
public string LabelOn { get; set; }
|
||||
|
||||
[ConfigurationField("labelOff", "Label Off", "textstring", Description = "Label text when disabled.")]
|
||||
public string LabelOff { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ namespace Umbraco.Web.Scheduling
|
||||
if (!dir.Exists)
|
||||
{
|
||||
_logger.Debug<TempFileCleanup>("The cleanup folder doesn't exist {Folder}", dir.FullName);
|
||||
return;
|
||||
}
|
||||
|
||||
var files = dir.GetFiles("*.*", SearchOption.AllDirectories);
|
||||
@@ -60,6 +61,7 @@ namespace Umbraco.Web.Scheduling
|
||||
{
|
||||
try
|
||||
{
|
||||
file.IsReadOnly = false;
|
||||
file.Delete();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Umbraco.Core.Models;
|
||||
|
||||
namespace Umbraco.Core.Services
|
||||
@@ -7,6 +8,7 @@ namespace Umbraco.Core.Services
|
||||
{
|
||||
IEnumerable<IMemberGroup> GetAll();
|
||||
IMemberGroup GetById(int id);
|
||||
IMemberGroup GetById(Guid id);
|
||||
IEnumerable<IMemberGroup> GetByIds(IEnumerable<int> ids);
|
||||
IMemberGroup GetByName(string name);
|
||||
void Save(IMemberGroup memberGroup, bool raiseEvents = true);
|
||||
|
||||
@@ -113,6 +113,9 @@ namespace Umbraco.Examine
|
||||
|
||||
var allLangs = _languageService.GetAllLanguages().Select(x => x.IsoCode.ToLowerInvariant()).ToList();
|
||||
|
||||
// the chars [*-_] in the query will mess everything up so let's remove those
|
||||
query = Regex.Replace(query, "[\\*\\-_]", "");
|
||||
|
||||
//check if text is surrounded by single or double quotes, if so, then exact match
|
||||
var surroundedByQuotes = Regex.IsMatch(query, "^\".*?\"$")
|
||||
|| Regex.IsMatch(query, "^\'.*?\'$");
|
||||
|
||||
@@ -7,6 +7,7 @@ using Serilog.Core;
|
||||
using Serilog.Events;
|
||||
using Serilog.Formatting;
|
||||
using Serilog.Formatting.Compact;
|
||||
using Umbraco.Core.IO;
|
||||
using Umbraco.Core.Hosting;
|
||||
using Umbraco.Core.Logging.Serilog.Enrichers;
|
||||
|
||||
@@ -22,7 +23,7 @@ namespace Umbraco.Core.Logging.Serilog
|
||||
/// It is highly recommended that you keep/use this default in your own logging config customizations
|
||||
/// </summary>
|
||||
/// <param name="logConfig">A Serilog LoggerConfiguration</param>
|
||||
/// <param name="IHostingEnvironment"></param>
|
||||
/// <param name="hostingEnvironment"></param>
|
||||
/// <param name="loggingConfiguration"></param>
|
||||
public static LoggerConfiguration MinimalConfiguration(
|
||||
this LoggerConfiguration logConfig,
|
||||
@@ -33,15 +34,15 @@ namespace Umbraco.Core.Logging.Serilog
|
||||
|
||||
//Set this environment variable - so that it can be used in external config file
|
||||
//add key="serilog:write-to:RollingFile.pathFormat" value="%BASEDIR%\logs\log.txt" />
|
||||
Environment.SetEnvironmentVariable("BASEDIR", hostingEnvironment.MapPath("/").TrimEnd("\\"), EnvironmentVariableTarget.Process);
|
||||
Environment.SetEnvironmentVariable("UMBLOGDIR", loggingConfiguration.LogDirectory, EnvironmentVariableTarget.Process);
|
||||
Environment.SetEnvironmentVariable("BASEDIR", hostingEnvironment.ApplicationPhysicalPath, EnvironmentVariableTarget.Process);
|
||||
Environment.SetEnvironmentVariable("MACHINENAME", Environment.MachineName, EnvironmentVariableTarget.Process);
|
||||
Environment.SetEnvironmentVariable("MACHINENAME", Environment.MachineName, EnvironmentVariableTarget.Process);
|
||||
|
||||
logConfig.MinimumLevel.Verbose() //Set to highest level of logging (as any sinks may want to restrict it to Errors only)
|
||||
.Enrich.WithProcessId()
|
||||
.Enrich.WithProcessName()
|
||||
.Enrich.WithThreadId()
|
||||
.Enrich.WithProperty(AppDomainId, AppDomain.CurrentDomain.Id)
|
||||
.Enrich.WithProperty(AppDomainId, AppDomain.CurrentDomain.Id)
|
||||
.Enrich.WithProperty("AppDomainAppId", hostingEnvironment.ApplicationId.ReplaceNonAlphanumericChars(string.Empty))
|
||||
.Enrich.WithProperty("MachineName", Environment.MachineName)
|
||||
.Enrich.With<Log4NetLevelMapperEnricher>()
|
||||
@@ -57,11 +58,14 @@ namespace Umbraco.Core.Logging.Serilog
|
||||
/// <param name="loggingConfiguration"></param>
|
||||
/// <param name="minimumLevel">The log level you wish the JSON file to collect - default is Verbose (highest)</param>
|
||||
/// <param name="retainedFileCount">The number of days to keep log files. Default is set to null which means all logs are kept</param>
|
||||
public static LoggerConfiguration OutputDefaultTextFile(this LoggerConfiguration logConfig, ILoggingConfiguration loggingConfiguration, LogEventLevel minimumLevel = LogEventLevel.Verbose, int? retainedFileCount = null)
|
||||
public static LoggerConfiguration OutputDefaultTextFile(
|
||||
this LoggerConfiguration logConfig,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
ILoggingConfiguration loggingConfiguration, LogEventLevel minimumLevel = LogEventLevel.Verbose, int? retainedFileCount = null)
|
||||
{
|
||||
//Main .txt logfile - in similar format to older Log4Net output
|
||||
//Ends with ..txt as Date is inserted before file extension substring
|
||||
logConfig.WriteTo.File(Path.Combine(loggingConfiguration.LogDirectory, $@"UmbracoTraceLog.{Environment.MachineName}..txt"),
|
||||
logConfig.WriteTo.File(Path.Combine(hostingEnvironment.MapPath(Constants.SystemDirectories.LogFiles), $"UmbracoTraceLog.{Environment.MachineName}..txt"),
|
||||
shared: true,
|
||||
rollingInterval: RollingInterval.Day,
|
||||
restrictedToMinimumLevel: minimumLevel,
|
||||
@@ -115,11 +119,15 @@ namespace Umbraco.Core.Logging.Serilog
|
||||
/// <param name="loggingConfiguration"></param>
|
||||
/// <param name="minimumLevel">The log level you wish the JSON file to collect - default is Verbose (highest)</param>
|
||||
/// <param name="retainedFileCount">The number of days to keep log files. Default is set to null which means all logs are kept</param>
|
||||
public static LoggerConfiguration OutputDefaultJsonFile(this LoggerConfiguration logConfig, ILoggingConfiguration loggingConfiguration, LogEventLevel minimumLevel = LogEventLevel.Verbose, int? retainedFileCount = null)
|
||||
public static LoggerConfiguration OutputDefaultJsonFile(
|
||||
this LoggerConfiguration logConfig,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
ILoggingConfiguration loggingConfiguration, LogEventLevel minimumLevel = LogEventLevel.Verbose, int? retainedFileCount = null)
|
||||
{
|
||||
//.clef format (Compact log event format, that can be imported into local SEQ & will make searching/filtering logs easier)
|
||||
//Ends with ..txt as Date is inserted before file extension substring
|
||||
logConfig.WriteTo.File(new CompactJsonFormatter(), Path.Combine(loggingConfiguration.LogDirectory, $@"UmbracoTraceLog.{Environment.MachineName}..json"),
|
||||
logConfig.WriteTo.File(new CompactJsonFormatter(),
|
||||
Path.Combine(hostingEnvironment.MapPath(Constants.SystemDirectories.LogFiles) ,$"UmbracoTraceLog.{Environment.MachineName}..json"),
|
||||
shared: true,
|
||||
rollingInterval: RollingInterval.Day, //Create a new JSON file every day
|
||||
retainedFileCountLimit: retainedFileCount, //Setting to null means we keep all files - default is 31 days
|
||||
|
||||
@@ -5,8 +5,6 @@ using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using Serilog.Events;
|
||||
using Serilog.Formatting.Compact.Reader;
|
||||
using Umbraco.Core.Hosting;
|
||||
using Umbraco.Core.IO;
|
||||
|
||||
namespace Umbraco.Core.Logging.Viewer
|
||||
{
|
||||
|
||||
@@ -61,8 +61,7 @@ namespace Umbraco.Web.Models.ContentEditing
|
||||
/// The path of the entity
|
||||
/// </summary>
|
||||
[DataMember(Name = "path")]
|
||||
public string Path { get; set; }
|
||||
|
||||
public string Path { get; set; }
|
||||
/// <summary>
|
||||
/// A collection of extra data that is available for this specific entity/entity type
|
||||
/// </summary>
|
||||
|
||||
@@ -7,7 +7,7 @@ using Umbraco.Core.Models.ContentEditing;
|
||||
namespace Umbraco.Web.Models.ContentEditing
|
||||
{
|
||||
/// <summary>
|
||||
/// A model representing a content item to be displayed in the back office
|
||||
/// A model representing a media item to be displayed in the back office
|
||||
/// </summary>
|
||||
[DataContract(Name = "content", Namespace = "")]
|
||||
public class MediaItemDisplay : ListViewAwareContentItemDisplayBase<ContentPropertyDisplay>
|
||||
|
||||
@@ -18,6 +18,9 @@ namespace Umbraco.Web.Models.ContentEditing
|
||||
ContentApps = new List<ContentApp>();
|
||||
}
|
||||
|
||||
[DataMember(Name = "contentType")]
|
||||
public ContentTypeBasic ContentType { get; set; }
|
||||
|
||||
[DataMember(Name = "username")]
|
||||
public string Username { get; set; }
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ namespace Umbraco.Web.Models.Mapping
|
||||
target.Properties = context.MapEnumerable<MemberPropertyTypeBasic, MemberPropertyTypeDisplay>(source.Properties);
|
||||
}
|
||||
|
||||
// Umbraco.Code.MapAll -Editor -View -Config -ContentTypeId -ContentTypeName -Locked
|
||||
// Umbraco.Code.MapAll -Editor -View -Config -ContentTypeId -ContentTypeName -Locked -DataTypeIcon -DataTypeName
|
||||
private static void Map(PropertyTypeBasic source, PropertyTypeDisplay target, MapperContext context)
|
||||
{
|
||||
target.Alias = source.Alias;
|
||||
@@ -373,7 +373,7 @@ namespace Umbraco.Web.Models.Mapping
|
||||
target.Validation = source.Validation;
|
||||
}
|
||||
|
||||
// Umbraco.Code.MapAll -Editor -View -Config -ContentTypeId -ContentTypeName -Locked
|
||||
// Umbraco.Code.MapAll -Editor -View -Config -ContentTypeId -ContentTypeName -Locked -DataTypeIcon -DataTypeName
|
||||
private static void Map(MemberPropertyTypeBasic source, MemberPropertyTypeDisplay target, MapperContext context)
|
||||
{
|
||||
target.Alias = source.Alias;
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace Umbraco.Web.Models.Mapping
|
||||
target.Trashed = source.Trashed;
|
||||
target.Udi = Udi.Create(ObjectTypes.GetUdiType(source.NodeObjectType), source.Key);
|
||||
|
||||
|
||||
if (source is IContentEntitySlim contentSlim)
|
||||
{
|
||||
source.AdditionalData["ContentTypeAlias"] = contentSlim.ContentTypeAlias;
|
||||
@@ -52,6 +53,8 @@ namespace Umbraco.Web.Models.Mapping
|
||||
|
||||
if (source is IMediaEntitySlim mediaSlim)
|
||||
{
|
||||
//pass UpdateDate for MediaPicker ListView ordering
|
||||
source.AdditionalData["UpdateDate"] = mediaSlim.UpdateDate;
|
||||
source.AdditionalData["MediaPath"] = mediaSlim.MediaPath;
|
||||
}
|
||||
|
||||
@@ -181,7 +184,8 @@ namespace Umbraco.Web.Models.Mapping
|
||||
target.Name = source.Values.ContainsKey($"nodeName_{culture}") ? source.Values[$"nodeName_{culture}"] : target.Name;
|
||||
}
|
||||
|
||||
if (source.Values.TryGetValue(UmbracoExamineFieldNames.UmbracoFileFieldName, out var umbracoFile))
|
||||
if (source.Values.TryGetValue(UmbracoExamineFieldNames.UmbracoFileFieldName, out var umbracoFile) &&
|
||||
umbracoFile.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
if (umbracoFile != null)
|
||||
{
|
||||
|
||||
@@ -241,6 +241,8 @@ namespace Umbraco.Web.Models.Mapping
|
||||
Inherited = inherited,
|
||||
DataTypeId = p.DataTypeId,
|
||||
DataTypeKey = p.DataTypeKey,
|
||||
DataTypeName = dataType.Name,
|
||||
DataTypeIcon = propertyEditor.Icon,
|
||||
SortOrder = p.SortOrder,
|
||||
ContentTypeId = contentType.Id,
|
||||
ContentTypeName = contentType.Name,
|
||||
|
||||
@@ -744,7 +744,9 @@ namespace Umbraco.Core.Persistence.Querying
|
||||
|
||||
var c = exp[0];
|
||||
return (c == '"' || c == '`' || c == '\'') && exp[exp.Length - 1] == c
|
||||
? exp.Substring(1, exp.Length - 2)
|
||||
? exp.Length == 1
|
||||
? string.Empty
|
||||
: exp.Substring(1, exp.Length - 2)
|
||||
: exp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
|
||||
if (isContent || isMedia || isMember)
|
||||
sql
|
||||
.AndSelect<ContentVersionDto>(x => Alias(x.Id, "versionId"))
|
||||
.AndSelect<ContentVersionDto>(x => Alias(x.Id, "versionId"), x=>x.VersionDate)
|
||||
.AndSelect<ContentTypeDto>(x => x.Alias, x => x.Icon, x => x.Thumbnail, x => x.IsContainer, x => x.Variations);
|
||||
|
||||
if (isContent)
|
||||
@@ -489,7 +489,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
|
||||
if (isContent || isMedia || isMember)
|
||||
sql
|
||||
.AndBy<ContentVersionDto>(x => x.Id)
|
||||
.AndBy<ContentVersionDto>(x => x.Id, x => x.VersionDate)
|
||||
.AndBy<ContentTypeDto>(x => x.Alias, x => x.Icon, x => x.Thumbnail, x => x.IsContainer, x => x.Variations);
|
||||
|
||||
if (defaultSort)
|
||||
@@ -593,6 +593,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
public string Text { get; set; }
|
||||
public Guid NodeObjectType { get; set; }
|
||||
public DateTime CreateDate { get; set; }
|
||||
public DateTime VersionDate { get; set; }
|
||||
public int Children { get; set; }
|
||||
public int VersionId { get; set; }
|
||||
public string Alias { get; set; }
|
||||
@@ -626,6 +627,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
{
|
||||
entity.Trashed = dto.Trashed;
|
||||
entity.CreateDate = dto.CreateDate;
|
||||
entity.UpdateDate = dto.VersionDate;
|
||||
entity.CreatorId = dto.UserId ?? Constants.Security.UnknownUserId;
|
||||
entity.Id = dto.NodeId;
|
||||
entity.Key = dto.UniqueId;
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
|
||||
protected override string GetBaseWhereClause()
|
||||
{
|
||||
return "umbracoNode.id = @id";
|
||||
return $"{Constants.DatabaseSchema.Tables.Node}.id = @id";
|
||||
}
|
||||
|
||||
protected override IEnumerable<string> GetDeleteClauses()
|
||||
@@ -115,6 +115,16 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
entity.ResetDirtyProperties();
|
||||
}
|
||||
|
||||
public IMemberGroup Get(Guid uniqueId)
|
||||
{
|
||||
var sql = GetBaseQuery(false);
|
||||
sql.Where("umbracoNode.uniqueId = @uniqueId", new { uniqueId });
|
||||
|
||||
var dto = Database.Fetch<NodeDto>(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
|
||||
|
||||
return dto == null ? null : MemberGroupFactory.BuildEntity(dto);
|
||||
}
|
||||
|
||||
public IMemberGroup GetByName(string name)
|
||||
{
|
||||
return IsolatedCache.GetCacheItem<IMemberGroup>(
|
||||
|
||||
@@ -548,9 +548,9 @@ ORDER BY colName";
|
||||
{
|
||||
userDto.EmailConfirmedDate = null;
|
||||
userDto.SecurityStampToken = entity.SecurityStamp = Guid.NewGuid().ToString();
|
||||
|
||||
|
||||
changedCols.Add("emailConfirmedDate");
|
||||
changedCols.Add("securityStampToken");
|
||||
changedCols.Add("securityStampToken");
|
||||
}
|
||||
|
||||
//only update the changed cols
|
||||
@@ -694,7 +694,13 @@ ORDER BY colName";
|
||||
else
|
||||
sql.WhereNotIn<UserDto>(x => x.Id, inSql);
|
||||
|
||||
return ConvertFromDtos(Database.Fetch<UserDto>(sql));
|
||||
|
||||
var dtos = Database.Fetch<UserDto>(sql);
|
||||
|
||||
//adds missing bits like content and media start nodes
|
||||
PerformGetReferencedDtos(dtos);
|
||||
|
||||
return ConvertFromDtos(dtos);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
|
||||
V2014 = 6,
|
||||
V2016 = 7,
|
||||
V2017 = 8,
|
||||
V2019 = 9,
|
||||
Other = 99
|
||||
}
|
||||
|
||||
@@ -38,7 +39,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
|
||||
Unknown = 0,
|
||||
Desktop = 1,
|
||||
Standard = 2,
|
||||
Enterprise = 3,
|
||||
Enterprise = 3,// Also developer edition
|
||||
Express = 4,
|
||||
Azure = 5
|
||||
}
|
||||
@@ -79,6 +80,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax
|
||||
{
|
||||
case "??":
|
||||
return VersionName.Invalid;
|
||||
case "15":
|
||||
return VersionName.V2019;
|
||||
case "14":
|
||||
return VersionName.V2017;
|
||||
case "13":
|
||||
|
||||
@@ -182,6 +182,7 @@ namespace Umbraco.Core.Persistence
|
||||
case SqlServerSyntaxProvider.VersionName.V2014:
|
||||
case SqlServerSyntaxProvider.VersionName.V2016:
|
||||
case SqlServerSyntaxProvider.VersionName.V2017:
|
||||
case SqlServerSyntaxProvider.VersionName.V2019:
|
||||
_databaseType = DatabaseType.SqlServer2012;
|
||||
break;
|
||||
// else leave unchanged
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Umbraco.Web.PropertyEditors
|
||||
[DataEditor(
|
||||
Constants.PropertyEditors.Aliases.Boolean,
|
||||
EditorType.PropertyValue | EditorType.MacroParameter,
|
||||
"Checkbox",
|
||||
"Toggle",
|
||||
"boolean",
|
||||
ValueType = ValueTypes.Integer,
|
||||
Group = Constants.PropertyEditors.Groups.Common,
|
||||
|
||||
@@ -7,7 +7,8 @@ namespace Umbraco.Web.PropertyEditors
|
||||
{
|
||||
public override IDictionary<string, object> DefaultConfiguration => new Dictionary<string, object>
|
||||
{
|
||||
{"entityType", "User"}
|
||||
{ "entityType", "User" },
|
||||
{ "multiPicker", "0" }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ namespace Umbraco.Web.PropertyEditors
|
||||
{
|
||||
[DataEditor(
|
||||
Constants.PropertyEditors.Aliases.UserPicker,
|
||||
"User picker",
|
||||
"entitypicker",
|
||||
"User Picker",
|
||||
"userpicker",
|
||||
ValueType = ValueTypes.Integer,
|
||||
Group = Constants.PropertyEditors.Groups.People,
|
||||
Icon = Constants.Icons.User)]
|
||||
|
||||
@@ -31,6 +31,8 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
|
||||
public override object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview)
|
||||
{
|
||||
if (source == null) return null;
|
||||
|
||||
var attemptConvertInt = source.TryConvertTo<int>();
|
||||
if (attemptConvertInt.Success)
|
||||
return attemptConvertInt.Result;
|
||||
|
||||
@@ -3006,6 +3006,8 @@ namespace Umbraco.Core.Services.Implement
|
||||
|
||||
_documentBlueprintRepository.Save(content);
|
||||
|
||||
Audit(AuditType.Save, Constants.Security.SuperUserId, content.Id, $"Saved content template: {content.Name}");
|
||||
|
||||
scope.Events.Dispatch(SavedBlueprint, this, new SaveEventArgs<IContent>(content), "SavedBlueprint");
|
||||
|
||||
scope.Complete();
|
||||
|
||||
@@ -70,6 +70,14 @@ namespace Umbraco.Core.Services.Implement
|
||||
}
|
||||
}
|
||||
|
||||
public IMemberGroup GetById(Guid id)
|
||||
{
|
||||
using (var scope = ScopeProvider.CreateScope(autoComplete: true))
|
||||
{
|
||||
return _memberGroupRepository.Get(id);
|
||||
}
|
||||
}
|
||||
|
||||
public IMemberGroup GetByName(string name)
|
||||
{
|
||||
using (var scope = ScopeProvider.CreateScope(autoComplete: true))
|
||||
|
||||
@@ -15,13 +15,15 @@ namespace Umbraco.Core.Services.Implement
|
||||
private readonly IEntityService _entityService;
|
||||
private readonly IRelationRepository _relationRepository;
|
||||
private readonly IRelationTypeRepository _relationTypeRepository;
|
||||
private readonly IAuditRepository _auditRepository;
|
||||
|
||||
public RelationService(IScopeProvider uowProvider, ILogger logger, IEventMessagesFactory eventMessagesFactory, IEntityService entityService,
|
||||
IRelationRepository relationRepository, IRelationTypeRepository relationTypeRepository)
|
||||
IRelationRepository relationRepository, IRelationTypeRepository relationTypeRepository, IAuditRepository auditRepository)
|
||||
: base(uowProvider, logger, eventMessagesFactory)
|
||||
{
|
||||
_relationRepository = relationRepository;
|
||||
_relationTypeRepository = relationTypeRepository;
|
||||
_auditRepository = auditRepository;
|
||||
_entityService = entityService ?? throw new ArgumentNullException(nameof(entityService));
|
||||
}
|
||||
|
||||
@@ -476,6 +478,7 @@ namespace Umbraco.Core.Services.Implement
|
||||
}
|
||||
|
||||
_relationTypeRepository.Save(relationType);
|
||||
Audit(AuditType.Save, Constants.Security.SuperUserId, relationType.Id, $"Saved relation type: {relationType.Name}");
|
||||
scope.Complete();
|
||||
saveEventArgs.CanCancel = false;
|
||||
scope.Events.Dispatch(SavedRelationType, this, saveEventArgs);
|
||||
@@ -565,6 +568,11 @@ namespace Umbraco.Core.Services.Implement
|
||||
}
|
||||
return relations;
|
||||
}
|
||||
|
||||
private void Audit(AuditType type, int userId, int objectId, string message = null)
|
||||
{
|
||||
_auditRepository.Save(new AuditItem(objectId, type, userId, ObjectTypes.GetName(UmbracoObjectTypes.RelationType), message));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Events Handlers
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
'lib/chart.js/chart.min.js',
|
||||
'lib/angular-chart.js/angular-chart.min.js',
|
||||
'lib/wicg-inert/dist/inert.min.js',
|
||||
|
||||
'lib/umbraco/Extensions.js',
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ context('Document Types', () => {
|
||||
const name = "Test document type";
|
||||
|
||||
cy.umbracoEnsureDocumentTypeNameNotExists(name);
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
@@ -44,6 +45,7 @@ context('Document Types', () => {
|
||||
|
||||
//Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
//Clean up
|
||||
cy.umbracoEnsureDocumentTypeNameNotExists(name);
|
||||
|
||||
@@ -1,23 +1,34 @@
|
||||
/// <reference types="Cypress" />
|
||||
import { PartialViewMacroBuilder } from "umbraco-cypress-testhelpers";
|
||||
|
||||
context('Partial View Macro Files', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
|
||||
it('Create new partial view macro', () => {
|
||||
const name = "TestPartialViewMacro";
|
||||
const fileName = name + ".cshtml";
|
||||
|
||||
cy.umbracoEnsurePartialViewMacroFileNameNotExists(fileName);
|
||||
cy.umbracoEnsureMacroNameNotExists(name);
|
||||
|
||||
function openPartialViewMacroCreatePanel() {
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
|
||||
cy.umbracoTreeItem("settings", ["Partial View Macro Files"]).rightclick();
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
}
|
||||
|
||||
function cleanup(name, extension = ".cshtml") {
|
||||
const fileName = name + extension;
|
||||
|
||||
cy.umbracoEnsureMacroNameNotExists(name);
|
||||
cy.umbracoEnsurePartialViewMacroFileNameNotExists(fileName);
|
||||
}
|
||||
|
||||
it('Create new partial view macro', () => {
|
||||
const name = "TestPartialViewMacro";
|
||||
|
||||
cleanup(name);
|
||||
|
||||
openPartialViewMacroCreatePanel();
|
||||
|
||||
cy.get('.menu-label').first().click(); // TODO: Fucked we cant use something like cy.umbracoContextMenuAction("action-label").click();
|
||||
|
||||
//Type name
|
||||
@@ -28,10 +39,117 @@ context('Partial View Macro Files', () => {
|
||||
|
||||
//Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoMacroExists(name).then(exists => { expect(exists).to.be.true; });
|
||||
|
||||
//Clean up
|
||||
cy.umbracoEnsurePartialViewMacroFileNameNotExists(fileName);
|
||||
cy.umbracoEnsureMacroNameNotExists(name);
|
||||
});
|
||||
cleanup(name);
|
||||
});
|
||||
|
||||
it('Create new partial view macro without macro', () => {
|
||||
const name = "TestPartialMacrolessMacro";
|
||||
|
||||
cleanup(name);
|
||||
|
||||
openPartialViewMacroCreatePanel();
|
||||
|
||||
cy.get('.menu-label').eq(1).click();
|
||||
|
||||
// Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
|
||||
// Save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoMacroExists(name).then(exists => { expect(exists).to.be.false; });
|
||||
|
||||
// Clean
|
||||
cleanup(name);
|
||||
});
|
||||
|
||||
it('Create new partial view macro from snippet', () => {
|
||||
const name = "TestPartialFromSnippet";
|
||||
|
||||
cleanup(name);
|
||||
|
||||
openPartialViewMacroCreatePanel();
|
||||
|
||||
cy.get('.menu-label').eq(2).click();
|
||||
|
||||
// Select snippet
|
||||
cy.get('.menu-label').eq(1).click();
|
||||
|
||||
// Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
|
||||
// Save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoMacroExists(name).then(exists => { expect(exists).to.be.true; });
|
||||
|
||||
// Clean
|
||||
cleanup(name);
|
||||
});
|
||||
|
||||
it('Delete partial view macro', () => {
|
||||
const name = "TestDeletePartialViewMacro";
|
||||
const fullName = name + ".cshtml"
|
||||
|
||||
cleanup(name);
|
||||
|
||||
const partialViewMacro = new PartialViewMacroBuilder()
|
||||
.withName(name)
|
||||
.withContent("@inherits Umbraco.Web.Macros.PartialViewMacroPage")
|
||||
.build();
|
||||
|
||||
cy.savePartialViewMacro(partialViewMacro);
|
||||
|
||||
// Navigate to settings
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
|
||||
// Delete partialViewMacro
|
||||
cy.umbracoTreeItem("settings", ["Partial View Macro Files", fullName]).rightclick();
|
||||
cy.umbracoContextMenuAction("action-delete").click();
|
||||
cy.umbracoButtonByLabelKey("general_ok").click();
|
||||
|
||||
// Assert
|
||||
cy.contains(fullName).should('not.exist');
|
||||
|
||||
// Clean
|
||||
cleanup(name);
|
||||
});
|
||||
|
||||
it('Edit partial view macro', () => {
|
||||
const name = "TestPartialViewMacroEditable";
|
||||
const fullName = name + ".cshtml";
|
||||
|
||||
cleanup(name);
|
||||
|
||||
const partialViewMacro = new PartialViewMacroBuilder()
|
||||
.withName(name)
|
||||
.withContent("@inherits Umbraco.Web.Macros.PartialViewMacroPage")
|
||||
.build();
|
||||
|
||||
cy.savePartialViewMacro(partialViewMacro);
|
||||
|
||||
// Navigate to settings
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
cy.umbracoTreeItem("settings", ["Partial View Macro Files", fullName]).click();
|
||||
|
||||
// Type an edit
|
||||
cy.get('.ace_text-input').type(" // test", {force:true} );
|
||||
// Save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
|
||||
cleanup(name);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -1,35 +1,145 @@
|
||||
/// <reference types="Cypress" />
|
||||
import { PartialViewBuilder } from "umbraco-cypress-testhelpers";
|
||||
|
||||
context('Partial Views', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
|
||||
it('Create new empty partial view', () => {
|
||||
const name = "TestPartialView";
|
||||
const fileName = name + ".cshtml";
|
||||
function navigateToSettings() {
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
}
|
||||
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
function openPartialViewsCreatePanel() {
|
||||
navigateToSettings();
|
||||
cy.umbracoTreeItem("settings", ["Partial Views"]).rightclick();
|
||||
}
|
||||
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
it('Create new empty partial view', () => {
|
||||
const name = "TestPartialView";
|
||||
const fileName = name + ".cshtml";
|
||||
|
||||
cy.umbracoTreeItem("settings", ["Partial Views"]).rightclick();
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
cy.get('.menu-label').first().click(); // TODO: Fucked we cant use something like cy.umbracoContextMenuAction("action-mediaType").click();
|
||||
openPartialViewsCreatePanel();
|
||||
|
||||
//Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
cy.get('.menu-label').first().click(); // TODO: Fucked we cant use something like cy.umbracoContextMenuAction("action-mediaType").click();
|
||||
|
||||
//Save
|
||||
cy.get('.btn-success').click();
|
||||
//Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
|
||||
//Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
//Save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
//Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoPartialViewExists(fileName).then(exists => { expect(exists).to.be.true; });
|
||||
|
||||
//Clean up
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
});
|
||||
|
||||
it('Create partial view from snippet', () => {
|
||||
const name = "TestPartialViewFromSnippet";
|
||||
const fileName = name + ".cshtml";
|
||||
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
|
||||
openPartialViewsCreatePanel();
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
cy.get('.menu-label').eq(1).click();
|
||||
// Select snippet
|
||||
cy.get('.menu-label').eq(2).click();
|
||||
|
||||
// Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
|
||||
// Save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
cy.umbracoPartialViewExists(fileName).then(exists => { expect(exists).to.be.true; });
|
||||
|
||||
// Clean up
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
});
|
||||
|
||||
it('Partial view with no name', () => {
|
||||
openPartialViewsCreatePanel();
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
cy.get('.menu-label').first().click();
|
||||
|
||||
// The test would fail intermittently, most likely because the editor didn't have time to load
|
||||
// This should ensure that the editor is loaded and the test should no longer fail unexpectedly.
|
||||
cy.get('.ace_content', {timeout: 5000}).should('exist');
|
||||
|
||||
// Click save
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Asserts
|
||||
cy.umbracoErrorNotification().should('be.visible');
|
||||
});
|
||||
|
||||
it('Delete partial view', () => {
|
||||
const name = "TestDeletePartialView";
|
||||
const fileName = name + ".cshtml";
|
||||
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
|
||||
// Build and save partial view
|
||||
const partialView = new PartialViewBuilder()
|
||||
.withName(name)
|
||||
.withContent("@inherits Umbraco.Web.Mvc.UmbracoViewPage")
|
||||
.build();
|
||||
|
||||
cy.savePartialView(partialView);
|
||||
|
||||
navigateToSettings();
|
||||
|
||||
// Delete partial view
|
||||
cy.umbracoTreeItem("settings", ["Partial Views", fileName]).rightclick();
|
||||
cy.umbracoContextMenuAction("action-delete").click();
|
||||
cy.umbracoButtonByLabelKey("general_ok").click();
|
||||
|
||||
// Assert
|
||||
cy.contains(fileName).should('not.exist');
|
||||
cy.umbracoPartialViewExists(fileName).then(exists => { expect(exists).to.be.false; });
|
||||
|
||||
// Clean
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
});
|
||||
|
||||
it('Edit partial view', () => {
|
||||
const name = 'EditPartialView';
|
||||
const fileName = name + ".cshtml";
|
||||
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
|
||||
const partialView = new PartialViewBuilder()
|
||||
.withName(name)
|
||||
.withContent("@inherits Umbraco.Web.Mvc.UmbracoViewPage\n")
|
||||
.build();
|
||||
|
||||
cy.savePartialView(partialView);
|
||||
|
||||
navigateToSettings();
|
||||
// Open partial view
|
||||
cy.umbracoTreeItem("settings", ["Partial Views", fileName]).click();
|
||||
// Edit
|
||||
cy.get('.ace_text-input').type("var num = 5;", {force:true} );
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
// Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
// Clean
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
});
|
||||
|
||||
//Clean up
|
||||
cy.umbracoEnsurePartialViewNameNotExists(fileName);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@ context('Scripts', () => {
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
|
||||
cy.umbracoTreeItem("settings", ["Stylesheets"]).rightclick();
|
||||
cy.umbracoTreeItem("settings", ["Scripts"]).rightclick();
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
cy.get('.menu-label').first().click(); // TODO: Fucked we cant use something like cy.umbracoContextMenuAction("action-mediaType").click();
|
||||
|
||||
@@ -1,57 +1,168 @@
|
||||
/// <reference types="Cypress" />
|
||||
import {DocumentTypeBuilder, TemplateBuilder} from "umbraco-cypress-testhelpers";
|
||||
import { TemplateBuilder } from 'umbraco-cypress-testhelpers';
|
||||
|
||||
context('Templates', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
|
||||
it('Create template', () => {
|
||||
const name = "Test template";
|
||||
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
|
||||
function navigateToSettings() {
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
}
|
||||
|
||||
function createTemplate() {
|
||||
navigateToSettings();
|
||||
cy.umbracoTreeItem("settings", ["Templates"]).rightclick();
|
||||
|
||||
cy.umbracoContextMenuAction("action-create").click();
|
||||
}
|
||||
|
||||
|
||||
|
||||
it('Create template', () => {
|
||||
const name = "Test template test";
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
createTemplate();
|
||||
//Type name
|
||||
cy.umbracoEditorHeaderName(name);
|
||||
/* Make an edit, if you don't the file will be create twice,
|
||||
only happens in testing though, probably because the test is too fast
|
||||
Certifiably mega wonk regardless */
|
||||
cy.get('.ace_text-input').type("var num = 5;", {force:true} );
|
||||
|
||||
//Save
|
||||
cy.get("form[name='contentForm']").submit();
|
||||
cy.get('.btn-success').click();
|
||||
|
||||
//Assert
|
||||
cy.umbracoSuccessNotification().should('be.visible');
|
||||
|
||||
//Clean up
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
});
|
||||
});
|
||||
|
||||
it('Delete template', () => {
|
||||
const name = "Test template";
|
||||
it('Unsaved changes stay', () => {
|
||||
const name = "Templates Unsaved Changes Stay test";
|
||||
const edit = "var num = 5;";
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
const template = new TemplateBuilder()
|
||||
.withName(name)
|
||||
.withContent('@inherits Umbraco.Web.Mvc.UmbracoViewPage\n')
|
||||
.build();
|
||||
|
||||
cy.saveTemplate(template);
|
||||
|
||||
cy.umbracoSection('settings');
|
||||
cy.get('li .umb-tree-root:contains("Settings")').should("be.visible");
|
||||
navigateToSettings();
|
||||
|
||||
cy.umbracoTreeItem("settings", ["Templates", name]).rightclick();
|
||||
cy.umbracoContextMenuAction("action-delete").click();
|
||||
// Open partial view
|
||||
cy.umbracoTreeItem("settings", ["Templates", name]).click();
|
||||
// Edit
|
||||
cy.get('.ace_text-input').type(edit, {force:true} );
|
||||
|
||||
cy.umbracoButtonByLabelKey("general_ok").click();
|
||||
// Navigate away
|
||||
cy.umbracoSection('content');
|
||||
// Click stay button
|
||||
cy.get('umb-button[label="Stay"] button:enabled').click();
|
||||
|
||||
cy.contains(name).should('not.exist');
|
||||
// Assert
|
||||
// That the same document is open
|
||||
cy.get('#headerName').should('have.value', name);
|
||||
cy.get('.ace_content').contains(edit);
|
||||
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
});
|
||||
|
||||
it('Discard unsaved changes', () => {
|
||||
const name = "Discard changes test";
|
||||
const edit = "var num = 5;";
|
||||
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
const template = new TemplateBuilder()
|
||||
.withName(name)
|
||||
.withContent('@inherits Umbraco.Web.Mvc.UmbracoViewPage\n')
|
||||
.build();
|
||||
|
||||
cy.saveTemplate(template);
|
||||
|
||||
navigateToSettings();
|
||||
|
||||
// Open partial view
|
||||
cy.umbracoTreeItem("settings", ["Templates", name]).click();
|
||||
// Edit
|
||||
cy.get('.ace_text-input').type(edit, {force:true} );
|
||||
|
||||
// Navigate away
|
||||
cy.umbracoSection('content');
|
||||
// Click discard
|
||||
cy.get('umb-button[label="Discard changes"] button:enabled').click();
|
||||
// Navigate back
|
||||
cy.umbracoSection('settings');
|
||||
|
||||
// Asserts
|
||||
cy.get('.ace_content').should('not.contain', edit);
|
||||
// cy.umbracoPartialViewExists(fileName).then(exists => { expect(exists).to.be.false; }); TODO: Switch to template
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
});
|
||||
|
||||
it('Insert macro', () => {
|
||||
const name = 'InsertMacroTest';
|
||||
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
cy.umbracoEnsureMacroNameNotExists(name);
|
||||
|
||||
const template = new TemplateBuilder()
|
||||
.withName(name)
|
||||
.withContent('')
|
||||
.build();
|
||||
|
||||
cy.saveTemplate(template);
|
||||
|
||||
cy.saveMacro(name);
|
||||
|
||||
navigateToSettings();
|
||||
cy.umbracoTreeItem("settings", ["Templates", name]).click();
|
||||
// Insert macro
|
||||
cy.umbracoButtonByLabelKey('general_insert').click();
|
||||
cy.get('.umb-insert-code-box__title').contains('Macro').click();
|
||||
cy.get('.umb-card-grid-item').contains(name).click();
|
||||
|
||||
// Assert
|
||||
cy.get('.ace_content').contains('@Umbraco.RenderMacro("' + name + '")').should('exist');
|
||||
|
||||
// Clean
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
cy.umbracoEnsureMacroNameNotExists(name);
|
||||
});
|
||||
|
||||
it('Insert value', () => {
|
||||
const name = 'Insert Value Test';
|
||||
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
|
||||
const partialView = new TemplateBuilder()
|
||||
.withName(name)
|
||||
.withContent('')
|
||||
.build();
|
||||
|
||||
cy.saveTemplate(partialView);
|
||||
|
||||
navigateToSettings();
|
||||
cy.umbracoTreeItem("settings", ["Templates", name]).click();
|
||||
|
||||
// Insert value
|
||||
cy.umbracoButtonByLabelKey('general_insert').click();
|
||||
cy.get('.umb-insert-code-box__title').contains('Value').click();
|
||||
cy.get('select').select('umbracoBytes');
|
||||
cy.umbracoButtonByLabelKey('general_submit').click();
|
||||
|
||||
// assert
|
||||
cy.get('.ace_content').contains('@Model.Value("umbracoBytes")').should('exist');
|
||||
|
||||
// Clean
|
||||
cy.umbracoEnsureTemplateNameNotExists(name);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/// <reference types="Cypress" />
|
||||
context('Backoffice Tour', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
|
||||
});
|
||||
|
||||
it('Backoffice introduction tour should run', () => {
|
||||
//arrange
|
||||
cy.umbracoGlobalHelp().should("be.visible");
|
||||
|
||||
//act
|
||||
cy.umbracoGlobalHelp().click()
|
||||
//assert
|
||||
cy.get('[data-element="help-tours"]').should("be.visible");
|
||||
//act
|
||||
cy.get('[data-element="help-tours"]').click();
|
||||
//assert
|
||||
cy.get('[data-element="tour-umbIntroIntroduction"] .umb-button').should("be.visible");
|
||||
//act
|
||||
cy.get('[data-element="tour-umbIntroIntroduction"] .umb-button').click();
|
||||
//assert
|
||||
cy.get('.umb-tour-step', { timeout: 60000 }).should('be.visible');
|
||||
cy.get('.umb-tour-step__footer').should('be.visible');
|
||||
cy.get('.umb-tour-step__counter').should('be.visible');
|
||||
|
||||
for(let i=1;i<7;i++){
|
||||
cy.get('.umb-tour-step__counter').contains(i + '/12');
|
||||
cy.get('.umb-tour-step__footer .umb-button').should('be.visible').click();
|
||||
}
|
||||
cy.umbracoGlobalUser().click()
|
||||
cy.get('.umb-tour-step__counter').contains('8/12');
|
||||
cy.get('.umb-tour-step__footer .umb-button').should('be.visible').click();
|
||||
cy.get('.umb-tour-step__counter').contains('9/12');
|
||||
cy.get('.umb-overlay-drawer__align-right .umb-button').should('be.visible').click();
|
||||
cy.get('.umb-tour-step__counter').contains('10/12');
|
||||
cy.umbracoGlobalHelp().click()
|
||||
|
||||
for(let i=11;i<13;i++){
|
||||
cy.get('.umb-tour-step__counter').contains(i + '/12');
|
||||
cy.get('.umb-tour-step__footer .umb-button').should('be.visible').click();
|
||||
}
|
||||
cy.get('.umb-tour-step__footer .umb-button').should('be.visible').click();
|
||||
|
||||
//assert
|
||||
cy.umbracoGlobalHelp().should("be.visible");
|
||||
cy.get('[data-element="help-tours"] .umb-progress-circle').contains('17%');
|
||||
});
|
||||
});
|
||||
@@ -5,9 +5,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "^7.0.2",
|
||||
"cypress": "^4.12.1",
|
||||
"ncp": "^2.0.0",
|
||||
"cypress": "^4.9.0",
|
||||
"umbraco-cypress-testhelpers": "1.0.0-beta-44"
|
||||
"umbraco-cypress-testhelpers": "^1.0.0-beta-48"
|
||||
},
|
||||
"dependencies": {
|
||||
"typescript": "^3.9.2"
|
||||
|
||||
@@ -220,8 +220,12 @@ namespace Umbraco.Tests.Common.Builders
|
||||
|
||||
private class TestGlobalSettings : IGlobalSettings
|
||||
{
|
||||
private string _iconsPath;
|
||||
public string ReservedUrls { get; set; }
|
||||
public string ReservedPaths { get; set; }
|
||||
|
||||
public string IconsPath{ get; set; }
|
||||
|
||||
public string Path { get; set; }
|
||||
public string ConfigurationStatus { get; set; }
|
||||
public int TimeOutInMinutes { get; set; }
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Threading;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Exceptions;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
using Umbraco.Tests.TestHelpers.Entities;
|
||||
@@ -968,16 +969,72 @@ namespace Umbraco.Tests.Services
|
||||
Assert.That(updatedItem.AllowedSections.Count(), Is.EqualTo(originalUser.AllowedSections.Count()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Get_Assigned_StartNodes_For_User()
|
||||
{
|
||||
var startContentItems = BuildContentItems(3);
|
||||
|
||||
var testUserGroup = CreateTestUserGroup();
|
||||
|
||||
var userGroupId = testUserGroup.Id;
|
||||
|
||||
CreateTestUsers(startContentItems.Select(x => x.Id).ToArray(), testUserGroup, 3);
|
||||
|
||||
var usersInGroup = ServiceContext.UserService.GetAllInGroup(userGroupId);
|
||||
|
||||
foreach (var user in usersInGroup)
|
||||
Assert.AreEqual(user.StartContentIds.Length, startContentItems.Length);
|
||||
}
|
||||
|
||||
private Content[] BuildContentItems(int numberToCreate)
|
||||
{
|
||||
var contentType = MockedContentTypes.CreateSimpleContentType();
|
||||
|
||||
ServiceContext.ContentTypeService.Save(contentType);
|
||||
|
||||
var startContentItems = new List<Content>();
|
||||
|
||||
for (var i = 0; i < numberToCreate; i++)
|
||||
startContentItems.Add(MockedContent.CreateSimpleContent(contentType));
|
||||
|
||||
ServiceContext.ContentService.Save(startContentItems);
|
||||
|
||||
return startContentItems.ToArray();
|
||||
}
|
||||
|
||||
private IUser CreateTestUser(out IUserGroup userGroup)
|
||||
{
|
||||
userGroup = CreateTestUserGroup();
|
||||
|
||||
var user = ServiceContext.UserService.CreateUserWithIdentity("test1", "test1@test.com");
|
||||
|
||||
user.AddGroup(userGroup.ToReadOnlyGroup());
|
||||
|
||||
ServiceContext.UserService.Save(user);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
private List<IUser> CreateTestUsers(int[] startContentIds, IUserGroup userGroup, int numberToCreate)
|
||||
{
|
||||
var users = new List<IUser>();
|
||||
|
||||
for (var i = 0; i < numberToCreate; i++)
|
||||
{
|
||||
var user = ServiceContext.UserService.CreateUserWithIdentity($"test{i}", $"test{i}@test.com");
|
||||
user.AddGroup(userGroup.ToReadOnlyGroup());
|
||||
|
||||
var updateable = (User)user;
|
||||
updateable.StartContentIds = startContentIds;
|
||||
|
||||
ServiceContext.UserService.Save(user);
|
||||
|
||||
users.Add(user);
|
||||
}
|
||||
|
||||
return users;
|
||||
}
|
||||
|
||||
private UserGroup CreateTestUserGroup(string alias = "testGroup", string name = "Test Group")
|
||||
{
|
||||
var userGroup = new UserGroup(ShortStringHelper)
|
||||
|
||||
@@ -188,7 +188,7 @@ namespace Umbraco.Tests.TestHelpers
|
||||
Mock.Of<IHostingEnvironment>(x => x.ApplicationPhysicalPath == ioHelper.MapPath("~"))),
|
||||
ioHelper);
|
||||
});
|
||||
var relationService = GetLazyService<IRelationService>(factory, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo<IRelationRepository>(c), GetRepo<IRelationTypeRepository>(c)));
|
||||
var relationService = GetLazyService<IRelationService>(factory, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo<IRelationRepository>(c), GetRepo<IRelationTypeRepository>(c), GetRepo<IAuditRepository>(c)));
|
||||
var tagService = GetLazyService<ITagService>(factory, c => new TagService(scopeProvider, logger, eventMessagesFactory, GetRepo<ITagRepository>(c)));
|
||||
var redirectUrlService = GetLazyService<IRedirectUrlService>(factory, c => new RedirectUrlService(scopeProvider, logger, eventMessagesFactory, GetRepo<IRedirectUrlRepository>(c)));
|
||||
var consentService = GetLazyService<IConsentService>(factory, c => new ConsentService(scopeProvider, logger, eventMessagesFactory, GetRepo<IConsentRepository>(c)));
|
||||
|
||||
@@ -29,12 +29,15 @@ function dependencies() {
|
||||
"./node_modules/ace-builds/src-min-noconflict/snippets/text.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/snippets/javascript.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/snippets/css.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/snippets/json.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/theme-chrome.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/mode-razor.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/mode-javascript.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/mode-css.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/worker-javascript.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/worker-css.js"
|
||||
"./node_modules/ace-builds/src-min-noconflict/worker-css.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/mode-json.js",
|
||||
"./node_modules/ace-builds/src-min-noconflict/worker-json.js"
|
||||
],
|
||||
"base": "./node_modules/ace-builds"
|
||||
},
|
||||
@@ -45,7 +48,8 @@ function dependencies() {
|
||||
},
|
||||
{
|
||||
"name": "angular-aria",
|
||||
"src": ["./node_modules/angular-aria/angular-aria.min.js"],
|
||||
"src": ["./node_modules/angular-aria/angular-aria.min.js",
|
||||
"./node_modules/angular-aria/angular-aria.min.js.map"],
|
||||
"base": "./node_modules/angular-aria"
|
||||
},
|
||||
{
|
||||
@@ -238,6 +242,14 @@ function dependencies() {
|
||||
"name": "underscore",
|
||||
"src": ["node_modules/underscore/underscore-min.js"],
|
||||
"base": "./node_modules/underscore"
|
||||
},
|
||||
{
|
||||
"name": "wicg-inert",
|
||||
"src": [
|
||||
"./node_modules/wicg-inert/dist/inert.min.js",
|
||||
"./node_modules/wicg-inert/dist/inert.min.js.map"
|
||||
],
|
||||
"base": "./node_modules/wicg-inert"
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
display: inline;
|
||||
}
|
||||
.pager li > a,
|
||||
.pager li > button,
|
||||
.pager li > span {
|
||||
display: inline-block;
|
||||
padding: 5px 14px;
|
||||
@@ -21,23 +22,30 @@
|
||||
.border-radius(15px);
|
||||
}
|
||||
.pager li > a:hover,
|
||||
.pager li > a:focus {
|
||||
text-decoration: none;
|
||||
background-color: #f5f5f5;
|
||||
.pager li > a:focus,
|
||||
.pager li > button:hover,
|
||||
.pager li > button:focus {
|
||||
text-decoration: none;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
.pager .next > a,
|
||||
.pager .next > button,
|
||||
.pager .next > span {
|
||||
float: right;
|
||||
}
|
||||
.pager .previous > a,
|
||||
.pager .previous > button,
|
||||
.pager .previous > span {
|
||||
float: left;
|
||||
float: left;
|
||||
}
|
||||
.pager .disabled > a,
|
||||
.pager .disabled > a:hover,
|
||||
.pager .disabled > a:focus,
|
||||
.pager .disabled > button,
|
||||
.pager .disabled > button:hover,
|
||||
.pager .disabled > button:focus
|
||||
.pager .disabled > span {
|
||||
color: @grayLight;
|
||||
background-color: #fff;
|
||||
cursor: default;
|
||||
}
|
||||
color: @grayLight;
|
||||
background-color: #fff;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
display: inline; // Remove list-style and block-level defaults
|
||||
}
|
||||
.pagination ul > li > a,
|
||||
.pagination ul > li > button,
|
||||
.pagination ul > li > span {
|
||||
float: left; // Collapse white-space
|
||||
padding: 4px 12px;
|
||||
@@ -32,29 +33,38 @@
|
||||
}
|
||||
.pagination ul > li > a:hover,
|
||||
.pagination ul > li > a:focus,
|
||||
.pagination ul > li > button:hover,
|
||||
.pagination ul > li > button:focus,
|
||||
.pagination ul > .active > a,
|
||||
.pagination ul > .active > button,
|
||||
.pagination ul > .active > span {
|
||||
background-color: @paginationActiveBackground;
|
||||
background-color: @paginationActiveBackground;
|
||||
}
|
||||
.pagination ul > .active > a,
|
||||
.pagination ul > .active > button,
|
||||
.pagination ul > .active > span {
|
||||
color: @grayLight;
|
||||
cursor: default;
|
||||
color: @grayLight;
|
||||
cursor: default;
|
||||
}
|
||||
.pagination ul > .disabled > span,
|
||||
.pagination ul > .disabled > a,
|
||||
.pagination ul > .disabled > a:hover,
|
||||
.pagination ul > .disabled > a:focus {
|
||||
color: @grayLight;
|
||||
background-color: transparent;
|
||||
cursor: default;
|
||||
.pagination ul > .disabled > a:focus,
|
||||
.pagination ul > .disabled > button,
|
||||
.pagination ul > .disabled > button:hover,
|
||||
.pagination ul > .disabled > button:focus {
|
||||
color: @grayLight;
|
||||
background-color: transparent;
|
||||
cursor: default;
|
||||
}
|
||||
.pagination ul > li:first-child > a,
|
||||
.pagination ul > li:first-child > button,
|
||||
.pagination ul > li:first-child > span {
|
||||
border-left-width: 1px;
|
||||
.border-left-radius(@baseBorderRadius);
|
||||
}
|
||||
.pagination ul > li:last-child > a,
|
||||
.pagination ul > li:last-child > button,
|
||||
.pagination ul > li:last-child > span {
|
||||
.border-right-radius(@baseBorderRadius);
|
||||
}
|
||||
@@ -77,15 +87,18 @@
|
||||
// Large
|
||||
.pagination-large {
|
||||
ul > li > a,
|
||||
ul > li > button,
|
||||
ul > li > span {
|
||||
padding: @paddingLarge;
|
||||
font-size: @fontSizeLarge;
|
||||
}
|
||||
ul > li:first-child > a,
|
||||
ul > li:first-child > button,
|
||||
ul > li:first-child > span {
|
||||
.border-left-radius(@borderRadiusLarge);
|
||||
}
|
||||
ul > li:last-child > a,
|
||||
ul > li:last-child > button,
|
||||
ul > li:last-child > span {
|
||||
.border-right-radius(@borderRadiusLarge);
|
||||
}
|
||||
@@ -95,10 +108,12 @@
|
||||
.pagination-mini,
|
||||
.pagination-small {
|
||||
ul > li:first-child > a,
|
||||
ul > li:first-child > button,
|
||||
ul > li:first-child > span {
|
||||
.border-left-radius(@borderRadiusSmall);
|
||||
}
|
||||
ul > li:last-child > a,
|
||||
ul > li:last-child > button,
|
||||
ul > li:last-child > span {
|
||||
.border-right-radius(@borderRadiusSmall);
|
||||
}
|
||||
@@ -107,6 +122,7 @@
|
||||
// Small
|
||||
.pagination-small {
|
||||
ul > li > a,
|
||||
ul > li > button,
|
||||
ul > li > span {
|
||||
padding: @paddingSmall;
|
||||
font-size: @fontSizeSmall;
|
||||
@@ -115,6 +131,7 @@
|
||||
// Mini
|
||||
.pagination-mini {
|
||||
ul > li > a,
|
||||
ul > li > button,
|
||||
ul > li > span {
|
||||
padding: @paddingMini;
|
||||
font-size: @fontSizeMini;
|
||||
|
||||
@@ -38,13 +38,14 @@
|
||||
"lazyload-js": "1.0.0",
|
||||
"moment": "2.22.2",
|
||||
"ng-file-upload": "12.2.13",
|
||||
"nouislider": "14.4.0",
|
||||
"nouislider": "14.6.0",
|
||||
"npm": "^6.14.7",
|
||||
"signalr": "2.4.0",
|
||||
"spectrum-colorpicker": "1.8.0",
|
||||
"tinymce": "4.9.10",
|
||||
"tinymce": "4.9.11",
|
||||
"typeahead.js": "0.11.1",
|
||||
"underscore": "1.9.1"
|
||||
"underscore": "1.9.1",
|
||||
"wicg-inert": "^3.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.6.4",
|
||||
@@ -78,7 +79,7 @@
|
||||
"karma-phantomjs-launcher": "1.0.4",
|
||||
"karma-spec-reporter": "0.0.32",
|
||||
"less": "3.10.3",
|
||||
"lodash": "4.17.15",
|
||||
"lodash": "4.17.19",
|
||||
"marked": "^0.7.0",
|
||||
"merge-stream": "2.0.0",
|
||||
"run-sequence": "2.2.1"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M354.562 428.621l-33.96-81.838-33.961 81.838h-71.34l-39.618-147.569-39.668 147.569H39.35v-51.163h57.457l78.876-293.596 78.043 290.623 66.876-161.105 68.134 164.078h84.924v51.163H354.562z"/></svg>
|
||||
|
After Width: | Height: | Size: 266 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M420.592 214.291H296.104V89.804h-83.102v124.487H88.518v83.104h124.484v124.488h83.102V297.395h124.488z"/></svg>
|
||||
|
After Width: | Height: | Size: 181 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M40.901 70.44v371.828c0 13.829 11.212 25.04 25.04 25.04H96.87V45.403H65.941c-13.827 0-25.04 11.207-25.04 25.037zm86.015-25.037v421.905h283.415V45.403H126.916zm250.171 311.446H160.119c-.183-9.291.483-26.043.483-33.134 3.603-10.439 15.527-11.938 25.488-16.141 10.935-4.609 23.067-9.966 33.98-14.438 3.116-.849 6.23-1.7 9.342-2.553 3.72-2.556 7.361-11.06 9.349-15.288l4.419-1.07c-1-5.588-4.456-6.025-5.897-9.971-.565-5.946-1.13-11.896-1.701-17.839.027.278-4.066-.749-4.6-1.086-5.772-3.612-5.886-18.297-6.443-24.402-.252-2.79 3.628-5.079 2.549-10.193-6.324-29.966 2.734-43.986 17.055-48.634 9.938-4.03 28.496-11.499 45.805-.851l4.297 3.979 6.95 1.2c3.489 2.011 5.715 8.688 5.715 8.688 1.831 7.376 2.014 7.989 1.843 15.563-.068 2.915-1.744 16.408-1.289 20.545.374 3.416 1.225 3.686 2.574 6.496 2.345 4.899 1.558 11.647.662 16.586-.495 2.7-1.533 6.544-3.116 8.746-1.74 2.428-5.227 2.449-6.771 5.286-2.222 4.078-.968 9.808-2.37 14.218-1.589 4.998-5.641 5.35-5.946 11.889l5.946.85c1.99 4.229 5.63 12.732 9.349 15.288 3.112.853 6.23 1.704 9.345 2.553 10.911 4.473 23.041 9.829 33.981 14.438 9.958 4.202 21.884 5.701 25.483 16.141.001 7.091.669 23.843.486 33.134zm52.912-311.446h38.298v96.654h-38.298zm0 122.063h38.298v96.655h-38.298zm0 122.062h38.298v96.654h-38.298z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M275.241 267.728V175.87c0-8.991-7.323-16.317-16.319-16.317-8.99 0-16.314 7.326-16.314 16.317v105.059l50.557 52.192c3.238 3.3 7.455 4.953 11.74 4.953 4.088 0 8.176-1.505 11.312-4.579 6.475-6.247 6.638-16.584.394-23.072l-41.37-42.695zM438.523 89.786c-41.467-41.517-108.209-42.319-150.758-2.57-9.416-1.439-19.029-2.159-28.844-2.159-11.738 0-23.217 1.13-34.365 3.157-42.482-40.747-109.943-40.274-151.804 1.572-42.218 42.202-42.35 110.548-.425 152.974-1.73 10.289-2.681 20.82-2.681 31.561 0 104.548 84.73 189.291 189.275 189.291 104.514 0 189.279-84.743 189.279-189.291 0-12.871-1.309-25.428-3.727-37.576 36.3-42.628 34.338-106.687-5.95-146.959zm-179.601 316.37c-72.693 0-131.82-59.127-131.82-131.836 0-72.679 59.127-131.804 131.82-131.804 72.699 0 131.822 59.125 131.822 131.804 0 72.709-59.123 131.836-131.822 131.836z"/></svg>
|
||||
|
After Width: | Height: | Size: 895 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M253.668 67.246L34.652 445.205h438.033L253.668 67.246zm0 49.942l175.57 302.978H78.1l175.568-302.978zM233.05 399.234h41.237v-39.855H233.05v39.855zm-.966-202.588v51.527l11.447 94.795h20.547l11.172-94.795v-51.527h-43.166z"/></svg>
|
||||
|
After Width: | Height: | Size: 298 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M255.399 66.934L36.38 444.893h438.036L255.399 66.934zm22.094 331.988h-46.29v-44.743h46.29v44.743zm-11.458-63.166h-23.068l-12.849-106.419v-57.846h48.458v57.846l-12.541 106.419z"/></svg>
|
||||
|
After Width: | Height: | Size: 255 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M238.956 201.578v-51.366h199.55v51.366h-199.55zm-6.171 167.688l-123.94-174.018H69.943v-51.363h65.377l123.939 174.013h179.245v51.368H232.785z"/></svg>
|
||||
|
After Width: | Height: | Size: 220 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M445.039 300.557l-4.51-4.116-46.061-42.054-1.598-1.46-1.6 1.46-46.061 42.054-4.508 4.116h26.023c-1.654 54.142-42.203 79.389-84.684 86.409V182.593c19.469-9.63 32.893-29.695 32.893-52.847 0-32.498-26.439-58.937-58.938-58.937-32.494 0-58.936 26.438-58.936 58.937 0 23.149 13.422 43.215 32.889 52.847v204.373c-42.479-7.021-83.025-32.268-84.686-86.409h26.027l-4.508-4.116-46.064-42.054-1.596-1.46-1.594 1.46-46.06 42.053-4.508 4.116h26.206c1.789 82.976 68.213 140.634 162.832 140.634 94.621 0 161.047-57.658 162.836-140.634H445.039zM255.998 99.669c16.584 0 30.078 13.492 30.078 30.077 0 16.584-13.494 30.075-30.078 30.075-16.582 0-30.076-13.491-30.076-30.075 0-16.585 13.494-30.077 30.076-30.077z"/></svg>
|
||||
|
After Width: | Height: | Size: 771 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M376.869 246.184c12.932 31.318 21.738 53.584 21.887 53.967l.084.21.08.21 12.471 33.662h51.086v-88.049h-85.608zm52.328 149.537c-3.709-18.309-15.205-25.447-27.418-26.105l-22.844-61.638S275.099 45.016 251.931 45.016a2.67 2.67 0 0 0-.93.159c-20.156 7.284 85.135 279.228 85.135 279.228l26.965 68.869c-4.744 11.749-3.174 25.656 5.203 36.383 22.709 29.089 49.438 35.416 68.383 35.416 14.576 0 24.543-3.742 24.543-3.742s-24.978-17.816-32.033-65.608zm-59.687-22.212l-7.83-19.487 17.711-7.119 7.832 19.484-17.713 7.122zm-85.317-127.325H231.01l-49.086 88.049h135.174l-.838-2.137c-.19-.488-14.85-38.409-32.067-85.912zm-164.373 0H49.523v88.049h21.209zm91.554-120.483l47.593 26.533-22.674 40.672-47.593-26.532zm-34.81 62.462L63.512 390.956l-10.939 76.029 58.754-49.882.004-.002 112.834-202.405-47.601-26.533zm-74.046 213.038l-25.469 21.622 4.836-33.124 10.562-18.945 6.123 13.465 14.506-1.965-10.558 18.947z"/></svg>
|
||||
|
After Width: | Height: | Size: 973 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M49.525 422.919h412.116v-238.2H49.525v238.2zM184.041 261.09l26.732-26.852 42.262 42.446 42.262-42.446 26.734 26.852-42.262 42.445 42.262 42.447-26.734 26.851-42.262-42.446-42.262 42.446-26.732-26.851 42.26-42.447-42.26-42.445zM444.766 88.308H66.403c-9.321 0-16.878 7.59-16.878 16.951v55.727h412.116v-55.727c.001-9.361-7.553-16.951-16.875-16.951zM93.322 143.445c-7.342 0-13.291-5.976-13.291-13.347 0-7.369 5.949-13.346 13.291-13.346 7.34 0 13.291 5.977 13.291 13.346 0 7.371-5.951 13.347-13.291 13.347zm47.559 0c-7.338 0-13.285-5.976-13.285-13.347 0-7.369 5.947-13.346 13.285-13.346 7.344 0 13.291 5.977 13.291 13.346 0 7.371-5.947 13.347-13.291 13.347zm47.564 0c-7.34 0-13.291-5.976-13.291-13.347 0-7.369 5.951-13.346 13.291-13.346s13.288 5.977 13.288 13.346c0 7.371-5.948 13.347-13.288 13.347z"/></svg>
|
||||
|
After Width: | Height: | Size: 874 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M445.564 89.08H66.438c-9.342 0-16.912 7.572-16.912 16.913V422.92h412.949V105.993c0-9.341-7.569-16.913-16.911-16.913zm-256.837 28.378c7.355 0 13.312 5.964 13.312 13.315 0 7.354-5.957 13.317-13.312 13.317s-13.316-5.964-13.316-13.317c-.001-7.351 5.96-13.315 13.316-13.315zm-47.661 0c7.357 0 13.316 5.964 13.316 13.315 0 7.354-5.959 13.317-13.316 13.317-7.355 0-13.314-5.964-13.314-13.317 0-7.351 5.959-13.315 13.314-13.315zm-47.654 0c7.354 0 13.316 5.964 13.316 13.315 0 7.354-5.963 13.317-13.316 13.317-7.355 0-13.318-5.964-13.318-13.317 0-7.351 5.963-13.315 13.318-13.315zm339.957 276.356H78.631V169.06h354.738v224.754z"/></svg>
|
||||
|
After Width: | Height: | Size: 698 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M445.563 89.082H66.437c-9.34 0-16.912 7.571-16.912 16.911V422.92h412.951V105.993c0-9.34-7.571-16.911-16.913-16.911zM93.41 117.458c7.355 0 13.317 5.964 13.317 13.315 0 7.354-5.962 13.316-13.317 13.316-7.354 0-13.317-5.963-13.317-13.316 0-7.351 5.963-13.315 13.317-13.315zm53.296 276.355H78.63V169.06h68.076v224.753zm-5.64-249.723c-7.354 0-13.314-5.963-13.314-13.316 0-7.352 5.96-13.315 13.314-13.315 7.357 0 13.317 5.964 13.317 13.315.001 7.353-5.959 13.316-13.317 13.316zm47.659-26.632c7.356 0 13.315 5.964 13.315 13.315 0 7.354-5.959 13.316-13.315 13.316-7.354 0-13.315-5.963-13.315-13.316-.001-7.351 5.961-13.315 13.315-13.315zM433.37 393.813H175.812V169.06H433.37v224.753z"/></svg>
|
||||
|
After Width: | Height: | Size: 755 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M293.219 401.592v65.893h199.514v-65.893H293.219zm61.412-74.302l10.891-31.131c6.017-17.169-3.039-35.938-20.241-41.958l-119.688-41.889-42.84-135.025c-3.401-17.888-11.413-34.012-29.302-30.547-17.854 3.439-20.929 16.553-17.496 34.438l12.493 104.09-45.848-16.059-22.53-56.642-61.219 24.399 28.091 70.602a32.925 32.925 0 0 0 19.752 18.869l256.838 89.965 31.099 10.888z"/></svg>
|
||||
|
After Width: | Height: | Size: 442 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M190.574 54.423v180.754H71.039l183.224 221.998 183.224-221.998H317.949V54.423z"/></svg>
|
||||
|
After Width: | Height: | Size: 158 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M455.641 192.112H274.887V72.576L52.889 255.8l221.998 183.224V319.486h180.754z"/></svg>
|
||||
|
After Width: | Height: | Size: 157 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M52.889 319.489h180.754v119.535L455.641 255.8 233.643 72.576v119.538H52.889z"/></svg>
|
||||
|
After Width: | Height: | Size: 156 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M317.953 457.176V276.422h119.535L254.264 54.423 71.04 276.422h119.538v180.754z"/></svg>
|
||||
|
After Width: | Height: | Size: 158 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M371.482 115.717H140.518v149.762h230.965V115.717zM270.553 49.373h-29.105v54.502h29.105V49.373zm128.449 232.268H112.998v37.012h56.242l-38.639 143.975h30.137l38.639-143.975h113.246l38.639 143.975h30.135l-38.639-143.975h56.244v-37.012zM241.447 431.604h29.105v-96.793h-29.105v96.793z"/></svg>
|
||||
|
After Width: | Height: | Size: 359 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M87.887 74.772v361.521h336.958V74.772H87.887zm306.318 330.879H118.544V105.399h275.661v300.252zM262.693 137.497H149.04v130.742h113.653V137.497zm104.942.521h-79.221v24.951h79.221v-24.951zm0 107.328h-79.221v24.92h79.221v-24.92zm0-53.661h-79.221v24.948h79.221v-24.948zm-1.816 107.327H147.57v24.917h218.249v-24.917zm0 53.662H147.57v24.887h218.249v-24.887z"/></svg>
|
||||
|
After Width: | Height: | Size: 430 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M127.286 449.816c-21.564.006-43.317-8.494-59.885-25.062-16.578-16.575-25.083-38.336-25.079-59.897-.029-20.296 7.623-40.755 23.034-56.14l3.539-3.539 212.559-212.57c20.227-20.255 47.082-30.304 73.852-30.267 28.454-.012 57.219 11.208 79.179 33.159 21.937 21.949 33.153 50.698 33.147 79.151.028 26.779-10.016 53.627-30.268 73.865l-178.45 178.453-13.28 13.277-26.56-26.559 191.738-191.733c12.842-12.871 19.229-29.708 19.259-47.303-.004-18.645-7.323-37.759-22.152-52.592-14.834-14.838-33.958-22.152-52.613-22.165-17.588.034-34.423 6.418-47.284 19.266L95.447 331.734l-3.536 3.537c-8.011 8.031-11.994 18.482-12.029 29.585.014 11.761 4.614 23.877 14.079 33.345 9.455 9.446 21.562 14.043 33.326 14.056 11.102-.034 21.551-4.014 29.587-12.026l150.412-150.404 12.596-12.595c3.018-3.04 4.521-6.906 4.549-11.331 0-4.666-1.817-9.57-5.722-13.476-3.914-3.916-8.819-5.726-13.48-5.739-4.425.038-8.283 1.542-11.328 4.564L155.27 349.882l-26.561-26.56L267.33 184.703c10.408-10.44 24.289-15.604 37.897-15.57 14.468-.012 29.01 5.704 40.049 16.739 11.007 11.025 16.72 25.554 16.72 40.029.029 13.599-5.129 27.479-15.559 37.89l-12.601 12.595-150.41 150.41c-15.365 15.377-35.768 23.025-56.022 23.021l-.118-.001z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M194.166 390.957H78.85v38.906H49.789v32.613H226.42v-32.613h-32.254zm258.881-50.733l-91.314-91.314c-8.502-8.501-20.674-11.069-31.412-7.743l-53.164-53.161 32.635-32.633-59.498-59.5-85.842 85.842 59.498 59.497 32.627-32.626 53.164 53.161c-3.33 10.738-.762 22.913 7.742 31.414l91.314 91.315c6.109 6.107 14.117 9.163 22.125 9.163s16.016-3.056 22.125-9.163c12.219-12.221 12.219-32.032 0-44.252zM141.285 191.2l73.173 73.172-23.188 23.188-73.173-73.173zM282.968 49.52l73.172 73.172-23.187 23.187-73.172-73.173z"/></svg>
|
||||
|
After Width: | Height: | Size: 582 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M142.212 397.267l106.052-48.024L398.479 199.03l-26.405-26.442-90.519 90.517-15.843-15.891 90.484-90.486-16.204-16.217-150.246 150.243-47.534 106.513zm74.904-100.739l23.285-23.283 3.353 22.221 22.008 3.124-23.283 23.313-46.176 20.991 20.813-46.366zm257.6-173.71L416.188 64.3l-49.755 49.785 58.504 58.503 49.779-49.77zM357.357 300.227h82.826v116.445H68.929V300.227h88.719v-30.648H38.288v177.733h432.537V269.578H357.357v30.649z"/></svg>
|
||||
|
After Width: | Height: | Size: 504 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M298.953 291.403c.789 0 1.557.047 2.285.153l25.752 3.641a11.05 11.05 0 0 0 1.543.108c5.371 0 10.227-3.938 11.176-9.347l4.492-25.616c1.039-5.925 6.234-13.076 11.549-15.897l22.977-12.189c5.311-2.821 7.498-9.548 4.855-14.952L372.16 193.94c-2.643-5.405-2.643-14.246 0-19.651l11.422-23.363c2.643-5.405.455-12.13-4.855-14.953l-22.977-12.188c-5.314-2.82-10.51-9.973-11.549-15.897l-4.492-25.615c-.949-5.409-5.807-9.348-11.18-9.348-.508 0-1.021.034-1.539.108l-25.752 3.646c-.729.101-1.492.151-2.281.151-5.668 0-12.611-2.555-16.406-6.225L263.86 52.52c-2.16-2.093-5.01-3.135-7.859-3.135-2.848 0-5.697 1.042-7.859 3.135l-18.695 18.085c-3.795 3.67-10.738 6.225-16.406 6.225-.789 0-1.553-.051-2.281-.151l-25.754-3.646a10.823 10.823 0 0 0-1.539-.108c-5.373 0-10.229 3.938-11.178 9.348l-4.492 25.615c-1.039 5.925-6.236 13.079-11.549 15.897l-22.971 12.188c-5.314 2.818-7.5 9.548-4.857 14.953l11.42 23.363c2.643 5.405 2.643 14.246 0 19.651l-11.42 23.364c-2.643 5.404-.457 12.135 4.857 14.952l22.971 12.189c5.312 2.819 10.51 9.973 11.549 15.897l4.492 25.616c.949 5.412 5.803 9.347 11.174 9.347.51 0 1.025-.035 1.543-.108l25.754-3.641a15.96 15.96 0 0 1 2.287-.153c5.666 0 12.607 2.552 16.4 6.223l18.695 18.085c2.162 2.091 5.012 3.135 7.859 3.135 2.85 0 5.699-1.044 7.859-3.135l18.691-18.085c3.793-3.671 10.732-6.223 16.402-6.223zM256 239.999c-30.812 0-55.791-24.978-55.791-55.789 0-30.814 24.979-55.792 55.791-55.792s55.791 24.978 55.791 55.792c0 30.811-24.979 55.789-55.791 55.789zm-21.031 89.326l-18.502-17.899c-.746-.485-2.426-1.031-3.316-1.077l-25.488 3.605a30.134 30.134 0 0 1-4.201.296c-.303 0-.6-.031-.9-.041l-24.676 148.409 84.637-33.199v-94.783a30.07 30.07 0 0 1-7.554-5.311zm93.564-15.075c-1.4 0-2.814-.1-4.195-.296l-25.494-3.605c-.889.044-2.57.592-3.316 1.077l-18.498 17.902a30.09 30.09 0 0 1-6.441 4.725v95.41l84.635 32.75-25.783-148.004c-.304.007-.603.041-.908.041z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M314.439 321.301c-.186.035-.383.063-.572.101l-48.846-40.456-.078 45.663c-3.168.091-6.352.155-9.566.153-47.775.073-90.82-10.348-119.785-25.578-14.496-7.545-25.336-16.229-31.842-24.324-6.559-8.225-8.87-15.079-8.914-21.718.034-7.984 3.546-16.798 13.858-27.144 10.181-10.146 26.818-20.4 48.036-28.213 1.189-.44 2.406-.867 3.621-1.293l-44.539-36.889c-16.619 8.232-31.257 18.09-43.229 29.865-17.119 16.768-29.14 38.85-29.106 63.673-.046 20.229 8.065 38.979 20.353 54.034 18.569 22.71 46.073 39.182 78.877 50.871 32.865 11.58 71.375 18.061 112.67 18.078 3.18 0 6.334-.053 9.479-.131l-.088 50.725 89.646-73.732-39.975-33.109v-.576zm-68.482-238.19l-89.646 73.73 89.396 74.04.078-47.212c3.18-.092 6.368-.154 9.591-.152 47.769-.062 90.814 10.352 119.773 25.583 14.5 7.544 25.336 16.229 31.84 24.326 6.555 8.226 8.867 15.079 8.915 21.715-.024 4.641-1.142 9.16-3.951 14.378-4.159 7.764-12.634 16.785-25.487 25.085-9.574 6.226-21.463 12.005-35.111 16.857l44.471 36.833c13.242-6.638 25.173-14.355 35.52-23.203 10.465-9.006 19.322-19.266 25.735-31.03 6.397-11.718 10.208-25.077 10.19-38.92v-.168c0-20.162-8.104-38.849-20.361-53.859-18.572-22.716-46.064-39.181-78.877-50.872-32.856-11.582-71.361-18.062-112.656-18.08-3.193 0-6.343.1-9.502.177l.082-49.228z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M190.071 318.519c-.035-.189-.064-.387-.102-.575l40.457-48.848-45.662-.078a325.44 325.44 0 0 1-.153-9.566c-.072-47.771 10.348-90.818 25.58-119.785 7.543-14.494 16.227-25.336 24.323-31.838 8.224-6.562 15.078-8.871 21.716-8.918 7.986.035 16.798 3.545 27.148 13.859 10.144 10.182 20.397 26.819 28.208 48.035.439 1.189.866 2.408 1.293 3.621l36.89-44.537c-8.234-16.621-18.093-31.258-29.868-43.23-16.765-17.115-38.849-29.141-63.671-29.104-20.229-.047-38.979 8.065-54.033 20.353-22.712 18.569-39.184 46.071-50.871 78.876-11.58 32.864-18.061 71.377-18.08 112.668 0 3.18.056 6.336.132 9.479l-50.725-.084 73.73 89.646 33.111-39.974h.577zm238.193-68.486l-73.735-89.644-74.039 89.394 47.216.078c.089 3.18.151 6.366.151 9.59.061 47.768-10.354 90.816-25.586 119.775-7.544 14.498-16.229 25.332-24.325 31.836-8.224 6.561-15.08 8.87-21.715 8.916-4.641-.021-9.16-1.14-14.378-3.949-7.76-4.158-16.786-12.632-25.084-25.487-6.225-9.573-12.009-21.462-16.858-35.11l-36.834 44.471c6.64 13.242 14.357 25.176 23.206 35.52 9.006 10.463 19.268 19.326 31.029 25.735 11.718 6.399 25.078 10.21 38.919 10.189h.168c20.164 0 38.849-8.104 53.86-20.358 22.715-18.574 39.18-46.066 50.873-78.881 11.58-32.855 18.06-71.36 18.08-112.656-.002-3.191-.103-6.34-.177-9.5l49.229.081z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M374.236 112.896l.002-.004c-34.665-28.842-76.951-42.994-118.78-42.969-48.281-.027-96.382 18.878-132.321 55.332l-36.11-30.122-.608 116.069 114.082-21.411-37.78-31.516c25.665-24.441 59.003-36.957 92.737-36.984 30.38.027 60.723 10.141 85.939 31.095 32.061 26.661 48.504 64.85 48.546 103.566a136.332 136.332 0 0 1-1.053 16.753l52.271-9.994c.081-2.255.14-4.508.14-6.759.038-53.253-22.882-106.332-67.065-143.056zm-25.501 239.875c-25.753 24.888-59.396 37.631-93.449 37.658-30.388-.018-60.733-10.15-85.939-31.084-32.057-26.664-48.517-64.861-48.552-103.569.006-6.409.486-12.812 1.397-19.17l-52.507 9.854c-.153 3.104-.255 6.21-.255 9.315-.031 53.254 22.898 106.347 67.08 143.068 34.652 28.817 76.939 42.97 118.775 42.952h.136c48.598 0 97.016-19.191 133.003-56.146l34.503 28.586.214-116.073-114.007 21.804 39.601 32.805z"/></svg>
|
||||
|
After Width: | Height: | Size: 889 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M174.229 281.794h1.243l118.312-118.312h-64.293V59.815h-55.263c-61.315 0-110.989 49.675-110.989 110.976.001 61.297 49.675 111.003 110.99 111.003zM413.64 88.691L151.338 351.024l22.923 22.925 49.578-49.611 49.608 49.611 22.923-22.943-49.61-49.573 19.654-19.639h78.061c20.764 0 37.574-16.827 37.574-37.573v-78.092l45.031-44.996h21.222V88.691H413.64zm-84.863 283.457c-22.01 0-39.832 17.854-39.832 39.836 0 22.006 17.822 39.828 39.832 39.828s39.832-17.822 39.832-39.828c0-21.981-17.822-39.836-39.832-39.836zm-211.744 0c-22.008 0-39.83 17.854-39.83 39.836 0 22.006 17.822 39.828 39.83 39.828 22.01 0 39.832-17.822 39.832-39.828 0-21.981-17.822-39.836-39.832-39.836z"/></svg>
|
||||
|
After Width: | Height: | Size: 738 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M440.632 90.389H172.871L42.391 255.963l130.48 165.566h267.761c15.632 0 28.286-12.639 28.286-28.252V118.66c0-15.595-12.654-28.271-28.286-28.271zm-57.851 240.015l-21.156 21.16-74.465-74.43-74.459 74.43-21.125-21.16 74.426-74.441-74.426-74.447 21.125-21.155 74.459 74.458 74.465-74.458 21.156 21.155-74.428 74.447 74.428 74.441z"/></svg>
|
||||
|
After Width: | Height: | Size: 405 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M255.205 176.479c-43.354 0-78.501 35.146-78.501 78.505 0 43.357 35.147 78.502 78.501 78.502 43.358 0 78.506-35.145 78.506-78.502 0-43.359-35.149-78.505-78.506-78.505zm14.113 92.621v42.299h-28.233V269.1h-42.297v-28.24h42.297v-42.296h28.233v42.296h42.307v28.24h-42.307z"/></svg>
|
||||
|
After Width: | Height: | Size: 347 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M255.251 176.839c-43.353 0-78.501 35.146-78.501 78.503 0 43.354 35.148 78.504 78.501 78.504 43.358 0 78.505-35.15 78.505-78.504 0-43.357-35.147-78.503-78.505-78.503zM267.77 307.96h-20.948v-71.745h-24.466v-13.917c6.44-.292 10.95-.72 13.525-1.293 4.104-.907 7.444-2.724 10.021-5.453 1.766-1.866 3.102-4.35 4.008-7.46.525-1.863.786-3.252.786-4.16h17.075V307.96z"/></svg>
|
||||
|
After Width: | Height: | Size: 438 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M254.87 176.479c-43.354 0-78.501 35.146-78.501 78.505 0 43.357 35.148 78.502 78.501 78.502 43.357 0 78.505-35.145 78.505-78.502 0-43.359-35.147-78.505-78.505-78.505zM198.454 269.1v-28.24H311.29v28.24H198.454z"/></svg>
|
||||
|
After Width: | Height: | Size: 288 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M255.519 216.717c-7.42 0-14.329 2.186-20.17 5.903l51.974 51.966c3.717-5.84 5.901-12.744 5.901-20.168 0-20.787-16.915-37.701-37.705-37.701zm-37.704 37.701c0 20.795 16.914 37.708 37.704 37.708 7.422 0 14.329-2.182 20.168-5.903l-51.971-51.971c-3.715 5.84-5.901 12.746-5.901 20.166zm37.556-77.292c-43.353 0-78.503 35.146-78.503 78.505 0 43.357 35.15 78.501 78.503 78.501 43.358 0 78.504-35.144 78.504-78.501 0-43.36-35.146-78.505-78.504-78.505zm.148 131.45c-29.906 0-54.153-24.245-54.153-54.158 0-29.906 24.247-54.15 54.153-54.15 29.909 0 54.157 24.244 54.157 54.15 0 29.913-24.248 54.158-54.157 54.158z"/></svg>
|
||||
|
After Width: | Height: | Size: 679 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M182.683 192.699c20.618-20.639 30.852-47.911 30.87-76.491 0-6.671-.59-13.41-1.733-20.079-59.485 16.646-105.464 65.633-117.661 126.852 4.022.422 8.011.619 12 .619 28.566-.034 55.855-10.268 76.524-30.901zM319.325 329.39c-20.634 20.636-30.853 47.908-30.853 76.459-.033 4.019.162 8.009.571 12.066 61.233-12.229 110.254-58.207 126.899-117.694-6.721-1.146-13.456-1.732-20.144-1.732-28.549.032-55.821 10.236-76.473 30.901zM256.521 89.949c-6.898 0-13.604.488-20.243 1.291 1.439 8.321 2.208 16.66 2.208 24.968.018 34.532-12.575 68.54-38.179 94.146-25.572 25.575-59.565 38.166-94.033 38.166h-.115c-5.002 0-10.006-.297-15.025-.786-.116 2.581-.198 5.17-.198 7.814 0 91.469 74.118 165.571 165.585 165.571 2.6 0 5.201-.098 7.782-.201a145.534 145.534 0 0 1-.784-15.069c-.032-34.504 12.558-68.511 38.162-94.122 25.609-25.6 59.634-38.223 94.118-38.16 8.339 0 16.71.759 25.015 2.193.783-6.607 1.261-13.377 1.261-20.212 0-91.47-74.118-165.599-165.554-165.599z"/></svg>
|
||||
|
After Width: | Height: | Size: 1020 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M454.212 145.442l-87.051-87.068c-9.419-9.421-24.723-9.421-34.173.031l-73.154 73.186 121.193 121.194 73.185-73.183c9.453-9.423 9.453-24.728 0-34.16zM149.63 241.731L270.888 362.96l92.514-92.531-121.192-121.21-92.58 92.512zm73.219 20.868c-4.872 4.868-12.822 4.868-17.724 0-4.94-4.907-4.94-12.855 0-17.777 4.902-4.907 12.853-4.907 17.724 0 4.905 4.921 4.905 12.869 0 17.777zm67.333-13.019c4.904-4.907 12.852-4.907 17.757 0 4.904 4.906 4.904 12.854 0 17.754-4.905 4.906-12.853 4.906-17.757 0-4.872-4.9-4.872-12.848 0-17.754zm-22.403 57.909c-4.871 4.908-12.852 4.908-17.756 0-4.904-4.883-4.904-12.846 0-17.754 4.904-4.905 12.885-4.905 17.756 0 4.907 4.909 4.907 12.871 0 17.754zm-4.773-102.825a12.523 12.523 0 0 1 .035 17.755c-4.908 4.89-12.886 4.89-17.759 0-4.906-4.907-4.906-12.85 0-17.755 4.873-4.905 12.851-4.905 17.724 0zM58.816 332.561c-9.419 9.431-9.419 24.734.034 34.157l87.02 87.07c9.45 9.415 24.754 9.415 34.204 0l73.188-73.208-121.226-121.226-73.22 73.207z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M349.178 315.46v129.468h83.102V315.46h-83.102zM213.967 444.928h83.103V65.072h-83.103v379.856zm-135.214-.004h83.106V190.267H78.753v254.657z"/></svg>
|
||||
|
After Width: | Height: | Size: 218 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M39.435 420.59H83.37V91.58H39.435v329.01zm122.532 0h42.298V91.58h-42.298v329.01zm55.79 0h50.001V91.58h-50.001v329.01zm127.437 0h37.396V91.58h-37.396v329.01zm-38.391 0h15.957V91.58h-15.957v329.01zm-180.398 0h15.972V91.58h-15.972v329.01zM405.628 91.58v329.01h66.141V91.58h-66.141z"/></svg>
|
||||
|
After Width: | Height: | Size: 358 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M272.812 437.155V193.203h83.1v243.952h-83.1zm118.865 0V74.335h83.106v362.82h-83.106zm-237.736.002V312.07h83.103v125.087h-83.103zm-118.865-.002V409.67h83.102v27.485H35.076z"/></svg>
|
||||
|
After Width: | Height: | Size: 251 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M430.566 323.867c23.447 0 42.457-19.012 42.457-42.455V232.31c0-23.446-19.01-42.456-42.457-42.456v134.013zM38.171 132.417v247.886h357.537V132.417H38.171zm328.264 217.69H67.441V162.612h298.994v187.495zm-25.039-162.456H92.479v137.418h248.917V187.651z"/></svg>
|
||||
|
After Width: | Height: | Size: 327 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M430.593 323.867c23.448 0 42.458-19.012 42.458-42.455V232.31c0-23.446-19.01-42.456-42.458-42.456v134.013zM38.198 132.417v247.886h357.537V132.417H38.198zm328.264 217.69H67.467V162.612h298.995v187.495zM128.27 187.651H92.507v137.418h35.763V187.651z"/></svg>
|
||||
|
After Width: | Height: | Size: 325 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M396.615 143.603h-44.342v-49.24h-.394c.23-.757.394-1.501.394-2.267 0-17.866-63.867-32.378-142.645-32.378-78.814 0-142.645 14.512-142.645 32.378 0 .766.131 1.51.359 2.267h-.359V420.81c.097 17.852 63.896 32.321 142.645 32.321 78.744 0 142.545-14.47 142.645-32.321v-49.24h44.342c27.244-.089 49.119-21.99 49.219-49.212v-129.55c-.1-27.226-21.975-49.116-49.219-49.205zM146.711 371.09c0 8.485-6.869 15.346-15.305 15.346-8.504 0-15.371-6.86-15.371-15.346V144.083c0-8.475 6.867-15.347 15.371-15.347 8.436 0 15.305 6.872 15.305 15.347V371.09zm78.253 0c0 8.471-6.867 15.346-15.335 15.346-8.471 0-15.338-6.875-15.338-15.346V144.083c0-8.475 6.867-15.347 15.338-15.347 8.468 0 15.335 6.872 15.335 15.347V371.09zm78.224.026c0 8.459-6.867 15.319-15.338 15.319-8.469 0-15.336-6.86-15.336-15.319V144.083c0-8.475 6.867-15.347 15.336-15.347 8.471 0 15.338 6.872 15.338 15.347v227.033zm96.406-48.759c0 .805-.296 1.456-.885 2.083-.656.62-1.307.909-2.094.909h-44.342V189.823h44.342c.787.026 1.438.305 2.094.906.589.629.885 1.263.885 2.078v129.55z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M63.774 42.231L42.008 63.996l404.999 404.999 21.767-21.765-405-404.999zm378.655 343.248c.514-2.089.827-4.281.821-6.595.025-8.525-4.035-15.696-8.371-20.336-7.801-8.226-17.102-12.633-28.434-16.957-.626-.231-1.305-.442-1.941-.667-45.437-39.312-24.12-70.818-24.12-111.01 0-39.834-39.7-100.547-93.215-117.836.19-1.411.321-2.838.321-4.302 0-17.729-14.367-32.099-32.095-32.099s-32.101 14.369-32.101 32.099c0 1.979.205 3.909.548 5.788-12.216 4.496-23.641 11.217-33.969 19.354l252.556 252.561zm-187.033 12.367c-45.501.018-86.747-4.188-115.399-10.622-11.53-2.547-21.039-5.562-27.473-8.348a62.242 62.242 0 0 1 4.503-1.778c12.607-4.725 32.442-9.211 56.328-12.271 15.937-2.059 33.758-3.534 52.738-4.295 2.938 13.486 14.934 23.591 29.303 23.591 14.368 0 26.364-10.106 29.298-23.601 6.656.269 13.16.626 19.494 1.07L141.385 198.781c-4.015 10.877-6.206 21.518-6.206 31.133 0 39.855 18.94 71.3-22.197 108.786-8.275 2.544-15.655 5.412-22.135 8.803-5.515 2.96-10.509 6.253-14.94 11.045-4.341 4.64-8.396 11.811-8.376 20.336-.019 8.538 4.036 15.708 8.376 20.347 7.797 8.218 17.107 12.631 28.434 16.954 16.95 6.212 38.791 10.863 64.52 14.194 25.694 3.309 55.153 5.166 86.535 5.166 42.972-.013 82.218-3.46 113.335-9.417l-32.98-32.977c-23.558 2.968-51.037 4.699-80.355 4.695z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M434.135 359.126c-7.798-8.222-17.102-12.629-28.434-16.952-.626-.228-1.301-.441-1.939-.666-45.436-39.315-24.12-70.818-24.12-111.011 0-39.834-39.698-100.547-93.214-117.835.188-1.413.32-2.84.32-4.302 0-17.728-14.367-32.1-32.095-32.1-17.728 0-32.099 14.372-32.099 32.1 0 1.977.206 3.909.549 5.788-51.197 18.839-88.666 76.425-88.666 116.349 0 39.858 18.944 71.3-22.197 108.788-8.272 2.543-15.655 5.41-22.133 8.803-5.518 2.955-10.51 6.252-14.942 11.038-4.339 4.645-8.394 11.813-8.377 20.345-.016 8.534 4.038 15.703 8.377 20.343 7.798 8.222 17.106 12.63 28.433 16.952 16.952 6.213 38.792 10.867 64.519 14.197 25.696 3.303 55.153 5.167 86.536 5.167 47.843-.019 91.098-4.276 123.619-11.526 16.316-3.686 29.893-7.969 40.918-13.753 5.521-2.954 10.513-6.245 14.945-11.037 4.342-4.64 8.4-11.809 8.376-20.343.024-8.532-4.034-15.7-8.376-20.345zm-41.121 22.138c-12.606 4.721-32.439 9.204-56.32 12.271-23.922 3.096-52.033 4.896-82.041 4.895-45.5.021-86.746-4.187-115.397-10.62-11.531-2.553-21.04-5.562-27.474-8.347a61.283 61.283 0 0 1 4.503-1.782c12.607-4.719 32.441-9.209 56.327-12.271 15.938-2.059 33.759-3.527 52.739-4.295 2.939 13.488 14.934 23.592 29.302 23.592 14.371 0 26.367-10.107 29.3-23.602 33.715 1.363 63.744 5.016 86.092 10.031 11.523 2.549 21.039 5.562 27.472 8.346a65.993 65.993 0 0 1-4.503 1.782z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M236.493 295.837c-3.531-3.76-5.233-8.83-5.103-15.305h-23.97c1.144 13.378 5.263 23.511 12.396 30.416 7.162 6.935 17.036 10.825 29.758 11.738v14.455h10.007v-14.455c8.503-.555 15.466-2.293 20.927-5.102 5.396-2.847 9.747-6.081 12.982-9.712 3.24-3.599 5.464-7.295 6.707-11.121 1.238-3.796 1.863-6.931 1.863-9.416 0-2.81-.197-6.052-.588-9.683-.393-3.657-1.67-7.258-3.826-10.888-2.127-3.629-5.496-7.098-10.007-10.431-4.548-3.371-10.989-6.185-19.392-8.407-1.604-.486-3.108-.85-4.482-1.21-1.439-.358-2.812-.653-4.185-1.011v-30.088c3.859 0 7.13 1.573 9.843 4.775 2.748 3.172 4.151 7 4.284 11.545h24.101c-.327-5.887-1.568-10.987-3.729-15.27-2.158-4.354-4.938-7.916-8.306-10.828-3.433-2.877-7.358-5.133-11.839-6.801-4.479-1.636-9.254-2.714-14.354-3.303V182.69h-10.007v13.045c-5.101.324-10.041 1.307-14.815 3.006-4.742 1.605-8.927 3.924-12.589 6.936-3.598 3.01-6.51 6.702-8.698 11.117-2.226 4.414-3.335 9.546-3.335 15.305 0 5.66.98 10.398 2.911 14.196 1.895 3.79 4.477 6.965 7.717 9.516 3.204 2.549 6.868 4.61 10.956 6.077a123.877 123.877 0 0 0 12.391 4.053c1.146.234 2.193.462 3.175.76.948.258 1.701.522 2.288.748v35.516c-5.233-1.014-9.616-3.367-13.081-7.128zm23.088-25.507c6.672 1.834 11.415 3.863 14.191 6.053 2.779 2.191 4.153 5.523 4.153 9.938 0 2.714-.555 5.07-1.701 7.031-1.144 1.995-2.55 3.664-4.314 5.006-1.768 1.373-3.762 2.418-5.953 3.175-2.191.716-4.351 1.208-6.376 1.435V270.33zm-21.748-31.951c-2.353-2.027-3.563-4.904-3.563-8.667 0-2.356.424-4.414 1.275-6.179.852-1.762 1.992-3.236 3.467-4.443a14.905 14.905 0 0 1 4.973-2.622c1.795-.586 3.662-.849 5.59-.849v27.699c-5.464-1.242-9.354-2.879-11.742-4.939zm186.073 112.889V160.812H306.443c19.716 21.971 32.471 56.443 32.471 95.229 0 38.783-12.755 73.252-32.471 95.227h117.463zM38.354 110.779v289.508H473.19V110.779H38.354zm410.47 265.407H62.715V135.863h386.109v240.323zM172.627 256.041c0-38.785 12.719-73.258 32.473-95.229H87.635v190.455H205.1c-19.754-21.974-32.473-56.443-32.473-95.226z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M212.925 255.197c-.101.229-.164 1.144-.164 2.746v4.385h-6.802l-5.267 12.229h13.08c2.389 14.846 7.522 26.423 15.466 34.662 8.734 9.193 20.244 13.766 34.502 13.766 9.843 0 18.575-2.187 26.159-6.6l.199-25.639c-8.959 7.125-17.69 10.661-26.193 10.661-13.146 0-21.518-8.929-25.15-26.851h29.597l5.23-12.229h-36.168l.165-7.131h38.066l5.262-12.229h-41.466c3.956-15.535 11.904-23.287 23.807-23.287 6.901 0 14.324 2.551 22.236 7.652l10.37-21.256c-11.12-5.656-21.389-8.501-30.904-8.501-13.506 0-24.724 4.351-33.649 12.914-8.502 7.948-14.128 18.769-16.809 32.478h-8.701l-5.264 12.229h12.398zm211.513 96.405V161.178H306.972c19.753 21.913 32.474 56.413 32.474 95.195 0 38.786-12.721 73.25-32.474 95.229h117.466zm-251.28-95.229c0-38.782 12.721-73.282 32.474-95.195H88.167v190.424h117.465c-19.754-21.979-32.474-56.443-32.474-95.229zM38.885 111.113v289.506h434.834V111.113H38.885zm410.504 265.405H63.215V136.193h386.174v240.325z"/></svg>
|
||||
|
After Width: | Height: | Size: 990 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M230.083 265.43c.637 1.898.93 3.763.93 5.687 0 3.077-.556 5.985-1.702 8.737a35.825 35.825 0 0 1-4.314 7.746 38.11 38.11 0 0 1-6.131 6.545 59.53 59.53 0 0 1-7.048 5.166l10.531 15.631c3.301-2.454 6.605-4.155 9.94-5.009 3.337-.847 6.559-1.239 9.617-1.239 3.744 0 6.849.297 9.319.981a90.441 90.441 0 0 1 7.489 2.391c2.387.817 5.002 1.474 7.831 2.025 2.829.584 6.392.851 10.71.851 4.301 0 8.763-.818 13.426-2.355 4.626-1.6 9.008-4.382 13.062-8.338l-10.186-17.169c-3.059 3.308-5.757 5.329-8.078 6.114-2.339.788-4.594 1.18-6.883 1.18-2.259 0-4.465-.166-6.607-.59-2.156-.426-4.381-.886-6.638-1.437-2.255-.426-4.497-.886-6.704-1.275a38.019 38.019 0 0 0-6.72-.589c-1.601 0-3.222.263-4.939.652-1.681.494-3.908 1.571-6.622 3.238l-.325-.295a53.027 53.027 0 0 0 9.744-10.137c2.797-3.797 4.186-8.338 4.186-13.672a56.91 56.91 0 0 0-.262-5.459 22.629 22.629 0 0 0-1.112-5.102h17.856v-14.426h-22.594c-1.702-3.07-3.043-5.654-3.991-7.814-.982-2.154-1.669-4.021-2.062-5.689-.391-1.635-.652-3.104-.751-4.312a38.558 38.558 0 0 1-.18-3.96c0-4.746 1.504-8.534 4.496-11.345 3.01-2.845 7.062-4.253 12.166-4.253 4.301 0 7.686.882 10.104 2.647 2.422 1.732 4.252 3.799 5.445 6.182a23.497 23.497 0 0 1 2.291 7.391c.342 2.549.572 4.672.67 6.374h22.957c0-13.831-3.631-24.36-10.891-31.587-7.227-7.262-17.398-10.893-30.414-10.893-7.129 0-13.424.887-18.85 2.719-5.445 1.795-9.993 4.283-13.604 7.387-3.631 3.145-6.377 6.707-8.241 10.795-1.88 4.086-2.813 8.372-2.813 12.918 0 5.102.867 9.744 2.567 13.924 1.701 4.191 3.4 7.364 5.102 9.518h-10.89v14.426h16.825c.898 1.961 1.681 3.858 2.288 5.72zm193.806 85.58V160.557H306.424c19.734 22.011 32.457 56.443 32.457 95.225 0 38.787-12.723 73.288-32.457 95.229h117.465zm-251.281-95.229c0-38.781 12.722-73.214 32.457-95.225H87.616V351.01h117.449c-19.735-21.941-32.457-56.442-32.457-95.229zM38.32 110.588v289.443h434.852V110.588H38.32zm410.504 265.377H62.698V135.64h386.126v240.325z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M216.269 251.881v16.153h24.299l2.353 4.939v7.8H216.27v16.154h26.651v23.448h25.838v-23.448h26.844v-16.154h-26.844v-7.8l2.549-4.939h24.295v-16.153H279.48l26.326-52.825H278.27l-21.911 52.825-22.431-52.825h-27.535l25.996 52.825h-16.12zm207.952 99.807v-190.44H306.789c19.751 21.962 32.437 56.428 32.437 95.212 0 38.783-12.686 73.253-32.437 95.229h117.432zM38.668 111.214v289.492h434.865V111.214H38.668zm410.5 265.41H63.031V136.299h386.137v240.325zM172.971 256.46c0-38.784 12.69-73.25 32.475-95.212H87.947v190.441h117.498c-19.784-21.976-32.474-56.446-32.474-95.229z"/></svg>
|
||||
|
After Width: | Height: | Size: 639 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M424.361 352.143V161.7h-117.5c19.752 21.968 32.475 56.434 32.475 95.218 0 38.783-12.723 73.244-32.475 95.224h117.5zM38.773 111.672v289.502h434.836V111.672H38.773zm410.506 265.4H63.138V136.758H449.28v240.314zm-276.23-120.154c0-38.785 12.752-73.25 32.471-95.218H88.058v190.442H205.52c-19.719-21.98-32.471-56.441-32.471-95.224zm78.318 64.603h24.103V202.577h-19.196c-.652 4.531-2.094 8.316-4.25 11.379-2.127 3.067-4.775 5.53-7.881 7.384-3.141 1.874-6.639 3.173-10.531 3.917-3.923.744-7.98 1.051-12.162.924v18.199h29.918v77.141z"/></svg>
|
||||
|
After Width: | Height: | Size: 603 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M153.537 329.843v62.41h23.68v-62.41h159.498v62.41h23.68v-62.41h89.076V61.513H60.359v268.33h93.178zM88.773 89.928h332.283v211.501H88.773V89.928zm28.416 28.415H392.64v154.671H117.189zM49.523 421.381h412.953v29.106H49.523z"/></svg>
|
||||
|
After Width: | Height: | Size: 299 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M188.488 338.922c-2.812-3.045-4.184-7.132-4.121-12.295h-19.194c.881 10.727 4.218 18.836 9.939 24.43 5.724 5.524 13.704 8.629 23.873 9.385v11.607h8.044v-11.607c6.802-.492 12.396-1.832 16.776-4.088 4.35-2.291 7.849-4.875 10.434-7.783 2.583-2.912 4.379-5.89 5.396-8.926.979-3.01 1.504-5.594 1.504-7.591 0-2.253-.165-4.872-.524-7.783-.294-2.878-1.306-5.755-3.041-8.667-1.732-2.908-4.413-5.719-8.044-8.402-3.632-2.68-8.828-4.938-15.531-6.77a52.339 52.339 0 0 0-3.631-.951 79.541 79.541 0 0 1-3.338-.849v-24.097c3.074 0 5.722 1.272 7.915 3.822 2.192 2.521 3.302 5.661 3.402 9.258h19.358c-.263-4.74-1.275-8.828-3.008-12.263-1.7-3.47-3.926-6.348-6.672-8.702-2.716-2.257-5.888-4.087-9.482-5.394-3.565-1.341-7.426-2.223-11.514-2.651v-10.562h-8.044v10.562c-4.088.265-8.074 1.047-11.869 2.389-3.794 1.276-7.196 3.141-10.072 5.562-2.942 2.417-5.264 5.396-7.031 8.96-1.767 3.527-2.65 7.613-2.65 12.262 0 4.51.754 8.303 2.288 11.345 1.571 3.04 3.633 5.624 6.215 7.653 2.586 2.059 5.527 3.666 8.795 4.906 3.273 1.244 6.608 2.29 9.943 3.204.915.166 1.768.429 2.55.624.753.229 1.374.422 1.832.619v28.484c-4.187-.816-7.685-2.713-10.498-5.691zm18.541-20.471c5.364 1.435 9.158 3.074 11.383 4.838 2.223 1.768 3.335 4.451 3.335 7.979 0 2.159-.458 4.058-1.343 5.663a14.175 14.175 0 0 1-3.499 4.016 16.05 16.05 0 0 1-4.773 2.521 25.466 25.466 0 0 1-5.103 1.146v-26.163zm-17.463-25.639c-1.896-1.669-2.843-3.956-2.843-6.963 0-1.931.326-3.567 1.013-4.971.688-1.407 1.604-2.616 2.812-3.535a11.624 11.624 0 0 1 3.956-2.122 14.675 14.675 0 0 1 4.48-.686v22.236c-4.38-.982-7.487-2.353-9.418-3.959zm-45.714-184.046v25.898h303.11v160.112h28.482v-186.01H143.852zM36.752 402.3h331.597V216.258H36.752V402.3zm165.799-167.923c32.015 0 57.945 33.059 57.945 73.871 0 40.781-25.931 73.838-57.945 73.838s-57.947-33.057-57.947-73.838c0-40.812 25.932-73.871 57.947-73.871zM90.154 188.364h303.113v160.104h28.483V162.464H90.154v25.9z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |