Merge branch '7.0.0' of https://github.com/umbraco/Umbraco-CMS into 7.0.0

This commit is contained in:
perploug
2013-10-09 15:55:45 +02:00
7 changed files with 169 additions and 0 deletions

View File

@@ -318,6 +318,25 @@ angular.module('umbraco.services')
return openDialog(options);
},
/**
* @ngdoc method
* @name umbraco.services.dialogService#memberPicker
* @methodOf umbraco.services.dialogService
*
* @description
* Opens a member picker tree in a modal, the callback returns an array of selected documents
* @param {Object} options member picker dialog options object
* @param {$scope} options.scope dialog scope
* @param {$scope} options.multipicker should the picker return one or multiple items
* @param {Function} options.callback callback function
* @returns {Object} modal object
*/
memberPicker: function (options) {
options.template = 'views/common/dialogs/memberPicker.html';
options.show = true;
return openDialog(options);
},
/**
* @ngdoc method
* @name umbraco.services.dialogService#linkPicker

View File

@@ -0,0 +1,34 @@
//used for the member picker dialog
angular.module("umbraco").controller("Umbraco.Dialogs.MemberPickerController",
function ($scope, eventsService, $log) {
var dialogOptions = $scope.$parent.dialogOptions;
$scope.dialogTreeEventHandler = $({});
$scope.dialogTreeEventHandler.bind("treeNodeSelect", function(ev, args){
args.event.preventDefault();
args.event.stopPropagation();
eventsService.publish("Umbraco.Dialogs.MemberPickerController.Select", args).then(function(args){
if(dialogOptions && dialogOptions.multipicker){
var c = $(args.event.target.parentElement);
if(!args.node.selected){
args.node.selected = true;
c.find("i.umb-tree-icon").hide()
.after("<i class='icon umb-tree-icon sprTree icon-check blue temporary'></i>");
}else{
args.node.selected = false;
c.find(".temporary").remove();
c.find("i.umb-tree-icon").show();
}
$scope.select(args.node);
}else{
$scope.submit(args.node);
}
});
});
});

View File

@@ -0,0 +1,21 @@
<div class="umb-panel" ng-controller="Umbraco.Dialogs.MemberPickerController">
<div class="umb-panel-body no-header">
<umb-pane>
<umb-tree
section="members"
cachekey="memberpickerDialog"
showheader="true"
showoptions="false"
eventhandler="dialogTreeEventHandler">
</umb-tree>
</umb-pane>
</div>
<div class="umb-panel-footer" ng-show="multipicker">
<div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar">
<input type="button" ng-click="submit(dialogData)" class="btn btn-primary" value="select" />
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,58 @@
//this controller simply tells the dialogs service to open a memberPicker window
//with a specified callback, this callback will receive an object with a selection on it
angular.module('umbraco')
.controller("Umbraco.PropertyEditors.MemberPickerController",
function($scope, dialogService, entityResource, $log, iconHelper){
$scope.ids = $scope.model.value.split(',');
$scope.renderModel = [];
$scope.multipicker = true;
entityResource.getByIds($scope.ids, "Member").then(function(data){
$(data).each(function(i, item){
item.icon = iconHelper.convertFromLegacyIcon(item.icon);
$scope.renderModel.push({name: item.name, id: item.id, icon: item.icon});
});
});
$scope.openMemberPicker =function(){
var d = dialogService.memberPicker({scope: $scope, multipicker: $scope.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.add =function(item){
if($scope.ids.indexOf(item.id) < 0){
item.icon = iconHelper.convertFromLegacyIcon(item.icon);
$scope.renderModel.push({name: item.name, id: item.id, icon: item.icon});
$scope.ids.push(item.id);
$scope.model.value = trim($scope.ids.join(), ",");
}
};
$scope.clear = function() {
$scope.ids = [];
$scope.model.value = "";
$scope.renderModel = [];
};
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(data.selection && angular.isArray(data.selection)){
$(data.selection).each(function(i, item){
$scope.add(item);
});
}else{
$scope.clear();
$scope.add(data);
}
}
});

View File

@@ -0,0 +1,21 @@
<div ng-controller="Umbraco.PropertyEditors.MemberPickerController" class="umb-editor umb-memberpicker">
<ul class="unstyled">
<li ng-repeat="node in renderModel">
<a href="#" prevent-default ng-click="remove($index)">
<i class="icon icon-delete red hover-show"></i>
<i class="{{node.icon}} hover-hide"></i>
{{node.name}}
</a>
</li>
</ul>
<ul class="unstyled">
<li>
<a href="#" ng-click="openMemberPicker()" prevent-default>
<i class="icon icon-add"></i> Add
</a>
</li>
</ul>
</div>

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Umbraco.Core;
using Umbraco.Core.PropertyEditors;
namespace Umbraco.Web.PropertyEditors
{
[PropertyEditor(Constants.PropertyEditors.MemberPickerAlias, "Member Picker", "memberpicker")]
public class MemberPickerPropertyEditor : PropertyEditor
{
}
}

View File

@@ -328,6 +328,7 @@
<Compile Include="Models\Mapping\MemberModelMapper.cs" />
<Compile Include="PropertyEditors\ColorListPreValueEditor.cs" />
<Compile Include="PropertyEditors\ListViewPropertyEditor.cs" />
<Compile Include="PropertyEditors\MemberPickerPropertyEditor.cs" />
<Compile Include="PropertyEditors\ParameterEditors\TextAreaParameterEditor.cs" />
<Compile Include="PropertyEditors\ParameterEditors\TextParameterEditor.cs" />
<Compile Include="PropertyEditors\ParameterEditors\TrueFalseParameterEditor.cs" />