From a725ddae5aec0180a427e460e8e3e3dbfb3783f5 Mon Sep 17 00:00:00 2001 From: Rasmus John Pedersen Date: Tue, 21 Aug 2018 17:08:06 +0200 Subject: [PATCH 1/2] Only remove ? or # if it's part of the url --- .../src/views/common/dialogs/linkpicker.controller.js | 8 ++++++-- .../common/overlays/linkpicker/linkpicker.controller.js | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js index dee9a4409a..3856a4b862 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js @@ -43,8 +43,12 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", $scope.model.target.url = resp.urls[0]; }); } else if ($scope.target.url.length) { - // a url but no id/udi indicates an external link - trim the url to remove the anchor/qs - $scope.target.url = $scope.model.url.substring(0, $scope.model.url.search(/(#|\?)/)); + // 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) { + $scope.model.target.url = $scope.model.target.url.substring(0, indexOfAnchor); + } } } diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js index 208eb88e51..7bcbeee1e1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js @@ -53,7 +53,11 @@ angular.module("umbraco").controller("Umbraco.Overlays.LinkPickerController", }); } else if ($scope.model.target.url.length) { // a url but no id/udi indicates an external link - trim the url to remove the anchor/qs - $scope.model.target.url = $scope.model.target.url.substring(0, $scope.model.target.url.search(/(#|\?)/)); + // only do the substring if there's a # or a ? + var indexOfAnchor = $scope.model.target.url.search(/(#|\?)/); + if (indexOfAnchor > -1) { + $scope.model.target.url = $scope.model.target.url.substring(0, indexOfAnchor); + } } } else if (dialogOptions.anchors) { $scope.anchorValues = dialogOptions.anchors; From 1b1df84863c6df72f5cce078e93a4d855022f4cd Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 23 Aug 2018 21:31:31 +0200 Subject: [PATCH 2/2] Populates the anchor when found Also fixes one of the JS files where .model was seemingly used randomly, but the view doesn't want a .model in there --- .../views/common/dialogs/linkpicker.controller.js | 13 ++++++++----- .../overlays/linkpicker/linkpicker.controller.js | 7 ++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js index 3856a4b862..5d6a3bf12c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js @@ -40,14 +40,17 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", // if a link exists, get the properties to build the anchor name list contentResource.getById(id).then(function (resp) { $scope.anchorValues = tinyMceService.getAnchorNames(JSON.stringify(resp.properties)); - $scope.model.target.url = resp.urls[0]; + $scope.target.url = resp.urls[0]; }); } else if ($scope.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) { - $scope.model.target.url = $scope.model.target.url.substring(0, indexOfAnchor); + var indexOfAnchor = $scope.target.url.search(/(#|\?)/); + if (indexOfAnchor > -1) { + // populate the anchor + $scope.target.anchor = $scope.target.url.substring(indexOfAnchor); + // then rewrite the model and populate the link + $scope.target.url = $scope.target.url.substring(0, indexOfAnchor); } } } @@ -85,7 +88,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", } else { contentResource.getById(args.node.id).then(function (resp) { $scope.anchorValues = tinyMceService.getAnchorNames(JSON.stringify(resp.properties)); - $scope.model.target.url = resp.urls[0]; + $scope.target.url = resp.urls[0]; }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js index 7bcbeee1e1..4d6022e175 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js @@ -3,8 +3,6 @@ angular.module("umbraco").controller("Umbraco.Overlays.LinkPickerController", function ($scope, eventsService, dialogService, entityResource, contentResource, mediaHelper, userService, localizationService, tinyMceService) { var dialogOptions = $scope.model; - var anchorPattern = //gi; - var searchText = "Search..."; localizationService.localize("general_search").then(function (value) { searchText = value + "..."; @@ -52,10 +50,13 @@ angular.module("umbraco").controller("Umbraco.Overlays.LinkPickerController", $scope.model.target.url = resp.urls[0]; }); } else if ($scope.model.target.url.length) { - // a url but no id/udi indicates an external link - trim the url to remove the anchor/qs + // 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); } }