From caef15580501c99461e4da6057f42631d63bb672 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 19 Jan 2016 14:46:19 +0100 Subject: [PATCH 1/4] U4-7748 Models Builder - needs to be in control of the models-out-of-date status --- .../src/common/resources/models.resource.js | 26 ------- .../views/documenttypes/edit.controller.js | 74 +++++++++++-------- .../ModelsBuilder/modelsbuilder.controller.js | 16 ++-- .../ModelsBuilder/package.manifest | 3 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 12 ++- src/Umbraco.Web.UI/packages.config | 4 +- .../Editors/BackOfficeController.cs | 20 ++++- src/Umbraco.Web/Umbraco.Web.csproj | 25 ++++++- src/Umbraco.Web/packages.config | 6 ++ 9 files changed, 105 insertions(+), 81 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/common/resources/models.resource.js diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/models.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/models.resource.js deleted file mode 100644 index c8ec9e8eed..0000000000 --- a/src/Umbraco.Web.UI.Client/src/common/resources/models.resource.js +++ /dev/null @@ -1,26 +0,0 @@ -function modelsResource($q, $http, umbRequestHelper) { - - // TODO - should use BackOfficeController to register urls? How can we extend it? - // TODO - this shouldn't exist in core!! - - return { - getModelsOutOfDateStatus: function() { - return umbRequestHelper.resourcePromise( - $http.get( - /*umbRequestHelper.getApiUrl( - "modelsApiBaseUrl", - "GetModelsOutOfDateStatus")*/ "/Umbraco/BackOffice/ModelsBuilder/ModelsBuilder/GetModelsOutOfDateStatus"), - "Failed to get models out-of-date status"); - }, - - buildModels: function() { - return umbRequestHelper.resourcePromise( - $http.get( - /*umbRequestHelper.getApiUrl( - "modelsApiBaseUrl", - "BuildModels")*/ "/Umbraco/BackOffice/ModelsBuilder/ModelsBuilder/BuildModels"), - "Failed to build models"); - } - }; -} -angular.module("umbraco.resources").factory("modelsResource", modelsResource); diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js index 5b03381dec..cd0dc96c11 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js @@ -9,7 +9,7 @@ (function () { "use strict"; - function DocumentTypesEditController($scope, $routeParams, modelsResource, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) { + function DocumentTypesEditController($scope, $routeParams, $injector, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) { var vm = this; var localizeSaving = localizationService.localize("general_saving"); @@ -46,48 +46,58 @@ } ]; + var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null; + var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled; //disable by default, turn on if detected correctly. - vm.page.modelsBuilder = false; - modelsResource.getModelsOutOfDateStatus().then(function () { - vm.page.modelsBuilder = true; - }); + vm.page.modelsBuilder = false; + if (modelsBuilderEnabled && modelsResource) { + modelsResource.getModelsOutOfDateStatus().then(function (result) { - //Models builder mode: + if (result.status === 100) { + return; + } - vm.page.defaultButton = { - hotKey: "ctrl+s", - labelKey: "buttons_save", - letter: "S", - type: "submit", - handler: function () { vm.save(); } - }; - vm.page.subButtons = [{ - hotKey: "ctrl+g", - labelKey: "buttons_generateModels", - letter: "G", - handler: function(){ + vm.page.modelsBuilder = true; - vm.page.saveButtonState = "busy"; - notificationsService.info("Building models", "this can take abit of time, don't worry"); + //Models builder mode: - modelsResource.buildModels().then(function () { - vm.page.saveButtonState = "init"; + vm.page.defaultButton = { + hotKey: "ctrl+s", + labelKey: "buttons_save", + letter: "S", + type: "submit", + handler: function () { vm.save(); } + }; + vm.page.subButtons = [{ + hotKey: "ctrl+g", + labelKey: "buttons_generateModels", + letter: "G", + handler: function () { - //clear and add success - notificationsService.success("Models Generated"); + vm.page.saveButtonState = "busy"; + notificationsService.info("Building models", "this can take abit of time, don't worry"); - //just calling this to get the servar back to life - modelsResource.getModelsOutOfDateStatus(); + if (modelsBuilderEnabled && modelsResource) { + modelsResource.buildModels().then(function () { + vm.page.saveButtonState = "init"; - }, function () { - notificationsService.error("Models could not be generated"); - vm.page.saveButtonState = "error"; - }); - } - }]; + //clear and add success + notificationsService.success("Models Generated"); + //just calling this to get the servar back to life + modelsResource.getModelsOutOfDateStatus(); + }, function () { + notificationsService.error("Models could not be generated"); + vm.page.saveButtonState = "error"; + }); + } + } + }]; + + }); + } vm.page.keyboardShortcutsOverview = [ { diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js b/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js index 28dcf72010..7d75e25b44 100644 --- a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js +++ b/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js @@ -1,9 +1,9 @@ -function modelsBuilderController($scope, umbRequestHelper, $log, $http /*, $sce*/) { +function modelsBuilderController($scope, umbRequestHelper, $log, $http, modelsBuilderResource) { $scope.generate = function() { $scope.generating = true; umbRequestHelper.resourcePromise( - $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")), + $http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")), 'Failed to generate.') .then(function (result) { $scope.generating = false; @@ -11,14 +11,10 @@ }; function init() { - umbRequestHelper.resourcePromise( - $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")), - 'Failed to get dashboard.') - .then(function (result) { - //result.text = $sce.trustAsHtml(result.text); // accept html - $scope.dashboard = result; - $scope.ready = true; - }); + modelsBuilderResource.getDashboard().then(function(result) { + $scope.dashboard = result; + $scope.ready = true; + }); } init(); diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest b/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest index 63bae80c75..d83523517a 100644 --- a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest +++ b/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest @@ -1,6 +1,7 @@ { //array of files we want to inject into the application on app_start javascript: [ - '~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js' + '~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js', + '~/App_Plugins/ModelsBuilder/modelsbuilder.resource.js' ] } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index c1a73c889b..7770c0844b 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -350,12 +350,12 @@ umbraco.providers - - ..\packages\Umbraco.ModelsBuilder.2.2.0-beta003\lib\Umbraco.ModelsBuilder.dll + + ..\packages\Umbraco.ModelsBuilder.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.dll True - - ..\packages\Umbraco.ModelsBuilder.AspNet.2.2.0-beta003\lib\Umbraco.ModelsBuilder.AspNet.dll + + ..\packages\Umbraco.ModelsBuilder.AspNet.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.AspNet.dll True @@ -582,8 +582,6 @@ treeInit.aspx - - @@ -642,7 +640,6 @@ - 404handlers.config @@ -2390,6 +2387,7 @@ + diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config index 7dd41d153c..b13d2fdb5e 100644 --- a/src/Umbraco.Web.UI/packages.config +++ b/src/Umbraco.Web.UI/packages.config @@ -37,7 +37,7 @@ - - + + \ No newline at end of file diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 4ffe57a924..0a618fac1c 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -26,6 +26,7 @@ using Umbraco.Core.Manifest; using Umbraco.Core.Models; using Umbraco.Core.Models.Identity; using Umbraco.Core.Security; +using Umbraco.ModelsBuilder.Configuration; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.PropertyEditors; @@ -362,7 +363,8 @@ namespace Umbraco.Web.Editors { "umbracoPlugins", new Dictionary { - {"trees", GetTreePluginsMetaData()} + {"trees", GetTreePluginsMetaData()}, + {"modelsBuilder", GetModelsBuilderSettings() } } }, { @@ -403,7 +405,7 @@ namespace Umbraco.Web.Editors return JavaScript(result); } - + [HttpPost] public ActionResult ExternalLogin(string provider, string redirectUrl = null) { @@ -644,6 +646,20 @@ namespace Umbraco.Web.Editors return app; } + + private Dictionary GetModelsBuilderSettings() + { + if (ApplicationContext.IsConfigured == false) + return null; + + var settings = new Dictionary + { + {"enabled", UmbracoConfig.For.ModelsBuilder().Enable} + }; + + return settings; + } + private IEnumerable> GetTreePluginsMetaData() { var treeTypes = PluginManager.Current.ResolveAttributedTreeControllers(); diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index fba27991a8..cde08a8a6c 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -140,6 +140,14 @@ False ..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll + + ..\packages\Microsoft.CodeAnalysis.Common.1.0.0\lib\net45\Microsoft.CodeAnalysis.dll + True + + + ..\packages\Microsoft.CodeAnalysis.CSharp.1.0.0\lib\net45\Microsoft.CodeAnalysis.CSharp.dll + True + False @@ -184,6 +192,10 @@ System + + ..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll + True + @@ -201,6 +213,10 @@ False ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + + ..\packages\System.Reflection.Metadata.1.0.21\lib\portable-net45+win8\System.Reflection.Metadata.dll + True + @@ -286,6 +302,10 @@ {D7636876-0756-43CB-A192-138C6F0D5E42} umbraco.providers + + ..\packages\Umbraco.ModelsBuilder.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.dll + True + ..\packages\UrlRewritingNet.UrlRewriter.2.0.7\lib\UrlRewritingNet.UrlRewriter.dll True @@ -2157,7 +2177,10 @@ umbraco_org_umbraco_update_CheckForUpgrade - + + + + 11.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0 diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index 75747af5ee..15b9d1193e 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -15,6 +15,9 @@ + + + @@ -26,6 +29,9 @@ + + + \ No newline at end of file From e857b0a5f46e8b1a4f64827961ff8505832c6436 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 19 Jan 2016 15:58:38 +0100 Subject: [PATCH 2/4] Updates the strange TypeFinder GetTypeByName method to use BuildManager by default. --- src/Umbraco.Core/TypeFinder.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/TypeFinder.cs b/src/Umbraco.Core/TypeFinder.cs index 0b4e85e237..e99a491939 100644 --- a/src/Umbraco.Core/TypeFinder.cs +++ b/src/Umbraco.Core/TypeFinder.cs @@ -634,14 +634,20 @@ namespace Umbraco.Core } #endregion + - //TODO: This isn't very elegant, and will have issues since the AppDomain.CurrentDomain - // doesn't actualy load in all assemblies, only the types that have been referenced so far. - // However, in a web context, the BuildManager will have executed which will force all assemblies - // to be loaded so it's fine for now. public static Type GetTypeByName(string typeName) { - var type = Type.GetType(typeName); + var type = BuildManager.GetType(typeName, false); + if (type != null) return type; + + //TODO: This isn't very elegant, and will have issues since the AppDomain.CurrentDomain + // doesn't actualy load in all assemblies, only the types that have been referenced so far. + // However, in a web context, the BuildManager will have executed which will force all assemblies + // to be loaded so it's fine for now. + + //now try fall back procedures. + type = Type.GetType(typeName); if (type != null) return type; return AppDomain.CurrentDomain.GetAssemblies() .Select(x => x.GetType(typeName)) From d0df31be8b2fa7532ccb3e267d87d11134fc3131 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 19 Jan 2016 19:57:38 +0100 Subject: [PATCH 3/4] Ensures the build models buttons work and are enabled for content types, media types and member types --- .../services/contenttypehelper.service.js | 40 ++++++++- .../views/documenttypes/edit.controller.js | 86 +++++++------------ .../src/views/mediatypes/edit.controller.js | 33 +++++++ .../src/views/mediatypes/edit.html | 25 ++++-- .../src/views/membertypes/edit.controller.js | 35 +++++++- .../src/views/membertypes/edit.html | 25 ++++-- 6 files changed, 173 insertions(+), 71 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js index abfa58bc72..047d18c35c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js @@ -3,7 +3,7 @@ * @name umbraco.services.contentTypeHelper * @description A helper service for the content type editor **/ -function contentTypeHelper(contentTypeResource, dataTypeResource, $filter) { +function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $injector, $q) { var contentTypeHelperService = { @@ -25,6 +25,44 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter) { }, + generateModels: function () { + var deferred = $q.defer(); + var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null; + var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled; + if (modelsBuilderEnabled && modelsResource) { + modelsResource.buildModels().then(function(result) { + deferred.resolve(result); + + //just calling this to get the servar back to life + modelsResource.getModelsOutOfDateStatus(); + + }, function(e) { + deferred.reject(e); + }); + } + else { + deferred.resolve(false); + } + return deferred.promise; + }, + + checkModelsBuilderStatus: function () { + var deferred = $q.defer(); + var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null; + var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled; + + if (modelsBuilderEnabled && modelsResource) { + modelsResource.getModelsOutOfDateStatus().then(function(result) { + //Generate models buttons should be enabled if its not 100 + deferred.resolve(result.status !== 100); + }); + } + else { + deferred.resolve(false); + } + return deferred.promise; + }, + makeObjectArrayFromId: function (idArray, objectArray) { var newArray = []; diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js index cd0dc96c11..3c8159bb8e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js @@ -46,59 +46,6 @@ } ]; - var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null; - var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled; - - //disable by default, turn on if detected correctly. - vm.page.modelsBuilder = false; - if (modelsBuilderEnabled && modelsResource) { - modelsResource.getModelsOutOfDateStatus().then(function (result) { - - if (result.status === 100) { - return; - } - - vm.page.modelsBuilder = true; - - //Models builder mode: - - vm.page.defaultButton = { - hotKey: "ctrl+s", - labelKey: "buttons_save", - letter: "S", - type: "submit", - handler: function () { vm.save(); } - }; - vm.page.subButtons = [{ - hotKey: "ctrl+g", - labelKey: "buttons_generateModels", - letter: "G", - handler: function () { - - vm.page.saveButtonState = "busy"; - notificationsService.info("Building models", "this can take abit of time, don't worry"); - - if (modelsBuilderEnabled && modelsResource) { - modelsResource.buildModels().then(function () { - vm.page.saveButtonState = "init"; - - //clear and add success - notificationsService.success("Models Generated"); - - //just calling this to get the servar back to life - modelsResource.getModelsOutOfDateStatus(); - - }, function () { - notificationsService.error("Models could not be generated"); - vm.page.saveButtonState = "error"; - }); - } - } - }]; - - }); - } - vm.page.keyboardShortcutsOverview = [ { "name": localizationService.localize("main_sections"), @@ -164,6 +111,39 @@ } ]; + contentTypeHelper.checkModelsBuilderStatus().then(function (result) { + vm.page.modelsBuilder = result; + if (result) { + //Models builder mode: + vm.page.defaultButton = { + hotKey: "ctrl+s", + labelKey: "buttons_save", + letter: "S", + type: "submit", + handler: function () { vm.save(); } + }; + vm.page.subButtons = [{ + hotKey: "ctrl+g", + labelKey: "buttons_generateModels", + letter: "G", + handler: function () { + + vm.page.saveButtonState = "busy"; + notificationsService.info("Building models", "this can take abit of time, don't worry"); + + contentTypeHelper.generateModels().then(function (result) { + vm.page.saveButtonState = "init"; + //clear and add success + notificationsService.success("Models Generated"); + }, function () { + notificationsService.error("Models could not be generated"); + vm.page.saveButtonState = "error"; + }); + } + }]; + } + }); + if ($routeParams.create) { vm.page.loading = true; diff --git a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js index 26453cfa13..89e598ec27 100644 --- a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js @@ -95,6 +95,39 @@ } ]; + contentTypeHelper.checkModelsBuilderStatus().then(function (result) { + vm.page.modelsBuilder = result; + if (result) { + //Models builder mode: + vm.page.defaultButton = { + hotKey: "ctrl+s", + labelKey: "buttons_save", + letter: "S", + type: "submit", + handler: function () { vm.save(); } + }; + vm.page.subButtons = [{ + hotKey: "ctrl+g", + labelKey: "buttons_generateModels", + letter: "G", + handler: function () { + + vm.page.saveButtonState = "busy"; + notificationsService.info("Building models", "this can take abit of time, don't worry"); + + contentTypeHelper.generateModels().then(function(result) { + vm.page.saveButtonState = "init"; + //clear and add success + notificationsService.success("Models Generated"); + }, function() { + notificationsService.error("Models could not be generated"); + vm.page.saveButtonState = "error"; + }); + } + }]; + } + }); + if ($routeParams.create) { vm.page.loading = true; diff --git a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.html b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.html index d8f82a64ff..b6c507ec0c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.html @@ -39,14 +39,23 @@ - - + + + + + + diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js index f4aa8eed25..ed880da9b3 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js @@ -9,7 +9,7 @@ (function () { "use strict"; - function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService, overlayHelper) { + function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService, overlayHelper, contentTypeHelper) { var vm = this; var localizeSaving = localizationService.localize("general_saving"); @@ -54,6 +54,39 @@ } ]; + contentTypeHelper.checkModelsBuilderStatus().then(function (result) { + vm.page.modelsBuilder = result; + if (result) { + //Models builder mode: + vm.page.defaultButton = { + hotKey: "ctrl+s", + labelKey: "buttons_save", + letter: "S", + type: "submit", + handler: function () { vm.save(); } + }; + vm.page.subButtons = [{ + hotKey: "ctrl+g", + labelKey: "buttons_generateModels", + letter: "G", + handler: function () { + + vm.page.saveButtonState = "busy"; + notificationsService.info("Building models", "this can take abit of time, don't worry"); + + contentTypeHelper.generateModels().then(function (result) { + vm.page.saveButtonState = "init"; + //clear and add success + notificationsService.success("Models Generated"); + }, function () { + notificationsService.error("Models could not be generated"); + vm.page.saveButtonState = "error"; + }); + } + }]; + } + }); + if ($routeParams.create) { vm.page.loading = true; diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.html b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.html index b8bb2fd569..64ffe504b1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.html @@ -37,14 +37,23 @@ - - + + + + + + From 173f3cb32acf9184b9152c5d0225bc61243e9fa5 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 19 Jan 2016 19:58:48 +0100 Subject: [PATCH 4/4] ensures the default language has the correct build models translation --- src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml index 4ffeb58d19..cd0a3d3efd 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml @@ -95,6 +95,7 @@ Choose style Show styles Insert table + Generate models To change the document type for the selected content, first select from the list of valid types for this location.