Polyfill element modifiers for Ember 2.12 through 3.7.
npm install ember-modifier-manager-polyfillember-modifier-manager-polyfill
==============================================================================
This addon provides a polyfill for implementing element modifier managers as
described in emberjs/rfcs#373.
Compatibility
------------------------------------------------------------------------------
* Completely inert when running ember-source 3.8 or higher
* Tested against ember-source v2.12, v2.16, v2.18, v3.4, v3.5, v3.6, v3.7 in CI
Installation
------------------------------------------------------------------------------
```
ember install ember-modifier-manager-polyfill
Usage
------------------------------------------------------------------------------
At this point the best documentation is likely still the the RFC
itself,
but here are a few simple examples (shamelessly stolen from another modifier
RFC emberjs/rfcs#353):
`hbs`
About Us
{{!-- snip --}}
`js
// app/modifiers/performance.js
import Ember from 'ember';
export default Ember._setModifierManager(
() => ({
createModifier() {},
installModifier(_instance, _element, args) {
let [type, name] = args.positional;
performancetype;
},
updateModifier() {},
destroyModifier() {},
}),
class PerformanceModifier {}
);
`
hbs
``js
// app/modifiers/datepicker.js
import Ember from 'ember';
import $ from 'jquery';export default Ember._setModifierManager(
() => ({
createModifier() {
return { element: null };
},
installModifier(state, element, args) {
let options = Object.assign({ minDate: 20, maxDate: '+1M +10D' }, args.named);
// setup state bucket for use in destroyModifier
state.element = element;
state.options = options;
$(this.element).datepicker(options);
},
updateModifier() {},
destroyModifier(state) {
$(state.element).datepicker(state.options);
},
}),
class DatepickerModifier {}
);
`$3
`hbs
Chad liked a post

{{!-- Snip --}}
``js
// app/modifiers/track-impression.js
import Ember from 'ember';export default Ember._setModifierManager(
owner => ({
createModifier() {
return { element: null, observer: null };
},
installModifier(state, element, args) {
let ga = owner.lookup('service:ga');
let { eventCategory } = args.named;
let interSectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => ga.send('event', 'impression', eventCategory));
});
// setup state bucket for use in destroyModifier
state.element = element;
state.observer = interSectionObserver;
},
updateModifier() {},
destroyModifier(state) {
state.observer.unobserve(state.element);
},
}),
class TrackImpressionModifier {}
);
``
License
------------------------------------------------------------------------------
This project is licensed under the MIT License.