Compare commits

..

93 Commits

Author SHA1 Message Date
mikkelhm ca0de5acd3 Fix more xml format issues in pl.xml 2017-08-07 21:58:45 +02:00
mikkelhm 27168722ab fix xml in pl.xml 2017-08-07 20:33:49 +02:00
Sebastiaan Janssen 6dbeba0763 Merge pull request #2103 from ronaldbarendse/U4-10252
U4-10252: Slider property editor initial values not used when equal (range enabled)
2017-08-07 08:10:49 +02:00
Ronald Barendse 00e0f83c8e Fixed U4-10252
Umbraco.Slider property editor did not use the correct initial values
when range was enabled and both values were equal.
2017-08-06 22:41:20 +02:00
Sebastiaan Janssen 136b3db098 Merge pull request #2071 from umbraco/temp-U4-10123
U4-10123 Make sure the backoffice login is not susceptible to DOS att…
2017-08-01 17:16:31 +02:00
Sebastiaan Janssen 21f46d0a3c Adds debug level logging for failed attempts to get filestream 2017-08-01 09:16:39 +02:00
Sebastiaan Janssen 7fafea2370 Merge pull request #2087 from umbraco/temp-u4-10213
PluginManager - implement retries on list file
2017-07-31 17:03:55 +02:00
Stephan 86c37c7f6d PluginManager - fix 2017-07-31 16:38:39 +02:00
Stephan 7dd9f3e766 PluginManager - implement retries on list file 2017-07-31 16:24:22 +02:00
Shannon 1ccc8cc161 U4-10123 Make sure the backoffice login is not susceptible to DOS attacks 2017-07-25 19:40:30 +10:00
Stephan c5e7e1e39e U4-10144 - dont break again 2017-07-24 14:05:04 +02:00
Shannon db2a35dbce fixes a localized key that doesn't exist 2017-07-24 20:23:54 +10:00
Sebastiaan Janssen 3d006f1e08 Merge pull request #2065 from akierczynska/patch-2
Update pl.xml to match en.xml
2017-07-24 09:30:33 +02:00
akierczynska e0c891719f Update pl.xml to match en.xml
Updating pl.xml with new keys to match en.xml
2017-07-24 00:04:11 +01:00
Sebastiaan Janssen 89a14c13e5 Merge pull request #2060 from soreng/patch-4
Changed name of argument in validation
2017-07-21 15:14:33 +02:00
Sebastiaan Janssen ca9aa21c7b Merge pull request #2064 from pijemcolu/temp-U4-10187
U4-10187 - Fix link to training in Backoffice -> Settings->Dashboard
2017-07-21 14:42:49 +02:00
Stephan c0eaeb3168 Fix tests with issues 2017-07-21 13:06:23 +02:00
pijemcolu 74e16c0f8d fix link to training in Settings->Dashboard 2017-07-21 10:14:07 +02:00
Stephan f8fac9f84e U4-9430 - fix 2017-07-20 10:21:21 +02:00
Stephan 83ce359234 Merge pull request #1992 from Bitmapped/U4-9430
U4-9430 Fix
2017-07-20 10:20:06 +02:00
Søren Gregersen 2c64f91b25 Changed name of argument in validation
Minor change... :)
2017-07-19 22:23:22 +02:00
Sebastiaan Janssen e702fe2877 Merge pull request #2055 from dawoe/patch-2
Fix value converter work for legacy media picker
2017-07-19 12:31:46 +02:00
Sebastiaan Janssen 9d55656ae9 Merge pull request #2058 from umbraco/temp-u4-10128
U4-10128 - GetKey unwraps
2017-07-19 12:26:12 +02:00
Stephan d57de05453 U4-10128 - super improve 2017-07-19 12:24:00 +02:00
Stephan 11e4bf5de8 U4-10128 - improve 2017-07-19 12:08:31 +02:00
Stephan 82661d9af4 U4-10128 - GetKey unwraps 2017-07-19 11:51:46 +02:00
Dave Woestenborghs 56cff6bba8 implemented suggestions from @jeavon 2017-07-18 17:11:49 +02:00
Dave Woestenborghs 6b289e1a7d Fix value converter work for legacy media picker
Fix for issue http://issues.umbraco.org/issue/U4-10178
2017-07-18 14:44:57 +02:00
Sebastiaan Janssen 91fa583f62 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-07-17 22:15:24 +02:00
Sebastiaan Janssen 23d91fd350 Adds removed method back in case someone is using it (would be breaking otherwise) 2017-07-17 22:14:59 +02:00
Sebastiaan Janssen d4714e1580 Merge pull request #2052 from umbraco/dev-v7.6
Oops was targeting old branch :)
2017-07-17 22:12:47 +02:00
Sebastiaan Janssen 2b22e6a784 Merge pull request #1940 from AndyButland/u4-9892
U4-9892 - ordered media types when returned for create dialog
2017-07-17 22:09:00 +02:00
Sebastiaan Janssen 59840926c8 Merge pull request #1952 from callumbwhyte/U4-9934
U4 9934: Fixes deleting members in list view using custom membership provider
2017-07-17 22:01:33 +02:00
Sebastiaan Janssen 338c7cc5a6 Merge branch 'callumbwhyte-U4-9934' into dev-v7 2017-07-17 21:31:43 +02:00
Sebastiaan Janssen 77850aea18 Merge branch 'U4-9934' of https://github.com/callumbwhyte/Umbraco-CMS into callumbwhyte-U4-9934 2017-07-17 21:31:25 +02:00
Sebastiaan Janssen 895f0a9dfe Merge pull request #1982 from AndyButland/u4-9987
Extended HttpsCheck healthcheck to check for expiring SSL certificate
2017-07-17 21:26:03 +02:00
Sebastiaan Janssen ec03a3dc42 Merge pull request #1989 from HarveyWilliams/patch-2
Fix for `IsDocumentTypeRecursive` - U4-9997
2017-07-17 21:23:18 +02:00
Sebastiaan Janssen 5a4dbba21b Merge pull request #1998 from Jeavon/temp-U4-10013
U4-10013 Umbraco.MediaPicker value converter does not understand ints
2017-07-17 20:40:24 +02:00
Sebastiaan Janssen 04546dd827 Merge pull request #2035 from bjarnef/dev-v7-U4-9945
U4-9945 - Fix vertical separator color and height of icon in custom section
2017-07-17 20:22:43 +02:00
Sebastiaan Janssen 4ecf1f919e Merge pull request #2038 from bjarnef/dev-v7-U4-4079
U4-4079 - Open context menu in member section, when clicking "do something else" button
2017-07-17 20:18:37 +02:00
Sebastiaan Janssen bdc4e1ae6a Merge pull request #2041 from blueboxes/dev-v7
U4-10143 - Improved error messages when we retrieve current xml node
2017-07-17 19:51:49 +02:00
Sebastiaan Janssen 3cb05870af Merge pull request #2051 from mistyn8/U4-10171
Update treepicker.html [U4-10171] add ability to remove picker item
2017-07-17 18:15:23 +02:00
Sebastiaan Janssen 95b0c342bb Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-07-17 17:51:39 +02:00
Sebastiaan Janssen 3a5584a1c1 Some updates to description and code style 2017-07-17 17:50:38 +02:00
Sebastiaan Janssen b425edbb45 Merge branch 'srmooney-U4-10088' into dev-v7 2017-07-17 17:30:56 +02:00
Sebastiaan Janssen b403283368 Merge branch 'U4-10088' of https://github.com/srmooney/Umbraco-CMS into srmooney-U4-10088 2017-07-17 17:30:32 +02:00
Mike Chambers cb1d347769 Update treepicker.html
resolves U4-10171 can't click remove icon, to remove picker item.
2017-07-17 15:54:11 +01:00
Warren Buckley 4d0a2c85b7 Merge pull request #2049 from umbraco/temp-U4-5672
U4-5672 Properties and Tabs moving/incorrect when Enable list view se…
2017-07-17 09:41:37 +01:00
Sebastiaan Janssen e1957b895f U4-5672 Properties and Tabs moving/incorrect when Enable list view selected 2017-07-17 09:46:30 +02:00
Stephan c696c62185 More fsTreeController cleanup 2017-07-13 15:12:14 +02:00
Warren Buckley 0dfbb95033 Merge branch 'madjor5-U4-4413_-_maxlength' into dev-v7 2017-07-13 13:39:20 +01:00
Warren Buckley 17969e4537 Merge branch 'U4-4413_-_maxlength' of https://github.com/madjor5/Umbraco-CMS into madjor5-U4-4413_-_maxlength
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/textarea/textarea.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/textbox/textbox.html
#	src/Umbraco.Web.UI/umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
2017-07-13 13:09:06 +01:00
mikkelhm 374fdcf29e Bumps version to 7.6.5 2017-07-13 12:14:32 +02:00
Claus bcb19eea35 Merge pull request #1678 from PeteDuncanson/patch-2
Fixed error label showing when you do a retry
2017-07-12 15:47:32 +02:00
Claus da00ad1444 Merge branch 'abryukhov-temp-U4-10139' into dev-v7 2017-07-12 15:10:51 +02:00
Claus 7bc52b3948 localization fixes. 2017-07-12 15:06:29 +02:00
Claus a77aec4156 Merge branch 'temp-U4-10139' of git://github.com/abryukhov/Umbraco-CMS into abryukhov-temp-U4-10139 2017-07-12 14:36:47 +02:00
Claus f7f3dccfc8 Merge pull request #2042 from umbraco/temp-fsTreeController
filesystem controller compatibility
2017-07-12 14:27:00 +02:00
Claus ab3469d703 cleanup. 2017-07-12 14:26:44 +02:00
Claus c78ea90cf5 cleaning up a bit. 2017-07-12 14:24:09 +02:00
Sebastiaan Janssen 3de0b85ae3 Merge pull request #2001 from umbraco/temp-u4-9993
U4-9993 - fix upgrade issues
2017-07-12 12:59:19 +02:00
Stephan 87b51d1418 Merge branch dev-v7 into temp-fsTreeController 2017-07-11 19:06:01 +02:00
John Kilmister 8ea1af56ab U4-10143 - Improved error messages when we retrieve current xml node 2017-07-11 16:22:21 +01:00
Stephan 219eb61194 Merge branch 'dev-v7' into temp-u4-9993 2017-07-11 14:47:54 +02:00
Robert 1d3279fe07 Merge pull request #2036 from bjarnef/dev-v7-U4-10130
U4-10130 - Equal height of input and button
2017-07-11 10:48:23 +02:00
Robert 88bb796f4d Merge branch 'dev-v7' into dev-v7-U4-10130 2017-07-11 10:41:58 +02:00
Robert 97878ac25a Merge pull request #2037 from bjarnef/dev-v7-U4-9933
U4-9933 - Update datepicker styles
2017-07-11 09:56:48 +02:00
Alexander Bryukhov c87e880b64 Minor localization issues U4-10139 2017-07-11 14:15:07 +07:00
Bjarne Fyrstenborg e28ba446a0 Open context menu when clicking "Do something else" 2017-07-08 01:20:26 +02:00
Bjarne Fyrstenborg c645a2cf15 Update styles of datepicker 2017-07-08 00:45:18 +02:00
Bjarne Fyrstenborg 5fb8d990f8 Include original missing changes 2017-07-07 23:52:20 +02:00
Bjarne Fyrstenborg 8626e4337f Adjust search icon position 2017-07-07 23:40:02 +02:00
Bjarne Fyrstenborg 0f22c41eee Update height of input in header 2017-07-07 23:21:19 +02:00
Bjarne Fyrstenborg e73fda14b5 Adjust height of input fields 2017-07-07 23:16:11 +02:00
Bjarne Fyrstenborg a04df8070a Revert "Make examine search input and button more consistent with UI"
This reverts commit 60c1052db1.
2017-07-07 22:51:32 +02:00
Bjarne Fyrstenborg 60c1052db1 Make examine search input and button more consistent with UI 2017-07-07 22:12:27 +02:00
Bjarne Fyrstenborg dd041a6f09 Ensure it override injected styles from custom font icon 2017-07-07 19:16:42 +02:00
Bjarne Fyrstenborg 733aab6eb5 Fix vertical separator color and height of icon in custom section 2017-07-07 18:57:57 +02:00
srmooney 1e6d50a86b Add option for Listview to change the tab name 2017-07-06 10:50:19 -04:00
Stephan 43e0ef2472 Merge branch 'dev-v7' into temp-u4-9993 2017-06-30 11:02:43 +02:00
Stephan 33f76d25f7 U4-9993 - fix upgrade issues 2017-06-14 15:04:56 +02:00
Jeavon 047eb893eb Switches Umbraco.MediaPicker (double legacy) to being converted by MultipleMediaPickerPropertyConverter so that it actually works
Renames MultipleMediaPickerPropertyConverter to LegacyMediaPickerPropertyConverter (delete for v8)
2017-06-13 12:28:59 +01:00
Brian Powell 5ec67ab3fd Apply Tom Fulton's fix for U4-9430 from https://github.com/tomfulton/Umbraco-CMS/commit/ba670586eba14092e6f1d20ee5e9aceb93e05f23 2017-06-09 11:40:38 -04:00
Harvey Williams 993513b138 Fix for IsDocumentTypeRecursive - U4-9997
Potential fix to issue logged on: http://issues.umbraco.org/issue/U4-9997
2017-06-08 15:17:34 +01:00
AndyButland ce618d289b Extended HttpsCheck healthcheck to check for expiring SSL certificate 2017-06-05 16:43:17 +02:00
Stephan 290f34f034 FileSystemTreeController compatibility 2017-06-01 17:24:10 +02:00
Callum Whyte 4b945f355a Modifying Members list view to use key instead of Id 2017-05-18 22:54:44 +01:00
Callum Whyte 3cf8ef9513 Including key property in model when selecting items in list view 2017-05-18 22:54:19 +01:00
AndyButland dd40dd964c Ordered media types when returned for create dialog 2017-05-10 17:44:30 +02:00
Pete Duncanson 9589500412 Fixed error label showing when you do a retry
Should be a nice and easy one, the bool for if the DB connection is valid or not is never cleared on when you do a retry.

http://issues.umbraco.org/issue/U4-9193
2017-01-06 20:40:09 +00:00
Mads Jørgensen 53928c02f8 Textarea made work 2014-04-16 22:20:55 +02:00
Mads Jørgensen 756d554b47 charlimit on textbox added 2014-04-16 20:55:45 +02:00
Mads Jørgensen fb4de621c0 Prevalue editor added to textbox 2014-04-16 20:10:53 +02:00
54 changed files with 556 additions and 235 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
# Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)
7.6.4
7.6.5
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.6.4")]
[assembly: AssemblyInformationalVersion("7.6.4")]
[assembly: AssemblyFileVersion("7.6.5")]
[assembly: AssemblyInformationalVersion("7.6.5")]
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.6.4");
private static readonly Version Version = new Version("7.6.5");
/// <summary>
/// Gets the current version of Umbraco.
@@ -1,5 +1,4 @@
using System.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
using Umbraco.Core.Persistence.SqlSyntax;
@@ -11,15 +10,11 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
{
public UpdateUniqueIdToHaveCorrectIndexType(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{
}
{ }
//see: http://issues.umbraco.org/issue/U4-6188, http://issues.umbraco.org/issue/U4-6187
public override void Up()
{
var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database)
var indexes = SqlSyntax.GetDefinedIndexes(Context.Database)
.Select(x => new DbIndexDefinition()
{
TableName = x.Item1,
@@ -28,24 +23,19 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
IsUnique = x.Item4
}).ToArray();
//must be non-nullable
// drop the index if it exists
if (indexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
// set uniqueID to be non-nullable
// the index *must* be dropped else 'one or more objects access this column' exception
Alter.Table("umbracoNode").AlterColumn("uniqueID").AsGuid().NotNullable();
//make sure it already exists
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
{
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
}
//make sure it doesn't already exist
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNode_uniqueID")) == false)
{
//must be a uniqe index
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
}
// create the index
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
}
public override void Down()
{
}
{ }
}
}
+28 -4
View File
@@ -277,7 +277,7 @@ namespace Umbraco.Core
uniqInfos.Add(info.FullName);
hashCombiner.AddFileSystemItem(info);
}
}
}
return ConvertHashToInt64(hashCombiner.GetCombinedHashCode());
}
@@ -336,6 +336,9 @@ namespace Umbraco.Core
#region Cache
private const int ListFileOpenReadTimeout = 4000; // milliseconds
private const int ListFileOpenWriteTimeout = 2000; // milliseconds
/// <summary>
/// Attemps to retrieve the list of types from the cache.
/// </summary>
@@ -381,7 +384,7 @@ namespace Umbraco.Core
if (File.Exists(filePath) == false)
return cache;
using (var stream = File.OpenRead(filePath))
using (var stream = GetFileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, ListFileOpenReadTimeout))
using (var reader = new StreamReader(stream))
{
while (true)
@@ -451,7 +454,7 @@ namespace Umbraco.Core
{
var filePath = GetPluginListFilePath();
using (var stream = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite))
using (var stream = GetFileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, ListFileOpenWriteTimeout))
using (var writer = new StreamWriter(stream))
{
foreach (var typeList in _types.Values)
@@ -471,7 +474,28 @@ namespace Umbraco.Core
// at the moment we write the cache to disk every time we update it. ideally we defer the writing
// since all the updates are going to happen in a row when Umbraco starts. that being said, the
// file is small enough, so it is not a priority.
WriteCache();
WriteCache();
}
private static Stream GetFileStream(string path, FileMode fileMode, FileAccess fileAccess, FileShare fileShare, int timeoutMilliseconds)
{
const int pauseMilliseconds = 250;
var attempts = timeoutMilliseconds / pauseMilliseconds;
while (true)
{
try
{
return new FileStream(path, fileMode, fileAccess, fileShare);
}
catch
{
if (--attempts == 0)
throw;
LogHelper.Debug<PluginManager>(string.Format("Attempted to get filestream for file {0} failed, {1} attempts left, pausing for {2} milliseconds", path, attempts, pauseMilliseconds));
Thread.Sleep(pauseMilliseconds);
}
}
}
#endregion
@@ -26,7 +26,7 @@ namespace Umbraco.Core.PropertyEditors
public PropertyEditorAttribute(string alias, string name)
{
Mandate.ParameterNotNullOrEmpty(alias, "id");
Mandate.ParameterNotNullOrEmpty(alias, "alias");
Mandate.ParameterNotNullOrEmpty(name, "name");
Alias = alias;
@@ -82,4 +82,4 @@ namespace Umbraco.Core.PropertyEditors
/// </summary>
public string Group { get; set; }
}
}
}
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using NUnit.Framework;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Tests.TestHelpers;
using Umbraco.Web;
@@ -16,8 +17,16 @@ namespace Umbraco.Tests.PublishedContent
private UmbracoContext ctx;
private string xmlContent = "";
private bool createContentTypes = true;
protected override string GetXmlContent(int templateId)
public override void Initialize()
{
base.Initialize();
// make sure we get them from the content service
PublishedContentType.GetPublishedContentTypeCallback = null;
}
protected override string GetXmlContent(int templateId)
{
return xmlContent;
}
@@ -57,7 +66,7 @@ namespace Umbraco.Tests.PublishedContent
var publishedContent = ctx.ContentCache.GetById(1100);
Assert.That(publishedContent.IsDocumentType("base", true));
}
[Test]
public void IsDocumentType_Recursive_InvalidBaseType_ReturnsFalse()
{
@@ -73,23 +82,23 @@ namespace Umbraco.Tests.PublishedContent
if (createContentTypes)
{
var contentTypeService = ctx.Application.Services.ContentTypeService;
var baseType = new ContentType(-1) {Alias = "base", Name = "Base"};
var baseType = new ContentType(-1) { Alias = "base", Name = "Base" };
const string contentTypeAlias = "inherited";
var inheritedType = new ContentType(baseType, contentTypeAlias) {Alias = contentTypeAlias, Name = "Inherited"};
var inheritedType = new ContentType(baseType, contentTypeAlias) { Alias = contentTypeAlias, Name = "Inherited" };
contentTypeService.Save(baseType);
contentTypeService.Save(inheritedType);
createContentTypes = false;
}
#region setup xml content
xmlContent = @"<?xml version=""1.0"" encoding=""utf-8""?>
<!DOCTYPE root[
<!DOCTYPE root[
<!ELEMENT inherited ANY>
<!ATTLIST inherited id ID #REQUIRED>
]>
<root id=""-1"">
<inherited id=""1100"" parentID=""-1"" level=""1"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""1"" sortOrder=""1"" createDate=""2012-06-12T14:13:17"" updateDate=""2012-07-20T18:50:43"" nodeName=""Home"" urlName=""home"" writerName=""admin"" creatorName=""admin"" path=""-1,1046"" isDoc=""""/>
</root>";
#endregion
}
}
}
@@ -44,11 +44,11 @@ namespace Umbraco.Tests.PublishedContent
var propertyTypes = new[]
{
// AutoPublishedContentType will auto-generate other properties
new PublishedPropertyType("umbracoNaviHide", 0, Constants.PropertyEditors.TrueFalseAlias),
new PublishedPropertyType("selectedNodes", 0, "?"),
new PublishedPropertyType("umbracoUrlAlias", 0, "?"),
new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias),
new PublishedPropertyType("testRecursive", 0, "?"),
new PublishedPropertyType("umbracoNaviHide", 0, Constants.PropertyEditors.TrueFalseAlias),
new PublishedPropertyType("selectedNodes", 0, "?"),
new PublishedPropertyType("umbracoUrlAlias", 0, "?"),
new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias),
new PublishedPropertyType("testRecursive", 0, "?"),
};
var compositionAliases = new[] {"MyCompositionAlias"};
var type = new AutoPublishedContentType(0, "anything", compositionAliases, propertyTypes);
@@ -73,7 +73,7 @@ namespace Umbraco.Tests.PublishedContent
protected override string GetXmlContent(int templateId)
{
return @"<?xml version=""1.0"" encoding=""utf-8""?>
<!DOCTYPE root[
<!DOCTYPE root[
<!ELEMENT Home ANY>
<!ATTLIST Home id ID #REQUIRED>
<!ELEMENT CustomDocument ANY>
@@ -87,17 +87,17 @@ namespace Umbraco.Tests.PublishedContent
<testRecursive><![CDATA[This is the recursive val]]></testRecursive>
<Home id=""1173"" parentID=""1046"" level=""2"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""1"" createDate=""2012-07-20T18:06:45"" updateDate=""2012-07-20T19:07:31"" nodeName=""Sub1"" urlName=""sub1"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173"" isDoc="""">
<content><![CDATA[<div>This is some content</div>]]></content>
<umbracoUrlAlias><![CDATA[page2/alias, 2ndpagealias]]></umbracoUrlAlias>
<umbracoUrlAlias><![CDATA[page2/alias, 2ndpagealias]]></umbracoUrlAlias>
<testRecursive><![CDATA[]]></testRecursive>
<Home id=""1174"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""1"" createDate=""2012-07-20T18:07:54"" updateDate=""2012-07-20T19:10:27"" nodeName=""Sub2"" urlName=""sub2"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1174"" isDoc="""">
<content><![CDATA[]]></content>
<umbracoUrlAlias><![CDATA[only/one/alias]]></umbracoUrlAlias>
<creatorName><![CDATA[Custom data with same property name as the member name]]></creatorName>
<testRecursive><![CDATA[]]></testRecursive>
</Home>
</Home>
<CustomDocument id=""1177"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1234"" template=""" + templateId + @""" sortOrder=""2"" createDate=""2012-07-16T15:26:59"" updateDate=""2012-07-18T14:23:35"" nodeName=""custom sub 1"" urlName=""custom-sub-1"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1177"" isDoc="""" />
<CustomDocument id=""1178"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1234"" template=""" + templateId + @""" sortOrder=""3"" createDate=""2012-07-16T15:26:59"" updateDate=""2012-07-16T14:23:35"" nodeName=""custom sub 2"" urlName=""custom-sub-2"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1178"" isDoc="""" />
<Home id=""1176"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""4"" createDate=""2012-07-20T18:08:08"" updateDate=""2012-07-20T19:10:52"" nodeName=""Sub 3"" urlName=""sub-3"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1176"" isDoc="""">
<Home id=""1176"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""4"" createDate=""2012-07-20T18:08:08"" updateDate=""2012-07-20T19:10:52"" nodeName=""Sub 3"" urlName=""sub-3"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1176"" isDoc="""" key=""CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09"">
<content><![CDATA[]]></content>
<umbracoNaviHide>1</umbracoNaviHide>
</Home>
@@ -211,8 +211,8 @@ namespace Umbraco.Tests.PublishedContent
[PublishedContentModel("Home")]
internal class Home : PublishedContentModel
{
public Home(IPublishedContent content)
: base(content)
public Home(IPublishedContent content)
: base(content)
{}
}
@@ -659,6 +659,28 @@ namespace Umbraco.Tests.PublishedContent
Assert.AreEqual((int)1178, (int)result.Id);
}
[Test]
public void GetKey()
{
var key = Guid.Parse("CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09");
// doc is Home (a model) and GetKey unwraps and works
var doc = GetNode(1176);
Assert.IsInstanceOf<Home>(doc);
Assert.AreEqual(key, doc.GetKey());
// wrapped is PublishedContentWrapped and WithKey unwraps
var wrapped = new TestWrapped(doc);
Assert.AreEqual(key, wrapped.GetKey());
}
class TestWrapped : PublishedContentWrapped
{
public TestWrapped(IPublishedContent content)
: base(content)
{ }
}
[Test]
public void DetachedProperty1()
{
@@ -15,7 +15,7 @@ namespace Umbraco.Tests.Scheduling
[Timeout(30000)]
public class BackgroundTaskRunnerTests
{
private ILogger _logger;
private ILogger _logger;
[TestFixtureSetUp]
public void InitializeFixture()
@@ -93,7 +93,7 @@ namespace Umbraco.Tests.Scheduling
{
runner.Add(new MyTask());
});
}
}
}
[Test]
@@ -242,7 +242,7 @@ namespace Umbraco.Tests.Scheduling
}
}
[Test]
public void Create_IsNotRunning()
{
@@ -252,16 +252,18 @@ namespace Umbraco.Tests.Scheduling
}
}
[Test]
public async void Create_AutoStart_IsRunning()
{
using (var runner = new BackgroundTaskRunner<IBackgroundTask>(new BackgroundTaskRunnerOptions
{
AutoStart = true
AutoStart = true,
KeepAlive = true // else stops!
}, _logger))
{
Assert.IsTrue(runner.IsRunning); // because AutoStart is true
runner.Stop(false); // keepalive = must be stopped
await runner.StoppedAwaitable; // runner stops, within test's timeout
}
}
@@ -296,7 +298,7 @@ namespace Umbraco.Tests.Scheduling
// so that we don't have a runaway task in tests, etc - but it does NOT terminate
// the runner - it really is NOT a nice way to end a runner - it's there for tests
}
[Test]
public void Startup_KeepAlive_IsRunning()
{
@@ -359,7 +361,7 @@ namespace Umbraco.Tests.Scheduling
}
}
[Test]
public async void WaitOnRunner_Tasks()
{
@@ -504,7 +506,7 @@ namespace Umbraco.Tests.Scheduling
//wait till the thread is done
await tManager.CurrentThreadingTask;
foreach (var task in tasks)
{
Assert.IsTrue(task.Ended != default(DateTime));
@@ -516,7 +518,7 @@ namespace Umbraco.Tests.Scheduling
}
}
[Test]
public void RecurringTaskTest()
{
@@ -532,7 +534,7 @@ namespace Umbraco.Tests.Scheduling
};
var task = new MyRecurringTask(runner, 200, 500);
runner.Add(task);
Assert.IsTrue(runner.IsRunning); // waiting on delay
@@ -577,7 +579,7 @@ namespace Umbraco.Tests.Scheduling
runner.Add(task);
Assert.IsTrue(runner.IsRunning);
Thread.Sleep(5000);
Assert.IsTrue(runner.IsRunning); // still waiting for the task to release
Assert.IsTrue(runner.IsRunning); // still waiting for the task to release
Assert.IsFalse(task.HasRun);
runner.Shutdown(false, false);
await runner.StoppedAwaitable; // wait for the entire runner operation to complete
@@ -585,7 +587,7 @@ namespace Umbraco.Tests.Scheduling
}
}
[Test]
public void LatchedRecurring()
{
@@ -842,7 +844,7 @@ namespace Umbraco.Tests.Scheduling
}
public override bool PerformRun()
{
{
Thread.Sleep(_runMilliseconds);
return true; // repeat
}
@@ -976,7 +978,7 @@ namespace Umbraco.Tests.Scheduling
public virtual Task RunAsync(CancellationToken token)
{
throw new NotImplementedException();
//return Task.Delay(500);
//return Task.Delay(500);
}
public virtual bool IsAsync
@@ -269,12 +269,12 @@
var isSelected = false;
for (var i = 0; selection.length > i; i++) {
var selectedItem = selection[i];
if (item.id === selectedItem.id) {
if (item.id === selectedItem.id || item.key === selectedItem.key) {
isSelected = true;
}
}
if (!isSelected) {
selection.push({ id: item.id });
selection.push({ id: item.id, key: item.key });
item.selected = true;
}
}
@@ -1,28 +1,35 @@
angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseController", function($scope, $http, installerService){
$scope.checking = false;
$scope.invalidDbDns = false;
$scope.dbs = [
{name: 'Microsoft SQL Server Compact (SQL CE)', id: 0},
{name: 'Microsoft SQL Server', id: 1},
{ name: 'Microsoft SQL Azure', id: 3 },
{ name: 'MySQL', id: 2 },
{name: 'Custom connection string', id: -1}];
{ name: 'Microsoft SQL Server Compact (SQL CE)', id: 0},
{ name: 'Microsoft SQL Server', id: 1},
{ name: 'Microsoft SQL Azure', id: 3 },
{ name: 'MySQL', id: 2 },
{ name: 'Custom connection string', id: -1}
];
if(installerService.status.current.model.dbType === undefined){
if ( installerService.status.current.model.dbType === undefined ) {
installerService.status.current.model.dbType = 0;
}
$scope.validateAndForward = function(){
if(!$scope.checking && this.myForm.$valid){
$scope.validateAndForward = function(){
if ( !$scope.checking && this.myForm.$valid ) {
$scope.checking = true;
$scope.invalidDbDns = false;
var model = installerService.status.current.model;
$http.post(Umbraco.Sys.ServerVariables.installApiBaseUrl + "PostValidateDatabaseConnection",
model).then(function(response){
$http.post(
Umbraco.Sys.ServerVariables.installApiBaseUrl + "PostValidateDatabaseConnection",
model ).then( function( response ) {
if(response.data === "true"){
if ( response.data === "true" ) {
installerService.forward();
}else{
}
else {
$scope.invalidDbDns = true;
}
@@ -33,4 +40,4 @@ angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseControll
});
}
};
});
});
+20 -25
View File
@@ -66,8 +66,9 @@ label.control-label, .control-label {
}
.form-search .icon, .form-search .icon-search {
position: absolute;
z-index: 1;
top: 6px;
left: 4px;
left: 6px;
color: @gray-8;
}
@@ -86,6 +87,9 @@ label.control-label, .control-label {
background: @white
}
.form-search .icon-search + .search-input {
padding-left: 25px !important;
}
.form-search .search-input {
font-weight: bold;
@@ -191,7 +195,7 @@ input[type="tel"],
input[type="color"],
.uneditable-input {
display: inline-block;
height: 30px;
height: @inputHeight;
padding: 4px 6px;
margin-bottom: @baseLineHeight / 2;
font-size: @baseFontSize;
@@ -206,7 +210,6 @@ input.-full-width-input {
width: 100%;
box-sizing: border-box;
padding: 4px 6px;
height: 30px;
}
// Reset appearance properties for textual inputs and textarea
@@ -579,9 +582,9 @@ input[type="checkbox"][readonly] {
.add-on {
display: inline-block;
width: auto;
height: @baseLineHeight;
min-width: 16px;
padding: 4px 5px;
height: 22px;
min-width: 18px;
padding: 4px 6px;
font-size: @baseFontSize;
font-weight: normal;
line-height: @baseLineHeight;
@@ -653,29 +656,21 @@ input.search-query {
padding-left: 14px;
padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
margin: 0; // Remove the default margin on all inputs
.border-radius(0px);
}
/* Allow for input prepend/append in search forms */
.form-search .input-append .search-query,
.form-search .input-prepend .search-query {
.border-radius(0); // Override due to specificity
.form-search {
.input-prepend {
.btn {
.border-radius(0 @borderRadiusSmall @borderRadiusSmall 0);
}
}
.input-append {
.btn {
.border-radius(0 @borderRadiusSmall @borderRadiusSmall 0);
}
}
}
.form-search .input-append .search-query {
.border-radius(14px 0 0 14px);
}
.form-search .input-append .btn {
.border-radius(0 14px 14px 0);
}
.form-search .input-prepend .search-query {
.border-radius(0 14px 14px 0);
}
.form-search .input-prepend .btn {
.border-radius(14px 0 0 14px);
}
// HORIZONTAL & VERTICAL FORMS
// ---------------------------
+18 -3
View File
@@ -47,10 +47,25 @@ h5.-black {
background: none;
border: none
}
.datepicker td.active,
.datepicker td span.active {
background: @turquoise !important;
.bootstrap-datetimepicker-widget {
td {
&.active, span.active {
background: @turquoise !important;
}
&.today:not(.active):before {
border-bottom-color: @purple-l1 !important;
}
a[data-action] {
padding: 0 !important;
}
.timepicker-hour,
.timepicker-minute,
.timepicker-second {
margin: 8px 0;
}
}
}
.umb-datetime-picker div.info {
vertical-align: middle
}
@@ -446,8 +446,8 @@ input.umb-panel-header-name-input {
margin-bottom: 0;
font-weight: bold;
box-sizing: border-box;
height: 30px;
line-height: 30px;
height: 32px;
line-height: 32px;
width: 100%;
&:hover {
background: @white;
@@ -7,7 +7,7 @@ ul.sections {
background: @purple;
height: 100%;
width: 80px;
border-right: 1px solid @purple;
border-right: 1px solid @purple-d1;
}
ul.sections li {
@@ -22,13 +22,16 @@ ul.sections li [class^="icon-"],
ul.sections li [class*=" icon-"],
ul.sections li img.icon-section {
font-size: 30px;
line-height: 20px; /* set line-height to ensure all icons use same line-height */
display: inline-block;
margin: 1px 0 0 0;
color: @purple-l2;
-webkit-transition: all .3s linear;
-moz-transition: all .3s linear;
transition: all .3s linear;
&, &:before {
line-height: 20px !important; /* set line-height to ensure all icons use same line-height */
}
}
ul.sections:hover li [class^="icon-"],
@@ -168,7 +171,7 @@ ul.sections-tray {
width: 80px;
& > li:first-child > a {
border-top: 1px solid @purple;
border-top: 1px solid @purple-d1;
}
& > li {
@@ -190,7 +190,7 @@
@inputBorderRadius: 0;
@inputDisabledBackground: @gray-10;
@formActionsBackground: @gray-9;
@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
@inputHeight: @baseLineHeight + 12px; // base line-height + 8px vertical padding + 2px top/bottom border
@controlRequiredColor: @red;
@@ -2,13 +2,13 @@
<div class="umb-panel">
<div class="umb-panel-body no-header with-footer">
<umb-pane>
<umb-control-group label="Url">
<umb-control-group label="@general_url">
<input id="url" class="umb-editor input-block-level" type="text" ng-model="form.url" ng-keyup="$event.keyCode == 13 ? showPreview() : null" required />
<input type="button" ng-click="showPreview()" class="btn" value="Retrieve" />
<input type="button" ng-click="showPreview()" class="btn" localize="value" value="@general_retrieve" />
</umb-control-group>
<div ng-show="form.supportsDimensions">
<umb-control-group label="Size">
<umb-control-group label="@general_size">
<input type="text" ng-model="form.width" on-blur="changeSize('width')" style="width:50px"/> x <input type="text" ng-model="form.height" on-blur="changeSize('height')" style="width:50px"/>
<label for="constrain" style="display:inline"><localize key="general_constrain">Constrain</localize>:</label>
@@ -1,8 +1,8 @@
<form ng-controller="Umbraco.Overlays.EmbedOverlay as vm">
<umb-control-group label="Url">
<umb-control-group label="@general_url">
<input id="url" class="umb-editor input-block-level" type="text" style="margin-bottom: 10px;" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" required />
<input type="button" ng-click="vm.showPreview()" class="btn" value="Retrieve" />
<input type="button" ng-click="vm.showPreview()" class="btn" localize="value" value="@general_retrieve" />
</umb-control-group>
<umb-control-group>
@@ -11,15 +11,15 @@
</umb-control-group>
<div ng-show="model.embed.supportsDimensions">
<umb-control-group label="Width">
<umb-control-group label="@general_width">
<input type="text" ng-model="model.embed.width" on-blur="vm.changeSize('width')" />
</umb-control-group>
<umb-control-group label="Height">
<umb-control-group label="@general_height">
<input type="text" ng-model="model.embed.height" on-blur="vm.changeSize('height')" />
</umb-control-group>
<umb-control-group label="Constrain:">
<umb-control-group label="@general_constrain">
<input id="constrain" type="checkbox" ng-model="model.embed.constrain" />
</umb-control-group>
</div>
@@ -28,8 +28,7 @@
<div class="upload-button">
<umb-button
type="button"
key="general_upload"
label="Upload"
label-key="general_upload"
action="upload()"
disabled="disabled">
</umb-button>
@@ -10,5 +10,5 @@
<li>Find an add-on <a class="btn-link -underline href="http://our.umbraco.org/projects" target="_blank">package</a> to help you get going quickly</li>
<li>Watch our <a class="btn-link -underline href="http://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</li>
<li>Find out about our <a class="btn-link -underline href="http://umbraco.org/products" target="_blank">productivity boosting tools and commercial support</a></li>
<li>Find out about real-life <a class="btn-link -underline href="http://umbraco.org/training/training-schedule" target="_blank">training and certification</a> opportunities</li>
<li>Find out about real-life <a class="btn-link -underline href="http://umbraco.org/training/" target="_blank">training and certification</a> opportunities</li>
</ul>
@@ -10,5 +10,5 @@
<li>Ask a question in the <a class="btn-link -underline" href="https://our.umbraco.org/" target="_blank">Community Forum</a></li>
<li>Watch our <a class="btn-link -underline" href="http://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</li>
<li>Find out about our <a class="btn-link -underline" href="http://umbraco.com/products-and-support" target="_blank">productivity boosting tools and commercial support</a></li>
<li>Find out about real-life <a class="btn-link -underline" href="http://umbraco.com/products/training/schedule" target="_blank">training and certification</a> opportunities</li>
<li>Find out about real-life <a class="btn-link -underline" href="http://umbraco.com/training/" target="_blank">training and certification</a> opportunities</li>
</ul>
@@ -20,7 +20,7 @@
</div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" >
<button type="button" class="btn btn-info" ng-click="nav.hideDialog()">
<button type="button" class="btn btn-info" ng-click="nav.hideDialog(true)">
<localize key="buttons_somethingElse">Do something else</localize>
</button>
</div>
@@ -90,7 +90,7 @@
<umb-editor-sub-header>
<umb-editor-sub-header-content-left>
<a class="umb-package-details__back-link" href="" ng-click="vm.state = 'upload'">&larr; <localize key="packager_cancelAndAnother">Cancel and upload another package</localize></a>
<a class="umb-package-details__back-link" href="" ng-click="vm.state = 'upload'">&larr; <localize key="packager_cancelAndUploadAnother">Cancel and upload another package</localize></a>
</umb-editor-sub-header-content-left>
</umb-editor-sub-header>
@@ -4,7 +4,7 @@
ng-model="renderModel">
<li ng-repeat="node in renderModel">
<i class="icon icon-delete red hover-show pull-right" ng-click="remove($index)"></i>
<i class="icon icon-delete red hover-show pull-right" style="cursor:pointer;" ng-click="remove($index); $event.stopPropagation();"></i>
<i class="icon {{node.icon}} hover-hide"></i>
<a href prevent-default ng-click="openContentPicker()" >{{node.name}}</a>
@@ -20,8 +20,7 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie
getListResultsCallback = contentResource.getPagedResults;
deleteItemCallback = contentResource.deleteByKey;
getIdCallback = function (selected) {
var selectedKey = getItemKey(selected.id);
return selectedKey;
return selected.key;
};
createEditUrlCallback = function (item) {
return "/" + $scope.entityType + "/" + $scope.entityType + "/edit/" + item.key + "?page=" + $scope.options.pageNumber + "&listName=" + $scope.contentId;
@@ -127,7 +127,7 @@
var i2 = parseFloat($scope.model.config.initVal2);
sliderVal = [
isNaN(i1) ? $scope.model.config.minVal : (i1 >= $scope.model.config.minVal ? i1 : $scope.model.config.minVal),
isNaN(i2) ? $scope.model.config.maxVal : (i2 > i1 ? (i2 <= $scope.model.config.maxVal ? i2 : $scope.model.config.maxVal) : $scope.model.config.maxVal)
isNaN(i2) ? $scope.model.config.maxVal : (i2 >= i1 ? (i2 <= $scope.model.config.maxVal ? i2 : $scope.model.config.maxVal) : $scope.model.config.maxVal)
];
}
else {
@@ -0,0 +1,26 @@
function textAreaController($rootScope, $scope, $log) {
$scope.model.maxlength = false;
if($scope.model.config.maxChars) {
$scope.model.maxlength = true;
if($scope.model.value == undefined) {
$scope.model.count = ($scope.model.config.maxChars * 1);
} else {
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
}
}
$scope.model.change = function() {
if($scope.model.config.maxChars) {
if($scope.model.value == undefined) {
$scope.model.count = ($scope.model.config.maxChars * 1);
} else {
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
}
if($scope.model.count < 0) {
$scope.model.value = $scope.model.value.substring(0, ($scope.model.config.maxChars * 1));
$scope.model.count = 0;
}
}
}
}
angular.module('umbraco').controller("Umbraco.PropertyEditors.textAreaController", textAreaController);
@@ -1,3 +1,9 @@
<textarea ng-model="model.value" id="{{model.alias}}" name="textarea" rows="10" class="umb-editor umb-textarea textstring" val-server="value" ng-required="model.validation.mandatory"></textarea>
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="valServer"></span>
<div ng-controller="Umbraco.PropertyEditors.textAreaController">
<textarea ng-model="model.value" id="{{model.alias}}" name="textarea" rows="10" class="umb-editor umb-textarea textstring" val-server="value" ng-keyup="model.change()"></textarea>
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="valServer"></span>
<div class="help" ng-if="model.maxlength">
<strong>{{model.count}}</strong>
<localize key="textbox_characters_left">characters left</localize>
</div>
</div>
@@ -0,0 +1,26 @@
function textboxController($rootScope, $scope, $log) {
$scope.model.maxlength = false;
if($scope.model.config.maxChars) {
$scope.model.maxlength = true;
if($scope.model.value == undefined) {
$scope.model.count = ($scope.model.config.maxChars * 1);
} else {
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
}
}
$scope.model.change = function() {
if($scope.model.config.maxChars) {
if($scope.model.value == undefined) {
$scope.model.count = ($scope.model.config.maxChars * 1);
} else {
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
}
if($scope.model.count < 0) {
$scope.model.value = $scope.model.value.substring(0, ($scope.model.config.maxChars * 1));
$scope.model.count = 0;
}
}
}
}
angular.module('umbraco').controller("Umbraco.PropertyEditors.textboxController", textboxController);
@@ -1,9 +1,14 @@
<div>
<div ng-controller="Umbraco.PropertyEditors.textboxController">
<input type="text" name="textbox" ng-model="model.value" id="{{model.alias}}"
class="umb-editor umb-textstring textstring"
val-server="value"
ng-required="model.validation.mandatory"
ng-trim="false" />
ng-trim="false"
ng-keyup="model.change()" />
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="valServer"></span>
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
</div>
<div class="help" ng-if="model.maxlength">
<strong>{{model.count}}</strong>
<localize key="textbox_characters_left">characters left</localize>
</div>
</div>
+3 -2
View File
@@ -568,6 +568,7 @@
<Content Include="Config\Lang\zh-CN.user.xml" />
<Content Include="Umbraco\Config\Lang\cs.xml" />
<Content Include="Umbraco\ClientRedirect.aspx" />
<Content Include="Umbraco\Config\Lang\tr.xml" />
<Content Include="Umbraco\Config\Lang\zh_tw.xml" />
<Content Include="Umbraco\create.aspx" />
<Content Include="Umbraco\Developer\Packages\installer.aspx" />
@@ -2378,9 +2379,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>7640</DevelopmentServerPort>
<DevelopmentServerPort>7650</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:7640</IISUrl>
<IISUrl>http://localhost:7650</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
@@ -1291,4 +1291,7 @@ Mange hilsner fra Umbraco robotten
<key alias="enabledConfirm">URL tracker er nu slået fra.</key>
<key alias="enableError">Der opstod en fejl under forsøget på at slå URL trackeren til, der findes mere information i logfilen.</key>
</area>
<area alias="textbox">
<key alias="characters_left">Karakterer tilbage</key>
</area>
</language>
@@ -514,6 +514,7 @@
<key alias="rename">Rename</key>
<key alias="renew">Renew</key>
<key alias="required" version="7.0">Required</key>
<key alias="retrieve">Retrieve</key>
<key alias="retry">Retry</key>
<key alias="rights">Permissions</key>
<key alias="search">Search</key>
@@ -1546,8 +1547,10 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
<key alias="httpsCheckValidCertificate">Your website's certificate is valid.</key>
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
<key alias="httpsCheckExpiredCertificate">Your website's SSL certificate has expired.</key>
<key alias="httpsCheckExpiringCertificate">Your website's SSL certificate is expiring in %0% days.</key>
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
<key alias="httpsCheckConfigurationRectifyNotPossible">The appSetting 'umbracoUseSSL' is set to 'false' in your web.config file. Once you access this site using the HTTPS scheme, that should be set to 'true'.</key>
@@ -1627,4 +1630,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<area alias="emptyStates">
<key alias="emptyDictionaryTree">No Dictionary items to choose from</key>
</area>
</language>
<area alias="textbox">
<key alias="characters_left">characters left</key>
</area>
</language>
@@ -515,6 +515,7 @@
<key alias="rename">Rename</key>
<key alias="renew">Renew</key>
<key alias="required" version="7.0">Required</key>
<key alias="retrieve">Retrieve</key>
<key alias="retry">Retry</key>
<key alias="rights">Permissions</key>
<key alias="search">Search</key>
@@ -1542,8 +1543,10 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
<key alias="httpsCheckValidCertificate">Your website's certificate is valid.</key>
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
<key alias="httpsCheckExpiredCertificate">Your website's SSL certificate has expired.</key>
<key alias="httpsCheckExpiringCertificate">Your website's SSL certificate is expiring in %0% days.</key>
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
<key alias="httpsCheckConfigurationRectifyNotPossible">The appSetting 'umbracoUseSSL' is set to 'false' in your web.config file. Once you access this site using the HTTPS scheme, that should be set to 'true'.</key>
@@ -1623,4 +1626,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<area alias="emptyStates">
<key alias="emptyDictionaryTree">No Dictionary items to choose from</key>
</area>
<area alias="textbox">
<key alias="characters_left">characters left</key>
</area>
</language>
+85 -5
View File
@@ -45,7 +45,7 @@
<key alias="permissionDenied">Brak odpowiednich uprawnień</key>
<key alias="addNew">Dodaj nową domenę</key>
<key alias="remove">Usuń domenę</key>
<key alias="invalidNode">Niepoprawny węzeł<./key>
<key alias="invalidNode">Niepoprawny węzeł.</key>
<key alias="invalidDomain">Niepoprawny format domeny.</key>
<key alias="duplicateDomain">Domena została już przydzielona.</key>
<key alias="language">Język</key>
@@ -177,6 +177,8 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
<key alias="target" version="7.0">Cel</key>
<key alias="scheduledPublishServerTime">Oznacza to następującą godzinę na serwerze:</key>
<key alias="scheduledPublishDocumentation"><![CDATA[<a href="https://our.umbraco.org/documentation/Getting-Started/Data/Scheduled-Publishing/#timezones" target="_blank">Co to oznacza?</a>]]></key>
<key alias="addTextBox">Dodaj kolejne pole tekstowe</key>
<key alias="removeTextBox">Usuń te pole tekstowe</key>
</area>
<area alias="media">
<key alias="clickToUpload">Kliknij, aby załadować plik</key>
@@ -304,6 +306,7 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
<key alias="linkToPage">Link do strony</key>
<key alias="openInNewWindow">Otwórz zlinkowany dokument w nowym oknie lub zakładce</key>
<key alias="linkToMedia">Link do mediów</key>
<key alias="linkToFile">Link do plików</key>
<key alias="selectMedia">Wybierz media</key>
<key alias="selectIcon">Wybierz ikonę</key>
<key alias="selectItem">Wybierz element</key>
@@ -323,6 +326,7 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
<key alias="unLinkYour">Odlinkuj swój</key>
<key alias="account">konto</key>
<key alias="selectEditor">Wybierz edytora</key>
<key alias="selectSnippet">Wybierz snippet</key>
</area>
<area alias="dictionaryItem">
<key alias="description"><![CDATA[
@@ -380,6 +384,13 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="rteRelatedStylesheets">Powiązane arkusze stylów</key>
<key alias="rteShowLabel">Pokaż etykietę</key>
<key alias="rteWidthAndHeight">Szerokość i wysokość</key>
<key alias="allPropTypes">Wszystkie typy właściwości &amp; dane właściwości</key>
<key alias="willBeDeleted">używające tego typu danych zostaną usunięte na zawsze, potwierdź, że chcesz je także usunąć</key>
<key alias="yesDelete">Tak, usuń</key>
<key alias="andAllRelated">i wszystkie typy właściwości &amp; dane właściwości używające tego typu danych</key>
<key alias="selectFolder">Wybierz folder do przeniesienia</key>
<key alias="inTheTree">do w strukturze drzewa poniżej</key>
<key alias="wasMoved">został przeniesiony poniżej</key>
</area>
<area alias="errorHandling">
<key alias="errorButDataWasSaved">Dane zostały zapisane, lecz wystąpiły błędy, które musisz poprawić przed publikacją strony:</key>
@@ -438,6 +449,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="closewindow">Zamknij okno</key>
<key alias="comment">Komentarz</key>
<key alias="confirm">Potwierdzenie</key>
<key alias="constrain">Zachowaj</key>
<key alias="constrainProportions">Zachowaj proporcje</key>
<key alias="continue">Kontynuuj</key>
<key alias="copy">Kopiuj</key>
@@ -449,6 +461,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="deleted">Usunięto</key>
<key alias="deleting">Usuwanie...</key>
<key alias="design">Wygląd</key>
<key alias="dictionary">Słownik</key>
<key alias="dimensions">Rozmiary</key>
<key alias="down">Dół</key>
<key alias="download">Pobierz</key>
@@ -458,6 +471,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="email">Email</key>
<key alias="error">Błąd</key>
<key alias="findDocument">Znajdź</key>
<key alias="first">Pierwszy</key>
<key alias="height">Wysokość</key>
<key alias="help">Pomoc</key>
<key alias="icon">Ikona</key>
@@ -468,7 +482,8 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="invalid">Nieprawidłowe</key>
<key alias="justify">Wyrównaj</key>
<key alias="language">Język</key>
<key alias="layout">układ</key>
<key alias="last">Ostatni</key>
<key alias="layout">Układ</key>
<key alias="loading">Ładowanie</key>
<key alias="locked">Zablokowany</key>
<key alias="login">Zaloguj</key>
@@ -495,9 +510,11 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="reciept">E-mail, aby otrzymywać dane z formularzy</key>
<key alias="recycleBin">Kosz</key>
<key alias="remaining">Pozostało</key>
<key alias="remove">Usuń</key>
<key alias="rename">Zmień nazwę</key>
<key alias="renew">Odnów</key>
<key alias="required" version="7.0">Wymagany</key>
<key alias="retrieve">Odzyskaj</key>
<key alias="retry">Ponów próbę</key>
<key alias="rights">Uprawnienia</key>
<key alias="search">Szukaj</key>
@@ -802,10 +819,43 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
<key alias="notifications">Powiadomienie</key>
</area>
<area alias="packager">
<key alias="chooseLocalPackageText"><!CDATA[
<key alias="chooseLocalPackageText"><![CDATA[
Wskaż pakiet z Twojego komputera, poprzez kliknięcie na przycisk "Przeglądaj"<br />
i wskaż gdzie jest zapisany. Pakiety Umbraco przeważnie posiadają rozszerzenie ".umb" lub ".zip".
]]></key>
<key alias="dropHere">Upuść, aby załadować</key>
<key alias="orClickHereToUpload">lub kliknij tutaj, aby wybrać pliki</key>
<key alias="uploadPackage">Załaduj pakiet</key>
<key alias="localPackageDescription">Zainstaluj lokalny pakiet poprzez wybranie go ze swojego komputera. Instaluj jedynie te pakiety, z zaufanych i znanych Tobie źródeł</key>
<key alias="uploadAnother">Załaduj kolejny pakiet</key>
<key alias="cancelAndUploadAnother">Anuluj i załaduj kolejny pakiet</key>
<key alias="packageLicense">Licencja</key>
<key alias="accept">Zgadzam się</key>
<key alias="termsOfUse">zasady użytkowania</key>
<key alias="packageInstall">Zainstaluj pakiet</key>
<key alias="installFinish">Zakończ</key>
<key alias="installedPackages">Zainstalowane pakiety</key>
<key alias="noPackages">Nie masz żadnych zainstalowanych pakietów</key>
<key alias="noPackagesDescription"><![CDATA[Nie masz żadnych zainstalowanych pakietów. Zainstaluj lokalny pakiet poprzez wybranie go ze swojego komputera lub przeglądaj dostępne pakiety, używając ikony <strong>'Pakiety'</strong> w prawym górnym rogu ekranu]]></key>
<key alias="packageSearch">Szukaj pakietów</key>
<key alias="packageSearchResults">Wyniki dla</key>
<key alias="packageNoResults">Nie mogliśmy znaleźć niczego dla</key>
<key alias="packageNoResultsDescription">Spróbuj wyszukać kolejny pakiet lub przeszukaj kategorie pakietów</key>
<key alias="packagesPopular">Popularne</key>
<key alias="packagesNew">Nowe wydania</key>
<key alias="packageHas">ma</key>
<key alias="packageKarmaPoints">punktów karmy</key>
<key alias="packageInfo">Informacja</key>
<key alias="packageOwner">Właściciel</key>
<key alias="packageContrib">Kontrybutor</key>
<key alias="packageCreated">Utworzone</key>
<key alias="packageCurrentVersion">Obecna wersja</key>
<key alias="packageNetVersion">wersja .NET</key>
<key alias="packageDownloads">Pobrania</key>
<key alias="packageLikes">Polubienia</key>
<key alias="packageCompatibility">Zgodność</key>
<key alias="packageCompatibilityDescription">Według raportów członków społeczności, ten pakiet jest zgodny z następującymi wersjami Umbraco. Pełna zgodność nie może być zagwarantowana dla wersji zaraportowanych poniżej 100%</key>
<key alias="packageExternalSources">Zewnętrzne źródła</key>
<key alias="packageAuthor">Autor</key>
<key alias="packageDemonstration">Demonstracja</key>
<key alias="packageDocumentation">Dokumentacja</key>
@@ -841,6 +891,7 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
<key alias="installStateRestarting">Restartowanie, proszę czekać...</key>
<key alias="installStateComplete">Wszystko skończone, Twoja przeglądarka się teraz odświeży, proszę czekać...</key>
<key alias="installStateCompleted">Proszę kliknąć Zakończ, aby zakończyć instalację i przeładować stronę.</key>
<key alias="installStateUploading">Wgrywanie pakietu...</key>
</area>
<area alias="paste">
<key alias="doNothing">Wklej z zachowaniem formatowania (Nie zalecane)</key>
@@ -908,6 +959,10 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
</area>
<area alias="imagecropper">
<key alias="reset">Resetuj</key>
<key alias="defineCrop">Zdefiniuj przycięcie</key>
<key alias="defineCropDescription">Ustaw alias dla przycięcia, a także jego domyślną szerokość i długość</key>
<key alias="saveCrop">Zapisz przycięcie</key>
<key alias="addCrop">Dodaj nowe przycięcie</key>
</area>
<area alias="rollback">
<key alias="currentVersion">Aktualna wersja</key>
@@ -1116,6 +1171,7 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
<key alias="queryBuilder">Konstruktor zapytań</key>
<key alias="buildQuery">Zbuduj zapytanie</key>
<key alias="itemsReturned">Element zwrócony, w</key>
<key alias="iWant">Chcę</key>
@@ -1261,25 +1317,36 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
</area>
<area alias="templateEditor">
<key alias="addFallbackField">Dodaj pole zastępcze</key>
<key alias="fallbackField">Pole zastępcze</key>
<key alias="addDefaultValue">Dodaj domyślną wartość</key>
<key alias="defaultValue">Domyślna wartość</key>
<key alias="alternativeField">Pole alternatywne</key>
<key alias="alternativeText">Tekst alternatywny</key>
<key alias="casing">Wielkość liter</key>
<key alias="encoding">Kodowanie</key>
<key alias="chooseField">Wybierz pole</key>
<key alias="convertLineBreaks">Konwertuj złamania wiersza</key>
<key alias="convertLineBreaksDescription">Tak, konwertuj złamania wiersza</key>
<key alias="convertLineBreaksHelp">Zamienia złamania wiersza na html-tag &amp;lt;br&amp;gt;</key>
<key alias="customFields">Niestandardowe Pola</key>
<key alias="dateOnly">Tak, tylko data</key>
<key alias="formatAndEncoding">Format i kodowanie</key>
<key alias="formatAsDate">Formatuj jako datę</key>
<key alias="formatAsDateDescr">Formatuj wartość jako datę lub jako datę i czas, zgodnie z aktywną kulturą</key>
<key alias="htmlEncode">Kodowanie HTML</key>
<key alias="htmlEncodeHelp">Zamienia znaki specjalne na ich odpowiedniki HTML</key>
<key alias="insertedAfter">Zostanie wstawione za wartością pola</key>
<key alias="insertedBefore">Zostanie wstawione przed wartością pola</key>
<key alias="lowercase">małe znaki</key>
<key alias="modifyOutput">Modyfikuj dane wyjściowe</key>
<key alias="none">Nic</key>
<key alias="outputSample">Próbka danych wyjściowych</key>
<key alias="postContent">Wstaw za polem</key>
<key alias="preContent">Wstaw przed polem</key>
<key alias="recursive">Rekurencyjne</key>
<key alias="recursiveDescr">Tak, spraw, aby było to rekurencyjne</key>
<key alias="separator">Separator</key>
<key alias="standardFields">Standardowe Pola</key>
<key alias="uppercase">Wielkie litery</key>
<key alias="urlEncode">Kodowanie URL</key>
@@ -1429,6 +1496,14 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
<key alias="validateAsUrl">Waliduj jako URL</key>
<key alias="enterCustomValidation">...lub wpisz niestandardową walidację</key>
<key alias="fieldIsMandatory">Pole jest wymagane</key>
<key alias="validationRegExp">Wprowadź wyrażenie regularne</key>
<key alias="minCount">Musisz dodać przynajmniej</key>
<key alias="maxCount">Możesz mieć jedynie</key>
<key alias="items">elementy</key>
<key alias="itemsSelected">wybrane elementy</key>
<key alias="invalidDate">Niepoprawna data</key>
<key alias="invalidNumber">To nie jest numer</key>
<key alias="invalidEmail">Niepoprawny e-mail</key>
</area>
<area alias="healthcheck">
<!-- Następujące klucze spowodują, że tokeny zostaną przekazane:
@@ -1472,8 +1547,10 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
<key alias="xmlDataIntegrityCheckMedia">Media - Suma XML: %0%, Suma: %1%, Suma niepoprawnych: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Zawartość - Suma XML: %0%, Suma opublikowanych: %1%, Suma niepoprawnych: %2%</key>
<key alias="httpsCheckValidCertificate">Certifikat Twojej strony został oznaczony jako poprawny.</key>
<key alias="httpsCheckValidCertificate">Certifikat Twojej strony jest poprawny.</key>
<key alias="httpsCheckInvalidCertificate">Błąd walidacji certyfikatu: '%0%'</key>
<key alias="httpsCheckExpiredCertificate">Certyfikat SSL Twojej strony wygasł.</key>
<key alias="httpsCheckExpiringCertificate">Certyfikat SSL Twojej strony wygaśnie za %0% dni.</key>
<key alias="httpsCheckInvalidUrl">Błąd pingowania adresu URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">Oglądasz %0% stronę używając HTTPS.</key>
<key alias="httpsCheckConfigurationRectifyNotPossible">appSetting 'umbracoUseSSL' został ustawiony na 'false' w Twoim pliku web.config. Po uzyskaniu dostępu do strony, używając HTTPS, powinieneś go ustawić na 'true'.</key>
@@ -1552,5 +1629,8 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
</area>
<area alias="emptyStates">
<key alias="emptyDictionaryTree">Brak elementów słownika do wyboru</key>
</area>
</area>
<area alias="textbox">
<key alias="characters_left">pozostało znaków</key>
</area>
</language>
+12 -4
View File
@@ -356,7 +356,8 @@
<key alias="theFriendliestCommunity">Самое дружелюбное сообщество</key>
<key alias="linkToPage">Ссылка на страницу</key>
<key alias="openInNewWindow">Открывать ссылку в новом окне или вкладке браузера</key>
<key alias="linkToMedia">Ссылка на медиа-файл</key>
<key alias="linkToMedia">Ссылка на медиа-элемент</key>
<key alias="linkToFile">Ссылка на файл</key>
<key alias="selectMedia">Выбрать медиа</key>
<key alias="selectIcon">Выбрать значок</key>
<key alias="selectItem">Выбрать элемент</key>
@@ -366,7 +367,7 @@
<key alias="selectMember">Выбрать участника</key>
<key alias="selectMemberGroup">Выбрать группу участников</key>
<key alias="noMacroParams">Это макрос без параметров</key>
<key alias="noMacros">Нет макросов доступных для вставки в редактор</key>
<key alias="noMacros">Нет макросов, доступных для вставки в редактор</key>
<key alias="externalLoginProviders">Провайдеры аутентификации</key>
<key alias="exceptionDetail">Подробное сообщение об ошибке</key>
<key alias="stacktrace">Трассировка стека</key>
@@ -487,6 +488,7 @@
<key alias="closewindow">Закрыть окно</key>
<key alias="comment">Примечание</key>
<key alias="confirm">Подтвердить</key>
<key alias="constrain">Сохранять пропорции</key>
<key alias="constrainProportions">Сохранять пропорции</key>
<key alias="continue">Далее</key>
<key alias="copy">Копировать</key>
@@ -554,6 +556,7 @@
<key alias="rename">Переименовать</key>
<key alias="renew">Обновить</key>
<key alias="required" version="7.0">Обязательное</key>
<key alias="retrieve">Получить</key>
<key alias="retry">Повторить</key>
<key alias="rights">Разрешения</key>
<key alias="search">Поиск</key>
@@ -571,7 +574,7 @@
<key alias="update">Обновить</key>
<key alias="upgrade">Обновление</key>
<key alias="upload">Загрузить</key>
<key alias="url">URL</key>
<key alias="url">Интернет-ссылка</key>
<key alias="user">Пользователь</key>
<key alias="username">Имя пользователя</key>
<key alias="value">Значение</key>
@@ -990,7 +993,7 @@
<key alias="dropHere">Перетащите сюда</key>
<key alias="orClickHereToUpload">или нажмите здесь для выбора файла пакета</key>
<key alias="uploadPackage">Загрузить пакет</key>
<key alias="localPackageDescr">Установите локальный пакет из файла, расположенного на Вашем компьютере. Остерегайтесь устанавливать пакеты из непроверенных источников!</key>
<key alias="localPackageDescription">Установите локальный пакет из файла, расположенного на Вашем компьютере. Остерегайтесь устанавливать пакеты из непроверенных источников!</key>
<key alias="uploadAnother">Загрузить еще один пакет</key>
<key alias="cancelAndUploadAnother">Отменить и загрузить другой пакет</key>
<key alias="packageLicense">Лицензия</key>
@@ -1422,12 +1425,15 @@
</area>
<area alias="templateEditor">
<key alias="addFallbackField">Добавить поле замены</key>
<key alias="fallbackField">Поле замены</key>
<key alias="addDefaultValue">Добавить значение по-умолчанию</key>
<key alias="defaultValue">Значение по-умолчанию</key>
<key alias="alternativeField">Альтернативное поле</key>
<key alias="alternativeText">Текст по-умолчанию</key>
<key alias="casing">Регистр</key>
<key alias="chooseField">Выбрать поле</key>
<key alias="convertLineBreaks">Преобразовать переводы строк</key>
<key alias="convertLineBreaksDescription">Да, преобразовывать</key>
<key alias="convertLineBreaksHelp">Заменяет переводы строк на тэг html 'br'</key>
<key alias="customFields">Пользовательские</key>
<key alias="dateOnly">Только дата</key>
@@ -1526,6 +1532,8 @@
<key alias="documentTypes">Типы документов</key>
<key alias="packager">Пакеты дополнений</key>
<key alias="packages">Пакеты дополнений</key>
<key alias="partialViews">Частичные представления</key>
<key alias="partialViewMacros">Файлы макросов</key>
<key alias="python">Скрипты Python</key>
<key alias="relationTypes">Типы связей</key>
<key alias="repositories">Установить из репозитория</key>
@@ -113,7 +113,7 @@ namespace Umbraco.Web.Cache
}
TagsValueConverter.ClearCaches();
MultipleMediaPickerPropertyConverter.ClearCaches();
LegacyMediaPickerPropertyConverter.ClearCaches();
SliderValueConverter.ClearCaches();
MediaPickerPropertyConverter.ClearCaches();
@@ -230,7 +230,7 @@ namespace Umbraco.Web.Editors
basic.Description = TranslateItem(basic.Description);
}
return basics;
return basics.OrderBy(x => x.Name);
}
/// <summary>
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using Umbraco.Core.IO;
using Umbraco.Core.Services;
@@ -53,7 +54,7 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
private HealthCheckStatus CheckForValidCertificate()
{
var message = string.Empty;
var success = false;
StatusResultType result;
var url = HealthCheckContext.HttpContext.Request.Url;
// Attempt to access the site over HTTPS to see if it HTTPS is supported
@@ -65,7 +66,37 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
try
{
var response = (HttpWebResponse)request.GetResponse();
success = response.StatusCode == HttpStatusCode.OK;
if (response.StatusCode == HttpStatusCode.OK)
{
// Got a valid response, check now for if certificate expiring within 14 days
// Hat-tip: https://stackoverflow.com/a/15343898/489433
const int NumberOfDaysForExpiryWarning = 14;
var cert = request.ServicePoint.Certificate;
var cert2 = new X509Certificate2(cert);
var expirationDate = cert2.NotAfter;
var daysToExpiry = (int)Math.Floor((cert2.NotAfter - DateTime.Now).TotalDays);
if (daysToExpiry <= 0)
{
result = StatusResultType.Error;
message = _textService.Localize("healthcheck/httpsCheckExpiredCertificate");
}
else if (daysToExpiry < NumberOfDaysForExpiryWarning)
{
result = StatusResultType.Warning;
message = _textService.Localize("healthcheck/httpsCheckExpiringCertificate", new[] { daysToExpiry.ToString() });
}
else
{
result = StatusResultType.Success;
message = _textService.Localize("healthcheck/httpsCheckValidCertificate");
}
}
else
{
result = StatusResultType.Error;
message = _textService.Localize("healthcheck/httpsCheckInvalidUrl", new[] { address, response.StatusDescription });
}
}
catch (Exception ex)
{
@@ -80,17 +111,16 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
{
message = _textService.Localize("healthcheck/httpsCheckInvalidUrl", new[] { address, ex.Message });
}
result = StatusResultType.Error;
}
var actions = new List<HealthCheckAction>();
if (success)
message = _textService.Localize("healthcheck/httpsCheckValidCertificate");
return
new HealthCheckStatus(message)
{
ResultType = success ? StatusResultType.Success : StatusResultType.Error,
ResultType = result,
Actions = actions
};
}
+2 -1
View File
@@ -10,7 +10,8 @@ namespace Umbraco.Web.Models
public string Username { get; set; }
[Required]
[DataMember(Name = "password", IsRequired = true)]
[DataMember(Name = "password", IsRequired = true)]
[StringLength(maximumLength:256)]
public string Password { get; set; }
}
@@ -165,12 +165,20 @@ namespace Umbraco.Web.Models.Mapping
var listViewTab = new Tab<ContentPropertyDisplay>();
listViewTab.Alias = Constants.Conventions.PropertyGroups.ListViewGroupName;
listViewTab.Label = localizedTextService.Localize("content/childItems");
listViewTab.Id = 25;
listViewTab.Id = display.Tabs.Count() + 1;
listViewTab.IsActive = true;
var listViewConfig = editor.PreValueEditor.ConvertDbToEditor(editor.DefaultPreValues, preVals);
//add the entity type to the config
listViewConfig["entityType"] = entityType;
listViewConfig["entityType"] = entityType;
//Override Tab Label if tabName is provided
if (listViewConfig.ContainsKey("tabName"))
{
var configTabName = listViewConfig["tabName"];
if (configTabName != null && string.IsNullOrWhiteSpace(configTabName.ToString()) == false)
listViewTab.Label = configTabName.ToString();
}
var listViewProperties = new List<ContentPropertyDisplay>();
listViewProperties.Add(new ContentPropertyDisplay
@@ -50,7 +50,10 @@ namespace Umbraco.Web.PropertyEditors
}
internal class ListViewPreValueEditor : PreValueEditor
{
{
[PreValueField("tabName", "Tab Name", "textstring", Description = "The name of the listview tab (default if empty: 'Child Items')")]
public int TabName { get; set; }
[PreValueField("displayAtTabNumber", "Display At Tab Number", "number", Description = "Which tab position that the list of child items will be displayed")]
public int DisplayAtTabNumber { get; set; }
@@ -6,5 +6,15 @@ namespace Umbraco.Web.PropertyEditors
[PropertyEditor(Constants.PropertyEditors.TextboxMultipleAlias, "Textarea", "textarea", IsParameterEditor = true, ValueType = PropertyEditorValueTypes.Text, Icon="icon-application-window-alt")]
public class TextAreaPropertyEditor : PropertyEditor
{
protected override PreValueEditor CreatePreValueEditor()
{
return new TextAreaPreValueEditor();
}
internal class TextAreaPreValueEditor : PreValueEditor
{
[PreValueField("maxChars", "Maximum allowed characters", "number", Description = "If empty - no character limit")]
public bool MaxChars { get; set; }
}
}
}
@@ -12,6 +12,19 @@ namespace Umbraco.Web.PropertyEditors
{
[PropertyEditor(Constants.PropertyEditors.TextboxAlias, "Textbox", "textbox", IsParameterEditor = true, Group = "Common")]
public class TextboxPropertyEditor : PropertyEditor
{
{
protected override PreValueEditor CreatePreValueEditor()
{
return new TextboxPreValueEditor();
}
internal class TextboxPreValueEditor : PreValueEditor
{
[PreValueField("maxChars", "Maximum allowed characters", "number", Description = "If empty - no character limit")]
public bool MaxChars { get; set; }
}
}
}
@@ -1,5 +1,5 @@
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MultipleMediaPickerPropertyConverter.cs" company="Umbraco">
// <copyright file="LegacyMediaPickerPropertyConverter.cs" company="Umbraco">
// Umbraco
// </copyright>
// <summary>
@@ -24,20 +24,20 @@ using Umbraco.Core.Services;
namespace Umbraco.Web.PropertyEditors.ValueConverters
{
/// <summary>
/// The multiple media picker property value converter.
/// The multiple media picker and double legacy media picker property value converter, should be deleted for v8
/// </summary>
[DefaultPropertyValueConverter(typeof(MustBeStringValueConverter))]
public class MultipleMediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta
public class LegacyMediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta
{
private readonly IDataTypeService _dataTypeService;
//TODO: Remove this ctor in v8 since the other one will use IoC
public MultipleMediaPickerPropertyConverter()
public LegacyMediaPickerPropertyConverter()
: this(ApplicationContext.Current.Services.DataTypeService)
{
}
public MultipleMediaPickerPropertyConverter(IDataTypeService dataTypeService)
public LegacyMediaPickerPropertyConverter(IDataTypeService dataTypeService)
{
if (dataTypeService == null) throw new ArgumentNullException("dataTypeService");
_dataTypeService = dataTypeService;
@@ -54,10 +54,17 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
/// </returns>
public override bool IsConverter(PublishedPropertyType propertyType)
{
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters)
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters && propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MultipleMediaPickerAlias))
{
return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MultipleMediaPickerAlias);
return true;
}
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters && propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPickerAlias))
{
// this is the double legacy media picker, it can pick only single media items
return true;
}
return false;
}
@@ -109,7 +116,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
ApplicationContext.Current.Services.DataTypeService.GetDataTypeDefinitionById(
propertyType.DataTypeId).Name);
LogHelper.Warn<MultipleMediaPickerPropertyConverter>(error);
LogHelper.Warn<LegacyMediaPickerPropertyConverter>(error);
throw new Exception(error);
}
}
@@ -264,4 +271,4 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
Storages.Clear();
}
}
}
}
@@ -126,10 +126,6 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
if (propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPicker2Alias))
return true;
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters)
{
return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPickerAlias);
}
return false;
}
+27 -28
View File
@@ -10,6 +10,7 @@ using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
using Umbraco.Web.Models;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Web.Routing;
using ContentType = umbraco.cms.businesslogic.ContentType;
@@ -24,8 +25,24 @@ namespace Umbraco.Web
public static Guid GetKey(this IPublishedContent content)
{
// fast
var contentWithKey = content as IPublishedContentWithKey;
return contentWithKey == null ? Guid.Empty : contentWithKey.Key;
if (contentWithKey != null) return contentWithKey.Key;
// try to unwrap (models...)
var contentWrapped = content as PublishedContentWrapped;
while (contentWrapped != null)
{
content = contentWrapped.Unwrap();
contentWrapped = content as PublishedContentWrapped;
}
// again
contentWithKey = content as IPublishedContentWithKey;
if (contentWithKey != null) return contentWithKey.Key;
LogHelper.Debug(typeof(PublishedContentExtensions), string.Format("Could not get key for IPublishedContent with id {0} of type {1}.", content.Id, content.GetType().FullName));
return Guid.Empty;
}
#endregion
@@ -622,27 +639,9 @@ namespace Umbraco.Web
/// <param name="recursive">When true, recurses up the content type tree to check inheritance; when false just calls IsDocumentType(this IPublishedContent content, string docTypeAlias).</param>
/// <returns>True if the content is of the specified content type or a derived content type; otherwise false.</returns>
public static bool IsDocumentType(this IPublishedContent content, string docTypeAlias, bool recursive)
{
if (content.IsDocumentType(docTypeAlias))
return true;
if (recursive)
return IsDocumentTypeRecursive(content, docTypeAlias);
return false;
}
private static bool IsDocumentTypeRecursive(IPublishedContent content, string docTypeAlias)
{
var contentTypeService = UmbracoContext.Current.Application.Services.ContentTypeService;
var type = contentTypeService.GetContentType(content.DocumentTypeAlias);
while (type != null && type.ParentId > 0)
{
type = contentTypeService.GetContentType(type.ParentId);
if (type.Alias.InvariantEquals(docTypeAlias))
return true;
}
return false;
}
{
return content.DocumentTypeAlias.InvariantEquals(docTypeAlias) || (recursive && content.IsComposedOf(docTypeAlias));
}
public static bool IsNull(this IPublishedContent content, string alias, bool recurse)
{
@@ -912,14 +911,14 @@ namespace Umbraco.Web
#region Axes: ancestors, ancestors-or-self
// as per XPath 1.0 specs §2.2,
// as per XPath 1.0 specs §2.2,
// - the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist
// of the parent of context node and the parent's parent and so on; thus, the ancestor axis will always
// include the root node, unless the context node is the root node.
// - the ancestor-or-self axis contains the context node and the ancestors of the context node; thus,
// the ancestor axis will always include the root node.
//
// as per XPath 2.0 specs §3.2.1.1,
// as per XPath 2.0 specs §3.2.1.1,
// - the ancestor axis is defined as the transitive closure of the parent axis; it contains the ancestors
// of the context node (the parent, the parent of the parent, and so on) - The ancestor axis includes the
// root node of the tree in which the context node is found, unless the context node is the root node.
@@ -929,7 +928,7 @@ namespace Umbraco.Web
// the ancestor and ancestor-or-self axis are reverse axes ie they contain the context node or nodes that
// are before the context node in document order.
//
// document order is defined by §2.4.1 as:
// document order is defined by §2.4.1 as:
// - the root node is the first node.
// - every node occurs before all of its children and descendants.
// - the relative order of siblings is the order in which they occur in the children property of their parent node.
@@ -1240,12 +1239,12 @@ namespace Umbraco.Web
}
// as per XPath 1.0 specs §2.2,
// as per XPath 1.0 specs §2.2,
// - the descendant axis contains the descendants of the context node; a descendant is a child or a child of a child and so on; thus
// the descendant axis never contains attribute or namespace nodes.
// - the descendant-or-self axis contains the context node and the descendants of the context node.
//
// as per XPath 2.0 specs §3.2.1.1,
// as per XPath 2.0 specs §3.2.1.1,
// - the descendant axis is defined as the transitive closure of the child axis; it contains the descendants of the context node (the
// children, the children of the children, and so on).
// - the descendant-or-self axis contains the context node and the descendants of the context node.
@@ -1253,7 +1252,7 @@ namespace Umbraco.Web
// the descendant and descendant-or-self axis are forward axes ie they contain the context node or nodes that are after the context
// node in document order.
//
// document order is defined by §2.4.1 as:
// document order is defined by §2.4.1 as:
// - the root node is the first node.
// - every node occurs before all of its children and descendants.
// - the relative order of siblings is the order in which they occur in the children property of their parent node.
@@ -70,6 +70,7 @@ namespace Umbraco.Web.Routing
// test for collisions
var uri = new Uri(url.TrimEnd('/'), UriKind.RelativeOrAbsolute);
if (uri.IsAbsoluteUri == false) uri = uri.MakeAbsolute(UmbracoContext.Current.CleanedUmbracoUrl);
uri = UriUtility.UriToUmbraco(uri);
var pcr = new PublishedContentRequest(uri, UmbracoContext.Current.RoutingContext, UmbracoConfig.For.UmbracoSettings().WebRouting, s => Roles.Provider.GetRolesForUser(s));
pcr.Engine.TryRouteRequest();
@@ -63,17 +63,29 @@ namespace Umbraco.Web.Security.Identity
return null;
}
var identity = new UmbracoBackOfficeIdentity(decrypt);
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties
try
{
ExpiresUtc = decrypt.Expiration.ToUniversalTime(),
IssuedUtc = decrypt.IssueDate.ToUniversalTime(),
IsPersistent = decrypt.IsPersistent,
AllowRefresh = true
});
var identity = new UmbracoBackOfficeIdentity(decrypt);
return ticket;
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties
{
ExpiresUtc = decrypt.Expiration.ToUniversalTime(),
IssuedUtc = decrypt.IssueDate.ToUniversalTime(),
IsPersistent = decrypt.IsPersistent,
AllowRefresh = true
});
return ticket;
}
catch (JsonReaderException)
{
//catch this and return null if the json is invalid
//NOTE: This will happen when running on local host and developing on 7.6 and 7.7+ because 7.7 has a different
// auth ticket format.
return null;
}
}
}
}
@@ -58,16 +58,15 @@ namespace Umbraco.Web.Trees
});
foreach (var file in files)
{
{
var withoutExt = Path.GetFileNameWithoutExtension(file);
if (withoutExt.IsNullOrWhiteSpace() == false)
{
var name = Path.GetFileName(file);
var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
OnRenderFileNode(ref node);
if (node != null)
nodes.Add(node);
}
if (withoutExt.IsNullOrWhiteSpace()) continue;
var name = Path.GetFileName(file);
var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
OnRenderFileNode(ref node);
if (node != null)
nodes.Add(node);
}
return nodes;
@@ -91,7 +90,7 @@ namespace Umbraco.Web.Trees
}
var path = string.IsNullOrEmpty(id) == false && id != Constants.System.Root.ToInvariantString()
? System.Web.HttpUtility.UrlDecode(id).TrimStart("/")
? HttpUtility.UrlDecode(id).TrimStart("/")
: "";
var isFile = FileSystem.FileExists(path);
@@ -8,14 +8,14 @@ namespace Umbraco.Web.Trees
/// Tree for displaying partial view macros in the developer app
/// </summary>
[Tree(Constants.Applications.Developer, "partialViewMacros", null, sortOrder: 6)]
public class PartialViewMacrosTreeController : FileSystemTreeController
public class PartialViewMacrosTreeController : FileSystemTreeController
{
protected override IFileSystem2 FileSystem
{
get { return FileSystemProviderManager.Current.MacroPartialsFileSystem; }
}
private static readonly string[] ExtensionsStatic = { "cshtml" };
private static readonly string[] ExtensionsStatic = {"cshtml"};
protected override string[] Extensions
{
@@ -8,14 +8,14 @@ namespace Umbraco.Web.Trees
/// Tree for displaying partial views in the settings app
/// </summary>
[Tree(Constants.Applications.Settings, "partialViews", null, sortOrder: 2)]
public class PartialViewsTreeController : FileSystemTreeController
public class PartialViewsTreeController : FileSystemTreeController
{
protected override IFileSystem2 FileSystem
{
get { return FileSystemProviderManager.Current.PartialViewsFileSystem; }
}
protected override IFileSystem2 FileSystem
{
get { return FileSystemProviderManager.Current.PartialViewsFileSystem; }
}
private static readonly string[] ExtensionsStatic = { "cshtml" };
private static readonly string[] ExtensionsStatic = {"cshtml"};
protected override string[] Extensions
{
+1 -1
View File
@@ -411,7 +411,7 @@
<Compile Include="PropertyEditors\ValueConverters\MediaPickerPropertyConverter.cs" />
<Compile Include="PropertyEditors\ValueConverters\MemberPickerPropertyConverter.cs" />
<Compile Include="PropertyEditors\ValueConverters\MultiNodeTreePickerPropertyConverter.cs" />
<Compile Include="PropertyEditors\ValueConverters\MultipleMediaPickerPropertyConverter.cs" />
<Compile Include="PropertyEditors\ValueConverters\LegacyMediaPickerPropertyConverter.cs" />
<Compile Include="PublishedContentQueryExtensions.cs" />
<Compile Include="Routing\RedirectTrackingEventHandler.cs" />
<Compile Include="Editors\RedirectUrlManagementController.cs" />
@@ -1393,15 +1393,25 @@ namespace umbraco
/// <returns>An XpathNodeIterator containing the current page as Xml.</returns>
public static XPathNodeIterator GetXmlNodeCurrent()
{
var pageId = "";
try
{
var nav = Umbraco.Web.UmbracoContext.Current.ContentCache.GetXPathNavigator();
nav.MoveToId(HttpContext.Current.Items["pageID"].ToString());
var pageIdItem = HttpContext.Current.Items["pageID"];
if (pageIdItem == null)
{
throw new NullReferenceException("pageID not found in the current HTTP context");
}
pageId = pageIdItem.ToString();
nav.MoveToId(pageId);
return nav.Select(".");
}
catch (Exception ex)
{
LogHelper.Error<library>("Could not retrieve current xml node", ex);
LogHelper.Error<library>(string.Concat("Could not retrieve current xml node for page Id ",pageId), ex);
}
XmlDocument xd = new XmlDocument();