Skip to content

Instantly share code, notes, and snippets.

@lllama
Created November 22, 2016 21:42
Show Gist options
  • Save lllama/910eb2a059d22d4eaad3f43a940e1a9d to your computer and use it in GitHub Desktop.
Save lllama/910eb2a059d22d4eaad3f43a940e1a9d to your computer and use it in GitHub Desktop.
Recursion Makes Lllama Cry
import Ember from 'ember';
export default Ember.Component.extend({
expanded: true,
tagName: '',
init () {
this._super(...arguments)
if (this.get('expanded') === undefined) {
this.set('expanded', false)
}
},
actions: {
makeProject (e) {
console.log(this.get('parent.path'))
},
toggleExpanded (dir) {
if (dir.get('expanded') === undefined) {
dir.set('expanded', true)
} else {
dir.toggleProperty('expanded')
}
console.log("I'm in action")
return false
}
}
});
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'li',
click () {
return false
},
});
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'ol',
actions: {
makeProject (e) {
console.log(this.get('parent.path'))
},
toggleExpanded (dir) {
if (dir.get('expanded') === undefined) {
dir.set('expanded', true)
} else {
dir.toggleProperty('expanded')
}
return false
}
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Ember from 'ember';
export default Ember.Route.extend({
model () {
return new Ember.Object({
path: 'top-level',
expanded: true,
children: new Ember.Object({
dirs: [
new Ember.Object({
path: 'dir1',
children: new Ember.Object({
dirs: [
new Ember.Object({
path: 'dir1'
}),
new Ember.Object({path: 'dir2'}),
new Ember.Object({path: 'dir3'}),
new Ember.Object({path: 'dir4'}),
],
files: [
new Ember.Object({path: 'file1'}),
new Ember.Object({path: 'file2'}),
new Ember.Object({path: 'file3'}),
new Ember.Object({path: 'file4'}),
new Ember.Object({path: 'file5'}),
new Ember.Object({path: 'file6'}),
]
})
}),
new Ember.Object({path: 'dir2'}),
new Ember.Object({path: 'dir3'}),
new Ember.Object({path: 'dir4'}),
],
files: [
new Ember.Object({path: 'file1'}),
new Ember.Object({path: 'file2'}),
new Ember.Object({path: 'file3'}),
new Ember.Object({path: 'file4'}),
new Ember.Object({path: 'file5'}),
new Ember.Object({path: 'file6'}),
]
})
})
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
{{code-tree parent=model}}
<br>
<br>
{{#if parent.expanded}}
{{!fa-icon "folder-open"}}{{parent.path}} <button type="button" {{action "makeProject"}}>Make project</button>
<ol>
{{#each parent.children.dirs as |dir|}}
<li {{action 'toggleExpanded' dir}}>
{{code-directory parent=dir}}
</li>
{{/each}}
{{#each parent.children.files as |file|}}
{{code-file file=file}}
{{/each}}
</ol>
{{else}}
{{!fa-icon "folder"}}{{parent.path}} <button type="button" {{action "makeProject"}}>Make project</button>
{{/if}}
<li {{action 'toggleExpanded' parent}}>
{{code-directory parent=parent}}
</li>
{
"version": "0.10.6",
"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.9.0",
"ember-data": "2.9.0",
"ember-template-compiler": "2.9.0",
"ember-testing": "2.9.0"
},
"addons": {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment