Skip to content

Commit f169a0e

Browse files
committed
refactor to be more extendable
1 parent 9d50cd6 commit f169a0e

File tree

3 files changed

+55
-36
lines changed

3 files changed

+55
-36
lines changed

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
<aside id="sidebar" class="sidebar">
5555
<nav class="sidebar-nav">
5656
<ul class="items">
57-
<li><a class="select-list active" href="#">List</a></li>
58-
<li><a class="select-facet" href="#">Filter</a></li>
57+
<li><a data-select="list" class="sidebar-action active" href="#">List</a></li>
58+
<li><a data-select="facets" class="sidebar-action" href="#">Filter</a></li>
5959
</ul>
6060
</nav>
6161
<div id="list" class="control sidebar-item"></div>

src/ui/sidebar.js

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,71 @@ define(function(require, exports, module) {
66

77
module.exports = flight.component(function sidebar() {
88

9+
var potentialSidebarItems = ['facets', 'list'];
10+
var presentItems = [];
11+
912
this.defaultAttrs({
10-
listButton: '.select-list',
11-
facetButton: '.select-facet',
12-
list: '#list',
13-
facet: '#facets'
13+
toggleButtons: '.sidebar-action',
14+
sidebarItems: '.sidebar-item'
1415
});
1516

17+
this.configureSidebar = function(e, config){
18+
var configAttr = _.keys(config);
19+
presentItems = _.intersection(potentialSidebarItems, configAttr);
1620

17-
this.showList = function(e){
18-
e.preventDefault();
19-
this.select('list').show();
20-
this.select('facet').hide();
21-
this.select('listButton').addClass('active');
22-
this.select('facetButton').removeClass('active');
21+
var $sidebar = this.$node;
22+
23+
// add class .sidebar-items-X based on active sidebar items
24+
$sidebar.addClass('sidebar-items-'+presentItems.length);
25+
// activate configured sidebar items
26+
_.each(presentItems, function(item){
27+
$sidebar.find(item).show();
28+
$sidebar.find('[data-select="'+item+'"]').parent().show();
29+
});
30+
31+
if( presentItems.length === 1) {
32+
$sidebar.find('.sidebar-nav').hide();
33+
$sidebar.addClass('no-tabs');
34+
}
2335
};
2436

25-
this.showFacet = function(e){
37+
this.showItem = function(e, elemObj) {
38+
// generic toggle fn for sidebar tabs
2639
e.preventDefault();
27-
this.select('facet').show();
28-
this.select('list').hide();
29-
this.select('facetButton').addClass('active');
30-
this.select('listButton').removeClass('active');
40+
var $el = $(elemObj.el);
41+
var itemTitle = $el.data('select');
42+
this.select('sidebarItems').hide();
43+
this.$node.find('#'+itemTitle).show();
44+
this.select('toggleButtons').removeClass('active');
45+
$el.addClass('active');
3146
};
3247

3348
this.showFullSidebar = function() {
34-
this.select('facet').show();
35-
this.select('list').show();
49+
this.select('sidebarItems').show();
3650
};
3751

38-
this.toggleSidebar = function(e) {
52+
this.toggleHiddenSidebar = function(e) {
3953
e.preventDefault();
4054
this.$node.toggleClass('open');
4155
$('.sidebar-toggle').toggleClass('active');
4256
};
4357

4458
this.after('initialize', function() {
59+
this.on(document, 'config', this.configureSidebar);
60+
4561
this.on('click', {
46-
listButton: this.showList,
47-
facetButton: this.showFacet
62+
toggleButtons: this.showItem
4863
});
4964

5065
// This is outside of the component, but it controls it.. perhaps refactor to include within root element?
51-
$(document).on('click', '.sidebar-toggle', this.toggleSidebar.bind(this) );
66+
$(document).on('click', '.sidebar-toggle', this.toggleHiddenSidebar.bind(this) );
67+
5268
$(window).on('resize', function(){
5369
if( document.body.clientWidth > 955 ) {
5470
this.showFullSidebar();
5571
}
5672
}.bind(this));
5773

58-
5974
});
6075
});
6176
});

styles/style.css

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,9 @@ body > div.container {
260260
width: 30%;
261261
margin-left: 0%;
262262
padding-top: 50px;
263-
263+
}
264+
.sidebar.no-tabs {
265+
padding-top: 0;
264266
}
265267
}
266268

@@ -279,9 +281,16 @@ body > div.container {
279281
height: 100%;
280282
overflow-y: scroll;
281283
overflow-x: hidden;
282-
width: 50%;
283284
float: left;
284285
padding: 0 10px;
286+
display: none;
287+
}
288+
289+
.sidebar-items-2 .control {
290+
width: 50%;
291+
}
292+
.sidebar-items-1 .control {
293+
width: 100%;
285294
}
286295

287296
@media (max-width: 955px) {
@@ -318,6 +327,7 @@ body > div.container {
318327
.sidebar-nav .items li{
319328
width: 50%;
320329
float: left;
330+
display: none;
321331
}
322332

323333
/*buttons*/
@@ -340,24 +350,18 @@ body.has-facets.has-list #map {
340350

341351
/* At larger sizes, adjust map to fit sidebar space depending on configuration */
342352
@media (min-width: 768px) {
343-
body.has-facets #map {
353+
.sidebar-items-1 + #map {
344354
left: 15%;
345355
}
346-
body.has-list #map {
347-
left: 15%;
348-
}
349-
body.has-facets.has-list #map {
356+
.sidebar-items-2 + #map {
350357
left: 30%;
351358
}
352359
}
353360
@media (min-width: 956px) {
354-
body.has-facets #map {
355-
left: 22.5%;
356-
}
357-
body.has-list #map {
361+
.sidebar-items-1 + #map {
358362
left: 22.5%;
359363
}
360-
body.has-facets.has-list #map {
364+
.sidebar-items-2 + #map {
361365
left: 45%;
362366
}
363367
}

0 commit comments

Comments
 (0)