Fixes: U4-4177 U7 - Add Startnode Picker to Multiple Media Picker
This commit is contained in:
@@ -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" });
|
||||
}
|
||||
|
||||
});
|
||||
@@ -74,8 +74,9 @@ data-file-upload="options" data-file-upload-progress="" data-ng-class="{'fileupl
|
||||
|
||||
<div class="row">
|
||||
<ul class="breadcrumb span12">
|
||||
<li><a href ng-click="gotoFolder()" prevent-default>Media</a> / </li>
|
||||
|
||||
<li ng-hide="startNodeId != -1">
|
||||
<a href ng-click="gotoFolder()" prevent-default>Media</a> / </li>
|
||||
|
||||
<li ng-repeat="item in path">
|
||||
<a href ng-click="gotoFolder(item)" prevent-default>{{item.name}}</a> /
|
||||
</li>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
<div ng-controller="Umbraco.PrevalueEditors.MediaPickerController" class="umb-editor umb-contentpicker">
|
||||
|
||||
<ul class="unstyled list-icons"
|
||||
ng-model="renderModel">
|
||||
<li ng-repeat="node in renderModel">
|
||||
|
||||
<i class="icon icon-delete red hover-show pull-right" ng-click="remove($index)"></i>
|
||||
|
||||
<i class="icon {{node.icon}} hover-hide"></i>
|
||||
<a href prevent-default ng-click="openContentPicker()" >{{node.name}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="unstyled list-icons" ng-show="multipicker || renderModel.length === 0">
|
||||
<li>
|
||||
<i class="icon icon-add blue"></i>
|
||||
<a href ng-click="openContentPicker()" prevent-default>
|
||||
<localize key="general_add">Add</localize>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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<string, object> 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; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user