diff --git a/.gitignore b/.gitignore index 1bb174e..aab6533 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,9 @@ tmp/ pkg/*.nupkg pkg/*.zip +*_versioned* + + [Dd]ebug/ [Bb]uild/ [Rr]elease/ diff --git a/Gruntfile.js b/Gruntfile.js index 0622f65..4c1340c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,13 +1,39 @@ module.exports = function(grunt) { require('load-grunt-tasks')(grunt); - var path = require('path') - + var path = require('path'); + grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), pkgMeta: grunt.file.readJSON('config/meta.json'), dest: grunt.option('target') || 'dist', basePath: path.join('<%= dest %>', 'App_Plugins', '<%= pkgMeta.name %>'), + 'string-replace': { + version: { + files: { + "app/controllers/controller_versioned.js": "app/controllers/controller.js", + "app/less/archetype_versioned.less": "app/less/archetype.less", + "app/views/archetype.config.developer.dialog_versioned.html": "app/views/archetype.config.developer.dialog.html", + "app/views/archetype.config.stylescript.dialog_versioned.html": "app/views/archetype.config.stylescript.dialog.html", + "app/views/archetype.config.fieldset.dialog_versioned.html": "app/views/archetype.config.fieldset.dialog.html", + "app/views/archetype.config_versioned.html": "app/views/archetype.config.html", + "app/views/archetype_versioned.html": "app/views/archetype.html", + "app/views/archetype.default_versioned.html": "app/views/archetype.default.html", + + }, + options: { + replacements: [{ + pattern: /{{VERSION}}/g, + replacement: '/* Version <%= pkgMeta.version %> */' + }, + { + pattern: /{{VERSION_HTML}}/g, + replacement: '' + }] + } + } + }, + watch: { options: { spawn: false, @@ -16,22 +42,27 @@ module.exports = function(grunt) { less: { files: ['app/**/*.less'], - tasks: ['less:dist'] + tasks: ['string-replace', 'less:dist'] }, js: { files: ['app/**/*.js'], - tasks: ['concat:dist'] + tasks: ['string-replace', 'concat:dist'] }, html: { files: ['app/**/*.html'], - tasks: ['copy:html'] + tasks: ['string-replace', 'copy:html'] }, dll: { files: ['app/Umbraco/**/*.dll'], tasks: ['copy:dll'] + }, + + assets: { + files: ['assets/*.*'], + tasks: ['copy:assets'] } }, @@ -41,7 +72,7 @@ module.exports = function(grunt) { paths: ["app/less", "lib/less", "vendor"], }, files: { - '<%= basePath %>/css/archetype.css': 'app/less/archetype.less', + '<%= basePath %>/css/archetype.css': 'app/less/archetype_versioned.less', } } }, @@ -52,12 +83,14 @@ module.exports = function(grunt) { }, dist: { src: [ - 'app/controllers/controller.js', + 'app/controllers/controller_versioned.js', 'app/controllers/config.controller.js', + 'app/controllers/config.dialog.controller.js', 'app/directives/archetypeproperty.js', 'app/directives/archetypesubmitwatcher.js', 'app/directives/archetypecustomview.js', 'app/directives/archetypeLocalize.js', + 'app/directives/archetypeclickoutside.js', 'app/services/archetypeLocalizationService.js', 'app/helpers/sampleLabelHelpers.js', 'app/resources/archetypePropertyEditorResource.js', @@ -72,8 +105,24 @@ module.exports = function(grunt) { copy: { html: { cwd: 'app/views/', - src: ['archetype.html', 'archetype.default.html', 'archetype.config.html'], - dest: '<%= basePath %>/views', + src: [ + 'archetype_versioned.html', + 'archetype.default_versioned.html', + 'archetype.config_versioned.html', + 'archetype.config.fieldset.dialog_versioned.html', + 'archetype.config.stylescript.dialog_versioned.html', + 'archetype.config.developer.dialog_versioned.html' + ], + dest: '<%= basePath %>/views/', + expand: true, + rename: function(dest, src) { + return dest + src.replace('_versioned',''); + } + }, + assets: { + cwd: 'assets/', + src: ['*.*'], + dest: '<%= basePath %>/assets', expand: true }, dll: { @@ -117,31 +166,30 @@ module.exports = function(grunt) { }, nugetpack: { - dist: { - src: 'tmp/nuget/package.nuspec', - dest: 'pkg' - } + dist: { + src: 'tmp/nuget/package.nuspec', + dest: 'pkg' + } }, template: { - 'nuspec': { - 'options': { - 'data': { - name: '<%= pkgMeta.name %>', - version: '<%= pkgMeta.version %>', - url: '<%= pkgMeta.url %>', - license: '<%= pkgMeta.license %>', - licenseUrl: '<%= pkgMeta.licenseUrl %>', - author: '<%= pkgMeta.author %>', - authorUrl: '<%= pkgMeta.authorUrl %>', - - files: [{ path: 'tmp/nuget/**', target: 'content/App_Plugins/Archetype'}] - } - }, - 'files': { - 'tmp/nuget/package.nuspec': ['config/package.nuspec'] - } - } + 'nuspec': { + 'options': { + 'data': { + name: '<%= pkgMeta.name %>', + version: '<%= pkgMeta.version %>', + url: '<%= pkgMeta.url %>', + license: '<%= pkgMeta.license %>', + licenseUrl: '<%= pkgMeta.licenseUrl %>', + author: '<%= pkgMeta.author %>', + authorUrl: '<%= pkgMeta.authorUrl %>', + files: [{ path: 'tmp/nuget/**', target: 'content/App_Plugins/Archetype'}] + } + }, + 'files': { + 'tmp/nuget/package.nuspec': ['config/package.nuspec'] + } + } }, umbracoPackage: { @@ -162,7 +210,26 @@ module.exports = function(grunt) { clean: { build: '<%= grunt.config("basePath").substring(0, 4) == "dist" ? "dist/**/*" : "null" %>', - tmp: ['tmp'] + tmp: ['tmp'], + html: [ + 'app/views/*.html', + '!app/views/archetype.html', + '!app/views/archetype.default.html', + '!app/views/archetype.config.html', + '!app/views/archetype.config.fieldset.dialog.html', + '!app/views/archetype.config.stylescript.dialog.html', + '!app/views/archetype.config.developer.dialog.html' + ], + js: [ + 'app/controllers/*.js', + '!app/controllers/controller.js', + '!app/controllers/config.controller.js', + '!app/controllers/config.dialog.controller.js' + ], + less: [ + 'app/less/*.less', + '!app/less/archetype.less' + ] }, assemblyinfo: { @@ -181,7 +248,7 @@ module.exports = function(grunt) { src: ['<%= grunt.option("target") %>\\Web.config'] } }, - + jshint: { options: { jshintrc: '.jshintrc' @@ -196,7 +263,7 @@ module.exports = function(grunt) { stdout: true, verbosity: 'quiet', maxCpuCount: 4, - version: 4.0, + version: 4.0, buildParameters: { WarningLevel: 2, NoWarn: 1607 @@ -210,10 +277,9 @@ module.exports = function(grunt) { } } } - }); - grunt.registerTask('default', ['clean', 'less', 'concat', 'assemblyinfo', 'msbuild:dist', 'copy:dll', 'copy:config', 'copy:html']); + grunt.registerTask('default', ['clean', 'string-replace', 'less', 'concat', 'assemblyinfo', 'msbuild:dist', 'copy:dll', 'copy:assets', 'copy:html', 'copy:config', 'clean:html', 'clean:js', 'clean:less']); grunt.registerTask('nuget', ['clean:tmp', 'default', 'copy:nuget', 'template:nuspec', 'nugetpack', 'clean:tmp']); grunt.registerTask('umbraco', ['clean:tmp', 'default', 'copy:umbraco', 'umbracoPackage', 'clean:tmp']); diff --git a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs index 75d3003..ba2816a 100644 --- a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs +++ b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs @@ -1,16 +1,16 @@ using System.Collections.Generic; using System; +using System.Diagnostics; using System.Linq; using System.Net; +using System.Reflection; using System.Web.Http; using AutoMapper; using Umbraco.Core.Models; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.Editors; -using Umbraco.Core.PropertyEditors; using Archetype.Extensions; -using Newtonsoft.Json; namespace Archetype.Api { @@ -53,5 +53,18 @@ namespace Archetype.Api var dataTypeDisplay = Mapper.Map(dataType); return new { selectedEditor = dataTypeDisplay.SelectedEditor, preValues = dataTypeDisplay.PreValues, contentTypeAlias = contentTypeAlias, propertyTypeAlias = propertyTypeAlias, archetypeAlias = archetypeAlias, nodeId = nodeId }; } + + public object GetDllVersion() + { + return new {dllVersion = _version()}; + } + + private string _version() + { + var asm = Assembly.GetExecutingAssembly(); + var fvi = FileVersionInfo.GetVersionInfo(asm.Location); + + return fvi.FileVersion; + } } } diff --git a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj index d96c351..0a7417f 100644 --- a/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj +++ b/app/Umbraco/Umbraco.Archetype/Archetype.Umbraco.csproj @@ -239,6 +239,7 @@ + diff --git a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs index 3879acd..fde1255 100644 --- a/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs +++ b/app/Umbraco/Umbraco.Archetype/Extensions/ArchetypeHelper.cs @@ -68,7 +68,7 @@ namespace Archetype.Extensions } catch (Exception ex) { - LogHelper.Error("DeserializeJsonToArchetype", ex); + LogHelper.Error(string.Format("DeserializeJsonToArchetype Error DatatypeId=>{0} SourceJson=>{1}", dataTypeId, sourceJson), ex); } return archetype; diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs index 975015f..9e3c512 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypeModel.cs @@ -30,15 +30,9 @@ namespace Archetype.Models public string SerializeForPersistence() { - // clear the editor state before serializing (it's temporary state data) - foreach(var property in Fieldsets.SelectMany(f => f.Properties.Where(p => p.EditorState != null)).ToList()) - { - property.EditorState = null; - } - var json = JObject.Parse(JsonConvert.SerializeObject(this, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore })); - var propertiesToRemove = new String[] { "propertyEditorAlias", "dataTypeId", "dataTypeGuid", "hostContentType" }; + var propertiesToRemove = new String[] { "propertyEditorAlias", "dataTypeId", "dataTypeGuid", "hostContentType", "editorState" }; json.Descendants().OfType() .Where(p => propertiesToRemove.Contains(p.Name)) diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs index fa8bd12..3d49e8e 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValue.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Newtonsoft.Json; namespace Archetype.Models @@ -12,6 +13,7 @@ namespace Archetype.Models public bool StartWithAddButton { get; set; } [JsonProperty("hideFieldsetToolbar")] + [Obsolete("This value is no longer used but is kept to prevent breaking changes.")] public bool HideFieldsetToolbar { get; set; } [JsonProperty("enableMultipleFieldsets")] @@ -38,6 +40,9 @@ namespace Archetype.Models [JsonProperty("fieldsets")] public IEnumerable Fieldsets { get; set; } + [JsonProperty("fieldsetGroups")] + public IEnumerable FieldsetGroups { get; set; } + [JsonProperty("hidePropertyLabels")] public bool HidePropertyLabels { get; set; } diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs index b65683b..0bfd3c8 100644 --- a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldset.cs @@ -25,5 +25,8 @@ namespace Archetype.Models [JsonProperty("properties")] public IEnumerable Properties { get; set; } + + [JsonProperty("group")] + public ArchetypePreValueFieldsetGroup Group { get; set; } } } diff --git a/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldsetGroup.cs b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldsetGroup.cs new file mode 100644 index 0000000..e62e69c --- /dev/null +++ b/app/Umbraco/Umbraco.Archetype/Models/ArchetypePreValueFieldsetGroup.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace Archetype.Models +{ + public class ArchetypePreValueFieldsetGroup + { + [JsonProperty("name")] + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs index b6cf2cf..d11b181 100644 --- a/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs +++ b/app/Umbraco/Umbraco.Archetype/Properties/VersionInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("1.9")] -[assembly: AssemblyFileVersion("1.9")] +[assembly: AssemblyVersion("1.11.1")] +[assembly: AssemblyFileVersion("1.11.1")] diff --git a/app/controllers/config.controller.js b/app/controllers/config.controller.js index 2eae9bd..615d45e 100644 --- a/app/controllers/config.controller.js +++ b/app/controllers/config.controller.js @@ -5,12 +5,18 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio //define empty items var newPropertyModel = '{"alias": "", "remove": false, "collapse": false, "label": "", "helpText": "", "dataTypeGuid": "0cc0eba1-9960-42c9-bf9b-60e150b429ae", "value": ""}'; - var newFieldsetModel = '{"alias": "", "remove": false, "collapse": false, "labelTemplate": "", "icon": "", "label": "", "properties": [' + newPropertyModel + ']}'; - var defaultFieldsetConfigModel = JSON.parse('{"showAdvancedOptions": false, "startWithAddButton": false, "hideFieldsetToolbar": false, "enableMultipleFieldsets": false, "hideFieldsetControls": false, "hidePropertyLabel": false, "maxFieldsets": null, "enableCollapsing": true, "enableCloning": false, "enableDisabling": true, "enableDeepDatatypeRequests": false, "fieldsets": [' + newFieldsetModel + ']}'); + var newFieldsetModel = '{"alias": "", "remove": false, "collapse": false, "labelTemplate": "", "icon": "", "label": "", "properties": [' + newPropertyModel + '], "group": null}'; + var defaultFieldsetConfigModel = JSON.parse('{"showAdvancedOptions": false, "startWithAddButton": false, "hideFieldsetToolbar": false, "enableMultipleFieldsets": false, "hideFieldsetControls": false, "hidePropertyLabel": false, "maxFieldsets": null, "enableCollapsing": true, "enableCloning": false, "enableDisabling": true, "enableDeepDatatypeRequests": false, "fieldsets": [' + newFieldsetModel + '], "fieldsetGroups": []}'); //ini the model $scope.model.value = $scope.model.value || defaultFieldsetConfigModel; + $scope.dllVersion = ""; + + archetypePropertyEditorResource.getDllVersion().then(function(data){ + $scope.dllVersion = data.dllVersion; + }); + //ini the render model initConfigRenderModel(); @@ -238,8 +244,18 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio function initConfigRenderModel() { $scope.archetypeConfigRenderModel = $scope.model.value; + if (!$scope.archetypeConfigRenderModel.fieldsetGroups) { + $scope.archetypeConfigRenderModel.fieldsetGroups = []; + } - _.each($scope.archetypeConfigRenderModel.fieldsets, function(fieldset){ + _.each($scope.archetypeConfigRenderModel.fieldsets, function(fieldset) { + + if (fieldset.group) { + // tie the fieldset group back up to the actual group object, not the clone that's been persisted + fieldset.group = _.find($scope.archetypeConfigRenderModel.fieldsetGroups, function(fieldsetGroup) { + return fieldsetGroup.name == fieldset.group.name; + }) + } fieldset.remove = false; if (fieldset.alias.length > 0) @@ -289,6 +305,21 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio $scope.model.value.fieldsets = fieldsets; } + $scope.showOptions = function ($event, template) { + $event.preventDefault(); + + dialogService.closeAll(); + + dialogService.open({ + template: template, + show: true, + callback: function(data) { + $scope.archetypeConfigRenderModel = data; + }, + dialogData: $scope.archetypeConfigRenderModel + }); + } + //archetype css assetsService.loadCss("../App_Plugins/Archetype/css/archetype.css"); }); diff --git a/app/controllers/config.dialog.controller.js b/app/controllers/config.dialog.controller.js new file mode 100644 index 0000000..c057730 --- /dev/null +++ b/app/controllers/config.dialog.controller.js @@ -0,0 +1,17 @@ +angular.module('umbraco').controller('ArchetypeConfigOptionsController', function ($scope) { + $scope.model = angular.copy($scope.dialogData); + + //handles a fieldset group add + $scope.addFieldsetGroup = function () { + $scope.model.fieldsetGroups.push({ name: "" }); + } + + //handles a fieldset group removal + $scope.removeFieldsetGroup = function ($index) { + $scope.model.fieldsetGroups.splice($index, 1); + } + + $scope.apply = function(index) { + $scope.submit($scope.model); + } +}); \ No newline at end of file diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 924e90e..264ea27 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -1,4 +1,5 @@ -angular.module("umbraco").controller("Imulus.ArchetypeController", function ($scope, $http, assetsService, angularHelper, notificationsService, $timeout, fileManager, entityResource, archetypeService, archetypeLabelService, archetypeCacheService, archetypePropertyEditorResource) { +{{VERSION}} +angular.module("umbraco").controller("Imulus.ArchetypeController", function ($scope, $http, $filter, assetsService, angularHelper, notificationsService, $timeout, fileManager, entityResource, archetypeService, archetypeLabelService, archetypeCacheService, archetypePropertyEditorResource) { //$scope.model.value = ""; $scope.model.hideLabel = $scope.model.config.hideLabel == 1; @@ -15,6 +16,11 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc // store the umbraco property alias to help generate unique IDs. Hopefully there's a better way to get this in the future :) $scope.umbracoHostPropertyAlias = $scope.$parent.$parent.model.alias; + $scope.overlayMenu = { + show: false, + style: {} + }; + init(); //hold references to helper resources @@ -36,7 +42,7 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc } var draggedRteSettings; - var rteClass = ".mce-tinymce"; + var rteClass = ".umb-rte textarea"; //sort config $scope.sortableOptions = { @@ -45,35 +51,86 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc handle: ".handle", start: function(ev, ui) { draggedRteSettings = {}; - ui.item.parent().find(rteClass).each(function () { - // remove all RTEs in the dragged row and save their settings - var $element = $(this); - var wrapperId = $element.attr('id'); - var $textarea = $element.siblings('textarea'); - var textareaId = $textarea.attr('id'); - - draggedRteSettings[textareaId] = _.findWhere(tinyMCE.editors, { id: textareaId }).settings; - tinyMCE.execCommand('mceRemoveEditor', false, wrapperId); + $(rteClass, ui.item.parent()).each(function () { + var id = $(this).attr("id"); + draggedRteSettings[id] = _.findWhere(tinyMCE.editors, { id: id }).settings; + tinymce.execCommand('mceRemoveEditor', false, id); + $(this).css("visibility", "hidden"); }); }, update: function (ev, ui) { $scope.setDirty(); }, stop: function (ev, ui) { - ui.item.parent().find(rteClass).each(function () { - var $element = $(this); - var wrapperId = $element.attr('id'); - var $textarea = $element.siblings('textarea'); - var textareaId = $textarea.attr('id'); - - draggedRteSettings[textareaId] = draggedRteSettings[textareaId] || _.findWhere(tinyMCE.editors, { id: textareaId }).settings; - tinyMCE.execCommand('mceRemoveEditor', false, wrapperId); - tinyMCE.init(draggedRteSettings[textareaId]); + $(rteClass, ui.item.parent()).each(function () { + var id = $(this).attr("id"); + draggedRteSettings[id] = draggedRteSettings[id] || _.findWhere(tinyMCE.editors, { id: id }).settings; + tinyMCE.execCommand("mceRemoveEditor", false, id); + tinyMCE.init(draggedRteSettings[id]); }); } }; //handles a fieldset add + $scope.openFieldsetPicker = function ($index, event) { + if ($scope.canAdd() == false) { + return; + } + + var allFieldsets = []; + _.each($scope.model.config.fieldsets, function (fieldset) { + var icon = fieldset.icon; + allFieldsets.push({ + alias: fieldset.alias, + label: fieldset.label, + icon: (fieldset.icon || "icon-document-dashed-line"), // default icon if none is chosen + group: fieldset.group ? fieldset.group.name : null + }); + }); + // sanity check + if (allFieldsets == 0) { + return; + } + if (allFieldsets.length == 1) { + // only one fieldset type - no need to display the picker + $scope.addRow(allFieldsets[0].alias, $index); + return; + } + + $scope.overlayMenu.fieldsetGroups = []; + if ($scope.model.config.fieldsetGroups && $scope.model.config.fieldsetGroups.length > 0) { + _.each($scope.model.config.fieldsetGroups, function (fieldsetGroup) { + $scope.overlayMenu.fieldsetGroups.push({ name: fieldsetGroup.name, fieldsets: $filter("filter")(allFieldsets, { group: fieldsetGroup.name }, true) }); + }) + } + else { + $scope.overlayMenu.fieldsetGroups.push({ name: "", fieldsets: allFieldsets }); + } + $scope.overlayMenu.index = $index; + $scope.overlayMenu.activeFieldsetGroup = $scope.overlayMenu.fieldsetGroups[0]; + + // calculate overlay position + // - yeah... it's jQuery (ungh!) but that's how the Grid does it. + var offset = $(event.target).offset(); + var scrollTop = $(event.target).closest(".umb-panel-body").scrollTop(); + if (offset.top < 400) { + $scope.overlayMenu.style.top = 300 + scrollTop; + } + else { + $scope.overlayMenu.style.top = offset.top - 150 + scrollTop; + } + $scope.overlayMenu.show = true; + }; + + $scope.closeFieldsetPicker = function () { + $scope.overlayMenu.show = false; + }; + + $scope.pickFieldset = function (fieldsetAlias, $index) { + $scope.closeFieldsetPicker(); + $scope.addRow(fieldsetAlias, $index); + }; + $scope.addRow = function (fieldsetAlias, $index) { if ($scope.canAdd()) { if ($scope.model.config.fieldsets) { diff --git a/app/directives/archetypeclickoutside.js b/app/directives/archetypeclickoutside.js new file mode 100644 index 0000000..5370deb --- /dev/null +++ b/app/directives/archetypeclickoutside.js @@ -0,0 +1,29 @@ +angular.module("umbraco.directives") + .directive('archetypeClickOutside', function ($timeout, $parse) { + return { + restrict: 'A', + link: function (scope, element, attrs, ctrl) { + var fn = $parse(attrs.archetypeClickOutside); + + // add click event handler (delayed so we don't trigger the callback immediately if this directive itself was triggered by a mouse click) + $timeout(function () { + $(document).on("click", mouseClick); + }, 500); + + function mouseClick(event) { + if($(event.target).closest(element).length > 0) { + return; + } + var callback = function () { + fn(scope, { $event: event }); + }; + scope.$apply(callback); + } + + // unbind event + scope.$on('$destroy', function () { + $(document).off("click", mouseClick); + }); + } + }; + }); \ No newline at end of file diff --git a/app/langs/da-dk.js b/app/langs/da-dk.js index 88306a5..f439e02 100644 --- a/app/langs/da-dk.js +++ b/app/langs/da-dk.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Tilføj et element", "hideFieldsetControls": "Skjul fieldsets?", "hideFieldsetControlsDescription": "Skjuler kontrollerne tilføj/fjern/sortér.", "toggleAdvanced": "Slå avancerede muligheder til/fra", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset-grupper", + "fieldsetGroupsDescription":"Hvis du har mange fieldsets, skal du måske overveje at gruppere dem i fieldset-vælgeren. Når du først har defineret dine grupper her, vil en gruppe-vælger dukke op i fieldset-editoren, og du kan derefter vælge grupper for alle dine fieldsets.", + "fieldsetGroupName":"Navn", + "addFieldsetGroup":"Tilføj gruppe" } diff --git a/app/langs/da.js b/app/langs/da.js index 88306a5..41e15e6 100644 --- a/app/langs/da.js +++ b/app/langs/da.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Tilføj et element", "hideFieldsetControls": "Skjul fieldsets?", "hideFieldsetControlsDescription": "Skjuler kontrollerne tilføj/fjern/sortér.", "toggleAdvanced": "Slå avancerede muligheder til/fra", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset-grupper", + "fieldsetGroupsDescription":"Hvis du har mange fieldsets, skal du måske overveje at gruppere dem i fieldset-vælgeren. Når du først har defineret dine grupper her, vil en gruppe-vælger dukke op i fieldset-editoren, og du kan derefter vælge grupper for alle dine fieldsets.", + "fieldsetGroupName":"Navn", + "addFieldsetGroup":"Tilføj gruppe" } diff --git a/app/langs/de-de.js b/app/langs/de-de.js index 6dc9bfc..8bd0ee0 100644 --- a/app/langs/de-de.js +++ b/app/langs/de-de.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/de.js b/app/langs/de.js index 6dc9bfc..8bd0ee0 100644 --- a/app/langs/de.js +++ b/app/langs/de.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/en-gb.js b/app/langs/en-gb.js index dff4043..7ca10c9 100644 --- a/app/langs/en-gb.js +++ b/app/langs/en-gb.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/en-us.js b/app/langs/en-us.js index 6dc9bfc..8bd0ee0 100644 --- a/app/langs/en-us.js +++ b/app/langs/en-us.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/en.js b/app/langs/en.js index 6dc9bfc..8bd0ee0 100644 --- a/app/langs/en.js +++ b/app/langs/en.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/es-es.js b/app/langs/es-es.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/es-es.js +++ b/app/langs/es-es.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/es.js b/app/langs/es.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/es.js +++ b/app/langs/es.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/fr-fr.js b/app/langs/fr-fr.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/fr-fr.js +++ b/app/langs/fr-fr.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/he-il.js b/app/langs/he-il.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/he-il.js +++ b/app/langs/he-il.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/it-it.js b/app/langs/it-it.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/it-it.js +++ b/app/langs/it-it.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/ja-jp.js b/app/langs/ja-jp.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/ja-jp.js +++ b/app/langs/ja-jp.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/ko-kr.js b/app/langs/ko-kr.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/ko-kr.js +++ b/app/langs/ko-kr.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/nb-no.js b/app/langs/nb-no.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/nb-no.js +++ b/app/langs/nb-no.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/nl-nl.js b/app/langs/nl-nl.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/nl-nl.js +++ b/app/langs/nl-nl.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/pl-pl.js b/app/langs/pl-pl.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/pl-pl.js +++ b/app/langs/pl-pl.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/pt-br.js b/app/langs/pt-br.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/pt-br.js +++ b/app/langs/pt-br.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/ru-ru.js b/app/langs/ru-ru.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/ru-ru.js +++ b/app/langs/ru-ru.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/sv-se.js b/app/langs/sv-se.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/sv-se.js +++ b/app/langs/sv-se.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/langs/zh-cn.js b/app/langs/zh-cn.js index 7ec819e..8bd0ee0 100644 --- a/app/langs/zh-cn.js +++ b/app/langs/zh-cn.js @@ -1,6 +1,7 @@ { "label": "Label", "alias": "Alias", + "addFieldset": "Add an item", "hideFieldsetControls": "Hide Fieldset Controls?", "hideFieldsetControlsDescription": "Hides the fieldset add/remove/sort controls.", "toggleAdvanced": "Toggle Advanced Options", @@ -39,5 +40,9 @@ "overrideDefaultConverterDescription":"Check this if you wish to use your own custom property value converter.", "overrideDefaultConverter":"Override Default Property Value Converter?", "enableCloning":"Enable Cloning?", - "enableCloningDescription":"Enable Fieldset Cloning." + "enableCloningDescription":"Enable Fieldset Cloning.", + "fieldsetGroups":"Fieldset groups", + "fieldsetGroupsDescription":"If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.", + "fieldsetGroupName":"Name", + "addFieldsetGroup":"Add group" } diff --git a/app/less/archetype.less b/app/less/archetype.less index bb7d403..a3fddbe 100644 --- a/app/less/archetype.less +++ b/app/less/archetype.less @@ -1,8 +1,19 @@ -/* TODO: clean this up */ +{{VERSION}} .archetypeEditor { width: 98%; + .usky-grid { + .cell-tools-menu { + height: 385px; + } + &.withGroups { + .cell-tools-menu { + height: 415px; + } + } + } + .open { position: relative; } @@ -23,19 +34,28 @@ } .icon { - color: #333; + color: #ddd; + padding: 2px; + font-size: 16px; + &:hover { + color: #333; + } + &.icon-delete:hover { + color: #b94a48; + } } .fieldsetIcon { float: left; - padding-right: 4px; + padding: 0 4px 0 0; + color: #333; + vertical-align: text-bottom; } fieldset { - border: 1px solid #dddddd; + border-bottom: 1px dashed #dddddd; padding: 0; margin-bottom: 5px; - background-color: #f1f1f1; clear: both; display: inline-block; width: 100%; @@ -64,11 +84,28 @@ min-height: 42px; .label-sub { - padding: 8px 0 4px 0; + padding: 8px 0 8px 0; display: inline-block; + min-height: 20px; /* this makes the header clickable when there's no icon and no text */ &.module-label { width: 100%; } + &:hover { + cursor: pointer; + + label { + span { + text-decoration: underline; + } + &:hover { + cursor: pointer; + } + } + + .caret-right { + border-left-color: #333; + } + } } .dropdown-menu { @@ -89,27 +126,14 @@ cursor: default; } - &.enableCollapsing:hover { - cursor: pointer; - - label { - span { - text-decoration: underline; - } - &:hover { - cursor: pointer; - } - } - } - .caret { - margin: 8px 1px 0 15px; + margin: 8px 1px 0 2px; position: absolute; &.caret-right { border-bottom: 4px solid transparent; border-top: 4px solid transparent; - border-left: 4px solid #000000; + border-left: 4px solid #ddd; content: ""; margin-top: 6px; } @@ -117,10 +141,10 @@ label { margin-bottom: 0; - margin-left: 38px; + margin-left: 18px; white-space: nowrap; padding: 0; - width: ~"calc(100% - 132px)"; + width: ~"calc(100% - 144px)"; position: absolute; span { display: block; @@ -128,7 +152,9 @@ text-overflow: ellipsis; } &.dimmed { - color: #d9d9d9; + i, span { + color: #d9d9d9 !important; + } } } @@ -138,6 +164,9 @@ right: 15px; top: 0; } + + &:hover { + } } .archetypePropertyError { @@ -157,9 +186,8 @@ .archetypeCollapser { clear: both; height: 100%; - padding-top: 12px; + padding: 12px 0 0 20px; background-color: #fff; - border-top: 1px solid silver; border-radius: 0 0 0 5px; form { @@ -191,13 +219,25 @@ border: 1px solid #b94a48; } - .archetypeAddButton:hover { - text-decoration: none; - cursor: pointer; - - .archetypeAddButtonText { - text-decoration: underline; + .archetypeAddButton { + color: #ddd; + .icon { + vertical-align: text-top; } + &:hover { + color: #333; + text-decoration: none; + cursor: pointer; + + .archetypeAddButtonText { + text-decoration: underline; + } + + .icon { + color: #333; + } + } + } .multiPropertyTextbox { @@ -214,12 +254,43 @@ color: #343434; } } + + .fieldsetPicker { + .icon { + color: #333; + } + ul.elements li { + overflow: visible; + vertical-align: top; + height: 90px; + } + ul.groups { + display: block; + margin: 0; + padding: 4px; + li { + width: auto; + margin: 0; + padding: 0 20px; + font-weight: bold; + a { + color: #d9d9d9; + cursor: pointer; + } + &.active a, a:hover { + color: #999; + text-decoration: none; + } + } + } + } } .archetypeEditor, .archetypeConfig { .archetypeEditorControls { float: right; - + } + .archetypeEditorControls, .archetypeFieldsetGroups { i { cursor: pointer; &.handle { @@ -235,6 +306,29 @@ .archetypeConfig { margin-bottom: 20px; + .archetype-headline { + + img { + margin-right: 5px; + } + + small { + margin-left: 5px; + } + + a { + float: right; + + img { + width: 35px; + } + } + } + + .manual-link { + color: blue; + } + ul { list-style: none; } @@ -316,13 +410,41 @@ } .archetypeAdvancedOptions { - margin-top: 15px; - div { - margin-bottom: 10px; - } label { - width: 400px; + width: 100%; } + + input[type=checkbox] { + margin-top: 0; + margin-right: 2px; + } + + small { + color: #b3b3b3; + } + + .archetypeFieldsetGroups { + padding: 0 10px; + margin-bottom: 20px; + + ul { + padding: 0; + margin: 0; + margin-top: 15px; + + li { + + label { + width: 120px; + } + + input { + vertical-align: middle; + width: 240px; + } + } + } + } } .archetypeMaxFieldsets{ @@ -356,3 +478,7 @@ visibility: visible !important; background-color: #d0e7f1 !important; } + +.archetype-dialog { + margin: 10px; +} \ No newline at end of file diff --git a/app/resources/archetypePropertyEditorResource.js b/app/resources/archetypePropertyEditorResource.js index a335fe2..463a028 100644 --- a/app/resources/archetypePropertyEditorResource.js +++ b/app/resources/archetypePropertyEditorResource.js @@ -31,6 +31,11 @@ angular.module('umbraco.resources').factory('archetypePropertyEditorResource', f return ""; }); + }, + getDllVersion: function() { + return umbRequestHelper.resourcePromise( + $http.get("backoffice/ArchetypeApi/ArchetypeDataType/GetDllVersion", { cache: true }), 'Failed to retrieve dll version' + ); } } }); diff --git a/app/views/archetype.config.developer.dialog.html b/app/views/archetype.config.developer.dialog.html new file mode 100644 index 0000000..5571427 --- /dev/null +++ b/app/views/archetype.config.developer.dialog.html @@ -0,0 +1,33 @@ +{{VERSION_HTML}} +
+ + +
\ No newline at end of file diff --git a/app/views/archetype.config.fieldset.dialog.html b/app/views/archetype.config.fieldset.dialog.html new file mode 100644 index 0000000..1c263ab --- /dev/null +++ b/app/views/archetype.config.fieldset.dialog.html @@ -0,0 +1,66 @@ +{{VERSION_HTML}} +
+ + +
\ No newline at end of file diff --git a/app/views/archetype.config.html b/app/views/archetype.config.html index 380f0b5..224bb0b 100644 --- a/app/views/archetype.config.html +++ b/app/views/archetype.config.html @@ -1,4 +1,8 @@ +{{VERSION_HTML}}
+

Archetype{{dllVersion}}

+

At a minimum your Archetype needs at least one fieldset with at least one property. You can configure it to allow for multiple types of fieldsets within a single Archetype and you can even add another Archetype as a property. Please use the link below for the full manual:

+

Archetype Manual

  • @@ -17,6 +21,10 @@
    +
    + + +
    @@ -79,79 +87,9 @@
    - - -
    -
    - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - + + +
    diff --git a/app/views/archetype.config.stylescript.dialog.html b/app/views/archetype.config.stylescript.dialog.html new file mode 100644 index 0000000..a987b99 --- /dev/null +++ b/app/views/archetype.config.stylescript.dialog.html @@ -0,0 +1,35 @@ +{{VERSION_HTML}} +
    + + +
    \ No newline at end of file diff --git a/app/views/archetype.default.html b/app/views/archetype.default.html index 6f330ed..0a76e13 100644 --- a/app/views/archetype.default.html +++ b/app/views/archetype.default.html @@ -1,3 +1,4 @@ +{{VERSION_HTML}}
      @@ -13,19 +14,11 @@
    - - - - - + + + +
diff --git a/app/views/archetype.html b/app/views/archetype.html index 63b1114..2276365 100644 --- a/app/views/archetype.html +++ b/app/views/archetype.html @@ -1 +1,2 @@ +{{VERSION_HTML}}
diff --git a/assets/logo_50.png b/assets/logo_50.png new file mode 100644 index 0000000..c5aa9dc Binary files /dev/null and b/assets/logo_50.png differ diff --git a/assets/twitter.png b/assets/twitter.png new file mode 100644 index 0000000..4b9fac3 Binary files /dev/null and b/assets/twitter.png differ diff --git a/config/meta.json b/config/meta.json index cbc87ce..0f82d05 100644 --- a/config/meta.json +++ b/config/meta.json @@ -1,6 +1,6 @@ { "name": "Archetype", - "version": "1.9", + "version": "1.11.1", "url": "http://github.com/imulus/archetype/", "author": "Imulus - Kevin Giszewski - Tom Fulton - Lee Kelleher - Matt Brailsford - Kenn Jacobsen - Et. Al.", "authorUrl": "http://imulus.com/", diff --git a/config/package.nuspec b/config/package.nuspec index 9c62d84..6755f9e 100644 --- a/config/package.nuspec +++ b/config/package.nuspec @@ -12,7 +12,7 @@ http://github.com/imulus/archetype/raw/master/assets/logo.png <%= licenseUrl %> - + \ No newline at end of file diff --git a/package.json b/package.json index 3601308..4032a92 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "url": "https://github.com/imulus/Archetype.git" }, "devDependencies": { - "grunt-msbuild": "^0.1.12" + "grunt-msbuild": "^0.1.12", + "grunt-string-replace": "^1.2.0" } }