Skip to content

Commit

Permalink
Refactored fixedMenuItem and fixed linting
Browse files Browse the repository at this point in the history
  • Loading branch information
MeoMix committed May 16, 2015
1 parent aeaf71d commit 712013a
Show file tree
Hide file tree
Showing 15 changed files with 99 additions and 50 deletions.
11 changes: 11 additions & 0 deletions src/js/foreground/model/fixedMenuItem.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
define(function() {
'use strict';

var FixedMenuItem = Backbone.Model.extend({
defaults: {
text: ''
}
});

return FixedMenuItem;
});
4 changes: 3 additions & 1 deletion src/js/foreground/model/simpleMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

var SimpleMenu = Backbone.Model.extend({
defaults: {
fixedMenuItemTitle: ''
simpleMenuItems: null,
fixedMenuItem: null,
listItemHeight: 0
}
});

Expand Down
16 changes: 16 additions & 0 deletions src/js/foreground/view/element/fixedMenuItemView.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
define(function(require) {
'use strict';

var MenuItemTemplate = require('text!template/element/menuItem.html');

var FixedMenuItemView = Marionette.ItemView.extend({
className: 'listItem listItem--small listItem--clickable listItem--selectable u-bordered--top',
template: _.template(MenuItemTemplate),

triggers: {
'click': 'click:fixedMenuItem'
}
});

return FixedMenuItemView;
});
9 changes: 5 additions & 4 deletions src/js/foreground/view/element/simpleListItemView.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,17 @@
// otherwise it'll close immediately.
_.defer(function() {
this.showChildView('simpleMenu', new SimpleMenuView({
simpleMenuItems: simpleMenuItems,
model: new SimpleMenu(),
listItemHeight: this.$el.height()
model: new SimpleMenu({
simpleMenuItems: simpleMenuItems,
listItemHeight: this.$el.height()
})
}));
}.bind(this));
}
},

_onClickSimpleMenuItem: function(model, eventArgs) {
var activeItem = eventArgs.collection.getActive();
var activeItem = eventArgs.model.get('simpleMenuItems').getActive();
this.model.set('value', activeItem.get('value'));
}
});
Expand Down
4 changes: 2 additions & 2 deletions src/js/foreground/view/element/simpleMenuItemView.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
define(function(require) {
'use strict';

var SimpleMenuItemTemplate = require('text!template/element/simpleMenuItem.html');
var MenuItemTemplate = require('text!template/element/menuItem.html');

var SimpleMenuItemView = Marionette.LayoutView.extend({
className: 'listItem listItem--small listItem--selectable listItem--clickable',
template: _.template(SimpleMenuItemTemplate),
template: _.template(MenuItemTemplate),

events: {
'click': '_onClick'
Expand Down
48 changes: 23 additions & 25 deletions src/js/foreground/view/element/simpleMenuView.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
'use strict';

var SimpleMenuItemsView = require('foreground/view/element/simpleMenuItemsView');
var FixedMenuItemView = require('foreground/view/element/fixedMenuItemView');
var SimpleMenuTemplate = require('text!template/element/simpleMenu.html');

var SimpleMenuView = Marionette.LayoutView.extend({
Expand All @@ -10,45 +11,43 @@
template: _.template(SimpleMenuTemplate),

regions: {
simpleMenuItems: '[data-region=simpleMenuItems]'
simpleMenuItems: '[data-region=simpleMenuItems]',
fixedMenuItem: '[data-region=fixedMenuItem]'
},

ui: {
// TODO: Fix this so that fixedMenuItem can be rendered or use a region or something. Need to pass my ui testing.
fixedMenuItem: '[data-ui~=fixedMenuItem]',
panelContent: '[data-ui~=panelContent]'
},

events: {
'click @ui.fixedMenuItem': '_onClickFixedMenuItem'
},

childEvents: {
'click:simpleMenuItem': '_onClickSimpleMenuItem'
'click:simpleMenuItem': '_onClickSimpleMenuItem',
'click:fixedMenuItem': '_onClickFixedMenuItem'
},

listItemHeight: 0,
simpleMenuItems: null,

initialize: function(options) {
this.simpleMenuItems = options.simpleMenuItems;
this.listItemHeight = _.isUndefined(options.listItemHeight) ? this.listItemHeight : options.listItemHeight;
initialize: function() {
this.listenTo(Streamus.channels.element.vent, 'click', this._onElementClick);
},

onRender: function() {
this.showChildView('simpleMenuItems', new SimpleMenuItemsView({
collection: this.simpleMenuItems,
listItemHeight: this.listItemHeight
collection: this.model.get('simpleMenuItems'),
listItemHeight: this.model.get('listItemHeight')
}));

if (this.model.has('fixedMenuItem')) {
this.showChildView('fixedMenuItem', new FixedMenuItemView({
model: this.model.get('fixedMenuItem')
}));
}
},

onAttach: function() {
// This needs to be ran on the parent because _centerActive has a dependency on simpleMenuItems scrollTop which is set here.
this.getChildView('simpleMenuItems').ensureActiveIsVisible();

if (this.listItemHeight > 0) {
this._centerActive();
var listItemHeight = this.model.get('listItemHeight');
if (listItemHeight > 0) {
this._centerActive(listItemHeight);
}

requestAnimationFrame(function() {
Expand All @@ -65,8 +64,7 @@
_onClickSimpleMenuItem: function() {
this.triggerMethod('click:simpleMenuItem', {
view: this,
model: this.model,
collection: this.simpleMenuItems
model: this.model
});
Streamus.channels.simpleMenu.vent.trigger('clicked:item');
this.hide();
Expand All @@ -75,8 +73,7 @@
_onClickFixedMenuItem: function() {
this.triggerMethod('click:fixedMenuItem', {
view: this,
model: this.model,
collection: this.simpleMenuItems
model: this.model
});
Streamus.channels.simpleMenu.vent.trigger('clicked:item');
this.hide();
Expand All @@ -95,9 +92,10 @@

// TODO: This should also take into account overflow. If overflow would happen, abandon trying to perfectly center and keep the menu within the viewport.
// When showing this view over a ListItem, center the view's active item over the ListItem.
_centerActive: function() {
_centerActive: function(listItemHeight) {
var simpleMenuItems = this.model.get('simpleMenuItems');
// Adjust the top position of the view based on which item is active.
var index = this.simpleMenuItems.indexOf(this.simpleMenuItems.getActive());
var index = simpleMenuItems.indexOf(simpleMenuItems.getActive());

// TODO: This feels weirdly coupled.
var childHeight = this.getChildView('simpleMenuItems').children.first().$el.height();
Expand All @@ -109,7 +107,7 @@

// Now center the item over its ListItem
var paddingTop = parseInt(this.ui.panelContent.css('padding-top'));
var centering = (this.listItemHeight - childHeight - paddingTop) / 2;
var centering = (listItemHeight - childHeight - paddingTop) / 2;

this.$el.css('top', offset + centering);
}
Expand Down
9 changes: 6 additions & 3 deletions src/js/foreground/view/saveSongs/saveSongsRegion.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ define(function(require) {
'use strict';

var SimpleMenuItems = require('foreground/collection/simpleMenuItems');
var FixedMenuItem = require('foreground/model/fixedMenuItem');
var SimpleMenu = require('foreground/model/simpleMenu');
var SimpleMenuView = require('foreground/view/element/simpleMenuView');
var CreatePlaylistDialogView = require('foreground/view/dialog/createPlaylistDialogView');
Expand Down Expand Up @@ -30,9 +31,11 @@ define(function(require) {
}));

var simpleMenuView = new SimpleMenuView({
simpleMenuItems: simpleMenuItems,
model: new SimpleMenu({
fixedMenuItemTitle: chrome.i18n.getMessage('createPlaylist')
simpleMenuItems: simpleMenuItems,
fixedMenuItem: new FixedMenuItem({
text: chrome.i18n.getMessage('createPlaylist')
})
})
});

Expand All @@ -53,7 +56,7 @@ define(function(require) {
},

_onClickSimpleMenuItem: function(playlists, songs, eventArgs) {
var activeItem = eventArgs.collection.getActive();
var activeItem = eventArgs.model.get('simpleMenuItems').getActive();
var playlist = playlists.get(activeItem.get('value'));
playlist.get('items').addSongs(songs);
},
Expand Down
2 changes: 1 addition & 1 deletion src/js/test/foreground/view/appBar/nextButtonView.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
stream: new Stream({
player: new Player({
settings: new Settings(),
youTubePlayer: new YouTubePlayer
youTubePlayer: new YouTubePlayer()
}),
shuffleButton: shuffleButton,
radioButton: radioButton,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

var player = new Player({
settings: new Settings(),
youTubePlayer: new YouTubePlayer
youTubePlayer: new YouTubePlayer()
});

this.playPauseButtonView = new PlayPauseButtonView({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

var player = new Player({
settings: new Settings(),
youTubePlayer: new YouTubePlayer
youTubePlayer: new YouTubePlayer()
});

var shuffleButton = new ShuffleButton();
Expand Down
1 change: 1 addition & 0 deletions src/js/test/foreground/view/element/elementSpecLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
'use strict';

require('test/foreground/view/element/checkboxView.spec');
require('test/foreground/view/element/fixedMenuItemView.spec');
require('test/foreground/view/element/radioButtonView.spec');
require('test/foreground/view/element/radioGroupView.spec');
require('test/foreground/view/element/simpleListItemView.spec');
Expand Down
27 changes: 27 additions & 0 deletions src/js/test/foreground/view/element/fixedMenuItemView.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
define(function(require) {
'use strict';

var FixedMenuItemView = require('foreground/view/element/fixedMenuItemView');
var FixedMenuItem = require('foreground/model/fixedMenuItem');

describe('FixedMenuItemView', function() {
beforeEach(function() {
this.documentFragment = document.createDocumentFragment();
this.fixedMenuItemView = new FixedMenuItemView({
model: new FixedMenuItem()
});
});

afterEach(function() {
this.fixedMenuItemView.destroy();
});

it('should be able to find all referenced ui targets', function() {
this.documentFragment.appendChild(this.fixedMenuItemView.render().el);

_.forIn(this.fixedMenuItemView.ui, function(element) {
expect(element.length).to.not.equal(0);
});
});
});
});
3 changes: 1 addition & 2 deletions src/js/test/foreground/view/element/simpleMenuView.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
this.simpleMenuView.destroy();
});

// TODO: fix
xit('should be able to find all referenced ui targets', function() {
it('should be able to find all referenced ui targets', function() {
this.documentFragment.appendChild(this.simpleMenuView.render().el);

_.forIn(this.simpleMenuView.ui, function(element) {
Expand Down
File renamed without changes.
11 changes: 1 addition & 10 deletions src/template/element/simpleMenu.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
<div data-ui='panelContent' class='menu-items panel-content panel-content--uncolored panel-content--fadeInOut'>
<div data-region='simpleMenuItems'></div>

<% if(fixedMenuItemTitle !== '') { %>
<div data-ui='fixedMenuItem' class='listItem listItem--small listItem--clickable listItem--selectable u-bordered--top'>
<div class='listItem-content'>
<div class='listItem-title'>
<%- fixedMenuItemTitle %>
</div>
</div>
</div>
<% } %>
<div data-region='fixedMenuItem'></div>
</div>

0 comments on commit 712013a

Please sign in to comment.