diff --git a/.gitignore b/.gitignore index 002e772..3598fad 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ pkg/*.zip [Bb]in/ [Oo]bj/ [Pp]ackages/ +VersionInfo.cs *.aps *.bak diff --git a/Gruntfile.js b/Gruntfile.js index d3935ec..50084a6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -5,6 +5,7 @@ module.exports = function(grunt) { dest: 'dist', package_dir: 'pkg', package_temp_dir: '<%= package_dir %>/tmp/', + csProj: 'app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj', watch: { @@ -25,7 +26,7 @@ module.exports = function(grunt) { }, dev: { - files: ['app/**'], + files: ['app/**', '!app/Umbraco/**', 'app/Umbraco/**/*.dll'], tasks: ['deploy'], options: { spawn: false @@ -89,7 +90,7 @@ module.exports = function(grunt) { author: '<%= pkgMeta.author %>', authorUrl: '<%= pkgMeta.authorUrl %>', - files: [{ path: '..\\..\\..\\<%= dest %>\\**', target: 'content\\App_Plugins\\Archetype'}] + files: [{ path: '..\\..\\..\\<%= package_temp_dir %>\\nuget\\**', target: 'content\\App_Plugins\\Archetype'}] } }, 'files': { @@ -109,25 +110,25 @@ module.exports = function(grunt) { {expand: true, cwd: 'app/views/', src: ['archetype.html', 'archetype.config.html'], dest: '<%= dest %>/views', flatten: true}, {expand: true, cwd: 'app/config/', src: ['propertyEditors.views.js'], dest: '<%= dest %>/js', flatten: true}, {expand: true, cwd: 'app/langs/', src: ['**'], dest: '<%= dest %>/langs', flatten: true}, - {expand: true, cwd: 'app/Umbraco/Umbraco.Archetype/bin/Debug/', src: ['Archetype.dll'], dest: '<%= dest %>/bin', flatten: true} + {expand: true, cwd: 'app/Umbraco/Umbraco.Archetype/bin/Debug/', src: ['Archetype.dll', 'Archetype.pdb'], dest: '<%= dest %>/bin', flatten: true} ] }, deploy: { files: [ - {expand: true, cwd: '<%= dest %>/', src: ['**/*', '!bin/*'], dest: '<%= grunt.option("target") %>\\App_Plugins\\Archetype', flatten: false}, - {expand: true, cwd: '<%= dest %>/', src: ['bin/*'], dest: '<%= grunt.option("target") %>\\bin', flatten: false}, + {expand: true, cwd: '<%= dest %>/', src: ['**/*', "!bin", "!bin/**/*"], dest: '<%= grunt.option("target") %>\\App_Plugins\\Archetype', flatten: false}, + {expand: true, cwd: '<%= dest %>/', src: ['bin/**/*'], dest: '<%= grunt.option("target") %>', flatten: false}, ] }, nuget_prepare: { files: [ - {expand: true, cwd: '<%= dest %>/', src: ['**/*', '!bin/*'], dest: '<%= package_temp_dir %>/nuget/content/', flatten: false}, - {expand: true, cwd: '<%= dest %>/', src: ['bin/*'], dest: '<%= package_temp_dir %>/nuget/lib/net40/', flatten: false} + {expand: true, cwd: '<%= dest %>/', src: ['**/*', '!bin', '!bin/*'], dest: '<%= package_temp_dir %>/nuget/content/App_Plugins/Archetype', flatten: false}, + {expand: true, cwd: '<%= dest %>/', src: ['bin/**/*.dll'], dest: '<%= package_temp_dir %>/nuget/lib/net40/', flatten: true} ] }, umbracopackage: { files: [ - {expand: true, cwd: '<%= dest %>/', src: ['**/*', "!bin/*"], dest: 'pkg/tmp/umbraco/App_Plugins/Archetype', flatten: false}, - {expand: true, cwd: '<%= dest %>/', src: ['bin/*'], dest: 'pkg/tmp/umbraco', flatten: false} + {expand: true, cwd: '<%= dest %>/', src: ['**/*', '!bin', "!bin/*"], dest: 'pkg/tmp/umbraco/App_Plugins/Archetype', flatten: false}, + {expand: true, cwd: '<%= dest %>/', src: ['bin/**/*.dll'], dest: 'pkg/tmp/umbraco', flatten: false} ] } }, @@ -161,16 +162,28 @@ module.exports = function(grunt) { package_artifacts: ['pkg/*.zip', 'pkg/*.nupkg'], }, + assemblyinfo: { + options: { + files: ['<%= csProj %>'], + filename: 'VersionInfo.cs', + info: { + version: '<%= (pkgMeta.version.indexOf("-") ? pkgMeta.version.substring(0, pkgMeta.version.indexOf("-")) : pkgMeta.version) %>', + fileVersion: '<%= pkgMeta.version %>' + } + } + }, + msbuild: { dev: { - src: ['app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj'], + src: ["<%= csProj %>"], options: { projectConfiguration: 'Debug', targets: ['Clean', 'Rebuild'], stdout: true, maxCpuCount: 4, buildParameters: { - WarningLevel: 2 + WarningLevel: 2, + NoWarn: 1607, }, verbosity: 'quiet' } @@ -190,6 +203,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-template'); grunt.loadNpmTasks('grunt-touch'); grunt.loadNpmTasks('grunt-msbuild'); + grunt.loadNpmTasks('grunt-dotnet-assembly-info'); grunt.loadTasks('tasks'); @@ -200,6 +214,7 @@ module.exports = function(grunt) { grunt.registerTask('deploy', ['default', 'copy:deploy', 'touchwebconfigifenabled']); grunt.registerTask('css:build', ['less']); grunt.registerTask('js:build', ['concat']); - grunt.registerTask('default', ['clean', 'css:build', 'js:build', 'copy:build', 'msbuild:dev']); + grunt.registerTask('cs:build', ['assemblyinfo', 'msbuild:dev']); + grunt.registerTask('default', ['clean', 'css:build', 'js:build', 'copy:build', 'cs:build']); }; diff --git a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs new file mode 100644 index 0000000..6bdb7ce --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs @@ -0,0 +1,25 @@ +using System.Net; +using System.Web.Http; +using AutoMapper; +using Umbraco.Core.Models; +using Umbraco.Web.Models.ContentEditing; +using Umbraco.Web.Mvc; +using Umbraco.Web.Editors; + +namespace Archetype.Umbraco.Api +{ + [PluginController("ArchetypeApi")] + public class ArchetypeDataTypeController : UmbracoAuthorizedJsonController + { + public object GetById(int id) + { + var dataType = Services.DataTypeService.GetDataTypeDefinitionById(id); + if (dataType == null) + { + throw new HttpResponseException(HttpStatusCode.NotFound); + } + var dataTypeDisplay = Mapper.Map(dataType); + return new { selectedEditor = dataTypeDisplay.SelectedEditor, preValues = dataTypeDisplay.PreValues }; + } + } +} diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index 9034fd3..05ed8ed 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -34,114 +34,138 @@ ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll + False ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\businesslogic.dll + False ..\packages\ClientDependency.1.7.0.4\lib\ClientDependency.Core.dll + False ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\cms.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\controls.dll + False ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\Examine.dll + False ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + False ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\interfaces.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\log4net.dll + False ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\Microsoft.ApplicationBlocks.Data.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\Microsoft.Web.Helpers.dll + False - True + False ..\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 + False ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll + False ..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll + False ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\SQLCE4Umbraco.dll + False - True + False ..\packages\UmbracoCms.Core.7.0.1\lib\System.Data.SqlServerCe.dll - True + False ..\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 + False - True + False ..\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 + False ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll + False - True + False ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll - True + False ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll - True + False ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll - True + False ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll - True + False ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll @@ -151,39 +175,51 @@ ..\packages\UmbracoCms.Core.7.0.1\lib\TidyNet.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\Umbraco.Core.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.DataLayer.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.editorControls.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.MacroEngines.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.providers.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\Umbraco.Web.UI.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\umbraco.XmlSerializers.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\UmbracoExamine.dll + False ..\packages\UmbracoCms.Core.7.0.1\lib\UrlRewritingNet.UrlRewriter.dll + False + @@ -193,6 +229,7 @@ + diff --git a/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs b/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs index 73447cf..6f0c2e3 100644 --- a/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs +++ b/app/Umbraco/Umbraco.Archetype/Properties/AssemblyInfo.cs @@ -1,37 +1,14 @@ 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("Archetype")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyDescription("Archetype's supporting code library for Umbraco")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("Imulus")] [assembly: AssemblyProduct("Archetype")] -[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyCopyright("Copyright \xa9 Imulus 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("0.1.0.0")] -[assembly: AssemblyFileVersion("0.1.0.0")] -[assembly: AssemblyInformationalVersion("0.1.0-alpha")] \ No newline at end of file +[assembly: Guid("E37E94F9-C7BA-4B54-B7E1-64419B3DBA0B")] \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs new file mode 100644 index 0000000..7a33150 --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs @@ -0,0 +1,4 @@ +using System.Reflection; + +[assembly: AssemblyVersion("0.0.0.0")] +[assembly: AssemblyFileVersion("0.0.0.0")] \ No newline at end of file diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 1e603cd..7a06c12 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -106,7 +106,7 @@ //helper, ini the render model from the server (model.value) function initArchetypeRenderModel() { - $scope.archetypeRenderModel = $scope.model.value; + $scope.archetypeRenderModel = removeNulls($scope.model.value); _.each($scope.archetypeRenderModel.fieldsets, function (fieldset) { @@ -201,7 +201,7 @@ _.each($scope.archetypeRenderModel.fieldsets, function(fieldset){ var cleanedFieldset = cleanFieldset(fieldset); - if(cleanFieldset){ + if(cleanedFieldset){ $scope.model.value.fieldsets.push(cleanedFieldset); } }); @@ -248,6 +248,20 @@ return JSON.parse('{"alias": "' + fieldsetModel.alias + '", "remove": false, "isValid": true, "properties": []}'); } + //helper to ensure no nulls make it into the model + function removeNulls(model){ + if(model.fieldsets){ + _.each(model.fieldsets, function(fieldset, index){ + if(!fieldset){ + model.fieldsets.splice(index, 1); + removeNulls(model); + } + }); + + return model; + } + } + //helper to lookup validity when given a fieldsetIndex and property alias $scope.getPropertyValidity = function(fieldsetIndex, alias) { diff --git a/app/less/archetype.less b/app/less/archetype.less index f008824..d3b1d6a 100644 --- a/app/less/archetype.less +++ b/app/less/archetype.less @@ -6,17 +6,23 @@ border: 1px solid #dddddd; padding: 0; margin-bottom: 5px; - background-color: #f1f1f1; clear: both; display: inline-block; width: 100%; } .archetypeEditor .archetypeFieldsetLabel { - padding: 8px 25px 8px 3px; - float: left; + padding-left: 3px; width: 98%; + .label-sub { + padding: 8px 0; + display: inline-block; + &.module-label { + width: 89%; + } + } + span { font-weight: bold; } @@ -30,7 +36,6 @@ } .caret { - float:left; margin: 8px 1px 0 7px; &.caret-right { border-bottom: 4px solid transparent; @@ -42,8 +47,6 @@ } label{ - float: left; - width: 80%; margin-bottom: 0; margin-left: 5px; padding: 0; @@ -56,7 +59,6 @@ .archetypeEditor .archetypeCollapser{ clear: both; height: 100%; - margin-top: 10px; padding-top: 12px; background-color: #fff; border-top: 1px solid silver; @@ -74,7 +76,6 @@ .archetypeEditor, .archetypeConfig{ .archetypeEditorControls{ - float: right; i { cursor: pointer; &.handle { @@ -281,4 +282,4 @@ span { color: #343434; } -} \ No newline at end of file +} diff --git a/app/resources/propertyeditor.js b/app/resources/propertyeditor.js index b26d8bb..0a1cc9b 100644 --- a/app/resources/propertyeditor.js +++ b/app/resources/propertyeditor.js @@ -12,7 +12,7 @@ angular.module('umbraco.resources').factory('archetypePropertyEditorResource', f }, getDataType: function(id) { return umbRequestHelper.resourcePromise( - $http.get("/umbraco/backoffice/UmbracoApi/DataType/GetById?id=" + id), 'Failed to retrieve datatype' + $http.get("/umbraco/backoffice/ArchetypeApi/ArchetypeDataType/GetById?id=" + id), 'Failed to retrieve datatype' ); }, getPropertyEditorMapping: function(alias) { diff --git a/app/views/archetype.html b/app/views/archetype.html index 5877477..a6cef1b 100644 --- a/app/views/archetype.html +++ b/app/views/archetype.html @@ -13,17 +13,19 @@
  • - - +
    + + - + +
    -
    +
    - +
    @@ -46,4 +48,4 @@
  • - \ No newline at end of file + diff --git a/package.json b/package.json index 5ada328..8f01d88 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "grunt-template": "~0.2.2", "grunt-touch": "~0.1.0", "fs-extra": "~0.8.1", - "grunt-msbuild": "~0.1.9" + "grunt-msbuild": "~0.1.9", + "grunt-dotnet-assembly-info": "~1.0.9" }, "repository": { "type": "git", diff --git a/pkg/meta.json b/pkg/meta.json index 60e501b..df9f7e5 100644 --- a/pkg/meta.json +++ b/pkg/meta.json @@ -1,6 +1,6 @@ { "name": "Archetype", - "version": "0.4.0-alpha", + "version": "0.5.1-alpha", "url": "http://github.com/imulus/archetype/", "author": "Imulus", "authorUrl": "http://imulus.com/", diff --git a/pkg/nuget/package.nuspec b/pkg/nuget/package.nuspec index 6baaa87..f414221 100644 --- a/pkg/nuget/package.nuspec +++ b/pkg/nuget/package.nuspec @@ -12,9 +12,4 @@ http://github.com/imulus/archetype/raw/master/assets/logo.png <%= licenseUrl %> - - <% files.forEach(function(file) { %> - - <% }); %> - \ No newline at end of file