From e628fa7af0deead93cbc0fc231e84e16f51d87af Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Thu, 24 Apr 2014 22:29:58 -0600 Subject: [PATCH 01/32] Move deserialization methods to a Helper class --- .../Archetype.Umbraco.csproj | 1 + .../Extensions/ArchetypeHelper.cs | 106 ++++++++++++++++++ .../ArchetypeValueConverter.cs | 84 +------------- 3 files changed, 111 insertions(+), 80 deletions(-) create mode 100644 app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index e86b51e..f821384 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -231,6 +231,7 @@ + diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs new file mode 100644 index 0000000..6d5a0f8 --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -0,0 +1,106 @@ +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 +{ + public class ArchetypeHelper + { + + protected JsonSerializerSettings _jsonSettings; + protected ApplicationContext _app; + + public ArchetypeHelper() + { + var dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver(); + dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic; + + _jsonSettings = new JsonSerializerSettings { ContractResolver = dcr }; + _app = ApplicationContext.Current; + } + + public Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId) + { + 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 = GetArchetypePreValueFromDataTypeId(dataTypeId); + foreach (var fieldset in preValue.Fieldsets) + { + var fieldsetAlias = fieldset.Alias; + foreach (var fieldsetInst in archetype.Fieldsets.Where(x => x.Alias == fieldsetAlias)) + { + foreach (var property in fieldset.Properties) + { + var propertyAlias = property.Alias; + foreach ( + var propertyInst in fieldsetInst.Properties.Where(x => x.Alias == propertyAlias)) + { + propertyInst.DataTypeId = GetDataTypeByGuid(property.DataTypeGuid).Id; + propertyInst.PropertyEditorAlias = property.PropertyEditorAlias; + } + } + } + } + } + catch (Exception ex) + { + } + + return archetype; + } + catch + { + return new Models.Archetype(); + } + } + + private ArchetypePreValue GetArchetypePreValueFromDataTypeId(int dataTypeId) + { + return _app.ApplicationCache.RuntimeCache.GetCacheItem( + Constants.CacheKey_PreValueFromDataTypeId + dataTypeId, + () => + { + var preValues = _app.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId); + + var configJson = preValues.IsDictionaryBased + ? preValues.PreValuesAsDictionary[Constants.PreValueAlias].Value + : preValues.PreValuesAsArray.First().Value; + + var config = JsonConvert.DeserializeObject(configJson, _jsonSettings); + + foreach (var fieldset in config.Fieldsets) + { + foreach (var property in fieldset.Properties) + { + property.PropertyEditorAlias = GetDataTypeByGuid(property.DataTypeGuid).PropertyEditorAlias; + } + } + + return config; + + }) as ArchetypePreValue; + } + + private IDataTypeDefinition GetDataTypeByGuid(Guid guid) + { + return (IDataTypeDefinition) ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem( + Constants.CacheKey_DataTypeByGuid + guid, + () => _app.Services.DataTypeService.GetDataTypeDefinitionById(guid)); + } + + } +} diff --git a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs index 3604acb..2834b36 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs @@ -16,15 +16,6 @@ namespace Archetype.Umbraco.PropertyConverters [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class ArchetypeValueConverter : PropertyValueConverterBase { - protected JsonSerializerSettings _jsonSettings; - - public ArchetypeValueConverter() - { - var dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver(); - dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic; - - _jsonSettings = new JsonSerializerSettings { ContractResolver = dcr }; - } public ServiceContext Services { @@ -46,79 +37,12 @@ namespace Archetype.Umbraco.PropertyConverters var sourceString = source.ToString(); if (!sourceString.DetectIsJson()) - return defaultValue; + return defaultValue; + + var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(source.ToString(), propertyType.DataTypeId); - try - { - // Deserialize value to archetype model - var archetype = JsonConvert.DeserializeObject(sourceString, _jsonSettings); - - try - { - // Get list of configured properties and their types and map them to the deserialized archetype model - var preValue = GetArchetypePreValueFromDataTypeId(propertyType.DataTypeId); - foreach (var fieldset in preValue.Fieldsets) - { - var fieldsetAlias = fieldset.Alias; - foreach (var fieldsetInst in archetype.Fieldsets.Where(x => x.Alias == fieldsetAlias)) - { - foreach (var property in fieldset.Properties) - { - var propertyAlias = property.Alias; - foreach (var propertyInst in fieldsetInst.Properties.Where(x => x.Alias == propertyAlias)) - { - propertyInst.DataTypeId = GetDataTypeByGuid(property.DataTypeGuid).Id; - propertyInst.PropertyEditorAlias = property.PropertyEditorAlias; - } - } - } - } - } - catch (Exception ex) - { - } - - return archetype; - } - catch (Exception ex) - { - } - - return defaultValue; + return archetype; } - private ArchetypePreValue GetArchetypePreValueFromDataTypeId(int dataTypeId) - { - return ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem( - Constants.CacheKey_PreValueFromDataTypeId + dataTypeId, - () => - { - var preValues = Services.DataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId); - - var configJson = preValues.IsDictionaryBased - ? preValues.PreValuesAsDictionary[Constants.PreValueAlias].Value - : preValues.PreValuesAsArray.First().Value; - - var config = JsonConvert.DeserializeObject(configJson, _jsonSettings); - - foreach (var fieldset in config.Fieldsets) - { - foreach (var property in fieldset.Properties) - { - property.PropertyEditorAlias = GetDataTypeByGuid(property.DataTypeGuid).PropertyEditorAlias; - } - } - - return config; - - }) as ArchetypePreValue; - } - - private IDataTypeDefinition GetDataTypeByGuid(Guid guid) - { - return (IDataTypeDefinition) ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem( - Constants.CacheKey_DataTypeByGuid + guid, - () => Services.DataTypeService.GetDataTypeDefinitionById(guid)); - } } } From 8deca35f244a29e3b3cd1dc50b03ea6bc2878d3c Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Thu, 24 Apr 2014 22:39:22 -0600 Subject: [PATCH 02/32] Extract methods to retrieve metadata not stored in the model --- .../Extensions/ArchetypeHelper.cs | 68 ++++++++++++------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs index 6d5a0f8..8484202 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -38,23 +38,7 @@ namespace Archetype.Umbraco.Extensions { // Get list of configured properties and their types and map them to the deserialized archetype model var preValue = GetArchetypePreValueFromDataTypeId(dataTypeId); - foreach (var fieldset in preValue.Fieldsets) - { - var fieldsetAlias = fieldset.Alias; - foreach (var fieldsetInst in archetype.Fieldsets.Where(x => x.Alias == fieldsetAlias)) - { - foreach (var property in fieldset.Properties) - { - var propertyAlias = property.Alias; - foreach ( - var propertyInst in fieldsetInst.Properties.Where(x => x.Alias == propertyAlias)) - { - propertyInst.DataTypeId = GetDataTypeByGuid(property.DataTypeGuid).Id; - propertyInst.PropertyEditorAlias = property.PropertyEditorAlias; - } - } - } - } + RetrieveAdditionalProperties(ref archetype, preValue); } catch (Exception ex) { @@ -81,14 +65,7 @@ namespace Archetype.Umbraco.Extensions : preValues.PreValuesAsArray.First().Value; var config = JsonConvert.DeserializeObject(configJson, _jsonSettings); - - foreach (var fieldset in config.Fieldsets) - { - foreach (var property in fieldset.Properties) - { - property.PropertyEditorAlias = GetDataTypeByGuid(property.DataTypeGuid).PropertyEditorAlias; - } - } + RetrieveAdditionalProperties(ref config); return config; @@ -102,5 +79,46 @@ namespace Archetype.Umbraco.Extensions () => _app.Services.DataTypeService.GetDataTypeDefinitionById(guid)); } + /// + /// Retrieves additional metadata that isn't available on the stored model of an Archetype + /// + /// The Archetype to add the additional metadata to + /// The configuration of the Archetype + private void RetrieveAdditionalProperties(ref Models.Archetype archetype, ArchetypePreValue preValue) + { + foreach (var fieldset in preValue.Fieldsets) + { + var fieldsetAlias = fieldset.Alias; + foreach (var fieldsetInst in archetype.Fieldsets.Where(x => x.Alias == fieldsetAlias)) + { + foreach (var property in fieldset.Properties) + { + var propertyAlias = property.Alias; + foreach ( var propertyInst in fieldsetInst.Properties.Where(x => x.Alias == propertyAlias)) + { + propertyInst.DataTypeId = GetDataTypeByGuid(property.DataTypeGuid).Id; + propertyInst.PropertyEditorAlias = property.PropertyEditorAlias; + } + } + } + } + } + + /// + /// Retrieves additional metadata that isn't available on the stored model of an ArchetypePreValue + /// + /// The Archetype to add the additional metadata to + /// The configuration of the Archetype + private void RetrieveAdditionalProperties(ref Models.ArchetypePreValue preValue) + { + foreach (var fieldset in preValue.Fieldsets) + { + foreach (var property in fieldset.Properties) + { + property.PropertyEditorAlias = GetDataTypeByGuid(property.DataTypeGuid).PropertyEditorAlias; + } + } + } + } } From 5d12f5f76c027e6009052600d170ef77804e56bd Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Thu, 24 Apr 2014 22:39:22 -0600 Subject: [PATCH 03/32] Mark helper methods internal for now --- app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs index 8484202..29b203d 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -19,7 +19,7 @@ namespace Archetype.Umbraco.Extensions protected JsonSerializerSettings _jsonSettings; protected ApplicationContext _app; - public ArchetypeHelper() + internal ArchetypeHelper() { var dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver(); dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic; @@ -28,7 +28,7 @@ namespace Archetype.Umbraco.Extensions _app = ApplicationContext.Current; } - public Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId) + internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId) { try { From bf76b803309e3d6fdd83d9ac776d92f9f3833005 Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Thu, 24 Apr 2014 23:11:47 -0600 Subject: [PATCH 04/32] Make tests pass Quick null check for PublishedPropertyType - we can't create a dummy one from a test due to some internal Umbraco dependencies, and we can't mock it as the relevant properties aren't virtual, so just adding a quick null check for now. --- .../PropertyConverters/ArchetypeValueConverter.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs index 2834b36..f38a029 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs @@ -39,8 +39,9 @@ namespace Archetype.Umbraco.PropertyConverters if (!sourceString.DetectIsJson()) return defaultValue; - var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(source.ToString(), propertyType.DataTypeId); - + var archetype = new ArchetypeHelper().DeserializeJsonToArchetype(source.ToString(), + (propertyType != null ? propertyType.DataTypeId : -1)); + return archetype; } From 481259f0b794d7276e27e971f1f08a5eaf627337 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 2 May 2014 09:20:59 -0400 Subject: [PATCH 05/32] Add try/catch with logging to prop converters --- .../ArcheTypePropertyEditor.cs | 52 +++++++++++++------ 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs index e55ed1d..3192130 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs @@ -11,6 +11,7 @@ using Umbraco.Core.Models.Editors; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Web.PropertyEditors; +using Umbraco.Core.Logging; namespace Archetype.Umbraco.PropertyEditors { @@ -64,11 +65,18 @@ namespace Archetype.Umbraco.PropertyEditors { 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); + try + { + 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); + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } } } @@ -86,11 +94,18 @@ namespace Archetype.Umbraco.PropertyEditors { 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); + try + { + 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); + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } } } @@ -107,11 +122,18 @@ namespace Archetype.Umbraco.PropertyEditors { 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); + try + { + 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); + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } } } From ff39bce2625b0b7d90c32998e09869446b68d9ca Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Sat, 3 May 2014 00:32:18 -0600 Subject: [PATCH 06/32] Add `package` task that creates both packages to simplify CI Duplicated task steps to prevent needing to build multiple times but maintaining 'full build' in the individual package tasks --- Gruntfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index 8bbb3d9..6bacbeb 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -208,6 +208,7 @@ module.exports = function(grunt) { grunt.registerTask('default', ['clean', 'less', 'concat', 'assemblyinfo', 'msbuild:dist', 'copy:dll', 'copy:config', 'copy:html']); - grunt.registerTask('nuget', ['clean:tmp', 'default', 'copy:nuget', 'template:nuspec', 'nugetpack', 'clean:tmp']); + grunt.registerTask('nuget', ['clean:tmp', 'default', 'copy:nuget', 'template:nuspec', 'nugetpack', 'clean:tmp']); grunt.registerTask('umbraco', ['clean:tmp', 'default', 'copy:umbraco', 'umbracoPackage', 'clean:tmp']); + grunt.registerTask('package', ['clean:tmp', 'default', 'copy:nuget', 'template:nuspec', 'nugetpack', 'copy:umbraco', 'umbracoPackage', 'clean:tmp']); }; \ No newline at end of file From 1cbc192a9d503093351f820bdf7e9b47b4758091 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Thu, 8 May 2014 17:47:24 -0400 Subject: [PATCH 07/32] Update naming scheme --- .../Archetype.Tests/Models/FieldsetTests.cs | 8 ++-- .../PropertyValueConverterTests.cs | 12 ++--- .../Api/ArchetypeDataTypeController.cs | 2 +- .../Archetype.Umbraco.csproj | 2 +- app/Umbraco/Umbraco.Archetype/Constants.cs | 2 +- .../Umbraco.Archetype/Events/ExpireCache.cs | 2 +- .../Extensions/ArchetypeHelper.cs | 18 +++---- .../Extensions/Extensions.cs | 6 +-- .../Umbraco.Archetype/Models/Archetype.cs | 12 ++--- .../Models/ArchetypePreValue.cs | 2 +- .../Models/ArchetypePreValueFieldset.cs | 2 +- .../Models/ArchetypePreValueProperty.cs | 2 +- .../Umbraco.Archetype/Models/Fieldset.cs | 12 ++--- .../Umbraco.Archetype/Models/Property.cs | 4 +- .../ArchetypeValueConverter.cs | 48 +++++++++---------- .../ArcheTypePropertyEditor.cs | 4 +- 16 files changed, 69 insertions(+), 69 deletions(-) diff --git a/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs index 3b1c401..e1bbc0d 100644 --- a/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs +++ b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using Archetype.Umbraco.PropertyConverters; +using Archetype.PropertyConverters; using NUnit.Framework; namespace Archetype.Tests.Models @@ -26,7 +26,7 @@ namespace Archetype.Tests.Models public void Can_Get_Fieldset_Property_By_Alias() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); var propertyValue = fieldset.GetValue("boxHeadline"); @@ -38,7 +38,7 @@ namespace Archetype.Tests.Models public void Can_Convert_Property_Value_Types() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); @@ -51,7 +51,7 @@ namespace Archetype.Tests.Models public void Returns_String_When_No_Type_Specified() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); diff --git a/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs index 6329a4d..63f595c 100644 --- a/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs +++ b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using Archetype.Umbraco.PropertyConverters; +using Archetype.PropertyConverters; using Moq; using NUnit.Framework; using Umbraco.Core.Models.PublishedContent; @@ -31,9 +31,9 @@ namespace Archetype.Tests.PropertyValueConverter var converter = new ArchetypeValueConverter(); var result = converter.ConvertDataToSource(null, data, false); - Assert.AreEqual(result.GetType(), typeof (Archetype.Umbraco.Models.Archetype)); + Assert.AreEqual(result.GetType(), typeof (Archetype.Models.ArchetypeModel)); - var fieldsets = (Archetype.Umbraco.Models.Archetype) result; + var fieldsets = (Archetype.Models.ArchetypeModel) result; Assert.IsTrue(fieldsets.Count() == 0); } @@ -44,9 +44,9 @@ namespace Archetype.Tests.PropertyValueConverter var converter = new ArchetypeValueConverter(); var result = converter.ConvertDataToSource(null, data, false); - Assert.AreEqual(result.GetType(), typeof (Archetype.Umbraco.Models.Archetype)); + Assert.AreEqual(result.GetType(), typeof (Archetype.Models.ArchetypeModel)); - var fieldsets = (Archetype.Umbraco.Models.Archetype) result; + var fieldsets = (Archetype.Models.ArchetypeModel) result; Assert.IsTrue(fieldsets.Count() == 0); } @@ -54,7 +54,7 @@ namespace Archetype.Tests.PropertyValueConverter public void Can_Serialize_From_Json_Model() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); Assert.That(result != null); Assert.That(result.Fieldsets.Count() == 2); diff --git a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs index 3a03b2f..a544c3a 100644 --- a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs +++ b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs @@ -9,7 +9,7 @@ using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.Editors; -namespace Archetype.Umbraco.Api +namespace Archetype.Api { [PluginController("ArchetypeApi")] public class ArchetypeDataTypeController : UmbracoAuthorizedJsonController diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index f379ec2..2b38170 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -7,7 +7,7 @@ {7D185D41-4228-4978-ACB8-83F9A48AD94F} Library Properties - Archetype.Umbraco + Archetype Archetype v4.5 512 diff --git a/app/Umbraco/Umbraco.Archetype/Constants.cs b/app/Umbraco/Umbraco.Archetype/Constants.cs index 83d036b..f8e6b50 100644 --- a/app/Umbraco/Umbraco.Archetype/Constants.cs +++ b/app/Umbraco/Umbraco.Archetype/Constants.cs @@ -1,4 +1,4 @@ -namespace Archetype.Umbraco +namespace Archetype { public static class Constants { diff --git a/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs b/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs index 3db68df..792165b 100644 --- a/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs +++ b/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Models; using Umbraco.Core.Services; using Umbraco.Web; -namespace Archetype.Umbraco.Events +namespace Archetype.Events { public class ExpireCache : ApplicationEventHandler { diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs index 6517af7..1db4ea6 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -1,11 +1,11 @@ using System; using System.Linq; -using Archetype.Umbraco.Models; +using Archetype.Models; using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.Models; -namespace Archetype.Umbraco.Extensions +namespace Archetype.Extensions { public class ArchetypeHelper { @@ -22,11 +22,11 @@ namespace Archetype.Umbraco.Extensions _app = ApplicationContext.Current; } - internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues) + internal Models.ArchetypeModel DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues) { try { - var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); + var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); try { @@ -42,15 +42,15 @@ namespace Archetype.Umbraco.Extensions } catch { - return new Models.Archetype(); + return new Models.ArchetypeModel(); } } - internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId) + internal Models.ArchetypeModel DeserializeJsonToArchetype(string sourceJson, int dataTypeId) { try { - var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); + var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); try { @@ -66,7 +66,7 @@ namespace Archetype.Umbraco.Extensions } catch { - return new Models.Archetype(); + return new Models.ArchetypeModel(); } } @@ -110,7 +110,7 @@ namespace Archetype.Umbraco.Extensions /// /// The Archetype to add the additional metadata to /// The configuration of the Archetype - private void RetrieveAdditionalProperties(ref Models.Archetype archetype, ArchetypePreValue preValue) + private void RetrieveAdditionalProperties(ref Models.ArchetypeModel archetype, ArchetypePreValue preValue) { foreach (var fieldset in preValue.Fieldsets) { diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs index c9f3953..943d74c 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs @@ -5,9 +5,9 @@ using System.Text.RegularExpressions; using System.Collections.Generic; using Umbraco.Core; using Umbraco.Web; -using Archetype.Umbraco.Models; +using Archetype.Models; -namespace Archetype.Umbraco.Extensions +namespace Archetype.Extensions { public static class Extensions { @@ -19,7 +19,7 @@ namespace Archetype.Umbraco.Extensions || input.StartsWith("[") && input.EndsWith("]"); } - public static bool IsArchetype(this Property prop) + public static bool IsArchetype(this ArchetypeProperty prop) { return prop.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditorAlias); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs index 91763ff..1587050 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs @@ -5,20 +5,20 @@ using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { [JsonObject] - public class Archetype : IEnumerable
+ public class ArchetypeModel : IEnumerable { [JsonProperty("fieldsets")] - internal IEnumerable
Fieldsets { get; set; } + internal IEnumerable Fieldsets { get; set; } - public Archetype() + public ArchetypeModel() { - Fieldsets = new List
(); + Fieldsets = new List(); } - public IEnumerator
GetEnumerator() + public IEnumerator GetEnumerator() { return this.Fieldsets.GetEnumerator(); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs index 653af0e..7d0e0dc 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValue { diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs index 251203a..b65683b 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValueFieldset { diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs index e2cc12b..e287187 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs @@ -1,7 +1,7 @@ using System; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValueProperty { diff --git a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs index 23dec2d..2357946 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs @@ -3,19 +3,19 @@ using System.Linq; using Newtonsoft.Json; using Umbraco.Core; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { - public class Fieldset + public class ArchetypeFieldsetModel { [JsonProperty("alias")] public string Alias { get; set; } [JsonProperty("properties")] - public IEnumerable Properties; + public IEnumerable Properties; - public Fieldset() + public ArchetypeFieldsetModel() { - Properties = new List(); + Properties = new List(); } #region Helper Methods @@ -49,7 +49,7 @@ namespace Archetype.Umbraco.Models return !string.IsNullOrEmpty(property.Value.ToString()); } - private Property GetProperty(string propertyAlias) + private ArchetypeProperty GetProperty(string propertyAlias) { return Properties.FirstOrDefault(p => p.Alias.InvariantEquals(propertyAlias)); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/Property.cs b/app/Umbraco/Umbraco.Archetype/Models/Property.cs index 902e434..9a28856 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Property.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Property.cs @@ -7,9 +7,9 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Web; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { - public class Property + public class ArchetypeProperty { [JsonProperty("alias")] public string Alias { get; internal set; } diff --git a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs index 2f096d3..e6991e0 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using Archetype.Umbraco.Extensions; -using Archetype.Umbraco.Models; +using Archetype.Extensions; +using Archetype.Models; using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.Models; @@ -10,30 +10,30 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; -namespace Archetype.Umbraco.PropertyConverters -{ - [PropertyValueType(typeof(Models.Archetype))] - [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] - public class ArchetypeValueConverter : PropertyValueConverterBase - { - - public ServiceContext Services - { - get { return ApplicationContext.Current.Services; } - } - - public override bool IsConverter(PublishedPropertyType propertyType) - { - return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditorAlias); - } - +namespace Archetype.PropertyConverters +{ + [PropertyValueType(typeof(Models.ArchetypeModel))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class ArchetypeValueConverter : PropertyValueConverterBase + { + + public ServiceContext Services + { + get { return ApplicationContext.Current.Services; } + } + + public override bool IsConverter(PublishedPropertyType propertyType) + { + return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditorAlias); + } + public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) { - var defaultValue = new Models.Archetype(); - - if (source == null) - return defaultValue; - + var defaultValue = new Models.ArchetypeModel(); + + if (source == null) + return defaultValue; + var sourceString = source.ToString(); if (!sourceString.DetectIsJson()) diff --git a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs index 3192130..9877119 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using Archetype.Umbraco.Extensions; +using Archetype.Extensions; using ClientDependency.Core; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -13,7 +13,7 @@ using Umbraco.Core.Services; using Umbraco.Web.PropertyEditors; using Umbraco.Core.Logging; -namespace Archetype.Umbraco.PropertyEditors +namespace Archetype.PropertyEditors { [PropertyEditorAsset(ClientDependencyType.Javascript, "/App_Plugins/Archetype/js/archetype.js")] [PropertyEditor("Imulus.Archetype", "Archetype", "/App_Plugins/Archetype/views/archetype.html", From b67e150fe1de4f16e2163d06442230936aee7ddb Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:02:45 -0400 Subject: [PATCH 08/32] Merge in --- .../Archetype.Tests/Archetype.Tests.csproj | 86 ++++++++++--------- app/Umbraco/Archetype.Tests/packages.config | 6 +- app/Umbraco/DatabaseSizer.cs/app.config | 27 ++++++ 3 files changed, 74 insertions(+), 45 deletions(-) create mode 100644 app/Umbraco/DatabaseSizer.cs/app.config diff --git a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj index f3082fc..456de20 100644 --- a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj +++ b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj @@ -37,9 +37,9 @@ ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll @@ -47,20 +47,20 @@ ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll @@ -68,30 +68,32 @@ ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll - - - ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll - - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll + + + False + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll + + + False + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll True @@ -116,19 +118,19 @@ ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll @@ -173,47 +175,47 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll diff --git a/app/Umbraco/Archetype.Tests/packages.config b/app/Umbraco/Archetype.Tests/packages.config index 493b067..e0df35f 100644 --- a/app/Umbraco/Archetype.Tests/packages.config +++ b/app/Umbraco/Archetype.Tests/packages.config @@ -4,8 +4,8 @@ - - + + @@ -23,6 +23,6 @@ - + \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/app.config b/app/Umbraco/DatabaseSizer.cs/app.config new file mode 100644 index 0000000..ccb9166 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/app.config @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7fd1b69e81b8b6b533ca52ec7e587d844b76963c Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:03:31 -0400 Subject: [PATCH 09/32] Update packages to v7.1.2 - Also last commit --- .../Archetype.Umbraco.csproj | 74 +++++++------------ app/Umbraco/Umbraco.Archetype/packages.config | 6 +- 2 files changed, 29 insertions(+), 51 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index 2b38170..1673039 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.1\lib\businesslogic.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll @@ -53,20 +52,17 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll @@ -77,32 +73,26 @@ False - ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll - False + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll - ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll - False + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll False @@ -125,18 +115,17 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll - False - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll - False - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll @@ -183,48 +172,37 @@ - ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll diff --git a/app/Umbraco/Umbraco.Archetype/packages.config b/app/Umbraco/Umbraco.Archetype/packages.config index d006ee4..8da9da0 100644 --- a/app/Umbraco/Umbraco.Archetype/packages.config +++ b/app/Umbraco/Umbraco.Archetype/packages.config @@ -4,8 +4,8 @@ - - + + @@ -21,6 +21,6 @@ - + \ No newline at end of file From b0118f4bdb27dbf18febb85d7cb1f8593381ccd6 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:04:23 -0400 Subject: [PATCH 10/32] Add in DatabaseSizer - Temp DLL to not be included in dist --- app/Umbraco/DatabaseSizer.cs/Application.cs | 49 ++++ .../DatabaseSizer.cs/DatabaseSizer.csproj | 213 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 +++ app/Umbraco/DatabaseSizer.cs/packages.config | 25 ++ app/Umbraco/Umbraco.Archetype.sln | 6 + 5 files changed, 329 insertions(+) create mode 100644 app/Umbraco/DatabaseSizer.cs/Application.cs create mode 100644 app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj create mode 100644 app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs create mode 100644 app/Umbraco/DatabaseSizer.cs/packages.config diff --git a/app/Umbraco/DatabaseSizer.cs/Application.cs b/app/Umbraco/DatabaseSizer.cs/Application.cs new file mode 100644 index 0000000..0824ba5 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/Application.cs @@ -0,0 +1,49 @@ +using System; +using Umbraco.Core; +using Umbraco.Core.Logging; + +namespace DatabaseSizer +{ + public class Application : ApplicationEventHandler + { + protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) + { + base.ApplicationStarted(umbracoApplication, applicationContext); + + ExpandPrevalueValueColumnSize(); + } + + protected void ExpandPrevalueValueColumnSize() + { + try + { + var dbContext = ApplicationContext.Current.DatabaseContext; + var colCount = + dbContext.Database.ExecuteScalar( + "SELECT COUNT(1) FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'nvarchar' AND COLUMN_NAME = 'value' AND CHARACTER_MAXIMUM_LENGTH = 2500 AND TABLE_NAME = 'cmsDataTypePreValues'"); + + // Check column + if (colCount != 0) + { + using (var trans = dbContext.Database.GetTransaction()) + { + // Change column + dbContext.Database.Execute("ALTER TABLE [cmsDataTypePreValues] ALTER COLUMN [value] ntext NULL;"); + + trans.Complete(); + } + + LogHelper.Debug(typeof(Application), "Successfully expanded Prevalue table Value column"); + } + else + { + LogHelper.Debug(typeof(Application), "Prevalue table Value column is already expanded"); + } + } + catch (Exception ex) + { + LogHelper.Error(typeof(Application), "Error expanding Prevalue table Value column", ex); + } + } + } +} \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj b/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj new file mode 100644 index 0000000..60c92b8 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj @@ -0,0 +1,213 @@ + + + + + Debug + AnyCPU + {0114C963-C514-49C1-B7AB-DCB1825F498C} + Library + Properties + DatabaseSizer + DatabaseSizer + v4.5 + 512 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll + + + ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll + + + ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll + + + ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll + + + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll + + + ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll + + + ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll + + + ..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll + + + ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll + + + + + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll + + + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll + + + ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll + + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.Helpers.dll + + + ..\packages\Microsoft.AspNet.WebApi.Core.4.0.20710.0\lib\net40\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\lib\net40\System.Web.Http.WebHost.dll + + + True + ..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll + + + True + ..\packages\Microsoft.AspNet.Razor.2.0.20710.0\lib\net40\System.Web.Razor.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Deployment.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll + + + + + + + + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs b/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..46a4e6f --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DatabaseSizer.cs")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DatabaseSizer.cs")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("28dc35d2-3dfb-40b4-9093-bc47c91127ea")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/app/Umbraco/DatabaseSizer.cs/packages.config b/app/Umbraco/DatabaseSizer.cs/packages.config new file mode 100644 index 0000000..3fc6851 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/packages.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln index 88272ac..c400f99 100644 --- a/app/Umbraco/Umbraco.Archetype.sln +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -12,6 +12,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer.cs\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -26,6 +28,10 @@ Global {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.Build.0 = Release|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 45ccf6e06def0f95ce31c8128082be3152a14211 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:05:43 -0400 Subject: [PATCH 11/32] Update folder name --- app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Application.cs | 0 .../{DatabaseSizer.cs => DatabaseSizer}/DatabaseSizer.csproj | 0 .../Properties/AssemblyInfo.cs | 0 app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/app.config | 0 app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/packages.config | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Application.cs (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/DatabaseSizer.csproj (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Properties/AssemblyInfo.cs (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/app.config (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/packages.config (100%) diff --git a/app/Umbraco/DatabaseSizer.cs/Application.cs b/app/Umbraco/DatabaseSizer/Application.cs similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/Application.cs rename to app/Umbraco/DatabaseSizer/Application.cs diff --git a/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj b/app/Umbraco/DatabaseSizer/DatabaseSizer.csproj similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj rename to app/Umbraco/DatabaseSizer/DatabaseSizer.csproj diff --git a/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs b/app/Umbraco/DatabaseSizer/Properties/AssemblyInfo.cs similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs rename to app/Umbraco/DatabaseSizer/Properties/AssemblyInfo.cs diff --git a/app/Umbraco/DatabaseSizer.cs/app.config b/app/Umbraco/DatabaseSizer/app.config similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/app.config rename to app/Umbraco/DatabaseSizer/app.config diff --git a/app/Umbraco/DatabaseSizer.cs/packages.config b/app/Umbraco/DatabaseSizer/packages.config similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/packages.config rename to app/Umbraco/DatabaseSizer/packages.config From ecb933d13a2f7b5ee03c317714b6fe1f4beadafa Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:06:18 -0400 Subject: [PATCH 12/32] Update folder name in sln --- app/Umbraco/Umbraco.Archetype.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln index c400f99..bb5fa55 100644 --- a/app/Umbraco/Umbraco.Archetype.sln +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -12,7 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer.cs\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution From a48033874a6eec3ce0a8d835ad3da0576d1b4d45 Mon Sep 17 00:00:00 2001 From: kjac Date: Sat, 10 May 2014 17:25:16 +0200 Subject: [PATCH 13/32] Fix issue #121 Stop prompting the editor to save unsaved changes after saving. --- app/controllers/controller.js | 8 ++++++++ app/directives/archetypeproperty.js | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index c6c35f9..f28bdc0 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -67,6 +67,7 @@ $scope.model.value.fieldsets.push(newFieldset); } } + $scope.model.value.rowsChanged = true; newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -76,6 +77,7 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { + $scope.model.value.rowsChanged = true; $scope.model.value.fieldsets.splice($index, 1); } } @@ -116,6 +118,10 @@ //helper, ini the render model from the server (model.value) function init() { $scope.model.value = removeNulls($scope.model.value); + + // state variable to keep track of any rows added/removed + $scope.model.value.rowsChanged = false; + addDefaultProperties($scope.model.value.fieldsets); } @@ -203,6 +209,8 @@ $scope.model.value.toString = stringify; } } + // re-initialize state + $scope.model.value.rowsChanged = $scope.model.value.rowsChanged || false; }); //helper to count what is visible diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 2433e5f..9370b9d 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -142,6 +142,14 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c //watch for changes since there is no two-way binding with the local model.value scope.$watch('model.value', function (newValue, oldValue) { + if (newValue == oldValue) { + //issue #121: + //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes + //special case: we need to update regardless of value change or not if the number of rows have changed, so the form picks up the dirty state on the newly added rows + if (!scope.archetypeRenderModel.rowsChanged) { + return; + } + } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; //trigger the validation pipeline From 62964dcfae5568107af05f213f6a297c8a16fe8c Mon Sep 17 00:00:00 2001 From: kjac Date: Sat, 10 May 2014 22:29:56 +0200 Subject: [PATCH 14/32] Update fix for issue #121 + fix issue #123 Use the built-in dirty state to handle row changes instead of the custom state variable introduced in the previous commit. Additionally this solves issue #123 by setting the dirty state when rows are removed or sorted. --- app/controllers/controller.js | 17 ++++++++--------- app/directives/archetypeproperty.js | 5 +---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index f28bdc0..e187a6a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -43,7 +43,7 @@ cursor: "move", handle: ".handle", update: function (ev, ui) { - + $scope.setDirty(); }, stop: function (ev, ui) { @@ -67,7 +67,7 @@ $scope.model.value.fieldsets.push(newFieldset); } } - $scope.model.value.rowsChanged = true; + $scope.setDirty(); newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -77,7 +77,7 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { - $scope.model.value.rowsChanged = true; + $scope.setDirty(); $scope.model.value.fieldsets.splice($index, 1); } } @@ -118,10 +118,6 @@ //helper, ini the render model from the server (model.value) function init() { $scope.model.value = removeNulls($scope.model.value); - - // state variable to keep track of any rows added/removed - $scope.model.value.rowsChanged = false; - addDefaultProperties($scope.model.value.fieldsets); } @@ -209,8 +205,6 @@ $scope.model.value.toString = stringify; } } - // re-initialize state - $scope.model.value.rowsChanged = $scope.model.value.rowsChanged || false; }); //helper to count what is visible @@ -269,6 +263,11 @@ return (typeof property == 'undefined') ? true : property.isValid; } + // helper to force the current form into the dirty state + $scope.setDirty = function () { + form.$setDirty(); + } + //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 9370b9d..43ff2e7 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -145,10 +145,7 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c if (newValue == oldValue) { //issue #121: //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes - //special case: we need to update regardless of value change or not if the number of rows have changed, so the form picks up the dirty state on the newly added rows - if (!scope.archetypeRenderModel.rowsChanged) { - return; - } + return; } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; From e2c7e9b0efa52a7e0669701d4b91af170b75a52c Mon Sep 17 00:00:00 2001 From: kjac Date: Sun, 11 May 2014 10:39:12 +0200 Subject: [PATCH 15/32] Issue #116: Add RegEx validation support Add RegEx validation for the individual properties in a fieldset as proposed in issue #116 --- .../Models/ArchetypePreValueProperty.cs | 5 ++++- app/directives/archetypeproperty.js | 20 +++++++++++++++---- app/langs/da-dk.js | 1 + app/langs/de-de.js | 1 + app/langs/en-gb.js | 1 + app/langs/en-us.js | 1 + app/langs/es-es.js | 1 + app/langs/fr-fr.js | 1 + app/langs/he-il.js | 1 + app/langs/it-it.js | 1 + app/langs/ja-jp.js | 1 + app/langs/ko-kr.js | 1 + app/langs/nb-no.js | 1 + app/langs/nl-nl.js | 1 + app/langs/pl-pl.js | 1 + app/langs/pt-br.js | 1 + app/langs/ru-ru.js | 1 + app/langs/sv-se.js | 1 + app/langs/zh-cn.js | 1 + app/views/archetype.config.html | 4 ++++ 20 files changed, 41 insertions(+), 5 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs index e2cc12b..e63ed23 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs @@ -30,6 +30,9 @@ namespace Archetype.Umbraco.Models public string Value { get; set; } [JsonProperty("required")] - public bool Required { get; set; } + public bool Required { get; set; } + + [JsonProperty("regEx")] + public bool RegEx { get; set; } } } \ No newline at end of file diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 2433e5f..2245b31 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -97,10 +97,22 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c property.isValid = true; var propertyConfig = getPropertyByAlias(configFieldsetModel, property.alias); - if(propertyConfig && propertyConfig.required && (property.value == null || property.value === "")){ - fieldset.isValid = false; - property.isValid = false; - valid = false; + if (propertyConfig) { + if(propertyConfig.required && (property.value == null || property.value === "")) { + fieldset.isValid = false; + property.isValid = false; + valid = false; + } + // issue 116: RegEx validate property value + // Only validate the property value if anything has been entered - RegEx is considered a supplement to "required". + if (valid == true && propertyConfig.regEx && property.value) { + var regEx = new RegExp(propertyConfig.regEx); + if (regEx.test(property.value) == false) { + fieldset.isValid = false; + property.isValid = false; + valid = false; + } + } } }); }); diff --git a/app/langs/da-dk.js b/app/langs/da-dk.js index 923133f..2203673 100644 --- a/app/langs/da-dk.js +++ b/app/langs/da-dk.js @@ -27,6 +27,7 @@ "defaultValue": "Standard værdi", "dataType": "Datatype", "required": "Påkrævet", + "regEx": "RegEx validering", "properties": "Egenskaber", "labelTemplate": "Label skabelon", "select": "Vælg", diff --git a/app/langs/de-de.js b/app/langs/de-de.js index 7446d25..00aaaf6 100644 --- a/app/langs/de-de.js +++ b/app/langs/de-de.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/en-gb.js b/app/langs/en-gb.js index 7f0fe80..404398f 100644 --- a/app/langs/en-gb.js +++ b/app/langs/en-gb.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/en-us.js b/app/langs/en-us.js index 7446d25..00aaaf6 100644 --- a/app/langs/en-us.js +++ b/app/langs/en-us.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/es-es.js b/app/langs/es-es.js index 7446d25..00aaaf6 100644 --- a/app/langs/es-es.js +++ b/app/langs/es-es.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/fr-fr.js b/app/langs/fr-fr.js index 7446d25..00aaaf6 100644 --- a/app/langs/fr-fr.js +++ b/app/langs/fr-fr.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/he-il.js b/app/langs/he-il.js index 7446d25..00aaaf6 100644 --- a/app/langs/he-il.js +++ b/app/langs/he-il.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/it-it.js b/app/langs/it-it.js index 7446d25..00aaaf6 100644 --- a/app/langs/it-it.js +++ b/app/langs/it-it.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ja-jp.js b/app/langs/ja-jp.js index 7446d25..00aaaf6 100644 --- a/app/langs/ja-jp.js +++ b/app/langs/ja-jp.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ko-kr.js b/app/langs/ko-kr.js index 7446d25..00aaaf6 100644 --- a/app/langs/ko-kr.js +++ b/app/langs/ko-kr.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/nb-no.js b/app/langs/nb-no.js index 7446d25..00aaaf6 100644 --- a/app/langs/nb-no.js +++ b/app/langs/nb-no.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/nl-nl.js b/app/langs/nl-nl.js index 7446d25..00aaaf6 100644 --- a/app/langs/nl-nl.js +++ b/app/langs/nl-nl.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/pl-pl.js b/app/langs/pl-pl.js index 7446d25..00aaaf6 100644 --- a/app/langs/pl-pl.js +++ b/app/langs/pl-pl.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/pt-br.js b/app/langs/pt-br.js index 7446d25..00aaaf6 100644 --- a/app/langs/pt-br.js +++ b/app/langs/pt-br.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ru-ru.js b/app/langs/ru-ru.js index 7446d25..00aaaf6 100644 --- a/app/langs/ru-ru.js +++ b/app/langs/ru-ru.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/sv-se.js b/app/langs/sv-se.js index 7446d25..00aaaf6 100644 --- a/app/langs/sv-se.js +++ b/app/langs/sv-se.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/zh-cn.js b/app/langs/zh-cn.js index 7446d25..00aaaf6 100644 --- a/app/langs/zh-cn.js +++ b/app/langs/zh-cn.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/views/archetype.config.html b/app/views/archetype.config.html index 5f769b1..cebb76c 100644 --- a/app/views/archetype.config.html +++ b/app/views/archetype.config.html @@ -64,6 +64,10 @@ +
+ + +
From 5c60c109d50e1d87961023eb3b6c490f24619793 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:43:38 -0400 Subject: [PATCH 16/32] Expose current form to nested Archetypes --- app/controllers/controller.js | 2 +- app/directives/archetypeproperty.js | 4 +++- app/views/archetype.html | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index c6c35f9..8cf246a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -4,7 +4,7 @@ $scope.model.hideLabel = $scope.model.config.hideLabel == 1; //get a reference to the current form - var form = angularHelper.getCurrentForm($scope); + $scope.form = $scope.form || angularHelper.getCurrentForm($scope); //set the config equal to our prevalue config $scope.model.config = $scope.model.config.archetypeConfig; diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 2433e5f..0ca0a9e 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -121,6 +121,7 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c } //define the initial model and config + scope.form = scope.umbracoForm; scope.model = {}; scope.model.config = {}; @@ -173,7 +174,8 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c fieldset: '=', fieldsetIndex: '=', archetypeRenderModel: '=', - umbracoPropertyAlias: '=' + umbracoPropertyAlias: '=', + umbracoForm: '=' } } }); \ No newline at end of file diff --git a/app/views/archetype.html b/app/views/archetype.html index 6cf11d0..6efdb32 100644 --- a/app/views/archetype.html +++ b/app/views/archetype.html @@ -37,7 +37,7 @@
- +
From 9a0e40b489e54c51c7a9ac48c3c189558bc9c2a5 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:44:18 -0400 Subject: [PATCH 17/32] Rename Model Files --- app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj | 6 +++--- .../Models/{Fieldset.cs => ArchetypeFieldsetModel.cs} | 0 .../Models/{Archetype.cs => ArchetypeModel.cs} | 0 .../Models/{Property.cs => ArchetypePropertyModel.cs} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename app/Umbraco/Umbraco.Archetype/Models/{Fieldset.cs => ArchetypeFieldsetModel.cs} (100%) rename app/Umbraco/Umbraco.Archetype/Models/{Archetype.cs => ArchetypeModel.cs} (100%) rename app/Umbraco/Umbraco.Archetype/Models/{Property.cs => ArchetypePropertyModel.cs} (100%) diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index 1673039..0288163 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -211,12 +211,12 @@ - + - - + + diff --git a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeFieldsetModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypeFieldsetModel.cs diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Archetype.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs diff --git a/app/Umbraco/Umbraco.Archetype/Models/Property.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePropertyModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Property.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypePropertyModel.cs From db82bd80133625e5edcfc5c981cadb40f94a4c3f Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:52:24 -0400 Subject: [PATCH 18/32] Remove setDirty() - Not sure how it made it in --- app/controllers/controller.js | 9 +-------- app/directives/archetypeproperty.js | 5 ----- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 2c59987..8cf246a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -43,7 +43,7 @@ cursor: "move", handle: ".handle", update: function (ev, ui) { - $scope.setDirty(); + }, stop: function (ev, ui) { @@ -67,7 +67,6 @@ $scope.model.value.fieldsets.push(newFieldset); } } - $scope.setDirty(); newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -77,7 +76,6 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { - $scope.setDirty(); $scope.model.value.fieldsets.splice($index, 1); } } @@ -263,11 +261,6 @@ return (typeof property == 'undefined') ? true : property.isValid; } - // helper to force the current form into the dirty state - $scope.setDirty = function () { - form.$setDirty(); - } - //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 813a5a6..7231ab9 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -155,11 +155,6 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c //watch for changes since there is no two-way binding with the local model.value scope.$watch('model.value', function (newValue, oldValue) { - if (newValue == oldValue) { - //issue #121: - //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes - return; - } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; //trigger the validation pipeline From 2bf2e5f91a8aeb5676f0adbe7b1257e7a40a6b83 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Thu, 8 May 2014 17:47:24 -0400 Subject: [PATCH 19/32] Update naming scheme --- .../Archetype.Tests/Models/FieldsetTests.cs | 8 ++-- .../PropertyValueConverterTests.cs | 12 ++--- .../Api/ArchetypeDataTypeController.cs | 2 +- .../Archetype.Umbraco.csproj | 2 +- app/Umbraco/Umbraco.Archetype/Constants.cs | 2 +- .../Umbraco.Archetype/Events/ExpireCache.cs | 2 +- .../Extensions/ArchetypeHelper.cs | 18 +++---- .../Extensions/Extensions.cs | 6 +-- .../Umbraco.Archetype/Models/Archetype.cs | 12 ++--- .../Models/ArchetypePreValue.cs | 2 +- .../Models/ArchetypePreValueFieldset.cs | 2 +- .../Models/ArchetypePreValueProperty.cs | 2 +- .../Umbraco.Archetype/Models/Fieldset.cs | 12 ++--- .../Umbraco.Archetype/Models/Property.cs | 4 +- .../ArchetypeValueConverter.cs | 48 +++++++++---------- .../ArcheTypePropertyEditor.cs | 4 +- 16 files changed, 69 insertions(+), 69 deletions(-) diff --git a/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs index 3b1c401..e1bbc0d 100644 --- a/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs +++ b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using Archetype.Umbraco.PropertyConverters; +using Archetype.PropertyConverters; using NUnit.Framework; namespace Archetype.Tests.Models @@ -26,7 +26,7 @@ namespace Archetype.Tests.Models public void Can_Get_Fieldset_Property_By_Alias() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); var propertyValue = fieldset.GetValue("boxHeadline"); @@ -38,7 +38,7 @@ namespace Archetype.Tests.Models public void Can_Convert_Property_Value_Types() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); @@ -51,7 +51,7 @@ namespace Archetype.Tests.Models public void Returns_String_When_No_Type_Specified() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); var fieldset = result.Fieldsets.First(); diff --git a/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs index 6329a4d..63f595c 100644 --- a/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs +++ b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using Archetype.Umbraco.PropertyConverters; +using Archetype.PropertyConverters; using Moq; using NUnit.Framework; using Umbraco.Core.Models.PublishedContent; @@ -31,9 +31,9 @@ namespace Archetype.Tests.PropertyValueConverter var converter = new ArchetypeValueConverter(); var result = converter.ConvertDataToSource(null, data, false); - Assert.AreEqual(result.GetType(), typeof (Archetype.Umbraco.Models.Archetype)); + Assert.AreEqual(result.GetType(), typeof (Archetype.Models.ArchetypeModel)); - var fieldsets = (Archetype.Umbraco.Models.Archetype) result; + var fieldsets = (Archetype.Models.ArchetypeModel) result; Assert.IsTrue(fieldsets.Count() == 0); } @@ -44,9 +44,9 @@ namespace Archetype.Tests.PropertyValueConverter var converter = new ArchetypeValueConverter(); var result = converter.ConvertDataToSource(null, data, false); - Assert.AreEqual(result.GetType(), typeof (Archetype.Umbraco.Models.Archetype)); + Assert.AreEqual(result.GetType(), typeof (Archetype.Models.ArchetypeModel)); - var fieldsets = (Archetype.Umbraco.Models.Archetype) result; + var fieldsets = (Archetype.Models.ArchetypeModel) result; Assert.IsTrue(fieldsets.Count() == 0); } @@ -54,7 +54,7 @@ namespace Archetype.Tests.PropertyValueConverter public void Can_Serialize_From_Json_Model() { var converter = new ArchetypeValueConverter(); - var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false); + var result = (Archetype.Models.ArchetypeModel)converter.ConvertDataToSource(null, _sampleJson, false); Assert.That(result != null); Assert.That(result.Fieldsets.Count() == 2); diff --git a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs index 3a03b2f..a544c3a 100644 --- a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs +++ b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs @@ -9,7 +9,7 @@ using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.Editors; -namespace Archetype.Umbraco.Api +namespace Archetype.Api { [PluginController("ArchetypeApi")] public class ArchetypeDataTypeController : UmbracoAuthorizedJsonController diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index f379ec2..2b38170 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -7,7 +7,7 @@ {7D185D41-4228-4978-ACB8-83F9A48AD94F} Library Properties - Archetype.Umbraco + Archetype Archetype v4.5 512 diff --git a/app/Umbraco/Umbraco.Archetype/Constants.cs b/app/Umbraco/Umbraco.Archetype/Constants.cs index 83d036b..f8e6b50 100644 --- a/app/Umbraco/Umbraco.Archetype/Constants.cs +++ b/app/Umbraco/Umbraco.Archetype/Constants.cs @@ -1,4 +1,4 @@ -namespace Archetype.Umbraco +namespace Archetype { public static class Constants { diff --git a/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs b/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs index 3db68df..792165b 100644 --- a/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs +++ b/app/Umbraco/Umbraco.Archetype/Events/ExpireCache.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Models; using Umbraco.Core.Services; using Umbraco.Web; -namespace Archetype.Umbraco.Events +namespace Archetype.Events { public class ExpireCache : ApplicationEventHandler { diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs index 6517af7..1db4ea6 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -1,11 +1,11 @@ using System; using System.Linq; -using Archetype.Umbraco.Models; +using Archetype.Models; using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.Models; -namespace Archetype.Umbraco.Extensions +namespace Archetype.Extensions { public class ArchetypeHelper { @@ -22,11 +22,11 @@ namespace Archetype.Umbraco.Extensions _app = ApplicationContext.Current; } - internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues) + internal Models.ArchetypeModel DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues) { try { - var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); + var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); try { @@ -42,15 +42,15 @@ namespace Archetype.Umbraco.Extensions } catch { - return new Models.Archetype(); + return new Models.ArchetypeModel(); } } - internal Models.Archetype DeserializeJsonToArchetype(string sourceJson, int dataTypeId) + internal Models.ArchetypeModel DeserializeJsonToArchetype(string sourceJson, int dataTypeId) { try { - var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); + var archetype = JsonConvert.DeserializeObject(sourceJson, _jsonSettings); try { @@ -66,7 +66,7 @@ namespace Archetype.Umbraco.Extensions } catch { - return new Models.Archetype(); + return new Models.ArchetypeModel(); } } @@ -110,7 +110,7 @@ namespace Archetype.Umbraco.Extensions /// /// The Archetype to add the additional metadata to /// The configuration of the Archetype - private void RetrieveAdditionalProperties(ref Models.Archetype archetype, ArchetypePreValue preValue) + private void RetrieveAdditionalProperties(ref Models.ArchetypeModel archetype, ArchetypePreValue preValue) { foreach (var fieldset in preValue.Fieldsets) { diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs index c9f3953..943d74c 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs @@ -5,9 +5,9 @@ using System.Text.RegularExpressions; using System.Collections.Generic; using Umbraco.Core; using Umbraco.Web; -using Archetype.Umbraco.Models; +using Archetype.Models; -namespace Archetype.Umbraco.Extensions +namespace Archetype.Extensions { public static class Extensions { @@ -19,7 +19,7 @@ namespace Archetype.Umbraco.Extensions || input.StartsWith("[") && input.EndsWith("]"); } - public static bool IsArchetype(this Property prop) + public static bool IsArchetype(this ArchetypeProperty prop) { return prop.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditorAlias); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs index 91763ff..1587050 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs @@ -5,20 +5,20 @@ using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { [JsonObject] - public class Archetype : IEnumerable
+ public class ArchetypeModel : IEnumerable { [JsonProperty("fieldsets")] - internal IEnumerable
Fieldsets { get; set; } + internal IEnumerable Fieldsets { get; set; } - public Archetype() + public ArchetypeModel() { - Fieldsets = new List
(); + Fieldsets = new List(); } - public IEnumerator
GetEnumerator() + public IEnumerator GetEnumerator() { return this.Fieldsets.GetEnumerator(); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs index 653af0e..7d0e0dc 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValue { diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs index 251203a..b65683b 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValueFieldset { diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs index e2cc12b..e287187 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs @@ -1,7 +1,7 @@ using System; using Newtonsoft.Json; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { public class ArchetypePreValueProperty { diff --git a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs index 23dec2d..2357946 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs @@ -3,19 +3,19 @@ using System.Linq; using Newtonsoft.Json; using Umbraco.Core; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { - public class Fieldset + public class ArchetypeFieldsetModel { [JsonProperty("alias")] public string Alias { get; set; } [JsonProperty("properties")] - public IEnumerable Properties; + public IEnumerable Properties; - public Fieldset() + public ArchetypeFieldsetModel() { - Properties = new List(); + Properties = new List(); } #region Helper Methods @@ -49,7 +49,7 @@ namespace Archetype.Umbraco.Models return !string.IsNullOrEmpty(property.Value.ToString()); } - private Property GetProperty(string propertyAlias) + private ArchetypeProperty GetProperty(string propertyAlias) { return Properties.FirstOrDefault(p => p.Alias.InvariantEquals(propertyAlias)); } diff --git a/app/Umbraco/Umbraco.Archetype/Models/Property.cs b/app/Umbraco/Umbraco.Archetype/Models/Property.cs index 902e434..9a28856 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/Property.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/Property.cs @@ -7,9 +7,9 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Web; -namespace Archetype.Umbraco.Models +namespace Archetype.Models { - public class Property + public class ArchetypeProperty { [JsonProperty("alias")] public string Alias { get; internal set; } diff --git a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs index 2f096d3..e6991e0 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using Archetype.Umbraco.Extensions; -using Archetype.Umbraco.Models; +using Archetype.Extensions; +using Archetype.Models; using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.Models; @@ -10,30 +10,30 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; -namespace Archetype.Umbraco.PropertyConverters -{ - [PropertyValueType(typeof(Models.Archetype))] - [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] - public class ArchetypeValueConverter : PropertyValueConverterBase - { - - public ServiceContext Services - { - get { return ApplicationContext.Current.Services; } - } - - public override bool IsConverter(PublishedPropertyType propertyType) - { - return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditorAlias); - } - +namespace Archetype.PropertyConverters +{ + [PropertyValueType(typeof(Models.ArchetypeModel))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class ArchetypeValueConverter : PropertyValueConverterBase + { + + public ServiceContext Services + { + get { return ApplicationContext.Current.Services; } + } + + public override bool IsConverter(PublishedPropertyType propertyType) + { + return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditorAlias); + } + public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) { - var defaultValue = new Models.Archetype(); - - if (source == null) - return defaultValue; - + var defaultValue = new Models.ArchetypeModel(); + + if (source == null) + return defaultValue; + var sourceString = source.ToString(); if (!sourceString.DetectIsJson()) diff --git a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs index 3192130..9877119 100644 --- a/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs +++ b/app/Umbraco/Umbraco.Archetype/PropertyEditors/ArcheTypePropertyEditor.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using Archetype.Umbraco.Extensions; +using Archetype.Extensions; using ClientDependency.Core; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -13,7 +13,7 @@ using Umbraco.Core.Services; using Umbraco.Web.PropertyEditors; using Umbraco.Core.Logging; -namespace Archetype.Umbraco.PropertyEditors +namespace Archetype.PropertyEditors { [PropertyEditorAsset(ClientDependencyType.Javascript, "/App_Plugins/Archetype/js/archetype.js")] [PropertyEditor("Imulus.Archetype", "Archetype", "/App_Plugins/Archetype/views/archetype.html", From 09a3172c80762a8f3d3f984dea86a18b1fb520a5 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:02:45 -0400 Subject: [PATCH 20/32] Merge in --- .../Archetype.Tests/Archetype.Tests.csproj | 86 ++++++++++--------- app/Umbraco/Archetype.Tests/packages.config | 6 +- app/Umbraco/DatabaseSizer.cs/app.config | 27 ++++++ 3 files changed, 74 insertions(+), 45 deletions(-) create mode 100644 app/Umbraco/DatabaseSizer.cs/app.config diff --git a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj index f3082fc..456de20 100644 --- a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj +++ b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj @@ -37,9 +37,9 @@ ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll @@ -47,20 +47,20 @@ ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll @@ -68,30 +68,32 @@ ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll - - - ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll - - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll + + + False + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll + + + False + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll True @@ -116,19 +118,19 @@ ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll @@ -173,47 +175,47 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll - + False - ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll diff --git a/app/Umbraco/Archetype.Tests/packages.config b/app/Umbraco/Archetype.Tests/packages.config index 493b067..e0df35f 100644 --- a/app/Umbraco/Archetype.Tests/packages.config +++ b/app/Umbraco/Archetype.Tests/packages.config @@ -4,8 +4,8 @@ - - + + @@ -23,6 +23,6 @@ - + \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/app.config b/app/Umbraco/DatabaseSizer.cs/app.config new file mode 100644 index 0000000..ccb9166 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/app.config @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d4cf60d5f3368907a963424889d56910636a9d34 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:03:31 -0400 Subject: [PATCH 21/32] Update packages to v7.1.2 - Also last commit --- .../Archetype.Umbraco.csproj | 74 +++++++------------ app/Umbraco/Umbraco.Archetype/packages.config | 6 +- 2 files changed, 29 insertions(+), 51 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index 2b38170..1673039 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.1\lib\businesslogic.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll @@ -53,20 +52,17 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll @@ -77,32 +73,26 @@ False - ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll - False + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll - ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll - False + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll False @@ -125,18 +115,17 @@ False - ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll - False - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll - False - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll @@ -183,48 +172,37 @@ - ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll - ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll - False + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll diff --git a/app/Umbraco/Umbraco.Archetype/packages.config b/app/Umbraco/Umbraco.Archetype/packages.config index d006ee4..8da9da0 100644 --- a/app/Umbraco/Umbraco.Archetype/packages.config +++ b/app/Umbraco/Umbraco.Archetype/packages.config @@ -4,8 +4,8 @@ - - + + @@ -21,6 +21,6 @@ - + \ No newline at end of file From d5038a52d125992da42c778b560f5895b2db2da6 Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:04:23 -0400 Subject: [PATCH 22/32] Add in DatabaseSizer - Temp DLL to not be included in dist --- app/Umbraco/DatabaseSizer.cs/Application.cs | 49 ++++ .../DatabaseSizer.cs/DatabaseSizer.csproj | 213 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 +++ app/Umbraco/DatabaseSizer.cs/packages.config | 25 ++ app/Umbraco/Umbraco.Archetype.sln | 6 + 5 files changed, 329 insertions(+) create mode 100644 app/Umbraco/DatabaseSizer.cs/Application.cs create mode 100644 app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj create mode 100644 app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs create mode 100644 app/Umbraco/DatabaseSizer.cs/packages.config diff --git a/app/Umbraco/DatabaseSizer.cs/Application.cs b/app/Umbraco/DatabaseSizer.cs/Application.cs new file mode 100644 index 0000000..0824ba5 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/Application.cs @@ -0,0 +1,49 @@ +using System; +using Umbraco.Core; +using Umbraco.Core.Logging; + +namespace DatabaseSizer +{ + public class Application : ApplicationEventHandler + { + protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) + { + base.ApplicationStarted(umbracoApplication, applicationContext); + + ExpandPrevalueValueColumnSize(); + } + + protected void ExpandPrevalueValueColumnSize() + { + try + { + var dbContext = ApplicationContext.Current.DatabaseContext; + var colCount = + dbContext.Database.ExecuteScalar( + "SELECT COUNT(1) FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'nvarchar' AND COLUMN_NAME = 'value' AND CHARACTER_MAXIMUM_LENGTH = 2500 AND TABLE_NAME = 'cmsDataTypePreValues'"); + + // Check column + if (colCount != 0) + { + using (var trans = dbContext.Database.GetTransaction()) + { + // Change column + dbContext.Database.Execute("ALTER TABLE [cmsDataTypePreValues] ALTER COLUMN [value] ntext NULL;"); + + trans.Complete(); + } + + LogHelper.Debug(typeof(Application), "Successfully expanded Prevalue table Value column"); + } + else + { + LogHelper.Debug(typeof(Application), "Prevalue table Value column is already expanded"); + } + } + catch (Exception ex) + { + LogHelper.Error(typeof(Application), "Error expanding Prevalue table Value column", ex); + } + } + } +} \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj b/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj new file mode 100644 index 0000000..60c92b8 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj @@ -0,0 +1,213 @@ + + + + + Debug + AnyCPU + {0114C963-C514-49C1-B7AB-DCB1825F498C} + Library + Properties + DatabaseSizer + DatabaseSizer + v4.5 + 512 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\businesslogic.dll + + + ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll + + + ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\cms.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\controls.dll + + + ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Examine.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\packages\ImageProcessor.1.9.0.0\lib\ImageProcessor.dll + + + ..\packages\ImageProcessor.Web.3.2.3.0\lib\net45\ImageProcessor.Web.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\interfaces.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\log4net.dll + + + ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.ApplicationBlocks.Data.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Microsoft.Web.Helpers.dll + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll + + + ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll + + + ..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll + + + ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\SQLCE4Umbraco.dll + + + + + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.dll + + + True + ..\packages\UmbracoCms.Core.7.1.2\lib\System.Data.SqlServerCe.Entity.dll + + + ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll + + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.Helpers.dll + + + ..\packages\Microsoft.AspNet.WebApi.Core.4.0.20710.0\lib\net40\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\lib\net40\System.Web.Http.WebHost.dll + + + True + ..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll + + + True + ..\packages\Microsoft.AspNet.Razor.2.0.20710.0\lib\net40\System.Web.Razor.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Deployment.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll + + + + + + + + ..\packages\UmbracoCms.Core.7.1.2\lib\TidyNet.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Core.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.DataLayer.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.editorControls.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.MacroEngines.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.providers.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\Umbraco.Web.UI.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\umbraco.XmlSerializers.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\UmbracoExamine.dll + + + ..\packages\UmbracoCms.Core.7.1.2\lib\UrlRewritingNet.UrlRewriter.dll + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs b/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..46a4e6f --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DatabaseSizer.cs")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DatabaseSizer.cs")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("28dc35d2-3dfb-40b4-9093-bc47c91127ea")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/app/Umbraco/DatabaseSizer.cs/packages.config b/app/Umbraco/DatabaseSizer.cs/packages.config new file mode 100644 index 0000000..3fc6851 --- /dev/null +++ b/app/Umbraco/DatabaseSizer.cs/packages.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln index 88272ac..c400f99 100644 --- a/app/Umbraco/Umbraco.Archetype.sln +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -12,6 +12,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer.cs\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -26,6 +28,10 @@ Global {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.Build.0 = Release|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0114C963-C514-49C1-B7AB-DCB1825F498C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 2cc4fd711aa6d0cc379e4f0e092186b42461ce2f Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:05:43 -0400 Subject: [PATCH 23/32] Update folder name --- app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Application.cs | 0 .../{DatabaseSizer.cs => DatabaseSizer}/DatabaseSizer.csproj | 0 .../Properties/AssemblyInfo.cs | 0 app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/app.config | 0 app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/packages.config | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Application.cs (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/DatabaseSizer.csproj (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/Properties/AssemblyInfo.cs (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/app.config (100%) rename app/Umbraco/{DatabaseSizer.cs => DatabaseSizer}/packages.config (100%) diff --git a/app/Umbraco/DatabaseSizer.cs/Application.cs b/app/Umbraco/DatabaseSizer/Application.cs similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/Application.cs rename to app/Umbraco/DatabaseSizer/Application.cs diff --git a/app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj b/app/Umbraco/DatabaseSizer/DatabaseSizer.csproj similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/DatabaseSizer.csproj rename to app/Umbraco/DatabaseSizer/DatabaseSizer.csproj diff --git a/app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs b/app/Umbraco/DatabaseSizer/Properties/AssemblyInfo.cs similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/Properties/AssemblyInfo.cs rename to app/Umbraco/DatabaseSizer/Properties/AssemblyInfo.cs diff --git a/app/Umbraco/DatabaseSizer.cs/app.config b/app/Umbraco/DatabaseSizer/app.config similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/app.config rename to app/Umbraco/DatabaseSizer/app.config diff --git a/app/Umbraco/DatabaseSizer.cs/packages.config b/app/Umbraco/DatabaseSizer/packages.config similarity index 100% rename from app/Umbraco/DatabaseSizer.cs/packages.config rename to app/Umbraco/DatabaseSizer/packages.config From 3b2559c37dfee6f71db7b13062dc822fcce8593b Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Fri, 9 May 2014 12:06:18 -0400 Subject: [PATCH 24/32] Update folder name in sln --- app/Umbraco/Umbraco.Archetype.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln index c400f99..bb5fa55 100644 --- a/app/Umbraco/Umbraco.Archetype.sln +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -12,7 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer.cs\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSizer", "DatabaseSizer\DatabaseSizer.csproj", "{0114C963-C514-49C1-B7AB-DCB1825F498C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution From 7c3c0e041d476edd5403d6334538ab15a9bd1e30 Mon Sep 17 00:00:00 2001 From: kjac Date: Sat, 10 May 2014 17:25:16 +0200 Subject: [PATCH 25/32] Fix issue #121 Stop prompting the editor to save unsaved changes after saving. --- app/controllers/controller.js | 8 ++++++++ app/directives/archetypeproperty.js | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index c6c35f9..f28bdc0 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -67,6 +67,7 @@ $scope.model.value.fieldsets.push(newFieldset); } } + $scope.model.value.rowsChanged = true; newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -76,6 +77,7 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { + $scope.model.value.rowsChanged = true; $scope.model.value.fieldsets.splice($index, 1); } } @@ -116,6 +118,10 @@ //helper, ini the render model from the server (model.value) function init() { $scope.model.value = removeNulls($scope.model.value); + + // state variable to keep track of any rows added/removed + $scope.model.value.rowsChanged = false; + addDefaultProperties($scope.model.value.fieldsets); } @@ -203,6 +209,8 @@ $scope.model.value.toString = stringify; } } + // re-initialize state + $scope.model.value.rowsChanged = $scope.model.value.rowsChanged || false; }); //helper to count what is visible diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 2433e5f..9370b9d 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -142,6 +142,14 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c //watch for changes since there is no two-way binding with the local model.value scope.$watch('model.value', function (newValue, oldValue) { + if (newValue == oldValue) { + //issue #121: + //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes + //special case: we need to update regardless of value change or not if the number of rows have changed, so the form picks up the dirty state on the newly added rows + if (!scope.archetypeRenderModel.rowsChanged) { + return; + } + } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; //trigger the validation pipeline From 448bbe26f0a35175b2c36c9bd6d9f337088ec889 Mon Sep 17 00:00:00 2001 From: kjac Date: Sat, 10 May 2014 22:29:56 +0200 Subject: [PATCH 26/32] Update fix for issue #121 + fix issue #123 Use the built-in dirty state to handle row changes instead of the custom state variable introduced in the previous commit. Additionally this solves issue #123 by setting the dirty state when rows are removed or sorted. --- app/controllers/controller.js | 17 ++++++++--------- app/directives/archetypeproperty.js | 5 +---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index f28bdc0..e187a6a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -43,7 +43,7 @@ cursor: "move", handle: ".handle", update: function (ev, ui) { - + $scope.setDirty(); }, stop: function (ev, ui) { @@ -67,7 +67,7 @@ $scope.model.value.fieldsets.push(newFieldset); } } - $scope.model.value.rowsChanged = true; + $scope.setDirty(); newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -77,7 +77,7 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { - $scope.model.value.rowsChanged = true; + $scope.setDirty(); $scope.model.value.fieldsets.splice($index, 1); } } @@ -118,10 +118,6 @@ //helper, ini the render model from the server (model.value) function init() { $scope.model.value = removeNulls($scope.model.value); - - // state variable to keep track of any rows added/removed - $scope.model.value.rowsChanged = false; - addDefaultProperties($scope.model.value.fieldsets); } @@ -209,8 +205,6 @@ $scope.model.value.toString = stringify; } } - // re-initialize state - $scope.model.value.rowsChanged = $scope.model.value.rowsChanged || false; }); //helper to count what is visible @@ -269,6 +263,11 @@ return (typeof property == 'undefined') ? true : property.isValid; } + // helper to force the current form into the dirty state + $scope.setDirty = function () { + form.$setDirty(); + } + //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 9370b9d..43ff2e7 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -145,10 +145,7 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c if (newValue == oldValue) { //issue #121: //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes - //special case: we need to update regardless of value change or not if the number of rows have changed, so the form picks up the dirty state on the newly added rows - if (!scope.archetypeRenderModel.rowsChanged) { - return; - } + return; } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; From 6e50301da5a70f554e3b4aa12ed6c561f72ca07b Mon Sep 17 00:00:00 2001 From: kjac Date: Sun, 11 May 2014 10:39:12 +0200 Subject: [PATCH 27/32] Issue #116: Add RegEx validation support Add RegEx validation for the individual properties in a fieldset as proposed in issue #116 --- .../Models/ArchetypePreValueProperty.cs | 5 ++++- app/directives/archetypeproperty.js | 20 +++++++++++++++---- app/langs/da-dk.js | 1 + app/langs/de-de.js | 1 + app/langs/en-gb.js | 1 + app/langs/en-us.js | 1 + app/langs/es-es.js | 1 + app/langs/fr-fr.js | 1 + app/langs/he-il.js | 1 + app/langs/it-it.js | 1 + app/langs/ja-jp.js | 1 + app/langs/ko-kr.js | 1 + app/langs/nb-no.js | 1 + app/langs/nl-nl.js | 1 + app/langs/pl-pl.js | 1 + app/langs/pt-br.js | 1 + app/langs/ru-ru.js | 1 + app/langs/sv-se.js | 1 + app/langs/zh-cn.js | 1 + app/views/archetype.config.html | 4 ++++ 20 files changed, 41 insertions(+), 5 deletions(-) diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs index e287187..9031e8b 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueProperty.cs @@ -30,6 +30,9 @@ namespace Archetype.Models public string Value { get; set; } [JsonProperty("required")] - public bool Required { get; set; } + public bool Required { get; set; } + + [JsonProperty("regEx")] + public bool RegEx { get; set; } } } \ No newline at end of file diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 43ff2e7..3e559aa 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -97,10 +97,22 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c property.isValid = true; var propertyConfig = getPropertyByAlias(configFieldsetModel, property.alias); - if(propertyConfig && propertyConfig.required && (property.value == null || property.value === "")){ - fieldset.isValid = false; - property.isValid = false; - valid = false; + if (propertyConfig) { + if(propertyConfig.required && (property.value == null || property.value === "")) { + fieldset.isValid = false; + property.isValid = false; + valid = false; + } + // issue 116: RegEx validate property value + // Only validate the property value if anything has been entered - RegEx is considered a supplement to "required". + if (valid == true && propertyConfig.regEx && property.value) { + var regEx = new RegExp(propertyConfig.regEx); + if (regEx.test(property.value) == false) { + fieldset.isValid = false; + property.isValid = false; + valid = false; + } + } } }); }); diff --git a/app/langs/da-dk.js b/app/langs/da-dk.js index 923133f..2203673 100644 --- a/app/langs/da-dk.js +++ b/app/langs/da-dk.js @@ -27,6 +27,7 @@ "defaultValue": "Standard værdi", "dataType": "Datatype", "required": "Påkrævet", + "regEx": "RegEx validering", "properties": "Egenskaber", "labelTemplate": "Label skabelon", "select": "Vælg", diff --git a/app/langs/de-de.js b/app/langs/de-de.js index 7446d25..00aaaf6 100644 --- a/app/langs/de-de.js +++ b/app/langs/de-de.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/en-gb.js b/app/langs/en-gb.js index 7f0fe80..404398f 100644 --- a/app/langs/en-gb.js +++ b/app/langs/en-gb.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/en-us.js b/app/langs/en-us.js index 7446d25..00aaaf6 100644 --- a/app/langs/en-us.js +++ b/app/langs/en-us.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/es-es.js b/app/langs/es-es.js index 7446d25..00aaaf6 100644 --- a/app/langs/es-es.js +++ b/app/langs/es-es.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/fr-fr.js b/app/langs/fr-fr.js index 7446d25..00aaaf6 100644 --- a/app/langs/fr-fr.js +++ b/app/langs/fr-fr.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/he-il.js b/app/langs/he-il.js index 7446d25..00aaaf6 100644 --- a/app/langs/he-il.js +++ b/app/langs/he-il.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/it-it.js b/app/langs/it-it.js index 7446d25..00aaaf6 100644 --- a/app/langs/it-it.js +++ b/app/langs/it-it.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ja-jp.js b/app/langs/ja-jp.js index 7446d25..00aaaf6 100644 --- a/app/langs/ja-jp.js +++ b/app/langs/ja-jp.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ko-kr.js b/app/langs/ko-kr.js index 7446d25..00aaaf6 100644 --- a/app/langs/ko-kr.js +++ b/app/langs/ko-kr.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/nb-no.js b/app/langs/nb-no.js index 7446d25..00aaaf6 100644 --- a/app/langs/nb-no.js +++ b/app/langs/nb-no.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/nl-nl.js b/app/langs/nl-nl.js index 7446d25..00aaaf6 100644 --- a/app/langs/nl-nl.js +++ b/app/langs/nl-nl.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/pl-pl.js b/app/langs/pl-pl.js index 7446d25..00aaaf6 100644 --- a/app/langs/pl-pl.js +++ b/app/langs/pl-pl.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/pt-br.js b/app/langs/pt-br.js index 7446d25..00aaaf6 100644 --- a/app/langs/pt-br.js +++ b/app/langs/pt-br.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/ru-ru.js b/app/langs/ru-ru.js index 7446d25..00aaaf6 100644 --- a/app/langs/ru-ru.js +++ b/app/langs/ru-ru.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/sv-se.js b/app/langs/sv-se.js index 7446d25..00aaaf6 100644 --- a/app/langs/sv-se.js +++ b/app/langs/sv-se.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/langs/zh-cn.js b/app/langs/zh-cn.js index 7446d25..00aaaf6 100644 --- a/app/langs/zh-cn.js +++ b/app/langs/zh-cn.js @@ -27,6 +27,7 @@ "defaultValue": "Default Value", "dataType": "DataType", "required": "Required", + "regEx": "RegEx Validation", "properties": "Properties", "labelTemplate": "Label Template", "select": "Select", diff --git a/app/views/archetype.config.html b/app/views/archetype.config.html index 5f769b1..cebb76c 100644 --- a/app/views/archetype.config.html +++ b/app/views/archetype.config.html @@ -64,6 +64,10 @@ +
+ + +
From 932f098837c1cd0e57806ab12ed4338bf8b48bdd Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:43:38 -0400 Subject: [PATCH 28/32] Expose current form to nested Archetypes --- app/controllers/controller.js | 2 +- app/directives/archetypeproperty.js | 4 +++- app/views/archetype.html | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index e187a6a..2c59987 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -4,7 +4,7 @@ $scope.model.hideLabel = $scope.model.config.hideLabel == 1; //get a reference to the current form - var form = angularHelper.getCurrentForm($scope); + $scope.form = $scope.form || angularHelper.getCurrentForm($scope); //set the config equal to our prevalue config $scope.model.config = $scope.model.config.archetypeConfig; diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 3e559aa..813a5a6 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -133,6 +133,7 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c } //define the initial model and config + scope.form = scope.umbracoForm; scope.model = {}; scope.model.config = {}; @@ -190,7 +191,8 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c fieldset: '=', fieldsetIndex: '=', archetypeRenderModel: '=', - umbracoPropertyAlias: '=' + umbracoPropertyAlias: '=', + umbracoForm: '=' } } }); \ No newline at end of file diff --git a/app/views/archetype.html b/app/views/archetype.html index 6cf11d0..6efdb32 100644 --- a/app/views/archetype.html +++ b/app/views/archetype.html @@ -37,7 +37,7 @@
- +
From 75080b0e2de99235ac715b902a2e7a7a8b4ac82c Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:44:18 -0400 Subject: [PATCH 29/32] Rename Model Files --- app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj | 6 +++--- .../Models/{Fieldset.cs => ArchetypeFieldsetModel.cs} | 0 .../Models/{Archetype.cs => ArchetypeModel.cs} | 0 .../Models/{Property.cs => ArchetypePropertyModel.cs} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename app/Umbraco/Umbraco.Archetype/Models/{Fieldset.cs => ArchetypeFieldsetModel.cs} (100%) rename app/Umbraco/Umbraco.Archetype/Models/{Archetype.cs => ArchetypeModel.cs} (100%) rename app/Umbraco/Umbraco.Archetype/Models/{Property.cs => ArchetypePropertyModel.cs} (100%) diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index 1673039..0288163 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -211,12 +211,12 @@ - + - - + + diff --git a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeFieldsetModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypeFieldsetModel.cs diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Archetype.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs diff --git a/app/Umbraco/Umbraco.Archetype/Models/Property.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePropertyModel.cs similarity index 100% rename from app/Umbraco/Umbraco.Archetype/Models/Property.cs rename to app/Umbraco/Umbraco.Archetype/Models/ArchetypePropertyModel.cs From 9829ab796ae9d7987b9ae231550b3f55dd6a32fc Mon Sep 17 00:00:00 2001 From: Kevin Giszewski Date: Mon, 12 May 2014 12:52:24 -0400 Subject: [PATCH 30/32] Remove setDirty() - Not sure how it made it in --- app/controllers/controller.js | 9 +-------- app/directives/archetypeproperty.js | 5 ----- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 2c59987..8cf246a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -43,7 +43,7 @@ cursor: "move", handle: ".handle", update: function (ev, ui) { - $scope.setDirty(); + }, stop: function (ev, ui) { @@ -67,7 +67,6 @@ $scope.model.value.fieldsets.push(newFieldset); } } - $scope.setDirty(); newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -77,7 +76,6 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { - $scope.setDirty(); $scope.model.value.fieldsets.splice($index, 1); } } @@ -263,11 +261,6 @@ return (typeof property == 'undefined') ? true : property.isValid; } - // helper to force the current form into the dirty state - $scope.setDirty = function () { - form.$setDirty(); - } - //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 813a5a6..7231ab9 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -155,11 +155,6 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c //watch for changes since there is no two-way binding with the local model.value scope.$watch('model.value', function (newValue, oldValue) { - if (newValue == oldValue) { - //issue #121: - //don't update if there's nothing to update - if we do, the form will be considered dirty (even if the values are the same) and the user will be prompted to save/discard changes - return; - } scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; //trigger the validation pipeline From 8d3e3aeb0a2d14794d57c69ba9191f988a2c1d6f Mon Sep 17 00:00:00 2001 From: kjac Date: Mon, 12 May 2014 21:30:08 +0200 Subject: [PATCH 31/32] Stop Umbraco from asking to discard changes By calling ngModelCtrl.$setViewValue() only when there's actually a change in the value, we keep Umbraco from prompting to discard changes immediately after all changes have been saved (see issue #121 for more details). --- app/directives/archetypeproperty.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 7231ab9..3579bd6 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -157,8 +157,11 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c scope.$watch('model.value', function (newValue, oldValue) { scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value = newValue; - //trigger the validation pipeline - ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); + // don't set the current value twice - this will keep Umbraco from prompting to discard changes immediately after saving + if (newValue != oldValue) { + //trigger the validation pipeline + ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); + } }); element.html(data).show(); From 1c9bce8b667096c31f70a7c0d290285b997141b9 Mon Sep 17 00:00:00 2001 From: kjac Date: Mon, 12 May 2014 21:51:19 +0200 Subject: [PATCH 32/32] Explicitly set form as dirty on row changes Fix issue #123. Explicitly call $setDirty() on the PE form when reordering or removing rows, thus ensuring the editor will be prompted to discard changes if navigating away before saving. --- app/controllers/controller.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 8cf246a..b70426a 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -43,7 +43,7 @@ cursor: "move", handle: ".handle", update: function (ev, ui) { - + $scope.setDirty(); }, stop: function (ev, ui) { @@ -67,6 +67,7 @@ $scope.model.value.fieldsets.push(newFieldset); } } + $scope.setDirty(); newFieldset.collapse = $scope.model.config.enableCollapsing ? true : false; $scope.focusFieldset(newFieldset); @@ -76,6 +77,7 @@ $scope.removeRow = function ($index) { if ($scope.canRemove()) { if (confirm('Are you sure you want to remove this?')) { + $scope.setDirty(); $scope.model.value.fieldsets.splice($index, 1); } } @@ -261,6 +263,13 @@ return (typeof property == 'undefined') ? true : property.isValid; } + // helper to force the current form into the dirty state + $scope.setDirty = function () { + if($scope.form) { + $scope.form.$setDirty(); + } + } + //custom js if ($scope.model.config.customJsPath) { assetsService.loadJs($scope.model.config.customJsPath);