Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

root = true


[*]
end_of_line = lf
charset = utf-8
Expand Down
11 changes: 7 additions & 4 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
'use strict';

module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module'
sourceType: 'module',
ecmaFeatures: {
legacyDecorators: true
}
},
plugins: [
'ember'
Expand Down Expand Up @@ -45,9 +50,7 @@ module.exports = {
node: true
},
plugins: ['node'],
rules: Object.assign({}, require('eslint-plugin-node').configs.recommended.rules, {
// add your custom rules and overrides for node files here
})
extends: ['plugin:node/recommended']
}
]
};
1 change: 1 addition & 0 deletions .template-lintrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

module.exports = {
//extends: 'octane'
extends: 'recommended'
};
35 changes: 21 additions & 14 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
language: node_js
node_js:
- "8"
# we recommend testing addons with the same minimum supported node version as Ember CLI
# so that your addon works for all apps
- "10"
- "12"
- "14"

sudo: false
dist: trusty
dist: xenial

addons:
chrome: stable
Expand All @@ -29,27 +29,34 @@ branches:
- /^v\d+\.\d+\.\d+/

jobs:
fail_fast: true
fast_finish: true
allow_failures:
- env: EMBER_TRY_SCENARIO=ember-canary

include:
# runs linting and tests with current locked deps
- stage: "Tests"
name: "Tests"
script:
- npm run lint:hbs
- npm run lint:js
- npm test

- stage: "Additional Tests (other Ember versions)"
env: EMBER_TRY_SCENARIO=ember-lts-2.16
- env: EMBER_TRY_SCENARIO=ember-lts-2.18
- env: EMBER_TRY_SCENARIO=ember-lts-3.4
- env: EMBER_TRY_SCENARIO=ember-lts-3.8
- yarn lint
- yarn test:ember

- stage: "Additional Tests"
name: "Floating Dependencies"
install:
- yarn install --no-lockfile --non-interactive
script:
- yarn test:ember

# we recommend new addons test the current and previous LTS
# as well as latest stable release (bonus points to beta/canary)
- env: EMBER_TRY_SCENARIO=ember-lts-3.16
- env: EMBER_TRY_SCENARIO=ember-lts-3.20
- env: EMBER_TRY_SCENARIO=ember-release
- env: EMBER_TRY_SCENARIO=ember-beta
- env: EMBER_TRY_SCENARIO=ember-canary
- env: EMBER_TRY_SCENARIO=ember-default-with-jquery
- env: EMBER_TRY_SCENARIO=ember-classic

script:
>
Expand Down
46 changes: 28 additions & 18 deletions addon/components/plot-ly.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Component from '@ember/component';
import EmberObject, { computed } from '@ember/object';
import { observes } from '@ember-decorators/object';
import { debounce, scheduleOnce } from '@ember/runloop';
import { registerWaiter } from '@ember/test';
import { buildWaiter } from '@ember/test-waiters';

import layout from '../templates/components/plot-ly';

Expand Down Expand Up @@ -84,14 +84,22 @@ export default class PlotlyComponent extends Component {
constructor(...args) {
super(...args);

/* global Ember */
let waiter;
let token;
if (Ember.testing) {
waiter = buildWaiter('plotly-loaded-waiter');
token = waiter.beginAsync();
}

const promise = import('plotly.js/dist/plotly').then(module => module.default);
// import('plotly.js') does not work?
this.set('_plotly', ObjectPromiseProxy.create({
// somehow import('plotly.js') does not work
promise: import('plotly.js/dist/plotly').then(module => module.default)
promise,
}));

/* global Ember */
if (Ember.testing) {
registerWaiter(() => this._plotly.isFulfilled);
promise.finally(() => { waiter.endAsync(token); })
}

this.set('layout', layout);
Expand Down Expand Up @@ -125,9 +133,10 @@ export default class PlotlyComponent extends Component {


// Private
// eslint-disable-next-line ember/no-observers
@observes('plotlyEvents.[]')
_logUnrecognizedPlotlyEvents() {
const plotlyEvents = this.get('plotlyEvents');
const plotlyEvents = this.plotlyEvents;
if (plotlyEvents && typeof plotlyEvents.forEach === 'function') {
plotlyEvents.forEach(eventName => {
if (!knownPlotlyEvents.find(name => name === eventName)) {
Expand All @@ -140,6 +149,7 @@ export default class PlotlyComponent extends Component {
}
}

// eslint-disable-next-line ember/no-observers
@observes('chartData.triggerUpdate')
_triggerUpdate() {
log(`_triggerUpdate observer firing`);
Expand All @@ -148,14 +158,14 @@ export default class PlotlyComponent extends Component {


// Merge user-provided parameters with defaults
@computed('chartData', 'chartLayout', 'chartConfig', 'isResponsive', 'plotlyEvents')
@computed('chartConfig', 'chartData', 'chartLayout', 'elementId', 'isResponsive', 'plotlyEvents')
get _parameters() {
const parameters = Object.assign({}, {
chartData: this.get('chartData'),
chartLayout: this.get('chartLayout') || document.getElementById(this.elementId).layout || EmberObject.create({ datarevision: 0 }),
chartConfig: Object.assign(defaultConfig, this.get('chartConfig')),
isResponsive: !!this.get('isResponsive'),
plotlyEvents: this.get('plotlyEvents') || []
chartData: this.chartData,
chartLayout: this.chartLayout || document.getElementById(this.elementId).layout || EmberObject.create({ datarevision: 0 }),
chartConfig: Object.assign(defaultConfig, this.chartConfig),
isResponsive: !!this.isResponsive,
plotlyEvents: this.plotlyEvents || []
});
log(`computing parameters =`, parameters);
return parameters;
Expand Down Expand Up @@ -185,12 +195,12 @@ export default class PlotlyComponent extends Component {
_boundResizeEventHandler() {} // overwritten in _bindPlotlyEventListeners

_bindPlotlyEventListeners() {
if (this.get('_parameters.isResponsive')) {
if (this._parameters.isResponsive) {
this.set('_boundResizeEventHandler', this._resizeEventHandler.bind(this));
window.addEventListener('resize', this._boundResizeEventHandler);
}

const plotlyEvents = this.getWithDefault('plotlyEvents', []);
const plotlyEvents = (this.plotlyEvents === undefined ? [] : this.plotlyEvents);
log('_bindPlotlyEventListeners', plotlyEvents, this.element);
plotlyEvents.forEach((eventName) => {
// Note: Using plotly.js' 'on' method (copied from EventEmitter)
Expand All @@ -200,7 +210,7 @@ export default class PlotlyComponent extends Component {

_unbindPlotlyEventListeners() {
window.removeEventListener('resize', this._boundResizeEventHandler);
const events = this.getWithDefault('plotlyEvents', []);
const events = (this.plotlyEvents === undefined ? [] : this.plotlyEvents);
log('_unbindPlotlyEventListeners', events, this.element);
events.forEach((eventName) => {
// Note: Using plotly.js' 'removeListener' method (copied from EventEmitter)
Expand All @@ -211,7 +221,7 @@ export default class PlotlyComponent extends Component {
}

_isDomElementBad() {
return !this.element || !this.elementId || this.get('isDestroying') || this.get('isDestroyed');
return !this.element || !this.elementId || this.isDestroying || this.isDestroyed;
}

_newPlot() {
Expand All @@ -221,7 +231,7 @@ export default class PlotlyComponent extends Component {
return;
}
const id = this.elementId;
const { chartData, chartLayout, chartConfig } = this.get('_parameters');
const { chartData, chartLayout, chartConfig } = this._parameters;
this._unbindPlotlyEventListeners();
log('About to call Plotly.newPlot');
Plotly.newPlot(id, chartData, chartLayout, chartConfig).then(() => {
Expand All @@ -241,7 +251,7 @@ export default class PlotlyComponent extends Component {
return;
}
const id = this.elementId;
const { chartData, chartLayout, chartConfig } = this.get('_parameters');
const { chartData, chartLayout, chartConfig } = this._parameters;
// Force update
chartLayout.datarevision += 1;
log('About to call Plotly.react', chartData, chartLayout, chartConfig);
Expand Down
57 changes: 19 additions & 38 deletions config/ember-try.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,18 @@ module.exports = async function() {
useYarn: true,
scenarios: [
{
name: 'ember-lts-2.16',
env: {
EMBER_OPTIONAL_FEATURES: JSON.stringify({ 'jquery-integration': true })
},
name: 'ember-lts-3.16',
npm: {
devDependencies: {
'@ember/jquery': '^0.5.1',
'ember-source': '~2.16.0'
'ember-source': '~3.16.0'
}
}
},
{
name: 'ember-lts-2.18',
env: {
EMBER_OPTIONAL_FEATURES: JSON.stringify({'jquery-integration': true})
},
npm: {
devDependencies: {
'@ember/jquery': '^0.5.1',
'ember-source': '~2.18.0'
}
}
},
{
name: 'ember-lts-3.4',
name: 'ember-lts-3.20',
npm: {
devDependencies: {
'ember-source': '~3.4.0'
}
},
},
{
name: 'ember-lts-3.8',
npm: {
devDependencies: {
'ember-source': '~3.8.0'
'ember-source': '~3.20.5'
}
}
},
Expand Down Expand Up @@ -70,26 +46,31 @@ module.exports = async function() {
}
}
},
// The default `.travis.yml` runs this scenario via `npm test`,
// not via `ember try`. It's still included here so that running
// `ember try:each` manually or from a customized CI config will run it
// along with all the other scenarios.
{
name: 'ember-default',
name: 'ember-default-with-jquery',
env: {
EMBER_OPTIONAL_FEATURES: JSON.stringify({
'jquery-integration': true
})
},
npm: {
devDependencies: {}
devDependencies: {
'@ember/jquery': '^1.1.0'
}
}
},
{
name: 'ember-default-with-jquery',
name: 'ember-classic',
env: {
EMBER_OPTIONAL_FEATURES: JSON.stringify({
'jquery-integration': true
'application-template-wrapper': true,
'default-async-observers': false,
'template-only-glimmer-components': false
})
},
npm: {
devDependencies: {
'@ember/jquery': '^0.5.1'
ember: {
edition: 'classic'
}
}
}
Expand Down
Loading