diff --git a/.gitignore b/.gitignore index a02f08f..625f205 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,48 @@ Desktop.ini $RECYCLE.BIN/ dist/ -node_modules/ \ No newline at end of file +node_modules/ +pkg/ + +[Dd]ebug/ +[Bb]uild/ +[Rr]elease/ +[Bb]in/ +[Oo]bj/ +[Pp]ackages/ + +*.aps +*.bak +*.backup +*.build.csdef +*.cache +*.ilk +*.lib +*.log +*.meta +*.ncb +*.obj +*.orig +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.scc +*.sdf +*.sln.docstates +*.suo +*.tlb +*.tlh +*.tli +*.tmp +*.user +*.vspscc +*.[Pp]ublish.xml +*_i.c +*_p.c +.builds +.svn +.hg +.hgignore \ No newline at end of file diff --git a/app/Umbraco/.nuget/NuGet.Config b/app/Umbraco/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/app/Umbraco/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/Umbraco/.nuget/NuGet.exe b/app/Umbraco/.nuget/NuGet.exe new file mode 100644 index 0000000..8f61340 Binary files /dev/null and b/app/Umbraco/.nuget/NuGet.exe differ diff --git a/app/Umbraco/.nuget/NuGet.targets b/app/Umbraco/.nuget/NuGet.targets new file mode 100644 index 0000000..0f124b1 --- /dev/null +++ b/app/Umbraco/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + true + + + false + + + false + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln new file mode 100644 index 0000000..70ff40d --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Umbraco", "Umbraco.Archetype\Archetype.Umbraco.csproj", "{7D185D41-4228-4978-ACB8-83F9A48AD94F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4ED-85A6-484F-9E72-BE7AC9835821}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj new file mode 100644 index 0000000..5f90e12 --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -0,0 +1,207 @@ + + + + + Debug + AnyCPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F} + Library + Properties + Archetype.Umbraco + Imulus.Archetype + v4.5 + 512 + ..\ + true + + + 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.0.1\lib\businesslogic.dll + + + ..\packages\ClientDependency.1.7.0.4\lib\ClientDependency.Core.dll + + + ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\cms.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\controls.dll + + + ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\Examine.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\interfaces.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\log4net.dll + + + ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\Microsoft.ApplicationBlocks.Data.dll + + + ..\packages\UmbracoCms.Core.7.0.1\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.1\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.4.5.11\lib\net40\Newtonsoft.Json.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\SQLCE4Umbraco.dll + + + + + True + ..\packages\UmbracoCms.Core.7.0.1\lib\System.Data.SqlServerCe.dll + + + True + ..\packages\UmbracoCms.Core.7.0.1\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.30506.0\lib\net40\System.Web.Helpers.dll + + + ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll + + + True + ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll + + + True + ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll + + + + + + + + ..\packages\UmbracoCms.Core.7.0.1\lib\TidyNet.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\Umbraco.Core.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.DataLayer.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.editorControls.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.MacroEngines.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.providers.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\Umbraco.Web.UI.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.XmlSerializers.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\UmbracoExamine.dll + + + ..\packages\UmbracoCms.Core.7.0.1\lib\UrlRewritingNet.UrlRewriter.dll + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs new file mode 100644 index 0000000..b875475 --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Extensions/Extensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Archetype.Umbraco.Extensions +{ + public static class Extensions + { + //lifted from the core as it is marked 'internal' + public static bool DetectIsJson(this string input) + { + input = input.Trim(); + return input.StartsWith("{") && input.EndsWith("}") + || input.StartsWith("[") && input.EndsWith("]"); + } + } +} diff --git a/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs new file mode 100644 index 0000000..380e41b --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Models/Archetype.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Archetype.Umbraco.Models +{ + public class Archetype + { + public IEnumerable
Fieldsets { get; set; } + + public Archetype() + { + Fieldsets = new List
(); + } + } +} diff --git a/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs new file mode 100644 index 0000000..e2aeaee --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Models/Fieldset.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Umbraco.Core; + +namespace Archetype.Umbraco.Models +{ + public class Fieldset + { + public string Alias { get; set; } + public IEnumerable Properties; + + public Fieldset() + { + Properties = new List(); + } + + public string GetValue(string propertyAlias) + { + return GetValue(propertyAlias); + } + + public T GetValue(string propertyAlias) + { + var property = GetProperty(propertyAlias); + + if (property == null || string.IsNullOrEmpty(property.Value)) + return default(T); + + var convertAttempt = property.Value.TryConvertTo(); + + if (convertAttempt.Success) + return convertAttempt.Result; + + return default(T); + } + + private Property 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 new file mode 100644 index 0000000..f8dc12f --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Models/Property.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Archetype.Umbraco.Models +{ + public class Property + { + public string Alias { get; set; } + public string Value { get; set; } + } +} diff --git a/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs b/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8cc19ef --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/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("Imulus.Archetype")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Imulus.Archetype")] +[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("e37e94f9-c7ba-4b54-b7e1-64419b3dba0b")] + +// 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/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs new file mode 100644 index 0000000..a087e13 --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/PropertyConverters/ArchetypeValueConverter.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Models.PublishedContent; +using Archetype.Umbraco.Models; +using Archetype.Umbraco.Extensions; + +namespace Archetype.Umbraco.PropertyConverters +{ + /* based on the Tim Geyssens sample at: https://github.com/TimGeyssens/MatrixPropEditor/blob/master/SamplePropertyValueConverter/SamplePropertyValueConverter/MatrixValueConverter.cs */ + [PropertyValueType(typeof(Archetype.Umbraco.Models.Archetype))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class ArchetypeValueConverter : PropertyValueConverterBase + { + public override bool IsConverter(PublishedPropertyType propertyType) + { + return propertyType.PropertyEditorAlias.Equals("Imulus.Archetype"); + } + + public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) + { + if (source == null) return null; + + var sourceString = source.ToString(); + + if (sourceString.DetectIsJson()) + { + try + { + var archetype = JsonConvert.DeserializeObject (sourceString); + return archetype; + } + catch (Exception ex) + { + return null; + } + } + + return sourceString; + } + } +} diff --git a/app/Umbraco/Umbraco.Archetype/packages.config b/app/Umbraco/Umbraco.Archetype/packages.config new file mode 100644 index 0000000..7918cdf --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/packages.config @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file