diff --git a/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js
index 2642a79ac7..a1e74cc207 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js
@@ -25,11 +25,11 @@ angular.module("umbraco").controller("Umbraco.Editors.Content.CopyController",
$scope.treeModel.hideHeader = userData.startContentIds.length > 0 && userData.startContentIds.indexOf(-1) == -1;
});
- var node = $scope.currentNode;
+ $scope.source = _.clone($scope.currentNode);
function treeLoadedHandler(args) {
- if (node && node.path) {
- $scope.dialogTreeApi.syncTree({ path: node.path, activate: false });
+ if ($scope.source && $scope.source.path) {
+ $scope.dialogTreeApi.syncTree({ path: $scope.source.path, activate: false });
}
}
@@ -107,7 +107,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Content.CopyController",
$scope.busy = true;
$scope.error = false;
- contentResource.copy({ parentId: $scope.target.id, id: node.id, relateToOriginal: $scope.relateToOriginal, recursive: $scope.recursive })
+ contentResource.copy({ parentId: $scope.target.id, id: $scope.source.id, relateToOriginal: $scope.relateToOriginal, recursive: $scope.recursive })
.then(function (path) {
$scope.error = false;
$scope.success = true;
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/content.move.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/content.move.controller.js
index a593bbad24..5dceff2571 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/content.move.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/content/content.move.controller.js
@@ -22,11 +22,11 @@ angular.module("umbraco").controller("Umbraco.Editors.Content.MoveController",
$scope.treeModel.hideHeader = userData.startContentIds.length > 0 && userData.startContentIds.indexOf(-1) == -1;
});
- var node = $scope.currentNode;
+ $scope.source = _.clone($scope.currentNode);
function treeLoadedHandler(args) {
- if (node && node.path) {
- $scope.dialogTreeApi.syncTree({ path: node.path, activate: false });
+ if ($scope.source && $scope.source.path) {
+ $scope.dialogTreeApi.syncTree({ path: $scope.source.path, activate: false });
}
}
@@ -84,7 +84,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Content.MoveController",
$scope.busy = true;
$scope.error = false;
- contentResource.move({ parentId: $scope.target.id, id: node.id })
+ contentResource.move({ parentId: $scope.target.id, id: $scope.source.id })
.then(function (path) {
$scope.error = false;
$scope.success = true;
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/copy.html b/src/Umbraco.Web.UI.Client/src/views/content/copy.html
index 03a024c439..8f6d5d3e6d 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/copy.html
+++ b/src/Umbraco.Web.UI.Client/src/views/content/copy.html
@@ -11,14 +11,14 @@
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/move.html b/src/Umbraco.Web.UI.Client/src/views/content/move.html
index 708c3d3f82..b655917f6f 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/move.html
+++ b/src/Umbraco.Web.UI.Client/src/views/content/move.html
@@ -11,14 +11,14 @@
- {{currentNode.name}} was moved underneath {{target.name}}
+ {{source.name}} was moved underneath {{target.name}}
-
Ok
+
Ok
Choose where to move
- {{currentNode.name}}
+ {{source.name}}
to in the tree structure below
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/media.move.controller.js b/src/Umbraco.Web.UI.Client/src/views/media/media.move.controller.js
index c5ff80b7fb..8bb1dc3ac8 100644
--- a/src/Umbraco.Web.UI.Client/src/views/media/media.move.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/media/media.move.controller.js
@@ -3,7 +3,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Media.MoveController",
function ($scope, userService, eventsService, mediaResource, appState, treeService, navigationService) {
$scope.dialogTreeApi = {};
- var node = $scope.currentNode;
+ $scope.source = _.clone($scope.currentNode);
$scope.treeModel = {
hideHeader: false
@@ -13,8 +13,8 @@ angular.module("umbraco").controller("Umbraco.Editors.Media.MoveController",
});
function treeLoadedHandler(args) {
- if (node && node.path) {
- $scope.dialogTreeApi.syncTree({ path: node.path, activate: false });
+ if ($scope.source && $scope.source.path) {
+ $scope.dialogTreeApi.syncTree({ path: $scope.source.path, activate: false });
}
}
@@ -55,7 +55,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Media.MoveController",
$scope.move = function () {
$scope.busy = true;
- mediaResource.move({ parentId: $scope.target.id, id: node.id })
+ mediaResource.move({ parentId: $scope.target.id, id: $scope.source.id })
.then(function (path) {
$scope.busy = false;
$scope.error = false;
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/move.html b/src/Umbraco.Web.UI.Client/src/views/media/move.html
index 6d93eb4e22..451acbdb16 100644
--- a/src/Umbraco.Web.UI.Client/src/views/media/move.html
+++ b/src/Umbraco.Web.UI.Client/src/views/media/move.html
@@ -11,14 +11,14 @@
- {{currentNode.name}} was moved underneath {{target.name}}
+ {{source.name}} was moved underneath {{target.name}}
-
Ok
+
Ok
Choose where to move
- {{currentNode.name}}
+ {{source.name}}
to in the tree structure below
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js
index 704fccbde1..62099734fb 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js
@@ -131,6 +131,7 @@ function dateTimePickerController($scope, notificationsService, assetsService, a
else {
$scope.model.value = null;
}
+ angularHelper.getCurrentForm($scope).$setDirty();
}
/** Sets the value of the date picker control adn associated viewModel objects based on the model value */
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.controller.js
index 639c24f54c..b3c014f54a 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.controller.js
@@ -8,6 +8,10 @@ function MarkdownEditorController($scope, $element, assetsService, editorService
$scope.model.value = $scope.model.config.defaultValue;
}
+ // create a unique ID for the markdown editor, so the button bar bindings can handle split view
+ // - must be bound on scope, not scope.model - otherwise it won't work, because $scope.model is used in both sides of the split view
+ $scope.editorId = $scope.model.alias + _.uniqueId("-");
+
function openMediaPicker(callback) {
var mediaPicker = {
disableFolderSelect: true,
@@ -40,7 +44,7 @@ function MarkdownEditorController($scope, $element, assetsService, editorService
$timeout(function () {
$scope.markdownEditorInitComplete = false;
var converter2 = new Markdown.Converter();
- var editor2 = new Markdown.Editor(converter2, "-" + $scope.model.alias);
+ var editor2 = new Markdown.Editor(converter2, "-" + $scope.editorId);
editor2.run();
//subscribe to the image dialog clicks
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.html
index 9b8f44317a..68fc86f002 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.html
@@ -1,8 +1,8 @@
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.controller.js
index c8813ee4c0..515eddf0a3 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.controller.js
@@ -1,4 +1,4 @@
-function sliderController($scope) {
+function sliderController($scope, angularHelper) {
let sliderRef = null;
@@ -14,13 +14,14 @@
function setModelValue(values) {
$scope.model.value = values ? values.toString() : null;
+ angularHelper.getCurrentForm($scope).$setDirty();
}
$scope.setup = function(slider) {
sliderRef = slider;
};
- $scope.end = function(values) {
+ $scope.change = function (values) {
setModelValue(values);
};
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.html
index c147b30b23..ea0c2ef7bc 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/slider/slider.html
@@ -5,7 +5,7 @@
ng-model="sliderValue"
options="sliderOptions"
on-setup="setup(slider)"
- on-end="end(values)">
+ on-change="change(values)">
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html
index f1d46e951e..6fcdfafdcd 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html
@@ -26,7 +26,7 @@
class="typeahead tags-{{model.alias}}"
ng-model="$parent.tagToAdd"
ng-keydown="$parent.addTagOnEnter($event)"
- on-blur="$parent.addTag()"
+ ng-blur="$parent.addTag()"
localize="placeholder"
placeholder="@placeholders_enterTags" />
diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js
new file mode 100644
index 0000000000..2cef0bc5a4
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js
@@ -0,0 +1,51 @@
+/**
+ * @ngdoc controller
+ * @name Umbraco.Editors.RelationTypes.CreateController
+ * @function
+ *
+ * @description
+ * The controller for creating relation types.
+ */
+function RelationTypeCreateController($scope, $location, relationTypeResource, navigationService, formHelper, appState, notificationsService) {
+ var vm = this;
+ vm.relationType = {};
+ vm.objectTypes = {};
+
+ vm.createRelationType = createRelationType;
+
+ init();
+
+ function init() {
+ relationTypeResource.getRelationObjectTypes().then(function (data) {
+ vm.objectTypes = data;
+ }, function (err) {
+ notificationsService.error("Could not load form.")
+ })
+ }
+
+ function createRelationType() {
+ if (formHelper.submitForm({ scope: $scope, formCtrl: this.createRelationTypeForm, statusMessage: "Creating relation type..." })) {
+ var node = $scope.currentNode;
+
+ relationTypeResource.create(vm.relationType).then(function (data) {
+ navigationService.hideMenu();
+
+ // Set the new item as active in the tree
+ var currentPath = node.path ? node.path : "-1";
+ navigationService.syncTree({ tree: "relationTypes", path: currentPath + "," + data, forceReload: true, activate: true });
+
+ formHelper.resetForm({ scope: $scope });
+
+ var currentSection = appState.getSectionState("currentSection");
+ $location.path("/" + currentSection + "/relationTypes/edit/" + data);
+ }, function (err) {
+ if (err.data && err.data.message) {
+ notificationsService.error(err.data.message);
+ navigationService.hideMenu();
+ }
+ });
+ }
+ }
+}
+
+angular.module("umbraco").controller("Umbraco.Editors.RelationTypes.CreateController", RelationTypeCreateController);
diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html
new file mode 100644
index 0000000000..e5f66c9fe0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html
@@ -0,0 +1,58 @@
+