Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bootstrap-multiselect
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
bootstrap-multiselect
Commits
842f6c9b
Commit
842f6c9b
authored
Jul 04, 2016
by
Daniel Fuzari
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adaptaçoes para diretiva de filtros do inGaia Imob
parent
1d17e957
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
207 additions
and
276 deletions
+207
-276
bootstrap-multiselect.css
dist/css/bootstrap-multiselect.css
+1
-1
bootstrap-multiselect.js
dist/js/bootstrap-multiselect.js
+206
-275
No files found.
dist/css/bootstrap-multiselect.css
View file @
842f6c9b
span
.hide-native-select
{
position
:
relative
}
span
.hide-native-select
select
{
border
:
0
!important
;
clip
:
rect
(
0
0
0
0
)
!important
;
height
:
1px
!important
;
margin
:
-1px
-1px
-1px
-3px
!important
;
overflow
:
hidden
!important
;
padding
:
0
!important
;
position
:
absolute
!important
;
width
:
1px
!important
;
left
:
50%
;
top
:
30px
}
.multiselect-container
{
position
:
absolute
;
list-style-type
:
none
;
margin
:
0
;
padding
:
0
}
.multiselect-container
.input-group
{
margin
:
5px
}
.multiselect-container
>
li
{
padding
:
0
}
.multiselect-container
>
li
>
a
.multiselect-all
label
{
font-weight
:
700
}
.multiselect-container
>
li
.multiselect-group
label
{
margin
:
0
;
padding
:
3px
20px
3px
20px
;
height
:
100%
;
font-weight
:
700
}
.multiselect-container
>
li
.multiselect-group-clickable
label
{
cursor
:
pointer
}
.multiselect-container
>
li
>
a
{
padding
:
0
}
.multiselect-container
>
li
>
a
>
label
{
margin
:
0
;
height
:
100%
;
cursor
:
pointer
;
font-weight
:
400
;
padding
:
3px
20px
3px
40px
}
.multiselect-container
>
li
>
a
>
label
.radio
,
.multiselect-container
>
li
>
a
>
label
.checkbox
{
margin
:
0
}
.multiselect-container
>
li
>
a
>
label
>
input
[
type
=
checkbox
]
{
margin-bottom
:
5px
}
.btn-group
>
.btn-group
:nth-child
(
2
)>
.multiselect.btn
{
border-top-left-radius
:
4px
;
border-bottom-left-radius
:
4px
}
.form-inline
.multiselect-container
label
.checkbox
,
.form-inline
.multiselect-container
label
.radio
{
padding
:
3px
20px
3px
40px
}
.form-inline
.multiselect-container
li
a
label
.checkbox
input
[
type
=
checkbox
],
.form-inline
.multiselect-container
li
a
label
.radio
input
[
type
=
radio
]
{
margin-left
:
-20px
;
margin-right
:
0
}
\ No newline at end of file
.multiselect-container
{
position
:
absolute
;
list-style-type
:
none
;
margin
:
0
;
padding
:
0
}
.multiselect-container
.input-group
{
margin
:
5px
}
.multiselect-container
>
li
{
padding
:
0
}
.multiselect-container
>
li
>
a
.multiselect-all
label
{
font-weight
:
700
}
.multiselect-container
>
li
.multiselect-group
label
{
margin
:
0
;
padding
:
3px
20px
3px
20px
;
height
:
100%
;
font-weight
:
700
}
.multiselect-container
>
li
.multiselect-group-clickable
label
{
cursor
:
pointer
}
.multiselect-container
>
li
>
a
{
padding
:
0
}
.multiselect-container
>
li
>
a
>
label
{
margin
:
0
;
height
:
100%
;
cursor
:
pointer
;
font-weight
:
400
;
padding
:
3px
20px
3px
40px
}
.multiselect-container
>
li
>
a
>
label
.radio
,
.multiselect-container
>
li
>
a
>
label
.checkbox
{
margin
:
0
}
.multiselect-container
>
li
>
a
>
label
>
input
[
type
=
checkbox
]
{
margin-bottom
:
5px
}
.btn-group
>
.btn-group
:nth-child
(
2
)>
.multiselect.btn
{
border-top-left-radius
:
4px
;
border-bottom-left-radius
:
4px
}
.form-inline
.multiselect-container
label
.checkbox
,
.form-inline
.multiselect-container
label
.radio
{
padding
:
3px
20px
3px
40px
}
.form-inline
.multiselect-container
li
a
label
.checkbox
input
[
type
=
checkbox
],
.form-inline
.multiselect-container
li
a
label
.radio
input
[
type
=
radio
]
{
margin-left
:
-20px
;
margin-right
:
0
}
\ No newline at end of file
dist/js/bootstrap-multiselect.js
View file @
842f6c9b
...
...
@@ -192,14 +192,11 @@
this
.
options
.
multiple
=
this
.
$select
.
attr
(
'
multiple
'
)
===
"
multiple
"
;
this
.
options
.
onChange
=
$
.
proxy
(
this
.
options
.
onChange
,
this
);
this
.
options
.
onSelectAll
=
$
.
proxy
(
this
.
options
.
onSelectAll
,
this
);
this
.
options
.
onDeselectAll
=
$
.
proxy
(
this
.
options
.
onDeselectAll
,
this
);
this
.
options
.
onDropdownShow
=
$
.
proxy
(
this
.
options
.
onDropdownShow
,
this
);
this
.
options
.
onDropdownHide
=
$
.
proxy
(
this
.
options
.
onDropdownHide
,
this
);
this
.
options
.
onDropdownShown
=
$
.
proxy
(
this
.
options
.
onDropdownShown
,
this
);
this
.
options
.
onDropdownHidden
=
$
.
proxy
(
this
.
options
.
onDropdownHidden
,
this
);
this
.
options
.
onInitialized
=
$
.
proxy
(
this
.
options
.
onInitialized
,
this
);
this
.
options
.
onFiltering
=
$
.
proxy
(
this
.
options
.
onFiltering
,
this
);
// Build select all if enabled.
this
.
buildContainer
();
...
...
@@ -212,15 +209,11 @@
this
.
updateButtonText
();
this
.
updateSelectAll
(
true
);
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
if
(
this
.
options
.
disableIfEmpty
&&
$
(
'
option
'
,
this
.
$select
).
length
<=
0
)
{
this
.
disable
();
}
this
.
$select
.
wrap
(
'
<span class="hide-native-select">
'
).
after
(
this
.
$container
);
this
.
$select
.
hide
(
).
after
(
this
.
$container
);
this
.
options
.
onInitialized
(
this
.
$select
,
this
.
$container
);
}
...
...
@@ -238,7 +231,8 @@
*/
buttonText
:
function
(
options
,
select
)
{
if
(
this
.
disabledText
.
length
>
0
&&
(
select
.
prop
(
'
disabled
'
)
||
(
options
.
length
==
0
&&
this
.
disableIfEmpty
)))
{
&&
(
this
.
disableIfEmpty
||
select
.
prop
(
'
disabled
'
))
&&
options
.
length
==
0
)
{
return
this
.
disabledText
;
}
...
...
@@ -246,9 +240,9 @@
return
this
.
nonSelectedText
;
}
else
if
(
this
.
allSelectedText
&&
options
.
length
===
$
(
'
option
'
,
$
(
select
)).
length
&&
$
(
'
option
'
,
$
(
select
)).
length
!==
1
&&
this
.
multiple
)
{
&&
options
.
length
===
$
(
'
option
'
,
$
(
select
)).
length
&&
$
(
'
option
'
,
$
(
select
)).
length
!==
1
&&
this
.
multiple
)
{
if
(
this
.
selectAllNumber
)
{
return
this
.
allSelectedText
+
'
(
'
+
options
.
length
+
'
)
'
;
...
...
@@ -269,7 +263,7 @@
selected
+=
label
+
delimiter
;
});
return
selected
.
substr
(
0
,
selected
.
length
-
this
.
delimiterText
.
length
);
return
selected
.
substr
(
0
,
selected
.
length
-
2
);
}
},
/**
...
...
@@ -291,12 +285,9 @@
var
label
=
(
$
(
this
).
attr
(
'
label
'
)
!==
undefined
)
?
$
(
this
).
attr
(
'
label
'
)
:
$
(
this
).
text
();
selected
+=
label
+
delimiter
;
});
return
selected
.
substr
(
0
,
selected
.
length
-
this
.
delimiterText
.
length
);
return
selected
.
substr
(
0
,
selected
.
length
-
2
);
}
},
checkboxName
:
function
(
option
)
{
return
false
;
// no checkbox name
},
/**
* Create a label.
*
...
...
@@ -361,13 +352,7 @@
/**
* Triggered on select all.
*/
onSelectAll
:
function
()
{
},
/**
* Triggered on deselect all.
*/
onDeselectAll
:
function
()
{
onSelectAll
:
function
(
checked
)
{
},
/**
...
...
@@ -378,14 +363,6 @@
*/
onInitialized
:
function
(
$select
,
$container
)
{
},
/**
* Triggered on filtering.
*
* @param {jQuery} $filter
*/
onFiltering
:
function
(
$filter
)
{
},
enableHTML
:
false
,
buttonClass
:
'
btn btn-default
'
,
...
...
@@ -398,9 +375,10 @@
// Maximum height of the dropdown menu.
// If maximum height is exceeded a scrollbar will be displayed.
maxHeight
:
false
,
checkboxName
:
false
,
includeSelectAllOption
:
false
,
includeSelectAllIfMoreThan
:
0
,
selectAllText
:
'
Selec
t all
'
,
selectAllText
:
'
Selec
ionar todos
'
,
selectAllValue
:
'
multiselect-all
'
,
selectAllName
:
false
,
selectAllNumber
:
true
,
...
...
@@ -409,15 +387,15 @@
enableCaseInsensitiveFiltering
:
false
,
enableFullValueFiltering
:
false
,
enableClickableOptGroups
:
false
,
enableCollapsib
le
OptGroups
:
false
,
filterPlaceholder
:
'
Search
'
,
enableCollapsib
el
OptGroups
:
false
,
filterPlaceholder
:
'
Pesquisar
'
,
// possible options: 'text', 'value', 'both'
filterBehavior
:
'
text
'
,
includeFilterClearBtn
:
true
,
preventInputChangeEvent
:
false
,
nonSelectedText
:
'
None selected
'
,
nSelectedText
:
'
selec
ted
'
,
allSelectedText
:
'
All selected
'
,
nonSelectedText
:
'
Todos
'
,
nSelectedText
:
'
selec
ionado(s)
'
,
allSelectedText
:
'
Todos selecionados
'
,
numberDisplayed
:
3
,
disableIfEmpty
:
false
,
disabledText
:
''
,
...
...
@@ -425,7 +403,7 @@
templates
:
{
button
:
'
<button type="button" class="multiselect dropdown-toggle" data-toggle="dropdown"><span class="multiselect-selected-text"></span> <b class="caret"></b></button>
'
,
ul
:
'
<ul class="multiselect-container dropdown-menu"></ul>
'
,
filter
:
'
<li class="multiselect-item
multiselect-
filter"><div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div></li>
'
,
filter
:
'
<li class="multiselect-item filter"><div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div></li>
'
,
filterClearBtn
:
'
<span class="input-group-btn"><button class="btn btn-default multiselect-clear-filter" type="button"><i class="glyphicon glyphicon-remove-circle"></i></button></span>
'
,
li
:
'
<li><a tabindex="0"><label></label></a></li>
'
,
divider
:
'
<li class="multiselect-item divider"></li>
'
,
...
...
@@ -465,7 +443,7 @@
// Manually add button width if set.
if
(
this
.
options
.
buttonWidth
&&
this
.
options
.
buttonWidth
!==
'
auto
'
)
{
this
.
$button
.
css
({
'
width
'
:
'
100%
'
,
//
this.options.buttonWidth,
'
width
'
:
this
.
options
.
buttonWidth
,
'
overflow
'
:
'
hidden
'
,
'
text-overflow
'
:
'
ellipsis
'
});
...
...
@@ -522,7 +500,7 @@
},
/**
* Build the dropdown options and binds all ne
cess
ary events.
* Build the dropdown options and binds all ne
ssec
ary events.
*
* Uses createDivider and createOptionValue to create the necessary options.
*/
...
...
@@ -557,7 +535,7 @@
},
this
));
// Bind the change event on the dropdown elements.
$
(
'
li
:not(.multiselect-group)
input
'
,
this
.
$ul
).
on
(
'
change
'
,
$
.
proxy
(
function
(
event
)
{
$
(
'
li input
'
,
this
.
$ul
).
on
(
'
change
'
,
$
.
proxy
(
function
(
event
)
{
var
$target
=
$
(
event
.
target
);
var
checked
=
$target
.
prop
(
'
checked
'
)
||
false
;
...
...
@@ -583,7 +561,6 @@
var
$checkboxesNotThis
=
$
(
'
input
'
,
this
.
$container
).
not
(
$target
);
if
(
isSelectAllOption
)
{
if
(
checked
)
{
this
.
selectAll
(
this
.
options
.
selectAllJustVisible
);
}
...
...
@@ -623,17 +600,12 @@
// To prevent select all from firing onChange: #575
this
.
options
.
onChange
(
$option
,
checked
);
// Do not update select all or optgroups on select all change!
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
}
this
.
$select
.
change
();
this
.
updateButtonText
();
this
.
updateSelectAll
();
if
(
this
.
options
.
preventInputChangeEvent
)
{
return
false
;
...
...
@@ -749,77 +721,111 @@
}
},
this
));
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
$
(
"
li.multiselect-group input
"
,
this
.
$ul
).
on
(
"
change
"
,
$
.
proxy
(
function
(
event
)
{
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
$
(
'
li.multiselect-group
'
,
this
.
$ul
).
on
(
'
click
'
,
$
.
proxy
(
function
(
event
)
{
event
.
stopPropagation
();
console
.
log
(
'
test
'
);
var
group
=
$
(
event
.
target
).
parent
();
var
$target
=
$
(
event
.
target
);
var
checked
=
$target
.
prop
(
'
checked
'
)
||
false
;
// Search all option in optgroup
var
$options
=
group
.
nextUntil
(
'
li.multiselect-group
'
);
var
$visibleOptions
=
$options
.
filter
(
"
:visible:not(.disabled)
"
);
var
$li
=
$
(
event
.
target
).
closest
(
'
li
'
);
var
$group
=
$li
.
nextUntil
(
"
li.multiselect-group
"
)
.
not
(
'
.multiselect-filter-hidden
'
)
.
not
(
'
.disabled
'
)
;
// check or uncheck items
var
allChecked
=
true
;
var
optionInputs
=
$visibleOptions
.
find
(
'
input
'
);
var
values
=
[]
;
var
$inputs
=
$group
.
find
(
"
input
"
);
optionInputs
.
each
(
function
()
{
allChecked
=
allChecked
&&
$
(
this
).
prop
(
'
checked
'
);
values
.
push
(
$
(
this
).
val
());
});
var
values
=
[];
var
$options
=
[];
if
(
!
allChecked
)
{
this
.
select
(
values
,
false
);
}
else
{
this
.
deselect
(
values
,
false
);
}
$
.
each
(
$inputs
,
$
.
proxy
(
function
(
index
,
input
)
{
var
value
=
$
(
input
).
val
(
);
var
$option
=
this
.
getOptionByValue
(
value
);
this
.
options
.
onChange
(
optionInputs
,
!
allChecked
);
},
this
)
);
}
if
(
checked
)
{
$
(
input
).
prop
(
'
checked
'
,
true
);
$
(
input
).
closest
(
'
li
'
)
.
addClass
(
this
.
options
.
selectedClass
);
if
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
{
$
(
"
li.multiselect-group input
"
,
this
.
$ul
).
off
();
$
(
"
li.multiselect-group
"
,
this
.
$ul
).
siblings
().
not
(
"
li.multiselect-group, li.multiselect-all
"
,
this
.
$ul
).
each
(
function
()
{
$
(
this
).
toggleClass
(
'
hidden
'
,
true
);
});
$option
.
prop
(
'
selected
'
,
true
);
}
else
{
$
(
input
).
prop
(
'
checked
'
,
false
);
$
(
input
).
closest
(
'
li
'
)
.
removeClass
(
this
.
options
.
selectedClass
);
$
(
"
li.multiselect-group
"
,
this
.
$ul
).
on
(
"
click
"
,
$
.
proxy
(
function
(
group
)
{
group
.
stopPropagation
();
},
this
));
$option
.
prop
(
'
selected
'
,
false
);
}
$
(
"
li.multiselect-group > a > b
"
,
this
.
$ul
).
on
(
"
click
"
,
$
.
proxy
(
function
(
t
)
{
t
.
stopPropagation
();
var
n
=
$
(
t
.
target
).
closest
(
'
li
'
);
var
r
=
n
.
nextUntil
(
"
li.multiselect-group
"
);
var
i
=
true
;
r
.
each
(
function
()
{
i
=
i
&&
$
(
this
).
hasClass
(
'
hidden
'
);
});
$options
.
push
(
this
.
getOptionByValue
(
value
)
);
},
this
))
r
.
toggleClass
(
'
hidden
'
,
!
i
);
},
this
));
// Cannot use select or deselect here because it would call updateOptGroups again.
$
(
"
li.multiselect-group > a > input
"
,
this
.
$ul
).
on
(
"
change
"
,
$
.
proxy
(
function
(
t
)
{
t
.
stopPropagation
();
var
n
=
$
(
t
.
target
).
closest
(
'
li
'
);
var
r
=
n
.
nextUntil
(
"
li.multiselect-group
"
,
'
:not(.disabled)
'
);
var
s
=
r
.
find
(
"
input
"
);
this
.
options
.
onChange
(
$options
,
checked
);
var
i
=
true
;
s
.
each
(
function
()
{
i
=
i
&&
$
(
this
).
prop
(
"
checked
"
);
});
this
.
updateButtonText
();
this
.
updateSelectAll
();
s
.
prop
(
"
checked
"
,
!
i
).
trigger
(
"
change
"
);
},
this
));
}
if
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
{
$
(
"
li.multiselect-group .caret-container
"
,
this
.
$ul
).
on
(
"
click
"
,
$
.
proxy
(
function
(
event
)
{
var
$li
=
$
(
event
.
target
).
closest
(
'
li
'
);
var
$inputs
=
$li
.
nextUntil
(
"
li.multiselect-group
"
)
.
not
(
'
.multiselect-filter-hidden
'
);
var
visible
=
true
;
$inputs
.
each
(
function
()
{
visible
=
visible
&&
$
(
this
).
is
(
'
:visible
'
);
// Set the initial selection state of the groups.
$
(
'
li.multiselect-group
'
,
this
.
$ul
).
each
(
function
()
{
var
r
=
$
(
this
).
nextUntil
(
"
li.multiselect-group
"
,
'
:not(.disabled)
'
);
var
s
=
r
.
find
(
"
input
"
);
var
i
=
true
;
s
.
each
(
function
()
{
i
=
i
&&
$
(
this
).
prop
(
"
checked
"
);
});
if
(
visible
)
{
$inputs
.
hide
()
.
addClass
(
'
multiselect-collapsible-hidden
'
);
}
else
{
$inputs
.
show
()
.
removeClass
(
'
multiselect-collapsible-hidden
'
);
}
$
(
this
).
find
(
'
input
'
).
prop
(
"
checked
"
,
i
);
});
// Update the group checkbox based on new selections among the
// corresponding children.
$
(
"
li input
"
,
this
.
$ul
).
on
(
"
change
"
,
$
.
proxy
(
function
(
t
)
{
t
.
stopPropagation
();
var
n
=
$
(
t
.
target
).
closest
(
'
li
'
);
var
r1
=
n
.
prevUntil
(
"
li.multiselect-group
"
,
'
:not(.disabled)
'
);
var
r2
=
n
.
nextUntil
(
"
li.multiselect-group
"
,
'
:not(.disabled)
'
);
var
s1
=
r1
.
find
(
"
input
"
);
var
s2
=
r2
.
find
(
"
input
"
);
var
i
=
$
(
t
.
target
).
prop
(
'
checked
'
);
s1
.
each
(
function
()
{
i
=
i
&&
$
(
this
).
prop
(
"
checked
"
);
});
s2
.
each
(
function
()
{
i
=
i
&&
$
(
this
).
prop
(
"
checked
"
);
});
n
.
prevAll
(
'
.multiselect-group
'
).
find
(
'
input
'
).
prop
(
'
checked
'
,
i
);
},
this
));
$
(
"
li.multiselect-all
"
,
this
.
$ul
).
css
(
'
background
'
,
'
#f3f3f3
'
).
css
(
'
border-bottom
'
,
'
1px solid #eaeaea
'
);
$
(
"
li.multiselect-all > a > label.checkbox
"
,
this
.
$ul
).
css
(
'
padding
'
,
'
3px 20px 3px 35px
'
);
$
(
"
li.multiselect-
group > a, li.multiselect-
all > a > label.checkbox
"
,
this
.
$ul
).
css
(
'
padding
'
,
'
3px 20px 3px 35px
'
);
$
(
"
li.multiselect-group > a > input
"
,
this
.
$ul
).
css
(
'
margin
'
,
'
4px 0px 5px -20px
'
);
}
},
...
...
@@ -855,11 +861,9 @@
var
$checkbox
=
$
(
'
<input/>
'
).
attr
(
'
type
'
,
inputType
);
var
name
=
this
.
options
.
checkboxName
(
$element
);
if
(
name
)
{
$checkbox
.
attr
(
'
name
'
,
name
);
if
(
this
.
options
.
checkboxName
)
{
$checkbox
.
attr
(
'
name
'
,
this
.
options
.
checkboxName
);
}
$label
.
prepend
(
$checkbox
);
var
selected
=
$element
.
prop
(
'
selected
'
)
||
false
;
...
...
@@ -908,37 +912,50 @@
* @param {jQuery} group
*/
createOptgroup
:
function
(
group
)
{
var
label
=
$
(
group
).
attr
(
"
label
"
);
var
value
=
$
(
group
).
attr
(
"
value
"
);
var
$li
=
$
(
'
<li class="multiselect-item multiselect-group"><a href="javascript:void(0);"><label><b></b></label></a></li>
'
);
var
classes
=
this
.
options
.
optionClass
(
group
);
$li
.
addClass
(
classes
);
if
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
{
var
label
=
$
(
group
).
attr
(
"
label
"
);
var
value
=
$
(
group
).
attr
(
"
value
"
);
var
r
=
$
(
'
<li class="multiselect-item multiselect-group"><a href="javascript:void(0);"><input type="checkbox" value="
'
+
value
+
'
"/><b>
'
+
label
+
'
<b class="caret"></b></b></a></li>
'
);
if
(
this
.
options
.
enableHTML
)
{
$
(
'
label b
'
,
$li
).
html
(
"
"
+
label
);
if
(
this
.
options
.
enableClickableOptGroups
)
{
r
.
addClass
(
"
multiselect-group-clickable
"
)
}
this
.
$ul
.
append
(
r
);
if
(
$
(
group
).
is
(
"
:disabled
"
))
{
r
.
addClass
(
"
disabled
"
)
}
$
(
"
option
"
,
group
).
each
(
$
.
proxy
(
function
(
$
,
group
)
{
this
.
createOptionValue
(
group
)
},
this
))
}
else
{
$
(
'
label b
'
,
$li
).
text
(
"
"
+
label
);
}
var
groupName
=
$
(
group
).
prop
(
'
label
'
);
if
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
{
$
(
'
a
'
,
$li
).
append
(
'
<span class="caret-container"><b class="caret"></b></span>
'
);
}
// Add a header for the group.
var
$li
=
$
(
this
.
options
.
templates
.
liGroup
);
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
$
(
'
a label
'
,
$li
).
prepend
(
'
<input type="checkbox" value="
'
+
value
+
'
"/>
'
);
}
if
(
this
.
options
.
enableHTML
)
{
$
(
'
label
'
,
$li
).
html
(
groupName
);
}
else
{
$
(
'
label
'
,
$li
).
text
(
groupName
);
}
if
(
$
(
group
).
is
(
'
:disabled
'
)
)
{
$li
.
addClass
(
'
disabled
'
);
}
if
(
this
.
options
.
enableClickableOptGroups
)
{
$li
.
addClass
(
'
multiselect-group-clickable
'
);
}
this
.
$ul
.
append
(
$li
);
this
.
$ul
.
append
(
$li
);
if
(
$
(
group
).
is
(
'
:disabled
'
))
{
$li
.
addClass
(
'
disabled
'
);
}
$
(
"
option
"
,
group
).
each
(
$
.
proxy
(
function
(
$
,
group
)
{
this
.
createOptionValue
(
group
);
},
this
))
// Add the options of the group.
$
(
'
option
'
,
group
).
each
(
$
.
proxy
(
function
(
index
,
element
)
{
this
.
createOptionValue
(
element
);
},
this
));
}
},
/**
...
...
@@ -954,7 +971,7 @@
var
alreadyHasSelectAll
=
this
.
hasSelectAll
();
if
(
!
alreadyHasSelectAll
&&
this
.
options
.
includeSelectAllOption
&&
this
.
options
.
multiple
&&
$
(
'
option
'
,
this
.
$select
).
length
>
this
.
options
.
includeSelectAllIfMoreThan
)
{
&&
$
(
'
option
'
,
this
.
$select
).
length
>
this
.
options
.
includeSelectAllIfMoreThan
)
{
// Check whether to add a divider after the select all.
if
(
this
.
options
.
includeSelectAllDivider
)
{
...
...
@@ -1006,20 +1023,13 @@
$
(
'
input
'
,
this
.
$filter
).
attr
(
'
placeholder
'
,
this
.
options
.
filterPlaceholder
);
// Adds optional filter clear button
if
(
this
.
options
.
includeFilterClearBtn
)
{
if
(
this
.
options
.
includeFilterClearBtn
){
var
clearBtn
=
$
(
this
.
options
.
templates
.
filterClearBtn
);
clearBtn
.
on
(
'
click
'
,
$
.
proxy
(
function
(
event
){
clearTimeout
(
this
.
searchTimeout
);
this
.
$filter
.
find
(
'
.multiselect-search
'
).
val
(
''
);
$
(
'
li
'
,
this
.
$ul
).
show
().
removeClass
(
'
multiselect-filter-hidden
'
);
$
(
'
li
'
,
this
.
$ul
).
show
().
removeClass
(
"
filter-hidden
"
);
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
},
this
));
this
.
$filter
.
find
(
'
.input-group
'
).
append
(
clearBtn
);
}
...
...
@@ -1031,8 +1041,8 @@
}).
on
(
'
input keydown
'
,
$
.
proxy
(
function
(
event
)
{
// Cancel enter key default behaviour
if
(
event
.
which
===
13
)
{
event
.
preventDefault
();
}
event
.
preventDefault
();
}
// This is useful to catch "keydown" events after the browser has updated the control.
clearTimeout
(
this
.
searchTimeout
);
...
...
@@ -1080,8 +1090,7 @@
}
// Toggle current element (group or group item) according to showElement boolean.
$
(
element
).
toggle
(
showElement
)
.
toggleClass
(
'
multiselect-filter-hidden
'
,
!
showElement
);
$
(
element
).
toggle
(
showElement
).
toggleClass
(
'
filter-hidden
'
,
!
showElement
);
// Differentiate groups and group items.
if
(
$
(
element
).
hasClass
(
'
multiselect-group
'
))
{
...
...
@@ -1092,14 +1101,12 @@
else
{
// Show group name when at least one of its items is visible.
if
(
showElement
)
{
$
(
currentGroup
).
show
()
.
removeClass
(
'
multiselect-filter-hidden
'
);
$
(
currentGroup
).
show
().
removeClass
(
'
filter-hidden
'
);
}
// Show all group items when group name satisfies filter.
if
(
!
showElement
&&
currentGroupVisible
)
{
$
(
element
).
show
()
.
removeClass
(
'
multiselect-filter-hidden
'
);
$
(
element
).
show
().
removeClass
(
'
filter-hidden
'
);
}
}
}
...
...
@@ -1107,13 +1114,6 @@
}
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
this
.
options
.
onFiltering
(
event
.
target
);
},
this
),
300
,
this
);
},
this
));
}
...
...
@@ -1177,10 +1177,6 @@
this
.
updateButtonText
();
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
},
/**
...
...
@@ -1230,10 +1226,6 @@
this
.
updateButtonText
();
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
},
/**
...
...
@@ -1243,10 +1235,6 @@
this
.
deselectAll
(
false
);
this
.
updateButtonText
();
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
},
/**
...
...
@@ -1292,10 +1280,6 @@
this
.
updateButtonText
();
this
.
updateSelectAll
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
},
/**
...
...
@@ -1307,36 +1291,34 @@
* @param {Boolean} triggerOnSelectAll
*/
selectAll
:
function
(
justVisible
,
triggerOnSelectAll
)
{
justVisible
=
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
?
false
:
justVisible
;
var
justVisible
=
typeof
justVisible
===
'
undefined
'
?
true
:
justVisible
;
var
allLis
=
$
(
"
li:not(.divider):not(.disabled):not(.multiselect-group)
"
,
this
.
$ul
);
var
visibleLis
=
$
(
"
li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)
"
,
this
.
$ul
).
filter
(
'
:visible
'
);
var
allCheckboxes
=
$
(
"
li input[type='checkbox']:enabled
"
,
this
.
$ul
);
var
visibleCheckboxes
=
allCheckboxes
.
filter
(
"
:visible
"
);
var
allCheckboxesCount
=
allCheckboxes
.
length
;
var
visibleCheckboxesCount
=
visibleCheckboxes
.
length
;
if
(
justVisible
)
{
$
(
'
input:enabled
'
,
visibleLis
).
prop
(
'
checked
'
,
true
);
visibleLis
.
addClass
(
this
.
options
.
selectedClass
);
$
(
'
input:enabled
'
,
visibleLis
).
each
(
$
.
proxy
(
function
(
index
,
element
)
{
var
value
=
$
(
element
).
val
();
var
option
=
this
.
getOptionByValue
(
value
);
$
(
option
).
prop
(
'
selected
'
,
true
);
},
this
));
visibleCheckboxes
.
prop
(
'
checked
'
,
true
);
$
(
"
li:not(.divider):not(.disabled)
"
,
this
.
$ul
).
filter
(
"
:visible
"
).
addClass
(
this
.
options
.
selectedClass
);
}
else
{
$
(
'
input:enabled
'
,
allLis
).
prop
(
'
checked
'
,
true
);
allLis
.
addClass
(
this
.
options
.
selectedClass
);
$
(
'
input:enabled
'
,
allLis
).
each
(
$
.
proxy
(
function
(
index
,
element
)
{
var
value
=
$
(
element
).
val
();
var
option
=
this
.
getOptionByValue
(
value
);
$
(
option
).
prop
(
'
selected
'
,
true
);
},
this
));
allCheckboxes
.
prop
(
'
checked
'
,
true
);
$
(
"
li:not(.divider):not(.disabled)
"
,
this
.
$ul
).
addClass
(
this
.
options
.
selectedClass
);
}
$
(
'
li input[value="
'
+
this
.
options
.
selectAllValue
+
'
"]
'
).
prop
(
'
checked
'
,
true
);
if
(
allCheckboxesCount
===
visibleCheckboxesCount
||
justVisible
===
false
)
{
$
(
"
option:not([data-role='divider']):enabled
"
,
this
.
$select
).
prop
(
'
selected
'
,
true
);
}
else
{
var
values
=
visibleCheckboxes
.
map
(
function
()
{
return
$
(
this
).
val
();
}).
get
();
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
$
(
"
option:enabled
"
,
this
.
$select
).
filter
(
function
(
index
)
{
return
$
.
inArray
(
$
(
this
).
val
(),
values
)
!==
-
1
;
}).
prop
(
'
selected
'
,
true
);
}
if
(
triggerOnSelectAll
)
{
...
...
@@ -1351,41 +1333,33 @@
*
* @param {Boolean} justVisible
*/
deselectAll
:
function
(
justVisible
,
triggerOnDeselectAll
)
{
var
justVisible
=
typeof
justVisible
===
'
undefined
'
?
true
:
justVisible
;
var
allLis
=
$
(
"
li:not(.divider):not(.disabled):not(.multiselect-group)
"
,
this
.
$ul
);
var
visibleLis
=
$
(
"
li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)
"
,
this
.
$ul
).
filter
(
'
:visible
'
);
deselectAll
:
function
(
justVisible
)
{
justVisible
=
(
this
.
options
.
enableCollapsibleOptGroups
&&
this
.
options
.
multiple
)
?
false
:
justVisible
;
justVisible
=
typeof
justVisible
===
'
undefined
'
?
true
:
justVisible
;
if
(
justVisible
)
{
$
(
'
input[type="checkbox"]:enabled
'
,
visibleLis
).
prop
(
'
checked
'
,
false
);
visibleLis
.
removeClass
(
this
.
options
.
selectedClass
);
$
(
'
input[type="checkbox"]:enabled
'
,
visibleLis
).
each
(
$
.
proxy
(
function
(
index
,
element
)
{
var
value
=
$
(
element
).
val
();
var
option
=
this
.
getOptionByValue
(
value
);
$
(
option
).
prop
(
'
selected
'
,
false
);
},
this
));
}
else
{
$
(
'
input[type="checkbox"]:enabled
'
,
allLis
).
prop
(
'
checked
'
,
false
);
allLis
.
removeClass
(
this
.
options
.
selectedClass
);
var
visibleCheckboxes
=
$
(
"
li input[type='checkbox']:not(:disabled)
"
,
this
.
$ul
).
filter
(
"
:visible
"
);
visibleCheckboxes
.
prop
(
'
checked
'
,
false
);
$
(
'
input[type="checkbox"]:enabled
'
,
allLis
).
each
(
$
.
proxy
(
function
(
index
,
element
)
{
var
value
=
$
(
element
).
val
();
var
option
=
this
.
getOptionByValue
(
value
);
$
(
option
).
prop
(
'
selected
'
,
false
);
},
this
));
}
var
values
=
visibleCheckboxes
.
map
(
function
()
{
return
$
(
this
).
val
();
}).
get
();
$
(
'
li input[value="
'
+
this
.
options
.
selectAllValue
+
'
"]
'
).
prop
(
'
checked
'
,
false
);
$
(
"
option:enabled
"
,
this
.
$select
).
filter
(
function
(
index
)
{
return
$
.
inArray
(
$
(
this
).
val
(),
values
)
!==
-
1
;
}).
prop
(
'
selected
'
,
false
);
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
if
(
this
.
options
.
selectedClass
)
{
$
(
"
li:not(.divider):not(.disabled)
"
,
this
.
$ul
).
filter
(
"
:visible
"
).
removeClass
(
this
.
options
.
selectedClass
);
}
}
else
{
$
(
"
li input[type='checkbox']:enabled
"
,
this
.
$ul
).
prop
(
'
checked
'
,
false
);
$
(
"
option:enabled
"
,
this
.
$select
).
prop
(
'
selected
'
,
false
);
if
(
triggerOnDeselectAll
)
{
this
.
options
.
onDeselectAll
();
if
(
this
.
options
.
selectedClass
)
{
$
(
"
li:not(.divider):not(.disabled)
"
,
this
.
$ul
).
removeClass
(
this
.
options
.
selectedClass
);
}
}
},
...
...
@@ -1407,10 +1381,6 @@
this
.
updateButtonText
();
this
.
updateSelectAll
(
true
);
if
(
this
.
options
.
enableClickableOptGroups
&&
this
.
options
.
multiple
)
{
this
.
updateOptGroups
();
}
if
(
this
.
options
.
disableIfEmpty
&&
$
(
'
option
'
,
this
.
$select
).
length
<=
0
)
{
this
.
disable
();
}
...
...
@@ -1443,39 +1413,24 @@
});
forEach
(
option
.
children
,
function
(
subOption
)
{
// add children option tags
var
attributes
=
{
$tag
.
append
(
$
(
'
<option/>
'
).
attr
(
{
value
:
subOption
.
value
,
label
:
subOption
.
label
||
subOption
.
value
,
title
:
subOption
.
title
,
selected
:
!!
subOption
.
selected
,
disabled
:
!!
subOption
.
disabled
};
//Loop through attributes object and add key-value for each attribute
for
(
var
key
in
subOption
.
attributes
)
{
attributes
[
'
data-
'
+
key
]
=
subOption
.
attributes
[
key
];
}
//Append original attributes + new data attributes to option
$tag
.
append
(
$
(
'
<option/>
'
).
attr
(
attributes
));
}));
});
}
else
{
var
attributes
=
{
'
value
'
:
option
.
value
,
'
label
'
:
option
.
label
||
option
.
value
,
'
title
'
:
option
.
title
,
'
class
'
:
option
.
class
,
'
selected
'
:
!!
option
.
selected
,
'
disabled
'
:
!!
option
.
disabled
};
//Loop through attributes object and add key-value for each attribute
for
(
var
key
in
option
.
attributes
)
{
attributes
[
'
data-
'
+
key
]
=
option
.
attributes
[
key
];
}
//Append original attributes + new data attributes to option
$tag
=
$
(
'
<option/>
'
).
attr
(
attributes
);
$tag
=
$
(
'
<option/>
'
).
attr
({
value
:
option
.
value
,
label
:
option
.
label
||
option
.
value
,
title
:
option
.
title
,
class
:
option
.
class
,
selected
:
!!
option
.
selected
,
disabled
:
!!
option
.
disabled
});
$tag
.
text
(
option
.
label
||
option
.
value
);
}
...
...
@@ -1531,36 +1486,12 @@
return
$
(
'
li.multiselect-all
'
,
this
.
$ul
).
length
>
0
;
},
/**
* Update opt groups.
*/
updateOptGroups
:
function
()
{
var
$groups
=
$
(
'
li.multiselect-group
'
,
this
.
$ul
)
$groups
.
each
(
function
()
{
var
$options
=
$
(
this
).
nextUntil
(
'
li.multiselect-group
'
)
.
not
(
'
.multiselect-filter-hidden
'
)
.
not
(
'
.disabled
'
);
var
checked
=
true
;
$options
.
each
(
function
()
{
var
$input
=
$
(
'
input
'
,
this
);
if
(
!
$input
.
prop
(
'
checked
'
))
{
checked
=
false
;
}
});
$
(
'
input
'
,
this
).
prop
(
'
checked
'
,
checked
);
});
},
/**
* Updates the select all checkbox based on the currently displayed and selected checkboxes.
*/
updateSelectAll
:
function
(
notTriggerOnSelectAll
)
{
if
(
this
.
hasSelectAll
())
{
var
allBoxes
=
$
(
"
li:not(.multiselect-item):not(.
multiselect-filter-hidden):not(.multiselect-group):not(.disabled
) input:enabled
"
,
this
.
$ul
);
var
allBoxes
=
$
(
"
li:not(.multiselect-item):not(.
filter-hidden
) input:enabled
"
,
this
.
$ul
);
var
allBoxesLength
=
allBoxes
.
length
;
var
checkedBoxesLength
=
allBoxes
.
filter
(
"
:checked
"
).
length
;
var
selectAllLi
=
$
(
"
li.multiselect-all
"
,
this
.
$ul
);
...
...
@@ -1569,14 +1500,14 @@
if
(
checkedBoxesLength
>
0
&&
checkedBoxesLength
===
allBoxesLength
)
{
selectAllInput
.
prop
(
"
checked
"
,
true
);
selectAllLi
.
addClass
(
this
.
options
.
selectedClass
);
this
.
options
.
onSelectAll
();
this
.
options
.
onSelectAll
(
true
);
}
else
{
selectAllInput
.
prop
(
"
checked
"
,
false
);
selectAllLi
.
removeClass
(
this
.
options
.
selectedClass
);
if
(
checkedBoxesLength
===
0
)
{
if
(
!
notTriggerOnSelectAll
)
{
this
.
options
.
on
DeselectAll
(
);
this
.
options
.
on
SelectAll
(
false
);
}
}
}
...
...
@@ -1696,4 +1627,4 @@
$
(
"
select[data-role=multiselect]
"
).
multiselect
();
});
}(
window
.
jQuery
);
}(
window
.
jQuery
);
\ No newline at end of file
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