Skip to content

Instantly share code, notes, and snippets.

@dhindurthy
Last active March 20, 2018 20:25
Show Gist options
  • Save dhindurthy/ba8599c888e181f174ae404f27d5a291 to your computer and use it in GitHub Desktop.
Save dhindurthy/ba8599c888e181f174ae404f27d5a291 to your computer and use it in GitHub Desktop.
nav-dropdown
import Ember from 'ember';
export default Ember.Component.extend({
actions:{
optionSelected: function(path){
this.sendAction("optionSelected", path);
}
}
});
import Ember from 'ember';
export default Ember.Component.extend({
tagName:'a',
click: function(){
this.toggleProperty('options');
}
});
import Ember from 'ember';
export default Ember.Component.extend({
tagName:''
});
import Ember from 'ember';
export default Ember.Component.extend({
classNames:['nav-dropdown'],
tagName:'li',
actions:{
optionSelected: function(path){
this.set('navpath', path);
}
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Ember from 'ember';
export default Ember.Controller.extend({
navDropdownItems:{
"name":"Mammals",
"options":[{"name":"Herbivores", "path":"herbivores"},{"name":"Carnivores", "path":"carnivores"},{"name":"Omnivores", "path":"omnivores"}]
},
navDropdownTwo:{
"name":"Reptiles",
"options":[{"name":"Snakes", "path":"snakes"},{"name":"Crocodiles", "path":"crocodiles"},{"name":"Omnivores", "path":"omnivores"}]
}
});
import Ember from 'ember';
export default Ember.Route.extend({
});
body {
margin: 12px 16px;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12pt;
}
a {
color:inherit;
text-decoration: none;
cursor:pointer;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
border: 1px solid black;
padding: 5px;
}
.nav-dropdown{
margin: 40px;
}
ul.nav{
display:flex;
border:none;
}
<br>
<br>
{{outlet}}
<br>
<br>
{{#if options}}
<ul class="navdropdown-dropdown ">
{{#each dropdown.options as |option|}}
<li class="nav-option"><a tabindex="0" href="" {{action "optionSelected" option.path}}>{{option.name}}</a></li>
{{/each}}
</ul>
{{/if}}
{{yield
(hash
icon=(component 'dropdown/toggle/toggle-icon' options=options)
)
}}
<i class="fa-icon fa {{if options "fa-chevron-up" "fa-chevron-down"}}"></i>
{{yield
(hash
toggle=(component 'dropdown/dropdown-toggle' options=dOptions)
list=(component 'dropdown/dropdown-list' options=dOptions optionSelected=(action "optionSelected"))
)
}}
<p>Breaking a dropdown into as many smaller parts as possible lets the user use it in many different ways <br><i>Ex: The icon being placed on any side of the text as desired</i></p>
<nav>
<ul class="nav">
{{#nav-dropdown navpath=navpath as |dropdown|}}
{{#dropdown.toggle as |toggle|}}
{{#toggle.icon}}{{/toggle.icon}}{{navDropdownItems.name}}
{{/dropdown.toggle}}
{{#dropdown.list dropdown=navDropdownItems}}{{/dropdown.list}}
{{/nav-dropdown}}
{{#nav-dropdown navpath=navpath as |dropdown|}}
{{#dropdown.toggle as |toggle|}}
{{navDropdownTwo.name}} {{#toggle.icon}}{{/toggle.icon}}
{{/dropdown.toggle}}
{{#dropdown.list dropdown=navDropdownTwo}}{{/dropdown.list}}
{{/nav-dropdown}}
</ul>
</nav>
<p>The selection was made to go to path <strong style="background-color:yellow;">/{{navpath}}</strong></p>
{
"version": "0.13.0",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.16.2",
"ember-template-compiler": "2.16.2",
"ember-testing": "2.16.2",
"ember-font-awesome": "https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"
},
"addons": {
"ember-data": "2.16.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment