From 6d7c39428889354c28d97aede4dc0f5480bf8b71 Mon Sep 17 00:00:00 2001 From: Brandon Cooper Date: Sat, 15 Aug 2015 14:38:11 -0700 Subject: [PATCH 1/7] remove 'View' from addTo array for Ember 1.13 and greater --- README.md | 4 ++-- app/initializers/ember-tooltips.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6a9ebd14..927c3b1c 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ export default Ember.Component.extend({ ### Customizing the Mixin -By default the `ember-tooltips` mixin is added to all views and components. This mixin contains the helper methods to render tooltips. +By default the `ember-tooltips` mixin is added to all components. This mixin contains the helper methods to render tooltips. You can customize where the mixin is automatically added by overriding the `addTo` option in your `config/environment.js` file: @@ -211,7 +211,7 @@ module.exports = function(environment) { /* ... */ tooltips: { - addTo: ['View', 'Component'], // Ember.View, Ember.Component + addTo: ['Component'], // Ember.Component } } }; diff --git a/app/initializers/ember-tooltips.js b/app/initializers/ember-tooltips.js index 4d56fdc8..46bea2a8 100644 --- a/app/initializers/ember-tooltips.js +++ b/app/initializers/ember-tooltips.js @@ -6,7 +6,7 @@ import Tooltips from '../mixins/components/tooltips'; export function initialize() { const defaultOptions = { - addTo: ['Component', 'View'], + addTo: ['Component'], }; const overridingOptions = ENV.tooltips || {}; const options = Ember.merge(defaultOptions, overridingOptions); From 37618609184d2a15488cd030b6ee92a36ff504e0 Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Thu, 10 Sep 2015 13:28:47 +1200 Subject: [PATCH 2/7] Observing changes to tooltipContent property. --- addon/mixins/components/tooltips.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/addon/mixins/components/tooltips.js b/addon/mixins/components/tooltips.js index 7ef5716a..e3e96155 100644 --- a/addon/mixins/components/tooltips.js +++ b/addon/mixins/components/tooltips.js @@ -63,6 +63,7 @@ export default Ember.Mixin.create({ /* Remove observer, even if it was never added */ this.removeObserver('tooltipVisibility', this, this.tooltipVisibilityDidChange); + this.removeObserver('tooltipContent', this, this.tooltipContentDidChange); }), /** @@ -113,6 +114,9 @@ export default Ember.Mixin.create({ let content = this.get('tooltipContent'); let tooltip, tooltipOptions; + var keys = Object.keys(this); + var hasTooltipContentProperty = (Ember.$.inArray('tooltipContent', keys) !== -1); + if (componentWasPassed) { const componentContent = component.get('content'); @@ -123,7 +127,7 @@ export default Ember.Mixin.create({ } } - if (!content) { + if (!content && !hasTooltipContentProperty) { return; } @@ -148,6 +152,9 @@ export default Ember.Mixin.create({ this.set('tooltip', tooltip); + /* Bind observer if tooltipContent changes */ + this.addObserver('tooltipContent', this, this.tooltipContentDidChange); + /* Bind observer if manual-triggering mode */ if (tooltipOptions.event === 'manual') { if (componentWasPassed) { @@ -161,6 +168,20 @@ export default Ember.Mixin.create({ } }), + /** + Updates the content value of the tooltip with value of 'tooltipContent'. + + @method tooltipContentDidChange + */ + + tooltipContentDidChange: function() { + const tooltip = this.get('tooltip'); + + if (tooltip) { + tooltip.content(this.get('tooltipContent')); + } + }, + /** Opens / closes tooltip based on value of 'tooltipVisibility'. Only used when event is 'manual'. From 24f32d83b1f1dab5074f9989819b3bae899b1bc6 Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Fri, 11 Sep 2015 08:48:44 +1200 Subject: [PATCH 3/7] Changing var to const for consistency --- addon/mixins/components/tooltips.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon/mixins/components/tooltips.js b/addon/mixins/components/tooltips.js index e3e96155..ab80cac6 100644 --- a/addon/mixins/components/tooltips.js +++ b/addon/mixins/components/tooltips.js @@ -114,8 +114,8 @@ export default Ember.Mixin.create({ let content = this.get('tooltipContent'); let tooltip, tooltipOptions; - var keys = Object.keys(this); - var hasTooltipContentProperty = (Ember.$.inArray('tooltipContent', keys) !== -1); + const keys = Object.keys(this); + const hasTooltipContentProperty = (Ember.$.inArray('tooltipContent', keys) !== -1); if (componentWasPassed) { const componentContent = component.get('content'); From 4c740306664952b30440ac160d5700397e8d6acc Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Tue, 15 Sep 2015 22:42:01 -0400 Subject: [PATCH 4/7] Ember CLI environment upgraded and running Ember 2.0 --- .npmignore | 1 + .travis.yml | 1 - Brocfile.js | 16 ------------ README.md | 7 +++++ bower.json | 18 ++++++------- ember-cli-build.js | 17 ++++++++++++ package.json | 37 +++++++++++++++------------ tests/.jshintrc | 5 ++-- tests/dummy/app/initializers/views.js | 15 ----------- 9 files changed, 57 insertions(+), 60 deletions(-) delete mode 100644 Brocfile.js create mode 100644 ember-cli-build.js delete mode 100644 tests/dummy/app/initializers/views.js diff --git a/.npmignore b/.npmignore index 49996f5a..d522ca2b 100644 --- a/.npmignore +++ b/.npmignore @@ -10,5 +10,6 @@ dist/ .npmignore **/.gitkeep bower.json +ember-cli-build.js Brocfile.js testem.json diff --git a/.travis.yml b/.travis.yml index 968a0dd7..8197d316 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,6 @@ env: matrix: fast_finish: true allow_failures: - - env: EMBER_TRY_SCENARIO=ember-beta - env: EMBER_TRY_SCENARIO=ember-canary before_install: diff --git a/Brocfile.js b/Brocfile.js deleted file mode 100644 index 2a682c03..00000000 --- a/Brocfile.js +++ /dev/null @@ -1,16 +0,0 @@ -/* jshint node: true */ -/* global require, module */ - -var EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); - -/* - This Brocfile specifes the options for the dummy test app of this - addon, located in `/tests/dummy` - - This Brocfile does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's Brocfile -*/ - -var app = new EmberAddon(); - -module.exports = app.toTree(); diff --git a/README.md b/README.md index 927c3b1c..cffc96d9 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,13 @@ Powered by darsain/tooltip (d ember install ember-tooltips ``` +## Compatibility Table + +| Ember | Ember Tooltips | +|-------|----------------| +| 1.13 | 0.4.0 | +| 2.0 | 0.5.0 | + ## Usage Documentation for usage is below: diff --git a/bower.json b/bower.json index 4ca829e9..620e0bf3 100644 --- a/bower.json +++ b/bower.json @@ -1,16 +1,16 @@ { "name": "ember-tooltips", "dependencies": { - "ember": "1.13.2", - "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", + "ember": "2.0.2", + "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.5", "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", - "ember-data": "1.0.0-beta.18", - "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.4", - "ember-qunit": "0.3.3", + "ember-data": "2.0.0", + "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.7", + "ember-qunit": "0.4.10", "ember-qunit-notifications": "0.0.7", - "ember-resolver": "~0.1.15", - "jquery": "^1.11.1", - "loader.js": "ember-cli/loader.js#3.2.0", - "qunit": "~1.17.1" + "ember-resolver": "~0.1.21", + "jquery": "^1.11.3", + "loader.js": "ember-cli/loader.js#3.2.1", + "qunit": "~1.18.0" } } diff --git a/ember-cli-build.js b/ember-cli-build.js new file mode 100644 index 00000000..d37d64cd --- /dev/null +++ b/ember-cli-build.js @@ -0,0 +1,17 @@ +/* global require, module */ +var EmberApp = require('ember-cli/lib/broccoli/ember-addon'); + +module.exports = function(defaults) { + var app = new EmberApp(defaults, { + // Add options here + }); + + /* + This build file specifes the options for the dummy test app of this + addon, located in `/tests/dummy` + This build file does *not* influence how the addon or the app using it + behave. You most likely want to be modifying `./index.js` or app's build file + */ + + return app.toTree(); +}; diff --git a/package.json b/package.json index 48673e8a..f0515f7c 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,39 @@ { "name": "ember-tooltips", - "version": "0.4.0", - "description": "Renders and positions plain text tooltips and HTMLBars tooltips on any Ember view or component", + "version": "0.5.0", + "description": "The default blueprint for ember-cli addons.", "directories": { "doc": "doc", "test": "tests" }, "scripts": { - "start": "ember server", "build": "ember build", + "start": "ember server", "test": "ember try:testall" }, - "repository": "https://github.com/sir-dunxalot/ember-tooltips", + "repository": "", "engines": { "node": ">= 0.10.0" }, "author": "", "license": "MIT", "devDependencies": { - "broccoli-asset-rev": "^2.0.2", - "ember-cli": "0.2.7", - "ember-cli-app-version": "0.3.3", + "broccoli-asset-rev": "^2.1.2", + "ember-cli": "1.13.8", + "ember-cli-app-version": "0.5.0", "ember-cli-content-security-policy": "0.4.0", - "ember-cli-dependency-checker": "^1.0.0", - "ember-cli-ic-ajax": "0.1.1", - "ember-cli-inject-live-reload": "^1.3.0", - "ember-cli-qunit": "0.3.13", - "ember-cli-uglify": "^1.0.1", - "ember-data": "1.0.0-beta.18", - "ember-disable-prototype-extensions": "^1.0.0", + "ember-cli-dependency-checker": "^1.0.1", + "ember-cli-htmlbars-inline-precompile": "^0.2.0", + "ember-cli-ic-ajax": "0.2.1", + "ember-cli-inject-live-reload": "^1.3.1", + "ember-cli-qunit": "^1.0.0", + "ember-cli-release": "0.2.3", + "ember-cli-sri": "^1.0.3", + "ember-cli-uglify": "^1.2.0", + "ember-data": "2.0.0", "ember-disable-proxy-controllers": "^1.0.0", - "ember-export-application-global": "^1.0.2", + "ember-export-application-global": "^1.0.3", + "ember-disable-prototype-extensions": "^1.0.0", "ember-try": "0.0.6" }, "keywords": [ @@ -42,8 +45,8 @@ "htmlbars" ], "dependencies": { - "ember-cli-babel": "^5.0.0", - "ember-cli-htmlbars": "0.7.6" + "ember-cli-babel": "^5.1.3", + "ember-cli-htmlbars": "0.7.9" }, "ember-addon": { "configPath": "tests/dummy/config" diff --git a/tests/.jshintrc b/tests/.jshintrc index 0f7f5d14..5a640365 100644 --- a/tests/.jshintrc +++ b/tests/.jshintrc @@ -31,7 +31,7 @@ "node": false, "browser": false, "boss": true, - "curly": false, + "curly": true, "debug": false, "devel": false, "eqeqeq": true, @@ -52,5 +52,6 @@ "strict": false, "white": false, "eqnull": true, - "esnext": true + "esnext": true, + "unused": true } diff --git a/tests/dummy/app/initializers/views.js b/tests/dummy/app/initializers/views.js deleted file mode 100644 index e732ed8e..00000000 --- a/tests/dummy/app/initializers/views.js +++ /dev/null @@ -1,15 +0,0 @@ -import Ember from 'ember'; - -export function initialize(/* container, application */) { - - Ember.View.reopen({ - attributeBindings: ['data-test'], - 'data-test': null, - }); - -} - -export default { - name: 'views', - initialize: initialize -}; From 35e56c8c85206d2a5103377995a2ad5a3ba6cb82 Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Tue, 15 Sep 2015 22:54:45 -0400 Subject: [PATCH 5/7] JShint tests passing --- tests/helpers/async/assert-tooltip-properties.js | 1 - tests/helpers/start-app.js | 11 +++++------ tests/unit/initializers/ember-tooltips.js | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/tests/helpers/async/assert-tooltip-properties.js b/tests/helpers/async/assert-tooltip-properties.js index 17319408..4e6840c3 100644 --- a/tests/helpers/async/assert-tooltip-properties.js +++ b/tests/helpers/async/assert-tooltip-properties.js @@ -44,7 +44,6 @@ export default Ember.Test.registerAsyncHelper('assertTooltipProperties', const tooltip = Ember.$('.tooltip')[0]; const indexOfEffectClass = tooltip.className.indexOf(expectedEffectClass); const indexOfTypeClass = tooltip.className.indexOf(expectedTypeClass); - const style = tooltip.style; assert.ok(!!tooltip, 'The tooltip should be added to the DOM after triggering the show event on the target element'); diff --git a/tests/helpers/start-app.js b/tests/helpers/start-app.js index f73ebffe..daea1791 100644 --- a/tests/helpers/start-app.js +++ b/tests/helpers/start-app.js @@ -1,13 +1,12 @@ import Ember from 'ember'; import Application from '../../app'; -import Router from '../../router'; import config from '../../config/environment'; -import andThenAfterRender from './async/and-then-after-render'; -import assertTooltipProperties from './async/assert-tooltip-properties'; -import mouseOut from './async/mouse-out'; -import mouseOver from './async/mouse-over'; -import inspect from './sync/inspect'; +import './async/and-then-after-render'; +import './async/assert-tooltip-properties'; +import './async/mouse-out'; +import './async/mouse-over'; +import './sync/inspect'; export default function startApp(attrs) { var application; diff --git a/tests/unit/initializers/ember-tooltips.js b/tests/unit/initializers/ember-tooltips.js index 6565adaf..2bbc8e72 100644 --- a/tests/unit/initializers/ember-tooltips.js +++ b/tests/unit/initializers/ember-tooltips.js @@ -1,10 +1,10 @@ import Ember from 'ember'; -import { initialize } from '../../../initializers/ember-tooltips'; +// import { initialize } from '../../../initializers/ember-tooltips'; import { module, test } from 'qunit'; -let application, container, view; +let application, container; -module('Unit | Initializer | add tooltips to views', { +module('Unit | Initializer | add tooltips to components', { beforeEach: function() { Ember.run(function() { application = Ember.Application.create(); @@ -15,7 +15,7 @@ module('Unit | Initializer | add tooltips to views', { }); test('Reopening classes', function(assert) { - const classes = ['Component', 'View']; + const classes = ['Component']; assert.expect(classes.length); From 9c964280f4f71cc428ebb9c0cee99dcf817aacf6 Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Tue, 15 Sep 2015 23:54:39 -0400 Subject: [PATCH 6/7] Tidy up for release --- addon/mixins/components/tooltips.js | 28 +++++++++++++++++++--------- addon/utils/render-tooltip.js | 23 +++++++++++++++-------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/addon/mixins/components/tooltips.js b/addon/mixins/components/tooltips.js index ab80cac6..72c996fa 100644 --- a/addon/mixins/components/tooltips.js +++ b/addon/mixins/components/tooltips.js @@ -59,6 +59,8 @@ export default Ember.Mixin.create({ if (tooltip) { tooltip.effect(null); // Remove animation tooltip.detach(); + this.set('tooltip', null); + this.set('tooltipContent', null); } /* Remove observer, even if it was never added */ @@ -67,14 +69,14 @@ export default Ember.Mixin.create({ }), /** - Adds a tooltip to the current view using the values of the tooltip - properties on the view or, if a `{{tooltip-on-parent}}` component is - passed, the values set on the component. + Adds a tooltip to the current component using the values of the tooltip + properties on this component's helper or, if a `{{tooltip-on-parent}}` component is + passed, the values set on that component. In the latter case, the `{{tooltip-on-parent}}` block template will be used for the tooltip content. - ## Example 1 - Setting values on a view or component + ## Example 1 - Setting values on a component ```hbs {{#some-component tooltipContent='This will show' tooltipPlace='right'}} @@ -153,16 +155,24 @@ export default Ember.Mixin.create({ this.set('tooltip', tooltip); /* Bind observer if tooltipContent changes */ + this.addObserver('tooltipContent', this, this.tooltipContentDidChange); - /* Bind observer if manual-triggering mode */ + /* Bind observer if in manual-triggering mode */ + if (tooltipOptions.event === 'manual') { if (componentWasPassed) { - // Keep track of child tooltip component + + /* Keep track of child tooltip component */ + this.set('tooltipChildComponent', component); - // Turn 'tooltipVisibility' into a computed property, reading from child tooltip component's 'visibility' option + + /* Turn 'tooltipVisibility' into a computed property, reading + from child tooltip component's 'visibility' option */ + Ember.defineProperty(this, 'tooltipVisibility', Ember.computed.reads('tooltipChildComponent.visibility')); } + this.addObserver('tooltipVisibility', this, this.tooltipVisibilityDidChange); this.tooltipVisibilityDidChange(); } @@ -183,7 +193,7 @@ export default Ember.Mixin.create({ }, /** - Opens / closes tooltip based on value of 'tooltipVisibility'. + Opens pr closes tooltip based on value of 'tooltipVisibility'. Only used when event is 'manual'. @method tooltipVisibilityDidChange @@ -200,7 +210,7 @@ export default Ember.Mixin.create({ }, /** - Call this method on any view to attach tooltips to all elements in its + Call this method on any component to attach tooltips to all elements in its template that have a `.tooltip` class. Tooltip options are set using data attributes. diff --git a/addon/utils/render-tooltip.js b/addon/utils/render-tooltip.js index 63910dc8..5e1b2503 100644 --- a/addon/utils/render-tooltip.js +++ b/addon/utils/render-tooltip.js @@ -4,12 +4,13 @@ A utility to attach a tooltip to a DOM element. @submodule utils @method renderTooltip @param {Element} domElement The DOM element, not jQuery element, to attach the tooltip to -@param {Object} options The tooltip options to render the tooltip with. For supported options, see the tooltipSupportedProperties array in the views initializer +@param {Object} options The tooltip options to render the tooltip with */ import Ember from 'ember'; const Tooltip = window.Tooltip; +const { $, run } = Ember; export default function renderTooltip(domElement = {}, options = {}) { const typeClass = options.typeClass; @@ -29,8 +30,9 @@ export default function renderTooltip(domElement = {}, options = {}) { if (options.duration && typeof options.duration === 'string') { options.duration = parseInt(options.duration, 10); + /* Remove invalid parseInt results */ + if (isNaN(options.duration) || !isFinite(options.duration)) { - // Remove invalid parseInt results options.duration = null; } } @@ -40,20 +42,25 @@ export default function renderTooltip(domElement = {}, options = {}) { tooltip.attach(domElement); if (options.event !== 'manual') { - Ember.$(domElement)[options.event](function() { + $(domElement)[options.event](function() { const willShow = tooltip.hidden; tooltip.toggle(); - // Clean previously queued removal (if present) - Ember.run.cancel(tooltip._hideTimer); + /* Clean previously queued removal (if present) */ + + run.cancel(tooltip._hideTimer); if (willShow && options.duration) { - // Hide tooltip after specified duration - const hideTimer = Ember.run.later(function() { + + /* Hide tooltip after specified duration */ + + const hideTimer = run.later(function() { tooltip.hide(); }, options.duration); - // Save timer id for cancelling + + /* Save timer ID for cancelling */ + tooltip._hideTimer = hideTimer; } }); From 57af56dfbb60adb95436c27a91f87197cb6971ef Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Wed, 16 Sep 2015 00:05:36 -0400 Subject: [PATCH 7/7] Removed typos --- .npmignore | 1 - addon/mixins/components/tooltips.js | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.npmignore b/.npmignore index d522ca2b..c14bfcc9 100644 --- a/.npmignore +++ b/.npmignore @@ -11,5 +11,4 @@ dist/ **/.gitkeep bower.json ember-cli-build.js -Brocfile.js testem.json diff --git a/addon/mixins/components/tooltips.js b/addon/mixins/components/tooltips.js index 72c996fa..a06ba49b 100644 --- a/addon/mixins/components/tooltips.js +++ b/addon/mixins/components/tooltips.js @@ -59,11 +59,10 @@ export default Ember.Mixin.create({ if (tooltip) { tooltip.effect(null); // Remove animation tooltip.detach(); - this.set('tooltip', null); - this.set('tooltipContent', null); } /* Remove observer, even if it was never added */ + this.removeObserver('tooltipVisibility', this, this.tooltipVisibilityDidChange); this.removeObserver('tooltipContent', this, this.tooltipContentDidChange); }), @@ -193,7 +192,7 @@ export default Ember.Mixin.create({ }, /** - Opens pr closes tooltip based on value of 'tooltipVisibility'. + Opens or closes tooltip based on value of 'tooltipVisibility'. Only used when event is 'manual'. @method tooltipVisibilityDidChange