Skip to content

Instantly share code, notes, and snippets.

@zoltan-nz
Created October 25, 2016 06:28
Show Gist options
  • Save zoltan-nz/d763ebff11ef463d8cceae38d30031f9 to your computer and use it in GitHub Desktop.
Save zoltan-nz/d763ebff11ef463d8cceae38d30031f9 to your computer and use it in GitHub Desktop.
Dialog Service
import Ember from 'ember';
export default Ember.Component.extend({
dialog: Ember.inject.service(),
actions: {
close() {
this.get('dialog').close();
}
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['showDialog'],
showDialog: false
});
import Ember from 'ember';
export default Ember.Controller.extend({
});
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('page', function() {
this.route('subpage');
})
});
export default Router;
import Ember from 'ember';
export default Ember.Route.extend({
dialog: Ember.inject.service(),
actions: {
instantHelp() {
this.get('dialog').open('instant-help');
}
}
});
import Ember from 'ember';
export default Ember.Service.extend({
applicationRoute() {
return Ember.getOwner(this).lookup('route:application');
},
applicationController() {
return Ember.getOwner(this).lookup('controller:application');
},
open(template, model) {
this.applicationRoute().render(template, {
outlet: 'modal',
into: 'application',
controller: template,
model
});
const appCtrl = this.applicationController();
appCtrl.set('showDialog', true);
appCtrl.addObserver('showDialog', () => { this.close(); });
},
close() {
this.applicationRoute().disconnectOutlet({
outlet: 'modal',
parentView: 'application'
});
const appCtrl = this.applicationController();
appCtrl.removeObserver('showDialog');
appCtrl.set('showDialog', false);
}
});
body {
margin: 12px 16px;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12pt;
}
.display-block {
display: block;
}
<div class="container">
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-nav" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button> {{link-to 'App' 'index' class='navbar-brand'}}
</div>
<div class="collapse navbar-collapse" id="main-nav">
<ul class="nav navbar-nav">
{{#link-to 'index' tagName="li"}}<a>Home</a>{{/link-to}}
{{#link-to 'page' tagName="li"}}<a>Page</a>{{/link-to}}
</ul>
<div class="nav navbar-nav navbar-right">
<button class="btn btn-default navbar-btn" {{action "instantHelp"}}>Instant Help</button>
</div>
</div>
</div>
</nav>
{{outlet}}
</div>
{{outlet 'modal'}}
<div class="modal fade in display-block" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
{{#if title}}
<div class="modal-header">
<button type="button" class="close" aria-label="Close" {{action 'close'}}><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">{{title}}</h4>
</div>
{{/if}}
<div class="modal-body">
{{yield}}
</div>
{{#if footer}}
<div class="modal-footer">
{{footer}}
</div>
{{/if}}
</div>
</div>
</div>
<h1>Home Page</h1>
{{#modal-dialog title="Instant Help"}}
<h2>Instant Help Dialog</h2>
{{/modal-dialog}}
<h1>Page</h1>
{{link-to 'Sub Page' 'page.subpage' class='btn btn-default'}}
<hr>
{{outlet}}
<h1>Sub Page Content</h1>
<button class="btn btn-success" {{action "instantHelp"}}>Open Instant Help Dialog</button>
{
"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": {
"ember-bootstrap": "0.11.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment