Skip to content

Instantly share code, notes, and snippets.

@fivetanley
Last active September 6, 2017 21:11
Show Gist options
  • Select an option

  • Save fivetanley/3bf67bd1bab3c827e6d28b6a58a1d533 to your computer and use it in GitHub Desktop.

Select an option

Save fivetanley/3bf67bd1bab3c827e6d28b6a58a1d533 to your computer and use it in GitHub Desktop.

Revisions

  1. fivetanley revised this gist Sep 6, 2017. 1 changed file with 16 additions and 0 deletions.
    16 changes: 16 additions & 0 deletions templates.application.hbs
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,22 @@
    <br>
    <br>

    {{#expandable-list content=apps as |el|}}
    <ul>
    {{#each el.items as |app|}}
    <li>{{app.name}}</li>
    {{/each}}
    </ul>

    <button {{action el.toggle}}>
    {{#if el.isExpanded}}
    Collapse
    {{else}}
    View all ({{apps.length}}) apps.
    {{/if}}
    </button>
    {{/expandable-list}}

    {{#expandable-list content=apps as |el|}}
    <ul>
    {{#each el.items as |app|}}
  2. fivetanley created this gist Sep 6, 2017.
    23 changes: 23 additions & 0 deletions components.expandable-list.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    import Ember from 'ember';

    const { computed } = Ember;

    export default Ember.Component.extend({
    isExpanded: false,
    maxCollapsed: 5,
    viewableContent: computed('maxCollapsed', 'content.[]', 'content.length', 'isExpanded', function() {
    const { content, isExpanded } = this.getProperties('content', 'isExpanded', 'maxCollapsed');

    if (isExpanded) {
    return content;
    } else {
    return content.slice(0, this.get('maxCollapsed'));
    }
    }),

    actions: {
    toggle() {
    this.toggleProperty('isExpanded');
    }
    }
    });
    16 changes: 16 additions & 0 deletions controllers.application.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,16 @@
    import Ember from 'ember';

    export default Ember.Controller.extend({
    appName: 'Ember Twiddle',

    apps: Ember.computed(function() {
    const content = [];
    for (let x = 0; x < 10; x++) {
    content.push({
    id: x,
    name: `App ${x}`
    });
    }
    return content;
    })
    });
    22 changes: 22 additions & 0 deletions templates.application.hbs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    <h1>Welcome to {{appName}}</h1>
    <br>
    <br>
    {{outlet}}
    <br>
    <br>

    {{#expandable-list content=apps as |el|}}
    <ul>
    {{#each el.items as |app|}}
    <li>{{app.name}}</li>
    {{/each}}
    </ul>

    <button {{action el.toggle}}>
    {{#if el.isExpanded}}
    Collapse
    {{else}}
    View all ({{apps.length}}) apps.
    {{/if}}
    </button>
    {{/expandable-list}}
    1 change: 1 addition & 0 deletions templates.components.expandable-list.hbs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    {{yield (hash items=viewableContent toggle=(action 'toggle') isExpanded=isExpanded)}}
    19 changes: 19 additions & 0 deletions twiddle.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    {
    "version": "0.12.1",
    "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.12.0",
    "ember-template-compiler": "2.12.0",
    "ember-testing": "2.12.0"
    },
    "addons": {
    "ember-data": "2.12.1"
    }
    }