Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
morpheus.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Daria Zenkova
morpheus.js
Commits
66328feb
Commit
66328feb
authored
Apr 01, 2016
by
joshua-gould
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added search and autocomplete methods
parent
216d55d5
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
207 additions
and
125 deletions
+207
-125
src/ui/checkbox_list.js
src/ui/checkbox_list.js
+6
-0
src/ui/table.js
src/ui/table.js
+201
-125
No files found.
src/ui/checkbox_list.js
View file @
66328feb
...
...
@@ -180,6 +180,12 @@ morpheus.CheckBoxList = function(options) {
};
morpheus
.
CheckBoxList
.
prototype
=
{
searchWithPredicates
:
function
(
predicates
)
{
this
.
table
.
searchWithPredicates
(
predicates
);
},
autocomplete
:
function
(
tokens
,
cb
)
{
this
.
table
.
autocomplete
(
tokens
,
cb
);
},
setHeight
:
function
(
height
)
{
this
.
table
.
setHeight
(
height
);
},
...
...
src/ui/table.js
View file @
66328feb
...
...
@@ -241,13 +241,45 @@ morpheus.Table.prototype = {
}
}
},
search
:
function
(
text
)
{
if
(
text
===
''
)
{
this
.
grid
.
setFilter
(
null
);
}
else
{
autocomplete
:
function
(
tokens
,
response
)
{
var
matches
=
[];
var
token
=
tokens
!=
null
&&
tokens
.
length
>
0
?
tokens
[
tokens
.
selectionStartIndex
]
:
''
;
token
=
$
.
trim
(
token
);
var
columns
=
this
.
columns
.
filter
(
function
(
c
)
{
return
c
.
searchable
;
});
var
ncolumns
=
columns
.
length
;
var
showField
=
ncolumns
>
1
;
if
(
token
===
''
)
{
if
(
ncolumns
<=
1
)
{
return
response
(
matches
);
}
for
(
var
i
=
0
;
i
<
ncolumns
;
i
++
)
{
var
field
=
columns
[
i
].
name
;
matches
.
push
({
value
:
field
+
'
:
'
,
label
:
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
,
show
:
true
});
// show column names
}
return
response
(
matches
);
}
var
field
=
null
;
var
semi
=
token
.
indexOf
(
'
:
'
);
if
(
semi
>
0
)
{
// field search?
if
(
token
.
charCodeAt
(
semi
-
1
)
!==
92
)
{
// \:
var
possibleField
=
$
.
trim
(
token
.
substring
(
0
,
semi
));
if
(
possibleField
.
length
>
0
&&
possibleField
[
0
]
===
'
"
'
&&
possibleField
[
token
.
length
-
1
]
===
'
"
'
)
{
possibleField
=
possibleField
.
substring
(
1
,
possibleField
.
length
-
1
);
}
var
columnNameToColumn
=
new
morpheus
.
Map
();
var
columnNames
=
columns
.
map
(
function
(
c
)
{
return
c
.
name
;
...
...
@@ -255,13 +287,102 @@ morpheus.Table.prototype = {
for
(
var
i
=
0
;
i
<
columnNames
.
length
;
i
++
)
{
columnNameToColumn
.
set
(
columnNames
[
i
],
columns
[
i
]);
}
var
tokens
=
morpheus
.
Util
.
getAutocompleteTokens
(
text
);
var
predicates
=
morpheus
.
Util
.
createSearchPredicates
({
tokens
:
tokens
,
fields
:
columnNames
var
c
=
columnNameToColumn
.
get
(
possibleField
);
if
(
c
!==
undefined
)
{
token
=
$
.
trim
(
token
.
substring
(
semi
+
1
));
columns
=
[
c
];
ncolumns
=
1
;
}
}
}
else
if
(
ncolumns
>
1
)
{
for
(
var
j
=
0
;
j
<
ncolumns
;
j
++
)
{
var
field
=
columns
[
j
].
name
;
matches
.
push
({
value
:
field
+
'
:
'
,
label
:
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
,
show
:
true
});
}
}
var
set
=
new
morpheus
.
Set
();
var
regex
=
new
RegExp
(
'
^
'
+
morpheus
.
Util
.
escapeRegex
(
token
),
'
i
'
);
var
items
=
this
.
getItems
();
var
maxSize
=
matches
.
length
+
10
;
for
(
var
i
=
0
,
nitems
=
items
.
length
;
i
<
nitems
;
i
++
)
{
var
item
=
items
[
i
];
for
(
var
j
=
0
;
j
<
ncolumns
;
j
++
)
{
var
field
=
columns
[
j
].
name
;
var
value
=
columns
[
j
].
getter
(
item
);
if
(
morpheus
.
Util
.
isArray
(
value
))
{
var
nvalues
=
value
.
length
;
for
(
var
k
=
0
;
k
<
nvalues
;
k
++
)
{
var
val
=
value
[
k
];
if
(
regex
.
test
(
val
)
&&
!
set
.
has
(
val
))
{
set
.
add
(
val
);
matches
.
push
({
value
:
showField
?
(
field
+
'
:
'
+
val
)
:
val
,
label
:
showField
?
(
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
+
'
<span style="font-weight:900;">
'
+
val
+
'
</span>
'
)
:
(
'
<span style="font-weight:900;">
'
+
val
+
'
</span>
'
)
});
}
if
(
matches
.
length
===
maxSize
)
{
return
response
(
matches
);
}
}
}
else
{
if
(
regex
.
test
(
value
)
&&
!
set
.
has
(
value
))
{
set
.
add
(
value
);
matches
.
push
({
value
:
showField
?
(
field
+
'
:
'
+
value
)
:
value
,
label
:
showField
?
(
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
+
'
<span style="font-weight:900;">
'
+
value
+
'
</span>
'
)
:
(
'
<span style="font-weight:900;">
'
+
value
+
'
</span>
'
)
});
if
(
matches
.
length
===
maxSize
)
{
return
response
(
matches
);
}
}
}
}
}
return
response
(
matches
);
},
searchWithPredicates
:
function
(
predicates
)
{
if
(
predicates
==
null
||
predicates
.
length
===
0
)
{
this
.
grid
.
setFilter
(
null
);
return
;
}
var
columns
=
this
.
columns
.
filter
(
function
(
c
)
{
return
c
.
searchable
;
});
var
columnNameToColumn
=
new
morpheus
.
Map
();
var
columnNames
=
columns
.
map
(
function
(
c
)
{
return
c
.
name
;
});
for
(
var
i
=
0
;
i
<
columnNames
.
length
;
i
++
)
{
columnNameToColumn
.
set
(
columnNames
[
i
],
columns
[
i
]);
}
var
filteredPredicates
=
[];
for
(
var
i
=
0
,
npredicates
=
predicates
.
length
;
i
<
npredicates
;
i
++
)
{
var
npredicates
=
predicates
.
length
;
for
(
var
i
=
0
;
i
<
npredicates
;
i
++
)
{
var
predicate
=
predicates
[
i
];
var
filterColumnName
=
predicate
.
getField
();
if
(
filterColumnName
!=
null
)
{
...
...
@@ -275,7 +396,7 @@ morpheus.Table.prototype = {
}
}
predicates
=
filteredPredicates
;
npredicates
=
predicates
.
length
;
this
.
grid
.
setFilter
(
function
(
item
)
{
for
(
var
p
=
0
;
p
<
npredicates
;
p
++
)
{
...
...
@@ -307,6 +428,24 @@ morpheus.Table.prototype = {
return
false
;
});
},
search
:
function
(
text
)
{
if
(
text
===
''
)
{
this
.
grid
.
setFilter
(
null
);
}
else
{
var
tokens
=
morpheus
.
Util
.
getAutocompleteTokens
(
text
);
var
columns
=
this
.
columns
.
filter
(
function
(
c
)
{
return
c
.
searchable
;
});
var
columnNames
=
columns
.
map
(
function
(
c
)
{
return
c
.
name
;
});
var
predicates
=
morpheus
.
Util
.
createSearchPredicates
({
tokens
:
tokens
,
fields
:
columnNames
});
this
.
searchWithPredicates
(
predicates
);
}
},
getSelectedRows
:
function
()
{
...
...
@@ -469,74 +608,11 @@ morpheus.TableSearchUI = function() {
$search
.
on
(
'
keyup
'
,
_
.
debounce
(
function
()
{
_this
.
table
.
search
(
$
.
trim
(
$
(
this
).
val
()));
},
100
));
morpheus
.
Util
.
autosuggest
({
morpheus
.
Util
.
autosuggest
({
$el
:
$search
,
suggestWhenEmpty
:
false
,
filter
:
function
(
terms
,
response
)
{
var
q
=
$
.
trim
(
terms
[
terms
.
length
-
1
]);
if
(
q
===
''
)
{
response
([]);
return
;
}
var
set
=
new
morpheus
.
Set
();
var
regex
=
new
RegExp
(
'
^
'
+
q
,
'
i
'
);
var
columns
=
_this
.
table
.
columns
;
var
ncolumns
=
columns
.
length
;
var
items
=
_this
.
table
.
getItems
();
var
matches
=
[];
for
(
var
i
=
0
,
nitems
=
items
.
length
;
i
<
nitems
;
i
++
)
{
var
item
=
items
[
i
];
for
(
var
j
=
0
;
j
<
ncolumns
;
j
++
)
{
if
(
columns
[
j
].
searchable
)
{
var
field
=
columns
[
j
].
name
;
var
showField
=
field
&&
ncolumns
>
1
;
var
value
=
columns
[
j
].
getter
(
item
);
if
(
morpheus
.
Util
.
isArray
(
value
))
{
var
nvalues
=
value
.
length
;
for
(
var
k
=
0
;
k
<
nvalues
;
k
++
)
{
var
val
=
value
[
k
];
if
(
regex
.
test
(
val
)
&&
!
set
.
has
(
val
))
{
set
.
add
(
val
);
matches
.
push
({
value
:
val
,
label
:
showField
?
(
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
+
'
<span style="font-weight:900;">
'
+
val
+
'
</span>
'
)
:
(
'
<span style="font-weight:900;">
'
+
val
+
'
</span>
'
)
});
}
if
(
matches
.
length
===
10
)
{
return
response
(
matches
);
}
}
}
else
{
if
(
regex
.
test
(
value
)
&&
!
set
.
has
(
value
))
{
set
.
add
(
value
);
matches
.
push
({
value
:
value
,
label
:
showField
?
(
'
<span style="font-weight:300;">
'
+
field
+
'
:</span>
'
+
'
<span style="font-weight:900;">
'
+
value
+
'
</span>
'
)
:
(
'
<span style="font-weight:900;">
'
+
value
+
'
</span>
'
)
});
if
(
matches
.
length
===
10
)
{
return
response
(
matches
);
}
}
}
}
}
}
return
response
(
matches
);
suggestWhenEmpty
:
true
,
filter
:
function
(
tokens
,
response
)
{
_this
.
table
.
autocomplete
(
tokens
,
response
);
},
select
:
function
()
{
_this
.
table
.
search
(
$
.
trim
(
$search
.
val
()));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment