diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js
index 87bde9b6c0..fb21b17458 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js
@@ -6,6 +6,8 @@ angular.module("umbraco")
var dialogOptions = $scope.$parent.dialogOptions;
$scope.onlyImages = dialogOptions.onlyImages;
$scope.multiPicker = (dialogOptions.multiPicker && dialogOptions.multiPicker !== "0") ? true : false;
+ $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1;
+
$scope.options = {
url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"),
@@ -51,7 +53,9 @@ angular.module("umbraco")
entityResource.getAncestors(folder.id, "media")
.then(function(anc) {
// anc.splice(0,1);
- $scope.path = anc;
+ $scope.path = _.filter(anc, function (f) {
+ return f.path.indexOf($scope.startNodeId) !== -1;
+ });
});
}
else {
@@ -152,7 +156,6 @@ angular.module("umbraco")
//default root item
if(!$scope.target){
- $scope.gotoFolder();
+ $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
}
-
});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html
index a351f0986a..aae2e09ce4 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html
@@ -74,8 +74,9 @@ data-file-upload="options" data-file-upload-progress="" data-ng-class="{'fileupl
- - Media /
-
+ -
+ Media /
+
-
{{item.name}} /
diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.controller.js
new file mode 100644
index 0000000000..2fc47c26a6
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.controller.js
@@ -0,0 +1,79 @@
+//this controller simply tells the dialogs service to open a mediaPicker window
+//with a specified callback, this callback will receive an object with a selection on it
+angular.module('umbraco')
+.controller("Umbraco.PrevalueEditors.MediaPickerController",
+
+ function($scope, dialogService, entityResource, $log, iconHelper){
+ $scope.renderModel = [];
+ $scope.ids = [];
+
+ $scope.cfg = {
+ multiPicker: false,
+ entityType: "Media",
+ type: "media",
+ treeAlias: "media"
+ };
+
+ if($scope.model.value){
+ $scope.ids = $scope.model.value.split(',');
+ entityResource.getByIds($scope.ids, $scope.cfg.entityType).then(function(data){
+ _.each(data, function (item, i) {
+ item.icon = iconHelper.convertFromLegacyIcon(item.icon);
+ $scope.renderModel.push({name: item.name, id: item.id, icon: item.icon});
+ });
+ });
+ }
+
+
+ $scope.openContentPicker =function(){
+ var d = dialogService.treePicker({
+ section: $scope.cfg.type,
+ treeAlias: $scope.cfg.type,
+ scope: $scope,
+ multiPicker: $scope.cfg.multiPicker,
+ callback: populate});
+ };
+
+ $scope.remove =function(index){
+ $scope.renderModel.splice(index, 1);
+ $scope.ids.splice(index, 1);
+ $scope.model.value = trim($scope.ids.join(), ",");
+ };
+
+ $scope.clear = function() {
+ $scope.model.value = "";
+ $scope.renderModel = [];
+ $scope.ids = [];
+ };
+
+ $scope.add =function(item){
+ if($scope.ids.indexOf(item.id) < 0){
+ item.icon = iconHelper.convertFromLegacyIcon(item.icon);
+
+ $scope.ids.push(item.id);
+ $scope.renderModel.push({name: item.name, id: item.id, icon: item.icon});
+ $scope.model.value = trim($scope.ids.join(), ",");
+ }
+ };
+
+
+ $scope.$on("formSubmitting", function (ev, args) {
+ $scope.model.value = trim($scope.ids.join(), ",");
+ });
+
+ function trim(str, chr) {
+ var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g') : new RegExp('^'+chr+'+|'+chr+'+$', 'g');
+ return str.replace(rgxtrim, '');
+ }
+
+ function populate(data){
+ if(angular.isArray(data)){
+ _.each(data, function (item, i) {
+ $scope.add(item);
+ });
+ }else{
+ $scope.clear();
+ $scope.add(data);
+ }
+ }
+ });
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.html
new file mode 100644
index 0000000000..cd4f6b20b5
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/mediapicker.html
@@ -0,0 +1,22 @@
+
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
index 39edcc9590..99e4b1a0e8 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
@@ -6,6 +6,10 @@ angular.module('umbraco').controller("Umbraco.PropertyEditors.MediaPickerControl
//check the pre-values for multi-picker
var multiPicker = $scope.model.config.multiPicker !== '0' ? true : false;
+ if (!$scope.model.config.startNodeId)
+ $scope.model.config.startNodeId = -1;
+
+
function setupViewModel() {
$scope.images = [];
$scope.ids = [];
@@ -34,6 +38,7 @@ angular.module('umbraco').controller("Umbraco.PropertyEditors.MediaPickerControl
$scope.add = function() {
dialogService.mediaPicker({
+ startNodeId: $scope.model.config.startNodeId,
multiPicker: multiPicker,
callback: function(data) {
diff --git a/src/Umbraco.Web/PropertyEditors/MediaPickerPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/MediaPickerPropertyEditor.cs
index a8b71584f4..947c9f0062 100644
--- a/src/Umbraco.Web/PropertyEditors/MediaPickerPropertyEditor.cs
+++ b/src/Umbraco.Web/PropertyEditors/MediaPickerPropertyEditor.cs
@@ -24,16 +24,27 @@ namespace Umbraco.Web.PropertyEditors
protected override PropertyValueEditor CreateValueEditor()
{
- //TODO: Need to add some validation to the ValueEditor to ensure that any media chosen actually exists!
-
- return base.CreateValueEditor();
-
+ //TODO: Need to add some validation to the ValueEditor to ensure that any media chosen actually exists!
+ return base.CreateValueEditor();
}
+
+
public override IDictionary DefaultPreValues
{
get { return InternalPreValues; }
set { InternalPreValues = value; }
}
+
+ protected override PreValueEditor CreatePreValueEditor()
+ {
+ return new SingleMediaPickerPreValueEditor();
+ }
+
+ internal class SingleMediaPickerPreValueEditor : PreValueEditor
+ {
+ [PreValueField("startNodeId", "Start node", "mediapicker")]
+ public int StartNodeId { get; set; }
+ }
}
}
diff --git a/src/Umbraco.Web/PropertyEditors/MultipleMediaPickerPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/MultipleMediaPickerPropertyEditor.cs
index ac02a24b4d..1ce77804fa 100644
--- a/src/Umbraco.Web/PropertyEditors/MultipleMediaPickerPropertyEditor.cs
+++ b/src/Umbraco.Web/PropertyEditors/MultipleMediaPickerPropertyEditor.cs
@@ -21,6 +21,9 @@ namespace Umbraco.Web.PropertyEditors
{
[PreValueField("multiPicker", "Pick multiple items", "boolean")]
public bool MultiPicker { get; set; }
+
+ [PreValueField("startNodeId", "Start node", "mediapicker")]
+ public int StartNodeId { get; set; }
}
}
}
\ No newline at end of file