memberpicker search updates

This commit is contained in:
perploug
2013-10-10 12:43:59 +02:00
parent 0d4ee6e5d1
commit 59f711f802
9 changed files with 66 additions and 32 deletions

View File

@@ -1,5 +1,5 @@
angular.module('umbraco.services')
.factory('searchService', function ($q, $log, entityResource) {
.factory('searchService', function ($q, $log, entityResource, contentResource) {
var m = {results: []};
var service = {
results: m,
@@ -10,6 +10,8 @@ angular.module('umbraco.services')
_.each(data, function(el){
el.menuUrl = "UmbracoTrees/MemberTree/GetMenu?id=" + el.id + "&application=member";
el.metaData = {treeAlias: "member"};
el.title = el.Fields.nodeName;
el.subTitle = el.Fields.email;
});
args.results.push({
@@ -25,6 +27,11 @@ angular.module('umbraco.services')
_.each(data, function(el){
el.menuUrl = "UmbracoTrees/ContentTree/GetMenu?id=" + el.id + "&application=content";
el.metaData = {treeAlias: "content"};
el.title = el.Fields.nodeName;
contentResource.getNiceUrl(el.Id).then(function(url){
el.subTitle = url;
});
});
args.results.push({
@@ -40,6 +47,7 @@ angular.module('umbraco.services')
_.each(data, function(el){
el.menuUrl = "UmbracoTrees/MediaTree/GetMenu?id=" + el.id + "&application=media";
el.metaData = {treeAlias: "media"};
el.title = el.Fields.nodeName;
});
args.results.push({

View File

@@ -138,6 +138,12 @@
background: @grayLighter
}
.umb-tree small.search-subtitle{
color: @grayLight;
display: block;
padding-left: 35px;
}
a.umb-options {
visibility: hidden;
cursor: pointer;

View File

@@ -7,12 +7,17 @@ angular.module("umbraco").controller("Umbraco.Dialogs.MemberPickerController",
$scope.performSearch = function(){
if($scope.term){
searchService.searchMembers({term: $scope.term, results: $scope.results});
$scope.showSearch = true;
if($scope.oldTerm !== $scope.term){
$scope.results = [];
searchService.searchMembers({term: $scope.term, results: $scope.results});
$scope.showSearch = true;
$scope.oldTerm = $scope.term;
}
}else{
$scope.oldTerm = "";
$scope.showSearch = false;
$scope.results = [];
}
};

View File

@@ -13,7 +13,7 @@
</div>
<div class="umb-panel-body with-footer">
<!-- Search results -->
<div id="search-results" class="umb-pane" ng-show="showSearch">
<div id="search-results" ng-show="showSearch">
<ul class="umb-tree">
<li class="root">
<ul class="umb-search-group" ng-repeat="resultGroup in results">
@@ -22,7 +22,10 @@
<a ng-class="{first:$first}" ng-href="#/{{resultGroup.editor}}{{result.id}}">
<i
class="icon umb-tree-icon sprTree {{resultGroup.icon}}"></i>
{{result.name}}
{{result.title}}
<small class="search-subtitle" ng-show="result.subTitle">
{{result.subTitle}}
</small>
</a>
</div>
</li>
@@ -33,7 +36,6 @@
</div>
<div class="umb-pane" ng-hide="showSearch">
<umb-tree
section="member"
treealias="member"
@@ -47,7 +49,7 @@
<div class="umb-panel-footer" ng-show="multipicker">
<div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar">
<div class="btn-toolbar umb-btn-toolbar pull-right">
<input type="button" ng-click="submit(dialogData)" class="btn btn-primary" value="select" />
</div>
</div>

View File

@@ -1,5 +1,5 @@
<div id="leftcolumn" ng-controller="Umbraco.NavigationController"
ng-mouseleave="nav.leaveTree($event)" ng-mouseenter="nav.enterTree($event)" >
ng-mouseleave="nav.leaveTree($event)" ng-mouseenter="nav.enterTree($event)">
<umb-sections sections="sections" current-section="currentSection"></umb-sections>
@@ -38,9 +38,12 @@
<li ng-repeat="result in resultGroup.matches">
<div style="padding-left: 20px">
<a ng-class="{'first':$first}" ng-href="#/{{resultGroup.editor}}{{result.id}}">
<i
class="icon umb-tree-icon sprTree {{resultGroup.icon}}"></i>
{{result.name}}
<i class="icon umb-tree-icon sprTree {{resultGroup.icon}}" style="height: 100%"></i>
{{result.title}}
<small class="search-subtitle" ng-show="result.subTitle">
{{result.subTitle}}
</small>
</a>
<a href ng-click="searchShowMenu($event, {node: result})" class="umb-options"><i></i><i></i><i></i></a>
@@ -79,5 +82,4 @@
</div>
</div>
</div>
</div>
</div>

View File

@@ -34,7 +34,7 @@ namespace Umbraco.Web.Editors
public class EntityController : UmbracoAuthorizedJsonController
{
[HttpGet]
public IEnumerable<EntityBasic> Search([FromUri] string query, UmbracoEntityTypes type)
public ISearchResults Search([FromUri] string query, UmbracoEntityTypes type)
{
if (string.IsNullOrEmpty(query))
return null;
@@ -95,7 +95,7 @@ namespace Umbraco.Web.Editors
return GetResultForAll(type, postFilter, postFilterParams);
}
private IEnumerable<EntityBasic> ExamineSearch(string query, UmbracoEntityTypes entityType)
private ISearchResults ExamineSearch(string query, UmbracoEntityTypes entityType)
{
var searcher = Constants.Examine.InternalSearcher;
var type = "content";
@@ -124,13 +124,16 @@ namespace Umbraco.Web.Editors
var term = new[] { query.ToLower().Escape() };
var operation = criteria.GroupedOr(fields, term).Compile();
return internalSearcher.Search(operation);
/*
var results = internalSearcher.Search(operation)
.Select(x => int.Parse(x["id"]));
//TODO: Just create a basic entity from the results!! why double handling and going to the database... this will be ultra slow.
return GetResultForIds(results.ToArray(), entityType)
.WhereNotNull();
.WhereNotNull();*/
}
private IEnumerable<EntityBasic> GetResultForChildren(int id, UmbracoEntityTypes entityType)

View File

@@ -30,12 +30,16 @@ namespace Umbraco.Web.Trees
for (var i = 97; i < 123; i++)
{
var charString = ((char) i).ToString(CultureInfo.InvariantCulture);
nodes.Add(CreateTreeNode(charString, queryStrings, charString, "icon-folder-close", true));
var folder = CreateTreeNode(charString, queryStrings, charString, "icon-folder-close", true);
folder.NodeType = "member-folder";
nodes.Add(folder);
}
//list out 'Others' if the membership provider is umbraco
if (Member.InUmbracoMemberMode())
{
nodes.Add(CreateTreeNode("others", queryStrings, "Others", "icon-folder-close", true));
var folder = CreateTreeNode("others", queryStrings, "Others", "icon-folder-close", true);
folder.NodeType = "member-folder";
nodes.Add(folder);
}
}
else
@@ -48,7 +52,7 @@ namespace Umbraco.Web.Trees
//get the members from our member data layer
nodes.AddRange(
Member.getMemberFromFirstLetter(id.ToCharArray()[0])
.Select(m => CreateTreeNode(m.UniqueId.ToString("N"), queryStrings, m.Text, "icon-user")));
.Select(m => CreateTreeNode(m.UniqueId.ToString("N"), queryStrings, m.Text, "icon-user"));
}
else
{

View File

@@ -1,5 +1,5 @@
[
'lib/jquery/jquery-2.0.3.min.js',
/* the jquery ui elements we need */
/* NOTE: I've opted not to use the full lib, just the parts we need to save on DL */
@@ -12,7 +12,6 @@
'lib/jquery/jquery.ui.effect-highlight.min.js',*/
/* 1.1.5 */
'lib/angular/1.1.5/angular.min.js',
'lib/angular/1.1.5/angular-cookies.min.js',
'lib/angular/1.1.5/angular-mobile.min.js',
'lib/angular/1.1.5/angular-sanitize.min.js',
@@ -38,7 +37,6 @@
'lib/jquery/jquery.upload/js/jquery.fileupload-angular.js',
'lib/bootstrap/js/bootstrap.js',
'lib/underscore/underscore.js',
'lib/umbraco/Extensions.js',
'lib/umbraco/NamespaceManager.js',

View File

@@ -1,15 +1,21 @@
yepnope({
load: "##JsInitialize##",
load: [
'lib/jquery/jquery-2.0.3.min.js',
'lib/angular/1.1.5/angular.min.js',
'lib/underscore/underscore.js',
],
complete: function () {
//we need to set the legacy UmbClientMgr path
UmbClientMgr.setUmbracoPath('"##UmbracoPath##"');
yepnope({
load: "##JsInitialize##",
complete: function () {
jQuery(document).ready(function () {
angular.bootstrap(document, ['umbraco']);
//we need to set the legacy UmbClientMgr path
UmbClientMgr.setUmbracoPath('"##UmbracoPath##"');
jQuery(document).ready(function () {
angular.bootstrap(document, ['umbraco']);
});
}
});
}
});