Skip to content

Commit c109bf6

Browse files
committed
Add forceRenderBelow option + unit test
1 parent bc54454 commit c109bf6

File tree

9 files changed

+59
-3
lines changed

9 files changed

+59
-3
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,13 @@ $('select').selectric({
256256
*/
257257
forceRenderAbove: false,
258258

259+
/*
260+
* Type: Boolean
261+
* Description: In some cases the options box gets opened above even though the desired behavior would be below.
262+
* If the auto dectection doesn't work as expected you may force opening below.
263+
*/
264+
forceRenderBelow: false,
265+
259266
/*
260267
* Type: Object
261268
* Description: Customize select "multiple" behavior

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "jquery-selectric",
33
"description": "Fast, simple and light jQuery plugin to customize HTML selects",
4-
"version": "1.12.0",
4+
"version": "1.13.0",
55
"keywords": [
66
"select",
77
"selectbox",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "selectric",
3-
"version": "1.12.0",
3+
"version": "1.13.0",
44
"main": "public/jquery.selectric.js",
55
"title": "jQuery Selectric",
66
"author": {

public/demo.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,22 @@ <h3>Force render above</h3>
285285
</div>
286286
</div>
287287

288+
<div class="demo">
289+
<h3>Force render below</h3>
290+
291+
<div class="view">
292+
<select id="forceRenderBelow">
293+
<option value="lorem">lorem</option>
294+
<option value="ipsum">ipsum</option>
295+
<option value="dolor">dolor</option>
296+
</select>
297+
</div>
298+
299+
<div class="code">
300+
<pre><code class="language-javascript">$('select').selectric({ forceRenderBelow: true });</code></pre>
301+
</div>
302+
</div>
303+
288304
<div class="demo-spacer"></div>
289305
</div>
290306

public/index.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,13 @@ <h2>Options</h2>
343343
*/
344344
forceRenderAbove: false,
345345

346+
/*
347+
* Type: Boolean
348+
* Description: In some cases the options box gets opened above even though the desired behavior would be below.
349+
* If the auto dectection doesn't work as expected you may force opening below.
350+
*/
351+
forceRenderBelow: false,
352+
346353
/*
347354
* Type: Object
348355
* Description: Customize select "multiple" behavior

public/lib/demo.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@
162162

163163
$('#forceRenderAbove').selectric({ forceRenderAbove: true });
164164

165+
$('#forceRenderBelow').selectric({ forceRenderBelow: true });
166+
165167
/*------------------------------------*/
166168

167169
// Cache the target element

src/jquery.selectric.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
var $win = $(window);
2828

2929
var pluginName = 'selectric';
30-
var classList = 'Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Scroll Group GroupLabel';
30+
var classList = 'Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel';
3131
var eventNamespaceSuffix = '.sl';
3232

3333
var chars = ['a', 'e', 'i', 'o', 'u', 'n', 'c', 'y'];
@@ -756,6 +756,8 @@
756756

757757
if (_this.options.forceRenderAbove === true) {
758758
_this.elements.outerWrapper.addClass(_this.classes.above);
759+
} else if (_this.options.forceRenderBelow === true) {
760+
_this.elements.outerWrapper.addClass(_this.classes.below);
759761
} else {
760762
var scrollTop = $win.scrollTop();
761763
var winHeight = $win.height();
@@ -770,8 +772,10 @@
770772
// It's acceptable that the user needs to
771773
// scroll the viewport to see the cut off UI
772774
var renderAbove = !fitsDown && fitsAbove;
775+
var renderBelow = !renderAbove;
773776

774777
_this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove);
778+
_this.elements.outerWrapper.toggleClass(_this.classes.below, renderBelow);
775779
}
776780
},
777781

@@ -1064,6 +1068,7 @@
10641068
inheritOriginalWidth : false,
10651069
allowWrap : true,
10661070
forceRenderAbove : false,
1071+
forceRenderBelow : false,
10671072
stopPropagation : true,
10681073
optionsItemBuilder : '{text}', // function(itemData, element, index)
10691074
labelBuilder : '{text}', // function(currItem)

test/fixtures/options.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,13 @@
55
<option value="ipsum">ipsum</option>
66
<option value="dolor">dolor</option>
77
</select>
8+
</div>
9+
10+
<div id="forceRenderBelow">
11+
<label>forceRenderBelow</label>
12+
<select>
13+
<option value="lorem">lorem</option>
14+
<option value="ipsum">ipsum</option>
15+
<option value="dolor">dolor</option>
16+
</select>
817
</div>

test/options.spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ describe('options', function() {
1010
loadFixtures('options.html');
1111

1212
$('#forceRenderAbove select').selectric({ forceRenderAbove: true });
13+
$('#forceRenderBelow select').selectric({ forceRenderBelow: true });
1314
});
1415

1516
it('should always have above class after initial open when using forceRenderAbove option', function() {
@@ -21,4 +22,13 @@ describe('options', function() {
2122
expect($('#forceRenderAbove').find('.selectric-wrapper').hasClass('selectric-above')).toBe(true);
2223
});
2324

25+
it('should always have below class after initial open when using forceRenderBelow option', function() {
26+
// initial open
27+
$('#forceRenderBelow').find('.selectric').trigger('click');
28+
expect($('#forceRenderBelow').find('.selectric-wrapper').hasClass('selectric-below')).toBe(true);
29+
// close afterwards
30+
$('#forceRenderBelow').find('.selectric').trigger('click');
31+
expect($('#forceRenderBelow').find('.selectric-wrapper').hasClass('selectric-below')).toBe(true);
32+
});
33+
2434
});

0 commit comments

Comments
 (0)