diff --git a/Gruntfile.js b/Gruntfile.js
index e28eec5..8bbb3d9 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -29,11 +29,6 @@ module.exports = function(grunt) {
tasks: ['copy:html']
},
- config: {
- files: ['config/package.manifest'],
- tasks: ['copy:config']
- },
-
dll: {
files: ['app/Umbraco/**/*.dll'],
tasks: ['copy:dll']
@@ -83,12 +78,6 @@ module.exports = function(grunt) {
},
config: {
files: [
- {
- cwd: 'config/',
- src: ['package.manifest'],
- dest: '<%= basePath %>',
- expand: true
- },
{
cwd: 'app/langs/',
src: ['**'],
diff --git a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
index e790eb8..f3082fc 100644
--- a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
+++ b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
@@ -37,8 +37,9 @@
..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\businesslogic.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll
..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll
@@ -46,17 +47,20 @@
..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\cms.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\controls.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll
..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\Examine.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll
..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll
@@ -70,22 +74,24 @@
..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll
-
+
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\interfaces.dll
+ ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\log4net.dll
+ ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll
..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\Microsoft.ApplicationBlocks.Data.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\Microsoft.Web.Helpers.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll
True
@@ -103,24 +109,26 @@
..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll
-
- ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll
+
+ False
+ ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll
..\packages\NUnit.2.6.3\lib\nunit.framework.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\SQLCE4Umbraco.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll
True
- ..\packages\UmbracoCms.Core.7.1.0\lib\System.Data.SqlServerCe.dll
+ ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll
True
- ..\packages\UmbracoCms.Core.7.1.0\lib\System.Data.SqlServerCe.Entity.dll
+ ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll
@@ -163,39 +171,49 @@
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\TidyNet.dll
-
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.dll
-
-
+
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\Umbraco.Core.dll
+ ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.DataLayer.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.editorControls.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.MacroEngines.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.providers.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\Umbraco.Web.UI.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.XmlSerializers.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\UmbracoExamine.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll
-
- ..\packages\UmbracoCms.Core.7.1.0\lib\UrlRewritingNet.UrlRewriter.dll
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll
+
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll
+
+
+ False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll
diff --git a/app/Umbraco/Archetype.Tests/app.config b/app/Umbraco/Archetype.Tests/app.config
index e509377..72cac16 100644
--- a/app/Umbraco/Archetype.Tests/app.config
+++ b/app/Umbraco/Archetype.Tests/app.config
@@ -18,6 +18,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/Umbraco/Archetype.Tests/packages.config b/app/Umbraco/Archetype.Tests/packages.config
index 66fbf23..493b067 100644
--- a/app/Umbraco/Archetype.Tests/packages.config
+++ b/app/Umbraco/Archetype.Tests/packages.config
@@ -20,9 +20,9 @@
-
+
-
+
\ No newline at end of file
diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj
index f821384..53469ca 100644
--- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj
+++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj
@@ -41,8 +41,7 @@
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\businesslogic.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll
..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll
@@ -53,20 +52,17 @@
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\cms.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\controls.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll
..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\Examine.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll
..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll
@@ -85,24 +81,20 @@
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\interfaces.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\log4net.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll
..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
False
- ..\packages\UmbracoCms.Core.7.1.0\lib\Microsoft.ApplicationBlocks.Data.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\Microsoft.Web.Helpers.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll
False
@@ -121,22 +113,20 @@
False
- ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll
- False
+ ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\SQLCE4Umbraco.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll
- False
- ..\packages\UmbracoCms.Core.7.1.0\lib\System.Data.SqlServerCe.dll
+ True
+ ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll
- False
- ..\packages\UmbracoCms.Core.7.1.0\lib\System.Data.SqlServerCe.Entity.dll
+ True
+ ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll
@@ -183,48 +173,37 @@
- ..\packages\UmbracoCms.Core.7.1.0\lib\TidyNet.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\Umbraco.Core.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.DataLayer.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.editorControls.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.MacroEngines.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.providers.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\Umbraco.Web.UI.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\umbraco.XmlSerializers.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\UmbracoExamine.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll
- ..\packages\UmbracoCms.Core.7.1.0\lib\UrlRewritingNet.UrlRewriter.dll
- False
+ ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll
@@ -242,8 +221,10 @@
+
+
diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs
index 29b203d..6517af7 100644
--- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs
+++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs
@@ -1,15 +1,9 @@
using System;
-using System.Collections.Generic;
using System.Linq;
-using System.Net.Mime;
-using System.Text;
-using System.Threading.Tasks;
-using System.Web.Http.ModelBinding;
using Archetype.Umbraco.Models;
using Newtonsoft.Json;
using Umbraco.Core;
using Umbraco.Core.Models;
-using Umbraco.Core.Models.PublishedContent;
namespace Archetype.Umbraco.Extensions
{
@@ -28,6 +22,30 @@ namespace Archetype.Umbraco.Extensions
_app = ApplicationContext.Current;
}
+ internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues)
+ {
+ try
+ {
+ var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings);
+
+ try
+ {
+ // Get list of configured properties and their types and map them to the deserialized archetype model
+ var preValue = GetArchetypePreValueFromPreValuesCollection(dataTypePreValues);
+ RetrieveAdditionalProperties(ref archetype, preValue);
+ }
+ catch (Exception ex)
+ {
+ }
+
+ return archetype;
+ }
+ catch
+ {
+ return new Models.Archetype();
+ }
+ }
+
internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId)
{
try
@@ -72,6 +90,14 @@ namespace Archetype.Umbraco.Extensions
}) as ArchetypePreValue;
}
+ private ArchetypePreValue GetArchetypePreValueFromPreValuesCollection(PreValueCollection dataTypePreValues)
+ {
+ var preValueAsString = dataTypePreValues.PreValuesAsDictionary.First().Value.Value;
+ var preValue = JsonConvert.DeserializeObject(preValueAsString, _jsonSettings);
+ return preValue;
+ }
+
+
private IDataTypeDefinition GetDataTypeByGuid(Guid guid)
{
return (IDataTypeDefinition) ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem(
@@ -96,6 +122,7 @@ namespace Archetype.Umbraco.Extensions
var propertyAlias = property.Alias;
foreach ( var propertyInst in fieldsetInst.Properties.Where(x => x.Alias == propertyAlias))
{
+ propertyInst.DataTypeGuid = property.DataTypeGuid.ToString();
propertyInst.DataTypeId = GetDataTypeByGuid(property.DataTypeGuid).Id;
propertyInst.PropertyEditorAlias = property.PropertyEditorAlias;
}
diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs
index 2232aa5..c9f3953 100644
--- a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs
+++ b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs
@@ -1,4 +1,10 @@
-using Umbraco.Core;
+using System;
+using System.Web;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Collections.Generic;
+using Umbraco.Core;
+using Umbraco.Web;
using Archetype.Umbraco.Models;
namespace Archetype.Umbraco.Extensions
diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs
index 207e9f6..91763ff 100644
--- a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs
+++ b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs
@@ -1,6 +1,9 @@
-using System.Collections;
+using System;
+using System.Collections;
using System.Collections.Generic;
+using System.Linq;
using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Archetype.Umbraco.Models
{
@@ -24,5 +27,18 @@ namespace Archetype.Umbraco.Models
{
return this.GetEnumerator();
}
+
+ internal string SerializeForPersistence()
+ {
+ var json = JObject.Parse(JsonConvert.SerializeObject(this));
+ var propertiesToRemove = new String[] { "propertyEditorAlias", "dataTypeId", "dataTypeGuid" };
+
+ json.Descendants().OfType()
+ .Where(p => propertiesToRemove.Contains(p.Name))
+ .ToList()
+ .ForEach(x => x.Remove());
+
+ return json.ToString(Formatting.None);
+ }
}
}
diff --git a/app/Umbraco/Umbraco.Archetype/Models/Property.cs b/app/Umbraco/Umbraco.Archetype/Models/Property.cs
index a3c4522..902e434 100644
--- a/app/Umbraco/Umbraco.Archetype/Models/Property.cs
+++ b/app/Umbraco/Umbraco.Archetype/Models/Property.cs
@@ -28,9 +28,6 @@ namespace Archetype.Umbraco.Models
public T GetValue()
{
- // If the value is of type T, just return it
- if (Value is T)
- return (T)Value;
// Try Umbraco's PropertyValueConverters
var converters = UmbracoContext.Current != null ? PropertyValueConvertersResolver.Current.Converters : Enumerable.Empty();
@@ -41,6 +38,10 @@ namespace Archetype.Umbraco.Models
return convertedAttempt.Result;
}
+ // If the value is of type T, just return it
+ if (Value is T)
+ return (T)Value;
+
// No PropertyValueConverters matched, so try a regular type conversion
var convertAttempt2 = Value.TryConvertTo();
if (convertAttempt2.Success)
diff --git a/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs
index 7a33150..799f844 100644
--- a/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs
+++ b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs
@@ -1,4 +1,4 @@
using System.Reflection;
-[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("0.0.0.0")]
\ No newline at end of file
+[assembly: AssemblyVersion("1.0")]
+[assembly: AssemblyFileVersion("1.0-beta")]
\ No newline at end of file
diff --git a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs
index f38a029..2f096d3 100644
--- a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs
+++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using Archetype.Umbraco.Extensions;
-using Archetype.Umbraco.Models;
-using Newtonsoft.Json;
+using System.Linq;
+using Archetype.Umbraco.Extensions;
+using Archetype.Umbraco.Models;
+using Newtonsoft.Json;
using Umbraco.Core;
using Umbraco.Core.Models;
-using Umbraco.Core.Models.PublishedContent;
-using Umbraco.Core.PropertyEditors;
+using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
namespace Archetype.Umbraco.PropertyConverters
@@ -42,8 +42,7 @@ namespace Archetype.Umbraco.PropertyConverters
var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(source.ToString(),
(propertyType != null ? propertyType.DataTypeId : -1));
- return archetype;
+ return archetype;
}
-
- }
-}
+ }
+}
\ No newline at end of file
diff --git a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs
new file mode 100644
index 0000000..e55ed1d
--- /dev/null
+++ b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Archetype.Umbraco.Extensions;
+using ClientDependency.Core;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Umbraco.Core;
+using Umbraco.Core.Models;
+using Umbraco.Core.Models.Editors;
+using Umbraco.Core.PropertyEditors;
+using Umbraco.Core.Services;
+using Umbraco.Web.PropertyEditors;
+
+namespace Archetype.Umbraco.PropertyEditors
+{
+ [PropertyEditorAsset(ClientDependencyType.Javascript, "/App_Plugins/Archetype/js/archetype.js")]
+ [PropertyEditor("Imulus.Archetype", "Archetype", "/App_Plugins/Archetype/views/archetype.html",
+ ValueType = "JSON")]
+ public class ArchetypePropertyEditor : PropertyEditor
+ {
+ #region Pre Value Editor
+
+ protected override PreValueEditor CreatePreValueEditor()
+ {
+ return new ArchetypePreValueEditor();
+ }
+
+ internal class ArchetypePreValueEditor : PreValueEditor
+ {
+ [PreValueField("archetypeConfig", "Config", "/App_Plugins/Archetype/views/archetype.config.html",
+ Description = "(Required) Describe your Archetype.")]
+ public string Config { get; set; }
+
+ [PreValueField("hideLabel", "Hide Label", "boolean",
+ Description = "Hide the Umbraco property title and description, making the Archetype span the entire page width")]
+ public bool HideLabel { get; set; }
+ }
+
+ #endregion
+
+ #region Value Editor
+
+ protected override PropertyValueEditor CreateValueEditor()
+ {
+ return new ArchetypePropertyValueEditor(base.CreateValueEditor());
+ }
+
+ internal class ArchetypePropertyValueEditor : PropertyValueEditorWrapper
+ {
+ protected JsonSerializerSettings _jsonSettings;
+
+ public ArchetypePropertyValueEditor(PropertyValueEditor wrapped)
+ : base(wrapped) { }
+
+ public override string ConvertDbToString(Property property, PropertyType propertyType, IDataTypeService dataTypeService)
+ {
+ if (property.Value == null || property.Value.ToString() == "")
+ return string.Empty;
+
+ var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(property.Value.ToString(), propertyType.DataTypeDefinitionId);
+
+ foreach (var fieldset in archetype.Fieldsets)
+ {
+ foreach (var propDef in fieldset.Properties)
+ {
+ var dtd = dataTypeService.GetDataTypeDefinitionById(Guid.Parse(propDef.DataTypeGuid));
+ var propType = new PropertyType(dtd) { Alias = propDef.Alias };
+ var prop = new Property(propType, propDef.Value);
+ var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
+ propDef.Value = propEditor.ValueEditor.ConvertDbToString(prop, propType, dataTypeService);
+ }
+ }
+
+ return archetype.SerializeForPersistence();
+ }
+
+ public override object ConvertDbToEditor(Property property, PropertyType propertyType, IDataTypeService dataTypeService)
+ {
+ if (property.Value == null || property.Value.ToString() == "")
+ return string.Empty;
+
+ var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(property.Value.ToString(), propertyType.DataTypeDefinitionId);
+
+ foreach (var fieldset in archetype.Fieldsets)
+ {
+ foreach (var propDef in fieldset.Properties)
+ {
+ var dtd = dataTypeService.GetDataTypeDefinitionById(Guid.Parse(propDef.DataTypeGuid));
+ var propType = new PropertyType(dtd) { Alias = propDef.Alias };
+ var prop = new Property(propType, propDef.Value);
+ var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
+ propDef.Value = propEditor.ValueEditor.ConvertDbToEditor(prop, propType, dataTypeService);
+ }
+ }
+
+ return archetype;
+ }
+ public override object ConvertEditorToDb(ContentPropertyData editorValue, object currentValue)
+ {
+ if (editorValue.Value == null || editorValue.Value.ToString() == "")
+ return string.Empty;
+
+ var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(editorValue.Value.ToString(), editorValue.PreValues);
+
+ foreach (var fieldset in archetype.Fieldsets)
+ {
+ foreach (var propDef in fieldset.Properties)
+ {
+ var dtd = ApplicationContext.Current.Services.DataTypeService.GetDataTypeDefinitionById(Guid.Parse(propDef.DataTypeGuid));
+ var preValues = ApplicationContext.Current.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(dtd.Id);
+ var propData = new ContentPropertyData(propDef.Value, preValues, new Dictionary());
+ var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
+ propDef.Value = propEditor.ValueEditor.ConvertEditorToDb(propData, propDef.Value);
+ }
+ }
+
+ return archetype.SerializeForPersistence();
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/app/Umbraco/Umbraco.Archetype/app.config b/app/Umbraco/Umbraco.Archetype/app.config
new file mode 100644
index 0000000..4429813
--- /dev/null
+++ b/app/Umbraco/Umbraco.Archetype/app.config
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/Umbraco/Umbraco.Archetype/packages.config b/app/Umbraco/Umbraco.Archetype/packages.config
index 85afbc7..d006ee4 100644
--- a/app/Umbraco/Umbraco.Archetype/packages.config
+++ b/app/Umbraco/Umbraco.Archetype/packages.config
@@ -19,8 +19,8 @@
-
+
-
+
\ No newline at end of file
diff --git a/app/controllers/controller.js b/app/controllers/controller.js
index 9ceb769..606a319 100644
--- a/app/controllers/controller.js
+++ b/app/controllers/controller.js
@@ -11,14 +11,11 @@
//ini the model
$scope.model.value = $scope.model.value || getDefaultModel($scope.model.config);
-
- //ini the render model
- $scope.archetypeRenderModel = {};
- initArchetypeRenderModel();
+ init();
//helper to get $eval the labelTemplate
$scope.getFieldsetTitle = function(fieldsetConfigModel, fieldsetIndex) {
- var fieldset = $scope.archetypeRenderModel.fieldsets[fieldsetIndex];
+ var fieldset = $scope.model.value.fieldsets[fieldsetIndex];
var fieldsetConfig = $scope.getConfigFieldsetByAlias(fieldset.alias);
var template = fieldsetConfigModel.labelTemplate;
@@ -61,11 +58,11 @@
if (typeof $index != 'undefined')
{
- $scope.archetypeRenderModel.fieldsets.splice($index + 1, 0, newFieldset);
+ $scope.model.value.fieldsets.splice($index + 1, 0, newFieldset);
}
else
{
- $scope.archetypeRenderModel.fieldsets.push(newFieldset);
+ $scope.model.value.fieldsets.push(newFieldset);
}
}
@@ -74,15 +71,10 @@
}
}
- //rather than splice the archetypeRenderModel, we're hiding this and cleaning onFormSubmitting
$scope.removeRow = function ($index) {
if ($scope.canRemove()) {
if (confirm('Are you sure you want to remove this?')) {
- $scope.archetypeRenderModel.fieldsets[$index].remove = true;
- /*
- Touches the model. Not sure why this is needed but without it the Digest doesn't run on a remove row.
- */
- $scope.archetypeRenderModel = JSON.parse(JSON.stringify($scope.archetypeRenderModel));
+ $scope.model.value.fieldsets.splice($index, 1);
}
}
}
@@ -114,16 +106,20 @@
//helpers for determining if the add button should be shown
$scope.showAddButton = function () {
return $scope.model.config.startWithAddButton
- && countVisible() === 0;
+ && countVisible() === 0
+ && !$scope.model.config.enableMultipleFieldsets;
}
//helper, ini the render model from the server (model.value)
- function initArchetypeRenderModel() {
- $scope.archetypeRenderModel = removeNulls($scope.model.value);
+ function init() {
+ $scope.model.value = removeNulls($scope.model.value);
+ addDefaultProperties($scope.model.value.fieldsets);
+ }
- _.each($scope.archetypeRenderModel.fieldsets, function (fieldset)
+ function addDefaultProperties(fieldsets)
+ {
+ _.each(fieldsets, function (fieldset)
{
- fieldset.remove = false;
fieldset.collapse = false;
fieldset.isValid = true;
});
@@ -144,6 +140,15 @@
return (typeof property !== 'undefined') ? property.value : '';
};
+ $scope.isCollapsed = function(fieldset)
+ {
+ if(typeof fieldset.collapse === "undefined")
+ {
+ fieldset.collapse = true;
+ }
+ return fieldset.collapse;
+ }
+
//helper for expanding/collapsing fieldsets
$scope.focusFieldset = function(fieldset){
fixDisableSelection();
@@ -159,13 +164,13 @@
iniState = fieldset.collapse;
}
- _.each($scope.archetypeRenderModel.fieldsets, function(fieldset){
+ _.each($scope.model.value.fieldsets, function(fieldset){
fieldset.collapse = true;
});
- if(!fieldset && $scope.archetypeRenderModel.fieldsets.length == 1 && $scope.archetypeRenderModel.fieldsets[0].remove == false)
+ if(!fieldset && $scope.model.value.fieldsets.length == 1)
{
- $scope.archetypeRenderModel.fieldsets[0].collapse = false;
+ $scope.model.value.fieldsets[0].collapse = false;
return;
}
@@ -179,7 +184,7 @@
$scope.focusFieldset();
//developerMode helpers
- $scope.archetypeRenderModel.toString = stringify;
+ $scope.model.value.toString = stringify;
//encapsulate stringify (should be built into browsers, not sure of IE support)
function stringify() {
@@ -187,12 +192,12 @@
}
//watch for changes
- $scope.$watch('archetypeRenderModel', function (v) {
+ $scope.$watch('model.value', function (v) {
if ($scope.model.config.developerMode) {
console.log(v);
if (typeof v === 'string') {
- $scope.archetypeRenderModel = JSON.parse(v);
- $scope.archetypeRenderModel.toString = stringify;
+ $scope.model.value = JSON.parse(v);
+ $scope.model.value.toString = stringify;
}
}
});
@@ -200,64 +205,7 @@
//helper to count what is visible
function countVisible()
{
- var count = 0;
-
- _.each($scope.archetypeRenderModel.fieldsets, function(fieldset){
- if (fieldset.remove == false) {
- count++;
- }
- });
-
- return count;
- }
-
- //helper to sync the model to the renderModel
- function syncModelToRenderModel()
- {
- $scope.model.value = { fieldsets: [] };
-
- _.each($scope.archetypeRenderModel.fieldsets, function(fieldset){
- var cleanedFieldset = cleanFieldset(fieldset);
-
- if(cleanedFieldset){
- $scope.model.value.fieldsets.push(cleanedFieldset);
- }
- });
- }
-
- //helper to remove properties only used during editing that we don't want in the saved data
- //also removes properties that are no longer in the config
- function cleanFieldset(fieldset)
- {
- if (typeof fieldset != 'function' && !fieldset.remove){
-
- var fieldsetConfig = $scope.getConfigFieldsetByAlias(fieldset.alias);
-
- //clone and clean
- var tempFieldset = JSON.parse(JSON.stringify(fieldset));
- delete tempFieldset.remove;
- delete tempFieldset.isValid;
- delete tempFieldset.collapse;
-
- _.each(tempFieldset.properties, function(property, index){
- var propertyConfig = _.find(fieldsetConfig.properties, function(p){
- return property.alias == p.alias;
- });
-
- //just prune the property
- if(propertyConfig){
- delete property.isValid;
- }
- else
- {
- //need to remove the whole property
- tempFieldset.properties.splice(index, 1);
- }
-
- });
-
- return tempFieldset;
- }
+ return $scope.model.value.fieldsets.length;
}
// helper to get initial model if none was provided
@@ -270,7 +218,7 @@
//helper to add an empty fieldset to the render model
function getEmptyRenderFieldset (fieldsetModel) {
- return {alias: fieldsetModel.alias, remove: false, isValid: true, properties: []};
+ return {alias: fieldsetModel.alias, collapse: false, isValid: true, properties: []};
}
//helper to ensure no nulls make it into the model
@@ -300,9 +248,9 @@
//helper to lookup validity when given a fieldsetIndex and property alias
$scope.getPropertyValidity = function(fieldsetIndex, alias)
{
- if($scope.archetypeRenderModel.fieldsets[fieldsetIndex])
+ if($scope.model.value.fieldsets[fieldsetIndex])
{
- var property = _.find($scope.archetypeRenderModel.fieldsets[fieldsetIndex].properties, function(property){
+ var property = _.find($scope.model.value.fieldsets[fieldsetIndex].properties, function(property){
return property.alias == alias;
});
}
@@ -310,23 +258,6 @@
return (typeof property == 'undefined') ? true : property.isValid;
}
- //sync things up on save
- $scope.$on("formSubmitting", function (ev, args) {
-
- //test for form; may have to do this differently for nested archetypes
- if(!form)
- return;
-
- if(form.$invalid)
- {
- notificationsService.warning("Cannot Save Document", "The document could not be saved because of missing required fields.")
- }
- else
- {
- syncModelToRenderModel();
- }
- });
-
//custom js
if ($scope.model.config.customJsPath) {
assetsService.loadJs($scope.model.config.customJsPath);
diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js
index a97955e..7358cbd 100644
--- a/app/directives/archetypeproperty.js
+++ b/app/directives/archetypeproperty.js
@@ -75,11 +75,10 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c
//load in the DefaultPreValues for the PropertyEditor, if any
var defaultConfigObj = {};
- if (propertyEditor.hasOwnProperty('defaultPreValues') && propertyEditor.defaultPreValues != null && propertyEditor.defaultPreValues.length > 0) {
- _.each(propertyEditor.defaultPreValues, function(p) {
- _.extend(defaultConfigObj, p)
- });
+ if (propertyEditor.hasOwnProperty('defaultPreValues') && propertyEditor.defaultPreValues != null) {
+ _.extend(defaultConfigObj, propertyEditor.defaultPreValues);
}
+
var mergedConfig = _.extend(defaultConfigObj, config);
loadView(pathToView, mergedConfig, defaultValue, alias, umbracoPropertyAlias, scope, element, ngModelCtrl);
diff --git a/app/views/archetype.html b/app/views/archetype.html
index bf31438..5108680 100644
--- a/app/views/archetype.html
+++ b/app/views/archetype.html
@@ -1,5 +1,5 @@
-
+
-
-
- -
+
+ -