From d4d0b43052badbc75352035d9e8928d2e089f34e Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Fri, 28 Aug 2020 18:00:51 +0100 Subject: [PATCH 01/11] Started on language variant support --- TestSite/App_Data/Models/all.generated.cs | 16 +- TestSite/App_Data/Models/models.generated.cs | 18 +- .../MeganavV8/Js/meganavv8.controller.js | 4 +- .../Js/meganavv8.linkpicker.controller.js | 265 ++++++++++++++++ .../MeganavV8/Js/meganavv8.resource.js | 5 +- .../App_Plugins/MeganavV8/Views/settings.html | 2 +- .../App_Plugins/MeganavV8/package.manifest | 1 + TestSite/TestSite.vbproj | 1 + TestSite/Web.config | 294 +++++++++--------- TestSite/uSync/v8/Content/about-us.config | 24 +- .../uSync/v8/Content/main-navigation.config | 44 ++- .../uSync/v8/ContentTypes/contentbase.config | 6 +- .../uSync/v8/ContentTypes/contentpage.config | 38 ++- .../v8/ContentTypes/mainnavigation.config | 4 +- .../v8/ContentTypes/navigationbase.config | 2 +- ...ntentPageContentPickerContentPicker.config | 13 + ...entPageMultiUrlPickerMultiUrlPicker.config | 14 + .../http-localhost-53457-en-gb_en-gb.config | 8 + .../http-localhost-53457-en-us_en-us.config | 8 + TestSite/uSync/v8/Languages/en-gb.config | 7 + .../API/MeganavV8EntityApiController.cs | 21 +- .../Models/MeganavV8Item.cs | 1 + 22 files changed, 613 insertions(+), 183 deletions(-) create mode 100644 TestSite/App_Plugins/MeganavV8/Js/meganavv8.linkpicker.controller.js create mode 100644 TestSite/uSync/v8/DataTypes/ContentPageContentPickerContentPicker.config create mode 100644 TestSite/uSync/v8/DataTypes/ContentPageMultiUrlPickerMultiUrlPicker.config create mode 100644 TestSite/uSync/v8/Domains/http-localhost-53457-en-gb_en-gb.config create mode 100644 TestSite/uSync/v8/Domains/http-localhost-53457-en-us_en-us.config create mode 100644 TestSite/uSync/v8/Languages/en-gb.config diff --git a/TestSite/App_Data/Models/all.generated.cs b/TestSite/App_Data/Models/all.generated.cs index 9e7a701..8d16a84 100644 --- a/TestSite/App_Data/Models/all.generated.cs +++ b/TestSite/App_Data/Models/all.generated.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Web; using Umbraco.ModelsBuilder.Embedded; -[assembly:ModelsBuilderAssembly(PureLive = true, SourceHash = "c4de1de1cea5bfb3")] +[assembly:ModelsBuilderAssembly(PureLive = true, SourceHash = "aeb9685254c299f3")] [assembly:System.Reflection.AssemblyVersion("0.0.0.1")] @@ -300,6 +300,20 @@ public ContentPage(IPublishedContent content) // properties + /// + /// Content Picker + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder", "8.6.1")] + [ImplementPropertyType("contentPicker")] + public global::Umbraco.Core.Models.PublishedContent.IPublishedContent ContentPicker => this.Value("contentPicker"); + + /// + /// Multi Url Picker + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder", "8.6.1")] + [ImplementPropertyType("multiUrlPicker")] + public global::System.Collections.Generic.IEnumerable MultiUrlPicker => this.Value>("multiUrlPicker"); + /// /// Content /// diff --git a/TestSite/App_Data/Models/models.generated.cs b/TestSite/App_Data/Models/models.generated.cs index de84d11..2d8a3a3 100644 --- a/TestSite/App_Data/Models/models.generated.cs +++ b/TestSite/App_Data/Models/models.generated.cs @@ -17,8 +17,8 @@ using Umbraco.Web; using Umbraco.ModelsBuilder.Embedded; -[assembly:ModelsBuilderAssembly(PureLive = true, SourceHash = "c4de1de1cea5bfb3")] -[assembly:System.Reflection.AssemblyVersion("0.0.0.1")] +[assembly:ModelsBuilderAssembly(PureLive = true, SourceHash = "aeb9685254c299f3")] +[assembly:System.Reflection.AssemblyVersion("0.0.0.6")] namespace Umbraco.Web.PublishedModels { @@ -286,6 +286,20 @@ public ContentPage(IPublishedContent content) // properties + /// + /// Content Picker + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder", "8.6.1")] + [ImplementPropertyType("contentPicker")] + public global::Umbraco.Core.Models.PublishedContent.IPublishedContent ContentPicker => this.Value("contentPicker"); + + /// + /// Multi Url Picker + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder", "8.6.1")] + [ImplementPropertyType("multiUrlPicker")] + public global::System.Collections.Generic.IEnumerable MultiUrlPicker => this.Value>("multiUrlPicker"); + /// /// Content /// diff --git a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js index 7927d54..a66f311 100644 --- a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js +++ b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js @@ -53,7 +53,7 @@ function getItemEntities(items) { _.each(items, function (item) { if (item.udi) { - meganavV8Resource.getById(item.udi) + meganavV8Resource.getById(item.udi, null, item.culture) .then(function (response) { angular.extend(item, response.data); } @@ -78,7 +78,7 @@ model.target.anchor = (model.target.anchor.indexOf('=') === -1 ? '#' : '?') + model.target.anchor; } if (model.target.udi) { - meganavV8Resource.getById(model.target.udi) + meganavV8Resource.getById(model.target.udi, model.target.url, null) .then(function (response) { // merge metadata angular.extend(model.target, response.data); diff --git a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.linkpicker.controller.js b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.linkpicker.controller.js new file mode 100644 index 0000000..6b0d743 --- /dev/null +++ b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.linkpicker.controller.js @@ -0,0 +1,265 @@ +//used for the media picker dialog +angular.module("umbraco").controller("Our.Umbraco.MeganavV8.LinkPickerController", + function ($scope, eventsService, entityResource, mediaResource, mediaHelper, udiParser, userService, localizationService, editorService) { + + var vm = this; + var dialogOptions = $scope.model; + + vm.submit = submit; + vm.close = close; + vm.toggleOpenInNewWindow = toggleOpenInNewWindow; + + vm.labels = {}; + localizationService.localizeMany(["defaultdialogs_openInNewWindow"]).then(function (data) { + vm.labels.openInNewWindow = data[0]; + }); + + if (!$scope.model.title) { + localizationService.localize("defaultdialogs_selectLink") + .then(function (value) { + $scope.model.title = value; + }); + } + $scope.customTreeParams = dialogOptions.dataTypeKey ? "dataTypeKey=" + dialogOptions.dataTypeKey : "" + "culture=TEST"; + $scope.dialogTreeApi = {}; + $scope.model.target = {}; + $scope.searchInfo = { + searchFromId: null, + searchFromName: null, + showSearch: false, + dataTypeKey: dialogOptions.dataTypeKey, + results: [], + selectedSearchResults: [] + }; + + $scope.showTarget = $scope.model.hideTarget !== true; + $scope.showAnchor = $scope.model.hideAnchor !== true; + + // this ensures that we only sync the tree once and only when it's ready + var oneTimeTreeSync = { + executed: false, + treeReady: false, + sync: function () { + // don't run this if: + // - it was already run once + // - the tree isn't ready yet + // - the model path hasn't been loaded yet + if (this.executed || !this.treeReady || !($scope.model.target && $scope.model.target.path)) { + return; + } + + this.executed = true; + // sync the tree to the model path + $scope.dialogTreeApi.syncTree({ + path: $scope.model.target.path, + tree: "content" + }); + } + }; + + if (dialogOptions.currentTarget) { + // clone the current target so we don't accidentally update the caller's model while manipulating $scope.model.target + $scope.model.target = angular.copy(dialogOptions.currentTarget); + // if we have a node ID, we fetch the current node to build the form data + if ($scope.model.target.id || $scope.model.target.udi) { + + // will be either a udi or an int + var id = $scope.model.target.udi ? $scope.model.target.udi : $scope.model.target.id; + + if ($scope.model.target.udi) { + // extract the entity type from the udi and set target.isMedia accordingly + var udi = udiParser.parse(id); + + if (udi && udi.entityType === "media") { + $scope.model.target.isMedia = true; + } else { + delete $scope.model.target.isMedia; + } + } + + if ($scope.model.target.isMedia) { + mediaResource.getById(id).then(function (resp) { + $scope.model.target.url = resp.mediaLink; + }); + } else { + // get the content path + entityResource.getPath(id, "Document").then(function (path) { + $scope.model.target.path = path; + oneTimeTreeSync.sync(); + }); + + entityResource.getUrlAndAnchors(id).then(function (resp) { + $scope.anchorValues = resp.anchorValues; + $scope.model.target.url = resp.url; + }); + + } + } else if ($scope.model.target.url && $scope.model.target.url.length) { + // a url but no id/udi indicates an external link - trim the url to remove the anchor/qs + // only do the substring if there's a # or a ? + var indexOfAnchor = $scope.model.target.url.search(/(#|\?)/); + if (indexOfAnchor > -1) { + // populate the anchor + $scope.model.target.anchor = $scope.model.target.url.substring(indexOfAnchor); + // then rewrite the model and populate the link + $scope.model.target.url = $scope.model.target.url.substring(0, indexOfAnchor); + } + } + + // need to translate the link target ("_blank" or "") into a boolean value for umb-checkbox + vm.openInNewWindow = $scope.model.target.target === "_blank"; + } + else if (dialogOptions.anchors) { + $scope.anchorValues = dialogOptions.anchors; + } + + function treeLoadedHandler(args) { + oneTimeTreeSync.treeReady = true; + oneTimeTreeSync.sync(); + } + + function nodeSelectHandler(args) { + if (args && args.event) { + args.event.preventDefault(); + args.event.stopPropagation(); + } + + eventsService.emit("dialogs.linkPicker.select", args); + + if ($scope.currentNode) { + //un-select if there's a current one selected + $scope.currentNode.selected = false; + } + + $scope.currentNode = args.node; + $scope.currentNode.selected = true; + $scope.model.target.id = args.node.id; + $scope.model.target.udi = args.node.udi; + $scope.model.target.name = args.node.name; + + if (args.node.id < 0) { + $scope.model.target.url = "/"; + } + else { + entityResource.getUrlAndAnchors(args.node.id).then(function (resp) { + $scope.anchorValues = resp.anchorValues; + $scope.model.target.url = resp.url; + }); + } + + if (!angular.isUndefined($scope.model.target.isMedia)) { + delete $scope.model.target.isMedia; + } + } + + + function nodeExpandedHandler(args) { + // open mini list view for list views + if (args.node.metaData.isContainer) { + openMiniListView(args.node); + } + } + + $scope.switchToMediaPicker = function () { + userService.getCurrentUser().then(function (userData) { + + var startNodeId, startNodeIsVirtual; + if (dialogOptions.ignoreUserStartNodes === true) { + startNodeId = -1; + startNodeIsVirtual = true; + } + else { + startNodeId = userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0]; + startNodeIsVirtual = userData.startMediaIds.length !== 1; + } + + var mediaPicker = { + startNodeId: startNodeId, + startNodeIsVirtual: startNodeIsVirtual, + dataTypeKey: dialogOptions.dataTypeKey, + submit: function (model) { + var media = model.selection[0]; + + $scope.model.target.id = media.id; + $scope.model.target.udi = media.udi; + $scope.model.target.isMedia = true; + $scope.model.target.name = media.name; + $scope.model.target.url = media.image; + + editorService.close(); + + // make sure the content tree has nothing highlighted + $scope.dialogTreeApi.syncTree({ + path: "-1", + tree: "content" + }); + }, + close: function () { + editorService.close(); + } + }; + editorService.mediaPicker(mediaPicker); + }); + }; + + $scope.hideSearch = function () { + $scope.searchInfo.showSearch = false; + $scope.searchInfo.searchFromId = null; + $scope.searchInfo.searchFromName = null; + $scope.searchInfo.results = []; + } + + // method to select a search result + $scope.selectResult = function (evt, result) { + result.selected = result.selected === true ? false : true; + nodeSelectHandler({ + event: evt, + node: result + }); + }; + + //callback when there are search results + $scope.onSearchResults = function (results) { + $scope.searchInfo.results = results; + $scope.searchInfo.showSearch = true; + }; + + $scope.onTreeInit = function () { + $scope.dialogTreeApi.callbacks.treeLoaded(treeLoadedHandler); + $scope.dialogTreeApi.callbacks.treeNodeSelect(nodeSelectHandler); + $scope.dialogTreeApi.callbacks.treeNodeExpanded(nodeExpandedHandler); + } + + // Mini list view + $scope.selectListViewNode = function (node) { + node.selected = node.selected === true ? false : true; + nodeSelectHandler({ + node: node + }); + }; + + $scope.closeMiniListView = function () { + $scope.miniListView = undefined; + }; + + function openMiniListView(node) { + $scope.miniListView = node; + } + + function toggleOpenInNewWindow(model, value) { + $scope.model.target.target = model ? "_blank" : ""; + } + + function close() { + if ($scope.model && $scope.model.close) { + $scope.model.close(); + } + } + + function submit() { + if ($scope.model && $scope.model.submit) { + $scope.model.submit($scope.model); + } + } + + }); \ No newline at end of file diff --git a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js index d74cbf3..748f94b 100644 --- a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js +++ b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js @@ -1,7 +1,8 @@ angular.module("umbraco.resources").factory("meganavV8Resource", function ($http, iconHelper) { return { - getById: function (id) { - return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id) + getById: function (id, url, culture) { + + return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id + "&url=" + url + "&culture=" + culture) .then(function (response) { var item = response.data; item.icon = iconHelper.convertFromLegacyIcon(item.icon); diff --git a/TestSite/App_Plugins/MeganavV8/Views/settings.html b/TestSite/App_Plugins/MeganavV8/Views/settings.html index b07a9ac..26eaa51 100644 --- a/TestSite/App_Plugins/MeganavV8/Views/settings.html +++ b/TestSite/App_Plugins/MeganavV8/Views/settings.html @@ -1,4 +1,4 @@ -
+
diff --git a/TestSite/App_Plugins/MeganavV8/package.manifest b/TestSite/App_Plugins/MeganavV8/package.manifest index 825e734..6e28cb0 100644 --- a/TestSite/App_Plugins/MeganavV8/package.manifest +++ b/TestSite/App_Plugins/MeganavV8/package.manifest @@ -2,6 +2,7 @@ "javascript": [ "~/App_Plugins/MeganavV8/js/meganavv8.controller.js", "~/App_Plugins/MeganavV8/js/meganavv8.resource.js", + "~/App_Plugins/MeganavV8/js/meganavv8.linkpicker.controller.js", "~/App_Plugins/MeganavV8/js/angular-ui-tree.js" ], "css": [ diff --git a/TestSite/TestSite.vbproj b/TestSite/TestSite.vbproj index 9965187..ec5a999 100644 --- a/TestSite/TestSite.vbproj +++ b/TestSite/TestSite.vbproj @@ -318,6 +318,7 @@ + diff --git a/TestSite/Web.config b/TestSite/Web.config index 96afaf2..e686b7d 100644 --- a/TestSite/Web.config +++ b/TestSite/Web.config @@ -1,4 +1,4 @@ - + -
+
-
-
+
+
-
-
-
+
+
+
- - + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - + + @@ -67,105 +67,105 @@ - - - + + + - - - - + + + + - - - - - + + + + + - + - + - + - - - + + + - - + + - + - + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + -
- -
    - -
  1. - -
- -
- - - - Add - - - - - - - -
\ No newline at end of file diff --git a/TestSite/App_Plugins/Meganav/Views/settings.html b/TestSite/App_Plugins/Meganav/Views/settings.html deleted file mode 100644 index b07a9ac..0000000 --- a/TestSite/App_Plugins/Meganav/Views/settings.html +++ /dev/null @@ -1,130 +0,0 @@ -
- - - - - - - - - -
- - - - - - - - - - - - -
- - {{model.target.name}} - - - - - - - - - - - -
-
- Link to page -
- -
- - - -
- - - - -
- - -
-
- - - - -
- -
-
-
- - - - - - - - - - -
- -
\ No newline at end of file diff --git a/TestSite/App_Plugins/Meganav/package.manifest b/TestSite/App_Plugins/Meganav/package.manifest deleted file mode 100644 index fc27f97..0000000 --- a/TestSite/App_Plugins/Meganav/package.manifest +++ /dev/null @@ -1,10 +0,0 @@ -{ - "javascript": [ - "~/App_Plugins/Meganav/js/meganav.controller.js", - "~/App_Plugins/Meganav/js/meganav.resource.js", - "~/App_Plugins/Meganav/js/angular-ui-tree.js" - ], - "css": [ - "~/App_Plugins/Meganav/css/editor.css" - ] -} \ No newline at end of file From ea850e66675843b8c5352884f0a3b86a4ac05a6c Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:21:23 +0100 Subject: [PATCH 04/11] Added language variants --- .../uSync/v8/Domains/http-localhost-53457-uk_en-gb.config | 8 ++++++++ .../uSync/v8/Domains/http-localhost-53457-us_en-us.config | 8 ++++++++ .../v8/Domains/http-meganavv8.mypc-en-gb_en-gb.config | 2 ++ .../v8/Domains/http-meganavv8.mypc-en-us_en-us.config | 2 ++ 4 files changed, 20 insertions(+) create mode 100644 TestSite/uSync/v8/Domains/http-localhost-53457-uk_en-gb.config create mode 100644 TestSite/uSync/v8/Domains/http-localhost-53457-us_en-us.config create mode 100644 TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-gb_en-gb.config create mode 100644 TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-us_en-us.config diff --git a/TestSite/uSync/v8/Domains/http-localhost-53457-uk_en-gb.config b/TestSite/uSync/v8/Domains/http-localhost-53457-uk_en-gb.config new file mode 100644 index 0000000..488b930 --- /dev/null +++ b/TestSite/uSync/v8/Domains/http-localhost-53457-uk_en-gb.config @@ -0,0 +1,8 @@ + + + + false + en-GB + /Home + + \ No newline at end of file diff --git a/TestSite/uSync/v8/Domains/http-localhost-53457-us_en-us.config b/TestSite/uSync/v8/Domains/http-localhost-53457-us_en-us.config new file mode 100644 index 0000000..91cd4c4 --- /dev/null +++ b/TestSite/uSync/v8/Domains/http-localhost-53457-us_en-us.config @@ -0,0 +1,8 @@ + + + + false + en-US + /Home + + \ No newline at end of file diff --git a/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-gb_en-gb.config b/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-gb_en-gb.config new file mode 100644 index 0000000..ce211dc --- /dev/null +++ b/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-gb_en-gb.config @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-us_en-us.config b/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-us_en-us.config new file mode 100644 index 0000000..07a9e02 --- /dev/null +++ b/TestSite/uSync/v8/Domains/http-meganavv8.mypc-en-us_en-us.config @@ -0,0 +1,2 @@ + + \ No newline at end of file From 661a23c72d818954d9edb8e576a6af72f1f16117 Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:22:45 +0100 Subject: [PATCH 05/11] Return correct url and name based on culture --- .../API/MeganavV8EntityApiController.cs | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs b/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs index 76479e9..73f7b03 100644 --- a/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs +++ b/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net; @@ -17,18 +17,8 @@ namespace Our.Umbraco.MeganavV8.Api.Controllers.API [PluginController(Constants.PackageName)] public class MeganavV8EntityApiController : UmbracoAuthorizedJsonController { - private readonly IVariationContextAccessor _variationContextAccessor; - - public MeganavV8EntityApiController(IVariationContextAccessor variationContextAccessor) - { - _variationContextAccessor = variationContextAccessor; - } - public HttpResponseMessage GetById(string id, string url, string culture = null) + public HttpResponseMessage GetById(string id, string culture = null) { - if (!string.IsNullOrEmpty(culture)) - { - _variationContextAccessor.VariationContext = new VariationContext(culture); - } var udiList = new List(); var udi = Udi.Parse(id); udiList.Add(udi); @@ -36,8 +26,8 @@ public HttpResponseMessage GetById(string id, string url, string culture = null) if (entity != null) { + string entityName = entity.Name; string entityUrl = "#"; - string entityCulture = null; if (entity.Published) { @@ -45,8 +35,8 @@ public HttpResponseMessage GetById(string id, string url, string culture = null) if (publishedEntity != null) { - entityUrl = publishedEntity.Url; - cculture + entityName = publishedEntity.Name(culture); + entityUrl = publishedEntity.Url(culture); } } @@ -54,7 +44,7 @@ public HttpResponseMessage GetById(string id, string url, string culture = null) { id = entity.Id, udi = entity.GetUdi(), - name = entity.Name, + name = entityName, icon = entity.ContentType.Icon, url = entityUrl, published = entity.Published, From e09527c25496ca048739beace42a3fbfd76472ce Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:23:14 +0100 Subject: [PATCH 06/11] Add item culture to the model --- .../Controllers/API/MeganavV8EntityApiController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs b/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs index 73f7b03..2f8b407 100644 --- a/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs +++ b/src/Our.Umbraco.MeganavV8.Api/Controllers/API/MeganavV8EntityApiController.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net; @@ -49,7 +49,7 @@ public HttpResponseMessage GetById(string id, string culture = null) url = entityUrl, published = entity.Published, naviHide = entity.HasProperty("umbracoNaviHide") && entity.GetValue("umbracoNaviHide"), - culture = cculture + culture = culture }); } From 7e513dcfa27c01c33f93341e8ff0e24bdb724eb2 Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:24:02 +0100 Subject: [PATCH 07/11] Convert url and name based on culture --- .../ValueConverters/MeganavV8ValueConverter.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Our.Umbraco.MeganavV8.Core/ValueConverters/MeganavV8ValueConverter.cs b/src/Our.Umbraco.MeganavV8.Core/ValueConverters/MeganavV8ValueConverter.cs index 1b37d33..b8ba804 100644 --- a/src/Our.Umbraco.MeganavV8.Core/ValueConverters/MeganavV8ValueConverter.cs +++ b/src/Our.Umbraco.MeganavV8.Core/ValueConverters/MeganavV8ValueConverter.cs @@ -5,6 +5,7 @@ using Our.Umbraco.MeganavV8.Core.Enums; using Our.Umbraco.MeganavV8.Core.Models; using Our.Umbraco.MeganavV8.Core.PropertyEditors; +using Umbraco.Core; using Umbraco.Core.Logging; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; @@ -91,11 +92,11 @@ private IEnumerable BuildMenu(IEnumerable items, i // set title to node name if no override is set if (string.IsNullOrWhiteSpace(item.Title)) { - item.Title = umbracoContent.Name; + item.Title = umbracoContent.Name(item.Culture); } // set url to most recent from published cache - item.Url = umbracoContent.Url; + item.Url = umbracoContent.Url(item.Culture); } } From b85de44229a3d05bf41ebf9ca268f09f148c3a94 Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:25:09 +0100 Subject: [PATCH 08/11] Pass backoffice culture to api --- .../App_Plugins/MeganavV8/Js/meganavv8.controller.js | 9 +++++---- TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js | 4 ++-- TestSite/App_Plugins/MeganavV8/Views/settings.html | 2 +- TestSite/TestSite.vbproj | 4 ++-- .../UI/App_Plugins/MeganavV8/Js/meganavv8.controller.js | 9 +++++---- .../UI/App_Plugins/MeganavV8/Js/meganavv8.resource.js | 5 +++-- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js index a66f311..52e9f7e 100644 --- a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js +++ b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.controller.js @@ -1,4 +1,4 @@ -function MeganavV8($scope, editorService, meganavV8Resource) { +function MeganavV8($scope, editorService, meganavV8Resource, $routeParams) { $scope.items = []; @@ -53,7 +53,7 @@ function getItemEntities(items) { _.each(items, function (item) { if (item.udi) { - meganavV8Resource.getById(item.udi, null, item.culture) + meganavV8Resource.getById(item.udi, $routeParams.cculture ? $routeParams.cculture : $routeParams.mculture) .then(function (response) { angular.extend(item, response.data); } @@ -78,7 +78,7 @@ model.target.anchor = (model.target.anchor.indexOf('=') === -1 ? '#' : '?') + model.target.anchor; } if (model.target.udi) { - meganavV8Resource.getById(model.target.udi, model.target.url, null) + meganavV8Resource.getById(model.target.udi, { cultureName: $routeParams.cculture ? $routeParams.cculture : $routeParams.mculture }) .then(function (response) { // merge metadata angular.extend(model.target, response.data); @@ -121,7 +121,8 @@ children: data.children || [], icon: data.icon || "icon-link", published: data.published, - naviHide: data.naviHide + naviHide: data.naviHide, + culture: data.culture } } } diff --git a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js index 748f94b..f3514a6 100644 --- a/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js +++ b/TestSite/App_Plugins/MeganavV8/Js/meganavv8.resource.js @@ -1,8 +1,8 @@ angular.module("umbraco.resources").factory("meganavV8Resource", function ($http, iconHelper) { return { - getById: function (id, url, culture) { + getById: function (id, culture) { - return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id + "&url=" + url + "&culture=" + culture) + return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id + "&culture=" + culture) .then(function (response) { var item = response.data; item.icon = iconHelper.convertFromLegacyIcon(item.icon); diff --git a/TestSite/App_Plugins/MeganavV8/Views/settings.html b/TestSite/App_Plugins/MeganavV8/Views/settings.html index 26eaa51..b07a9ac 100644 --- a/TestSite/App_Plugins/MeganavV8/Views/settings.html +++ b/TestSite/App_Plugins/MeganavV8/Views/settings.html @@ -1,4 +1,4 @@ -
+
diff --git a/TestSite/TestSite.vbproj b/TestSite/TestSite.vbproj index ad6ea7b..9965187 100644 --- a/TestSite/TestSite.vbproj +++ b/TestSite/TestSite.vbproj @@ -18,7 +18,7 @@ TestSite v4.7.2 Custom - false + true @@ -477,7 +477,7 @@ True 53457 / - http://meganavv8.mypc + http://localhost:53457/ False False diff --git a/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.controller.js b/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.controller.js index 7927d54..52e9f7e 100644 --- a/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.controller.js +++ b/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.controller.js @@ -1,4 +1,4 @@ -function MeganavV8($scope, editorService, meganavV8Resource) { +function MeganavV8($scope, editorService, meganavV8Resource, $routeParams) { $scope.items = []; @@ -53,7 +53,7 @@ function getItemEntities(items) { _.each(items, function (item) { if (item.udi) { - meganavV8Resource.getById(item.udi) + meganavV8Resource.getById(item.udi, $routeParams.cculture ? $routeParams.cculture : $routeParams.mculture) .then(function (response) { angular.extend(item, response.data); } @@ -78,7 +78,7 @@ model.target.anchor = (model.target.anchor.indexOf('=') === -1 ? '#' : '?') + model.target.anchor; } if (model.target.udi) { - meganavV8Resource.getById(model.target.udi) + meganavV8Resource.getById(model.target.udi, { cultureName: $routeParams.cculture ? $routeParams.cculture : $routeParams.mculture }) .then(function (response) { // merge metadata angular.extend(model.target, response.data); @@ -121,7 +121,8 @@ children: data.children || [], icon: data.icon || "icon-link", published: data.published, - naviHide: data.naviHide + naviHide: data.naviHide, + culture: data.culture } } } diff --git a/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.resource.js b/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.resource.js index d74cbf3..f3514a6 100644 --- a/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.resource.js +++ b/src/Our.Umbraco.MeganavV8.Web/Web/UI/App_Plugins/MeganavV8/Js/meganavv8.resource.js @@ -1,7 +1,8 @@ angular.module("umbraco.resources").factory("meganavV8Resource", function ($http, iconHelper) { return { - getById: function (id) { - return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id) + getById: function (id, culture) { + + return $http.get("backoffice/MeganavV8/MeganavV8EntityApi/GetById?id=" + id + "&culture=" + culture) .then(function (response) { var item = response.data; item.icon = iconHelper.convertFromLegacyIcon(item.icon); From b3871b7e59487975ecddde5ecae7f8f40b076327 Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:29:33 +0100 Subject: [PATCH 09/11] Generated 8.0.15 dev files --- Builds/NuGet/Umbraco.MegaNavV8.Api.nuspec | 4 ++-- Builds/NuGet/Umbraco.MegaNavV8.Core.nuspec | 4 ++-- Builds/NuGet/Umbraco.MegaNavV8.Web.nuspec | 8 ++++---- Builds/Umbraco.MegaNavV8_8.0.15.zip | Bin 0 -> 30125 bytes .../App_Data/packages/createdPackages.config | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 Builds/Umbraco.MegaNavV8_8.0.15.zip diff --git a/Builds/NuGet/Umbraco.MegaNavV8.Api.nuspec b/Builds/NuGet/Umbraco.MegaNavV8.Api.nuspec index f312bf8..868e0fc 100644 --- a/Builds/NuGet/Umbraco.MegaNavV8.Api.nuspec +++ b/Builds/NuGet/Umbraco.MegaNavV8.Api.nuspec @@ -2,7 +2,7 @@ AaronSadler.MegaNavV8.Api - 8.0.11 + 8.0.12 Umbraco.MegaNavV8.Api Aaron Sadler, Callum Whyte Aaron Sadler, Callum Whyte @@ -12,7 +12,7 @@ MegaNavV8-Logo.png A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco - + Copyright 2020 umbraco, umbraco-cms, MegaNav, MegaNav-V8 diff --git a/Builds/NuGet/Umbraco.MegaNavV8.Core.nuspec b/Builds/NuGet/Umbraco.MegaNavV8.Core.nuspec index ae2f72d..be19e23 100644 --- a/Builds/NuGet/Umbraco.MegaNavV8.Core.nuspec +++ b/Builds/NuGet/Umbraco.MegaNavV8.Core.nuspec @@ -2,7 +2,7 @@ AaronSadler.MegaNavV8.Core - 8.0.11 + 8.0.12 Umbraco.MegaNavV8.Core Aaron Sadler, Callum Whyte Aaron Sadler, Callum Whyte @@ -12,7 +12,7 @@ MegaNavV8-Logo.png A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco - + Copyright 2020 umbraco, umbraco-cms, MegaNav, MegaNav-V8 diff --git a/Builds/NuGet/Umbraco.MegaNavV8.Web.nuspec b/Builds/NuGet/Umbraco.MegaNavV8.Web.nuspec index 5780784..a37c1cc 100644 --- a/Builds/NuGet/Umbraco.MegaNavV8.Web.nuspec +++ b/Builds/NuGet/Umbraco.MegaNavV8.Web.nuspec @@ -2,7 +2,7 @@ AaronSadler.MegaNavV8.Web - 8.0.14 + 8.0.15 Umbraco.MegaNavV8.Web Aaron Sadler, Callum Whyte Aaron Sadler, Callum Whyte @@ -12,12 +12,12 @@ MegaNavV8-Logo.png A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco - + Copyright 2020 umbraco, umbraco-cms, MegaNav, MegaNav-V8 - - + + diff --git a/Builds/Umbraco.MegaNavV8_8.0.15.zip b/Builds/Umbraco.MegaNavV8_8.0.15.zip new file mode 100644 index 0000000000000000000000000000000000000000..1e6b40267178198d6c58140a44f4be362562fa56 GIT binary patch literal 30125 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 literal 0 HcmV?d00001 diff --git a/TestSite/App_Data/packages/createdPackages.config b/TestSite/App_Data/packages/createdPackages.config index 63625f4..e482689 100644 --- a/TestSite/App_Data/packages/createdPackages.config +++ b/TestSite/App_Data/packages/createdPackages.config @@ -1,6 +1,6 @@  - + From 6394d110356ec1ee76c45c75b240ad54967038bc Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:42:07 +0100 Subject: [PATCH 10/11] Updated readme, changelog and integration guide --- CHANGELOG.md | 4 +++- README.md | 14 ++------------ docs/integration-guide.md | 5 +++-- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87ce646..79446a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Change Log All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [8.0.15] - 2020-08-30 +### Added +* Added language variant support ## [8.0.14] - 2020-06-26 ### Changed diff --git a/README.md b/README.md index 114598e..ca16612 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,6 @@ # Umbraco MeganavV8 -A flexible, draggable link picker for constructing site navigation menus, big or small, in Umbraco 8. - -This based on [MegaNav V2.0.0](https://github.com/callumbwhyte/meganav/releases/tag/v2.0.0) by [Callum Whyte](https://our.umbraco.com/members/id:152036/), I have changed it to use UDI instead of ID and it now supports querystrings / anchor urls. - -All credit for the initial plugin goes to [Callum Whyte](https://our.umbraco.com/members/id:152036/). - ## Getting started This package is supported on Umbraco 8.4+. @@ -27,7 +21,7 @@ To [install Core from NuGet](https://www.nuget.org/packages/AaronSadler.MegaNavV ## Usage -After installing the package, you will have a new property editor called MegaNav in the Umbraco backoffice. +After installing the package, you will have a new property editor called MegaNavV8 in the Umbraco backoffice. Here you can configure the "Max depth" of the navigation - the maximum number of levels deep at which an editor can place nav items. You also have the option to prevent nav items where the _umbracoNaviHide_ property has been set from rendering on the front-end - these items will still appear in the backoffice but not on your website, you can still edit or change them as you wish. By default both of these settings are left unset. @@ -62,11 +56,7 @@ To raise a new bug, create an issue on the GitHub repository. To fix a bug or ad ### Who do I talk to? This project is maintained by [Aaron Sadler](https://aaronsadler.uk) and contributors. If you have any questions about the project please contact me through [Twitter](https://twitter.com/AaronSadlerUK), or by raising an issue on GitHub. -## Credits - -Meganav uses a _slightly_ modified version of [Angular UI Tree](https://github.com/angular-ui-tree/angular-ui-tree) v2.11.0 (MIT license) - -### A special #h5yr to our contributors +### A special #h5yr to the orignal author * [Callum Whyte](https://github.com/callumbwhyte) diff --git a/docs/integration-guide.md b/docs/integration-guide.md index e4a5085..807035b 100644 --- a/docs/integration-guide.md +++ b/docs/integration-guide.md @@ -19,10 +19,11 @@ The following properties are available in the _MeganavItem_ class: | Level | Int | The level in the overall navigation that the current item sits at | | Content | IPublishedContent | The IPublishedContent for the selected content item. For external linking nav items this will be null | | Children | List | The picked child / sub items for the current item | +| Culture | String | The link culture ## Implementing Razor -Meganav was designed to closely follow the "Umbraco way" of doing things so we don't impose our own styles or markup on you. +MeganavV8 was designed to closely follow the "Umbraco way" of doing things so we don't impose our own styles or markup on you. It's easy to implement in your own Razor: @@ -41,7 +42,7 @@ It's easy to implement in your own Razor: ## Complex navigation -Meganav can build any size of navigation, from a small single level list to a large multi-level menu. +MeganavV8 can build any size of navigation, from a small single level list to a large multi-level menu. Based on the flexible implementation described above it would be possible to create a complex navigation varying on a number of factors, such as: From eddde3f33da4b94ebfb39ed99c571d465ea1c13c Mon Sep 17 00:00:00 2001 From: Aaron Sadler Date: Sun, 30 Aug 2020 13:43:59 +0100 Subject: [PATCH 11/11] Generated release build --- Builds/Umbraco.MegaNavV8_8.0.15.zip | Bin 30125 -> 29788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Builds/Umbraco.MegaNavV8_8.0.15.zip b/Builds/Umbraco.MegaNavV8_8.0.15.zip index 1e6b40267178198d6c58140a44f4be362562fa56..01076d72a0f1fb58ce61be5924d564bb230b5b63 100644 GIT binary patch delta 10945 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�LVq7uZ2MNN{|AtPwKP)rBH$TWHNkHg{Mf+< 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 KAD92#_J07;|A2r1 delta 11302 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