Skip to content

Commit 31b8f85

Browse files
committed
Merge pull request #165 from truenorth/modal-fixed-footer
Configurable default values
2 parents 8be7a29 + dea9428 commit 31b8f85

File tree

18 files changed

+173
-18
lines changed

18 files changed

+173
-18
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ $ ember serve
3535
```
3636

3737
### Configuration
38+
39+
#### Style
40+
3841
Using **SASS** makes configuring the color scheme simple. Just make sure you import `components/color` and `components/variables` before `materialize` like the example below.
3942

4043
```scss
@@ -49,6 +52,25 @@ $primary-color: color("pink", "lighten-2");
4952
```
5053
See the materialize docs on sass variables [here](http://materializecss.com/color.html).
5154

55+
#### Defaults
56+
57+
Some of the library's defaults can be set via your **config/environment.js** file
58+
59+
```javascript
60+
module.exports = function(/* environment, appConfig */) {
61+
var ENV = {
62+
materializeDefaults: {
63+
modalIsFooterFixed: false,
64+
buttonIconPosition: 'left',
65+
loaderSize: 'big',
66+
loaderMode: 'indeterminate',
67+
modalContainerId: 'materialize-modal-root-element'
68+
},
69+
...
70+
};
71+
}
72+
73+
```
5274

5375
## Installation
5476

addon/components/md-btn.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import Ember from 'ember';
2+
import UsesSettings from '../mixins/uses-settings';
23
import layout from '../templates/components/md-btn';
34
import computed from 'ember-new-computed';
45

5-
export default Ember.Component.extend({
6+
const { computed: { oneWay } } = Ember;
7+
8+
export default Ember.Component.extend(UsesSettings, {
69
layout: layout,
710
tagName: 'a',
811
classNameBindings: ['btn:waves-effect', 'isFlat::waves-light', 'isDisabled:disabled:waves-effect', 'buttonClass'],
912
attributeBindings: ['isDisabled:disabled'],
1013
text: null,
1114
icon: null,
12-
iconPosition: 'left',
15+
iconPosition: oneWay('_mdSettings.buttonIconPosition'),
1316
buttonType: null,
1417
actionArg: null,
1518
isFlat: Ember.computed.equal('buttonType', 'flat'),

addon/components/md-loader.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import Ember from 'ember';
2+
import UsesSettings from '../mixins/uses-settings';
23
import layout from '../templates/components/md-loader';
34
import computed from 'ember-new-computed';
45

5-
export default Ember.Component.extend({
6+
const { computed: { oneWay } } = Ember;
7+
8+
export default Ember.Component.extend(UsesSettings, {
69
layout: layout,
710

811
classNameBindings: ['isBarType:progress:preloader-wrapper', 'active:active', 'size'],
912

10-
mode: 'indeterminate',
13+
mode: oneWay('_mdSettings.loaderMode'),
1114
percent: 0,
12-
size: 'big',
15+
size: oneWay('_mdSettings.loaderSize'),
1316
active: true,
1417
color: null,
1518

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import Ember from 'ember';
2+
import UsesSettings from '../mixins/uses-settings';
23
import layout from '../templates/components/md-modal-container';
34

4-
export default Ember.Component.extend({
5-
modalContainerId: 'materialize-modal-root-element',
5+
const { computed: { oneWay } } = Ember;
6+
7+
export default Ember.Component.extend(UsesSettings, {
8+
modalContainerId: oneWay('_mdSettings.modalContainerId'),
69
layout: layout
710
});

addon/components/md-modal.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,40 @@
1+
import Ember from 'ember';
2+
import UsesSettings from '../mixins/uses-settings';
13
import YappModal from 'ember-modal-dialog/components/modal-dialog';
24
import layout from '../templates/components/md-modal';
35
import computed from 'ember-new-computed';
46

5-
export default YappModal.extend({
7+
const { computed: { oneWay } } = Ember;
8+
9+
export default YappModal.extend(UsesSettings, {
610
layout: layout,
711

8-
destinationElementId: "materialize-modal-root-element",
12+
destinationElementId: oneWay('_mdSettings.modalContainerId'),
13+
914
acceptsKeyResponder: true,
1015
overlayId: 'lean-modal',
1116
attributeBindings: ['style:inlineStyle'],
17+
concatenatedProperties: ['modalClassNames'],
1218

1319
inlineStyle: computed({
1420
get() {
1521
return 'z-index: 1000;';
1622
}
1723
}),
1824

25+
isFooterFixed: oneWay('_mdSettings.modalIsFooterFixed'),
26+
27+
modalClassNames: ['modal', 'show'],
28+
_modalClassString: computed('modalClassNames.@each', 'isFooterFixed', {
29+
get() {
30+
let names = this.get('modalClassNames');
31+
if (this.get('isFooterFixed')) {
32+
names.push('modal-fixed-footer');
33+
}
34+
return names.join(' ');
35+
}
36+
}),
37+
1938
didInsertElement() {
2039
this._super(...arguments);
2140
this.becomeKeyResponder();

addon/mixins/uses-settings.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Ember from 'ember';
2+
import computed from 'ember-new-computed';
3+
4+
export default Ember.Mixin.create({
5+
_mdSettings: computed({
6+
get() {
7+
return this.get('container').lookup('service:materialize-settings');
8+
}
9+
})
10+
});

addon/services/md-settings.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import Ember from 'ember';
2+
3+
const { keys, getWithDefault, set, computed: { oneWay } } = Ember;
4+
const { classify } = Ember.String;
5+
6+
export default Ember.Service.extend({
7+
// Footer
8+
modalIsFooterFixed: oneWay('defaultModalIsFooterFixed'),
9+
// Button
10+
buttonIconPosition: oneWay('defaultButtonIconPosition'),
11+
// Loader
12+
loaderSize: oneWay('defaultLoaderSize'),
13+
loaderMode: oneWay('defaultLoaderMode'),
14+
// Modal
15+
modalContainerId: oneWay('defaultModalContainerId'),
16+
17+
init() {
18+
this._super(...arguments);
19+
this._setDefaults();
20+
},
21+
22+
_setDefaults() {
23+
const defaults = getWithDefault(this, 'materializeDefaults', {});
24+
keys(defaults).map(key => {
25+
const classifiedKey = classify(key);
26+
const defaultKey = `default${classifiedKey}`;
27+
return set(this, defaultKey, defaults[key]);
28+
});
29+
}
30+
});

addon/templates/components/md-modal.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
{{#ember-modal-dialog-positioned-container classNameBindings="containerClassNamesString container-class"
66
alignment=alignment
77
alignmentTarget=alignmentTarget}}
8-
<div class="modal show" style="display: block; opacity: 1; top: 10%;">
8+
<div {{bind-attr class=_modalClassString}} style="display: block; opacity: 1; top: 10%;">
99
{{yield}}
1010
</div>
1111
{{/ember-modal-dialog-positioned-container}}

app/initializers/md-settings.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import config from '../config/environment';
2+
import MaterializeSettings from 'ember-cli-materialize/services/md-settings';
3+
4+
export function initialize(container, application) {
5+
const { materializeDefaults } = config;
6+
7+
application.register('config:materialize', materializeDefaults, { instantiate: false });
8+
application.register('service:materialize-settings', MaterializeSettings);
9+
application.inject('service:materialize-settings', 'materializeDefaults', 'config:materialize');
10+
}
11+
12+
export default {
13+
name: 'md-settings',
14+
initialize: initialize
15+
};

app/services/md-settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from 'ember-cli-materialize/services/md-settings';

0 commit comments

Comments
 (0)