diff --git a/.jscsrc b/.jscsrc index bc452cf3f..8cdcf3df1 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,4 +1,5 @@ { "preset": "ember-suave", - "requireNumericLiterals": false + "requireNumericLiterals": false, + "requireCommentsToIncludeAccess": false } diff --git a/CHANGELOG.md b/CHANGELOG.md index c7ca6b686..e91170fa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ Contributions and pull requests are always welcome. Contributors may often be fo - Actions maybe be specified by a string action name (`onChange="updateValue"`) or an action closure (`onChange=(action (mut "myValue"))`). If you need to specify a target or additional parameter, you must use an action closure. - Many attributes have been renamed for clarity and consistency. See the specific changes below. - `paper-icon`'s `size` attribute now takes a size in pixels, and `lg` or `sm` values are no longer supported. +- renamed the `paper-radio-group` `paper-radio` to just `radio` -- usage would now be `group.radio` as opposed to `group.paper-radio`. + +#### 1.0.0-alpha.3 #### 1.0.0-alpha.2 @@ -29,6 +32,7 @@ Contributions and pull requests are always welcome. Contributors may often be fo - `paper-sidenav` now can use a `position` param that positions the sidenav `left` (default) or `right` - `paper-backdrop` action `onTap` changed to `onClick` - [#408](https://github.com/miguelcobain/ember-paper/pull/408) added paper-form component. `paper-input`'s `onInvalid` action renamed to `onValidityChange` +- [#430](https://github.com/miguelcobain/ember-paper/pull/430) added fastboot support. Removed errors associated with `document` when running `ember fastboot` #### 1.0.0-alpha.1 diff --git a/addon/components/base-focusable.js b/addon/components/base-focusable.js index dcd0a9b73..b2e592691 100644 --- a/addon/components/base-focusable.js +++ b/addon/components/base-focusable.js @@ -1,7 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import EventsMixin from '../mixins/events-mixin'; + const { Component, computed } = Ember; +/** + * @class BaseFocusable + * @extends Ember.Component + * @uses EventsMixin + */ export default Component.extend(EventsMixin, { disabled: false, diff --git a/addon/components/paper-autocomplete-highlight.js b/addon/components/paper-autocomplete-highlight.js index 5870443b4..a0dbba97b 100644 --- a/addon/components/paper-autocomplete-highlight.js +++ b/addon/components/paper-autocomplete-highlight.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperAutocompleteHighlight + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'span', flags: '', diff --git a/addon/components/paper-autocomplete-item.js b/addon/components/paper-autocomplete-item.js index 4443c7ec8..86c7af792 100644 --- a/addon/components/paper-autocomplete-item.js +++ b/addon/components/paper-autocomplete-item.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperAutocompleteItem + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'li', attributeBindings: ['tabindex', 'role'], classNameBindings: ['isSelected:selected'], diff --git a/addon/components/paper-autocomplete-list.js b/addon/components/paper-autocomplete-list.js index 964279bbf..69a0c3bbd 100644 --- a/addon/components/paper-autocomplete-list.js +++ b/addon/components/paper-autocomplete-list.js @@ -1,11 +1,19 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; +const { Component } = Ember; // TODO Move to constants? const ITEM_HEIGHT = 41; const MAX_HEIGHT = 5.5 * ITEM_HEIGHT; const MENU_PADDING = 8; -export default Ember.Component.extend({ +/** + * @class PaperAutocompleteList + * @extends Ember.Component + */ +export default Component.extend({ util: Ember.inject.service(), tagName: 'ul', diff --git a/addon/components/paper-autocomplete.js b/addon/components/paper-autocomplete.js index 652e05409..e2ff0f0f1 100644 --- a/addon/components/paper-autocomplete.js +++ b/addon/components/paper-autocomplete.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import { promiseArray } from 'ember-paper/utils/promise-proxies'; @@ -19,12 +22,8 @@ function isString(item) { return typeof item === 'string' || item instanceof String; } -/* - * @name paper-autocomplete - * - * @description - * Provides material design autocomplete. - * +/** + * Provides material design autocomplete. * * ## Dependencies * - paper-autocomplete-item @@ -32,6 +31,9 @@ function isString(item) { * - paper-input * - paper-button * - input + * + * @class PaperAutoComplete + * @extends Ember.Component */ export default Component.extend({ util: inject.service(), diff --git a/addon/components/paper-backdrop.js b/addon/components/paper-backdrop.js index f60ee96ab..fddfe1af7 100644 --- a/addon/components/paper-backdrop.js +++ b/addon/components/paper-backdrop.js @@ -1,7 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import TransitionMixin from 'ember-css-transitions/mixins/transition-mixin'; + const { Component, computed, String: { htmlSafe } } = Ember; +/** + * @class PaperBackdrop + * @extends Ember.Component + * @uses TransitionMixin + */ export default Component.extend(TransitionMixin, { tagName: 'md-backdrop', diff --git a/addon/components/paper-button.js b/addon/components/paper-button.js index 3468b7f4e..ef3e6b08e 100644 --- a/addon/components/paper-button.js +++ b/addon/components/paper-button.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; import RippleMixin from '../mixins/ripple-mixin'; @@ -6,6 +9,13 @@ import ColorMixin from 'ember-paper/mixins/color-mixin'; const { computed } = Ember; +/** + * @class PaperButton + * @extends BaseFocusable + * @uses ColorMixin + * @uses ProxiableMixin + * @uses RippleMixin + */ export default BaseFocusable.extend(RippleMixin, ProxiableMixin, ColorMixin, { tagName: 'button', classNames: ['paper-button', 'md-default-theme', 'md-button'], diff --git a/addon/components/paper-card-actions.js b/addon/components/paper-card-actions.js index 00570fe60..bbf471218 100644 --- a/addon/components/paper-card-actions.js +++ b/addon/components/paper-card-actions.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardActions + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-actions', classNameBindings: ['defaultClasses'], diff --git a/addon/components/paper-card-avatar.js b/addon/components/paper-card-avatar.js index 741a2864f..68ec00bb0 100644 --- a/addon/components/paper-card-avatar.js +++ b/addon/components/paper-card-avatar.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardAvatar + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-avatar' }); diff --git a/addon/components/paper-card-content.js b/addon/components/paper-card-content.js index 47cae7f91..a7ff25f0f 100644 --- a/addon/components/paper-card-content.js +++ b/addon/components/paper-card-content.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardContent + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-content' }); diff --git a/addon/components/paper-card-header-headline.js b/addon/components/paper-card-header-headline.js index c02e71682..490715121 100644 --- a/addon/components/paper-card-header-headline.js +++ b/addon/components/paper-card-header-headline.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardHeaderHeadline + * @extends Ember.Component + */ export default Component.extend({ tagName: 'span', classNames: ['md-headline'] diff --git a/addon/components/paper-card-header-subhead.js b/addon/components/paper-card-header-subhead.js index 1dbe7299f..700c6cb76 100644 --- a/addon/components/paper-card-header-subhead.js +++ b/addon/components/paper-card-header-subhead.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardHeaderSubhead + * @extends Ember.Component + */ export default Component.extend({ tagName: 'span', classNames: ['md-subhead'] diff --git a/addon/components/paper-card-header-text.js b/addon/components/paper-card-header-text.js index 69b14fbcb..bfa35b0c8 100644 --- a/addon/components/paper-card-header-text.js +++ b/addon/components/paper-card-header-text.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardheaderText + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-header-text' }); diff --git a/addon/components/paper-card-header-title.js b/addon/components/paper-card-header-title.js index 8a2dbf3c0..00ebac19d 100644 --- a/addon/components/paper-card-header-title.js +++ b/addon/components/paper-card-header-title.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardHeaderTitle + * @extends Ember.Component + */ export default Component.extend({ tagName: 'span', classNames: ['md-title'] diff --git a/addon/components/paper-card-header.js b/addon/components/paper-card-header.js index 0e7669609..0db2b53b3 100644 --- a/addon/components/paper-card-header.js +++ b/addon/components/paper-card-header.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardHeader + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-header' }); diff --git a/addon/components/paper-card-icon-actions.js b/addon/components/paper-card-icon-actions.js index a7e4bc19c..4b500f47d 100644 --- a/addon/components/paper-card-icon-actions.js +++ b/addon/components/paper-card-icon-actions.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardIconActions + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-icon-actions' }); diff --git a/addon/components/paper-card-image.js b/addon/components/paper-card-image.js index cd639815c..3c0bd1aef 100644 --- a/addon/components/paper-card-image.js +++ b/addon/components/paper-card-image.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardImage + * @extends Ember.Component + */ export default Component.extend({ tagName: 'img', classNames: ['md-card-image'], diff --git a/addon/components/paper-card-media.js b/addon/components/paper-card-media.js index fa78204cd..10d54beca 100644 --- a/addon/components/paper-card-media.js +++ b/addon/components/paper-card-media.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardMedia + * @extends Ember.Component + */ export default Component.extend({ tagName: '', size: 'md' diff --git a/addon/components/paper-card-title-media.js b/addon/components/paper-card-title-media.js index c49db18eb..0ad02c6f6 100644 --- a/addon/components/paper-card-title-media.js +++ b/addon/components/paper-card-title-media.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardTitleMedia + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-title-media', size: 'md' diff --git a/addon/components/paper-card-title-text.js b/addon/components/paper-card-title-text.js index d4df2acb6..01d89374f 100644 --- a/addon/components/paper-card-title-text.js +++ b/addon/components/paper-card-title-text.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardTitleText + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-title-text' }); diff --git a/addon/components/paper-card-title.js b/addon/components/paper-card-title.js index 3dc18ff0e..45d85ec6e 100644 --- a/addon/components/paper-card-title.js +++ b/addon/components/paper-card-title.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCardTitle + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card-title' }); diff --git a/addon/components/paper-card.js b/addon/components/paper-card.js index 7f9ca1140..2adf6e626 100644 --- a/addon/components/paper-card.js +++ b/addon/components/paper-card.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperCard + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-card' }); diff --git a/addon/components/paper-checkbox.js b/addon/components/paper-checkbox.js index 0db8a93f1..95aab317c 100644 --- a/addon/components/paper-checkbox.js +++ b/addon/components/paper-checkbox.js @@ -1,10 +1,21 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; import RippleMixin from '../mixins/ripple-mixin'; import ProxiableMixin from 'ember-paper/mixins/proxiable-mixin'; import ColorMixin from 'ember-paper/mixins/color-mixin'; + const { inject, assert } = Ember; +/** + * @class PaperCheckbox + * @extends BaseFocusable + * @uses ColorMixin + * @uses ProxiableMixin + * @uses RippleMixin + */ export default BaseFocusable.extend(RippleMixin, ProxiableMixin, ColorMixin, { tagName: 'md-checkbox', classNames: ['md-checkbox', 'md-default-theme'], diff --git a/addon/components/paper-content.js b/addon/components/paper-content.js index 33c1a1caf..6c26ca3c8 100644 --- a/addon/components/paper-content.js +++ b/addon/components/paper-content.js @@ -1,7 +1,17 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import FlexMixin from '../mixins/flex-mixin'; -export default Ember.Component.extend(FlexMixin, { +const { Component } = Ember; + +/** + * @class PaperContent + * @extends Ember.Component + * @uses FlexMixin + */ +export default Component.extend(FlexMixin, { tagName: 'md-content', classNames: ['md-default-theme'], attributeBindings: ['layout-padding', 'scroll-y:md-scroll-y', 'tabindex'], diff --git a/addon/components/paper-dialog-actions.js b/addon/components/paper-dialog-actions.js index 915939ce1..3285e33e0 100644 --- a/addon/components/paper-dialog-actions.js +++ b/addon/components/paper-dialog-actions.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component } = Ember; +/** + * @class PaperDialogActions + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-dialog-actions' }); diff --git a/addon/components/paper-dialog-container.js b/addon/components/paper-dialog-container.js index cd6e4c661..921b4088b 100644 --- a/addon/components/paper-dialog-container.js +++ b/addon/components/paper-dialog-container.js @@ -1,10 +1,18 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperDialogContainer + * @extends Ember.Component + */ +export default Component.extend({ classNames: ['md-dialog-container'], click() { this.sendAction('outsideClicked'); } - }); diff --git a/addon/components/paper-dialog-content.js b/addon/components/paper-dialog-content.js index ea6f9845e..9883b8349 100644 --- a/addon/components/paper-dialog-content.js +++ b/addon/components/paper-dialog-content.js @@ -1,8 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperDialogInner from './paper-dialog-inner'; const { Component, computed, run } = Ember; +/** + * @class PaperDialogComponent + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-dialog-content', classNames: ['md-dialog-content'], diff --git a/addon/components/paper-dialog-inner.js b/addon/components/paper-dialog-inner.js index 2208c364d..575b87043 100644 --- a/addon/components/paper-dialog-inner.js +++ b/addon/components/paper-dialog-inner.js @@ -1,8 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import Translate3dMixin from '../mixins/translate3d-mixin'; const { Component } = Ember; +/** + * @class PaperDialogInner + * @extends Ember.Component + * @uses Translate3dMixin + */ export default Component.extend(Translate3dMixin, { tagName: 'md-dialog', classNames: ['md-default-theme'], diff --git a/addon/components/paper-dialog.js b/addon/components/paper-dialog.js index 7d22ce570..5ab2bf31c 100644 --- a/addon/components/paper-dialog.js +++ b/addon/components/paper-dialog.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { $, Component, computed, inject } = Ember; +/** + * @class PaperDialog + * @extends Ember.Component + */ export default Component.extend({ tagName: '', diff --git a/addon/components/paper-divider.js b/addon/components/paper-divider.js index c68cdbbde..430226b04 100644 --- a/addon/components/paper-divider.js +++ b/addon/components/paper-divider.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component } = Ember; +/** + * @class PaperDivider + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-divider', attributeBindings: ['insetAttr:md-inset'], diff --git a/addon/components/paper-form.js b/addon/components/paper-form.js index 5d5b5daa6..53c14968d 100644 --- a/addon/components/paper-form.js +++ b/addon/components/paper-form.js @@ -1,8 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ParentMixin from 'ember-paper/mixins/parent-mixin'; const { Component, computed } = Ember; +/** + * @class PaperForm + * @extends Ember.Component + * @uses ParentMixin + */ export default Component.extend(ParentMixin, { tagName: '', isValid: computed.not('isInvalid'), @@ -17,8 +25,12 @@ export default Component.extend(ParentMixin, { } }, onSubmit() { - this.sendAction('onSubmit'); - this.get('childComponents').setEach('isTouched', false); + if (this.get('isInvalid')) { + this.get('childComponents').setEach('isTouched', true); + } else { + this.sendAction('onSubmit'); + this.get('childComponents').setEach('isTouched', false); + } } } }); diff --git a/addon/components/paper-grid-list.js b/addon/components/paper-grid-list.js index f8263c812..7c8a1aa1a 100644 --- a/addon/components/paper-grid-list.js +++ b/addon/components/paper-grid-list.js @@ -1,6 +1,11 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import gridLayout from '../utils/grid-layout'; +const { Component } = Ember; + const UNIT = (units) => { return `${ units.share}% - (${ units.gutter } * ${ units.gutterShare})`; }; @@ -17,7 +22,11 @@ const MEDIA = (mediaName) => { return ((mediaName.charAt(0) !== '(') ? (`(${mediaName})`) : mediaName); }; -export default Ember.Component.extend({ +/** + * @class PaperGridList + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-grid-list', constants: Ember.inject.service(), diff --git a/addon/components/paper-grid-tile-footer.js b/addon/components/paper-grid-tile-footer.js index 8b52476d8..1b4539078 100644 --- a/addon/components/paper-grid-tile-footer.js +++ b/addon/components/paper-grid-tile-footer.js @@ -1,5 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperGridTileFooter + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-grid-tile-footer' }); diff --git a/addon/components/paper-grid-tile.js b/addon/components/paper-grid-tile.js index 28dfb9a2b..94620790d 100644 --- a/addon/components/paper-grid-tile.js +++ b/addon/components/paper-grid-tile.js @@ -1,7 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperGridList from './paper-grid-list'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperGridTile + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-grid-tile', constants: Ember.inject.service(), diff --git a/addon/components/paper-icon.js b/addon/components/paper-icon.js index 8a138091b..3125a0a7c 100644 --- a/addon/components/paper-icon.js +++ b/addon/components/paper-icon.js @@ -1,8 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ColorMixin from 'ember-paper/mixins/color-mixin'; const { Component, computed, String: Str } = Ember; +/** + * @class PaperIcon + * @extends Ember.Component + * @uses ColorMixin + */ let PaperIconComponent = Component.extend(ColorMixin, { tagName: 'md-icon', classNames: ['paper-icon', 'md-font', 'material-icons', 'md-default-theme'], diff --git a/addon/components/paper-input.js b/addon/components/paper-input.js index a5a4e456f..2e16b1305 100644 --- a/addon/components/paper-input.js +++ b/addon/components/paper-input.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; import ColorMixin from 'ember-paper/mixins/color-mixin'; @@ -12,6 +15,13 @@ import maxlengthValidator from 'ember-paper/validators/maxlength'; const { $, computed, isArray, isEmpty, Logger, A, run, assert, get } = Ember; +/** + * @class PaperInput + * @extends BaseFocusable + * @uses ChildMixin + * @uses ColorMixin + * @uses FlexMixin + */ export default BaseFocusable.extend(ColorMixin, FlexMixin, ChildMixin, { tagName: 'md-input-container', classNames: ['md-default-theme'], @@ -210,14 +220,18 @@ export default BaseFocusable.extend(ColorMixin, FlexMixin, ChildMixin, { }, setValue(value) { - this.$('input, textarea').val(value); + if (this.$('input, textarea').val() !== value) { + this.$('input, textarea').val(value); + } }, actions: { handleInput(e) { this.sendAction('onChange', e.target.value); // setValue below ensures that the input value is the same as this.value - this.setValue(this.get('value')); + run.next(() => { + this.setValue(this.get('value')); + }); this.growTextarea(); let inputElement = this.$('input').get(0); this.set('isNativeInvalid', inputElement && inputElement.validity && inputElement.validity.badInput); diff --git a/addon/components/paper-item.js b/addon/components/paper-item.js index 0b321b457..d2ddbf22f 100644 --- a/addon/components/paper-item.js +++ b/addon/components/paper-item.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import RippleMixin from '../mixins/ripple-mixin'; import ProxyMixin from 'ember-paper/mixins/proxy-mixin'; @@ -11,6 +14,12 @@ const { Component } = Ember; +/** + * @class PaperItem + * @extends Ember.Component + * @uses ProxyMixin + * @uses RippleMixin + */ export default Component.extend(RippleMixin, ProxyMixin, { tagName: 'md-list-item', diff --git a/addon/components/paper-list.js b/addon/components/paper-list.js index 09c49baa1..0e0c53f51 100644 --- a/addon/components/paper-list.js +++ b/addon/components/paper-list.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperList + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-list', classNames: ['paper-list', 'md-default-theme'] }); diff --git a/addon/components/paper-menu-abstract.js b/addon/components/paper-menu-abstract.js index 926126d3a..a0969cc23 100644 --- a/addon/components/paper-menu-abstract.js +++ b/addon/components/paper-menu-abstract.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component, inject, assert } = Ember; +/** + * @class PaperMenuAbstract + * @extends Ember.Component + */ export default Component.extend({ constants: inject.service(), diff --git a/addon/components/paper-menu-container-abstract.js b/addon/components/paper-menu-container-abstract.js index 6214f2558..489ae2693 100644 --- a/addon/components/paper-menu-container-abstract.js +++ b/addon/components/paper-menu-container-abstract.js @@ -1,12 +1,19 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; -/* - * The paper-menu-container-abstract is responsible for animation and positioning the menu / select / any other - * menu based component. +const { Component } = Ember; + +/** + * The paper-menu-container-abstract is responsible for animation and + * positioning the menu or select or any other menu based component. * + * @class PaperMenuContainerAbstract + * @extends Ember.Component */ -export default Ember.Component.extend({ +export default Component.extend({ transitionEvents: Ember.inject.service(), constants: Ember.inject.service(), diff --git a/addon/components/paper-menu-container.js b/addon/components/paper-menu-container.js index 7097f924f..a34754b6e 100644 --- a/addon/components/paper-menu-container.js +++ b/addon/components/paper-menu-container.js @@ -1,5 +1,12 @@ +/** + * @module ember-paper + */ import PaperMenuContainerAbstract from './paper-menu-container-abstract'; +/** + * @class PaperMenuContainer + * @extends PaperMenuContainerAbstract + */ export default PaperMenuContainerAbstract.extend({ classNames: ['md-whiteframe-z2','md-open-menu-container'], interaction: true diff --git a/addon/components/paper-menu-content-pane.js b/addon/components/paper-menu-content-pane.js index 1a7c84bf7..f27c8311d 100644 --- a/addon/components/paper-menu-content-pane.js +++ b/addon/components/paper-menu-content-pane.js @@ -1,8 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; const { $, Component, inject: { service }, run: { later } } = Ember; +/** + * @class PaperMenuContentPane + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-menu-content', diff --git a/addon/components/paper-menu-content.js b/addon/components/paper-menu-content.js index 2bf6a813e..65165d2e3 100644 --- a/addon/components/paper-menu-content.js +++ b/addon/components/paper-menu-content.js @@ -1,3 +1,10 @@ +/** + * @module ember-paper + */ import PaperMenuContainer from './paper-menu-container'; +/** + * @class PaperMenuContent + * @extends PaperMenuContainer + */ export default PaperMenuContainer; diff --git a/addon/components/paper-menu-item.js b/addon/components/paper-menu-item.js index 04fae6da1..297cc87e0 100644 --- a/addon/components/paper-menu-item.js +++ b/addon/components/paper-menu-item.js @@ -1,8 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; const { Component } = Ember; +/** + * @class PaperMenuItem + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-menu-item', diff --git a/addon/components/paper-menu.js b/addon/components/paper-menu.js index 5f30117a4..6173ca0b2 100644 --- a/addon/components/paper-menu.js +++ b/addon/components/paper-menu.js @@ -1,8 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; let MENU_EDGE_MARGIN = 8; +/** + * @class PaperMenu + * @extends Ember.Component + */ export default PaperMenuAbstract.extend({ tagName: 'md-menu', diff --git a/addon/components/paper-optgroup.js b/addon/components/paper-optgroup.js index 8ce09a2f4..b3ced084e 100644 --- a/addon/components/paper-optgroup.js +++ b/addon/components/paper-optgroup.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperOptgroup + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-optgroup', attributeBindings: ['label'] }); diff --git a/addon/components/paper-option.js b/addon/components/paper-option.js index ec294d353..08b6cb8bb 100644 --- a/addon/components/paper-option.js +++ b/addon/components/paper-option.js @@ -1,9 +1,17 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; import BaseFocusable from './base-focusable'; import RippleMixin from '../mixins/ripple-mixin'; +/** + * @class PaperOption + * @extends BaseFocusable + * @uses RippleMixin + */ export default BaseFocusable.extend(RippleMixin, { tagName: 'md-option', diff --git a/addon/components/paper-progress-circular.js b/addon/components/paper-progress-circular.js index 84a0e674f..ab8834806 100644 --- a/addon/components/paper-progress-circular.js +++ b/addon/components/paper-progress-circular.js @@ -1,5 +1,9 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ColorMixin from 'ember-paper/mixins/color-mixin'; + const { Component, computed, isPresent, inject } = Ember; const DEFAULT_PROGRESS_SIZE = 100; @@ -8,6 +12,11 @@ const DEFAULT_SCALING = 0.5; const MODE_DETERMINATE = 'determinate'; const MODE_INDETERMINATE = 'indeterminate'; +/** + * @class PaperProgressCircular + * @extends Ember.Component + * @uses ColorMixin + */ export default Component.extend(ColorMixin, { tagName: 'md-progress-circular', diff --git a/addon/components/paper-progress-linear.js b/addon/components/paper-progress-linear.js index 9b14cac45..5f3151dc8 100644 --- a/addon/components/paper-progress-linear.js +++ b/addon/components/paper-progress-linear.js @@ -1,5 +1,9 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ColorMixin from 'ember-paper/mixins/color-mixin'; + const { inject, computed, Component, isPresent } = Ember; function makeTransform(value) { @@ -13,6 +17,11 @@ const MODE_INDETERMINATE = 'indeterminate'; const MODE_BUFFER = 'buffer'; const MODE_QUERY = 'query'; +/** + * @class PaperProgressLinear + * @extends Ember.Component + * @uses ColorMixin + */ export default Component.extend(ColorMixin, { tagName: 'md-progress-linear', diff --git a/addon/components/paper-radio-group.js b/addon/components/paper-radio-group.js index 836e2cc4b..8785e99df 100644 --- a/addon/components/paper-radio-group.js +++ b/addon/components/paper-radio-group.js @@ -1,7 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; + const { A, computed, inject, assert } = Ember; +/** + * @class PaperRadioGroup + * @extends BaseFocusable + */ export default BaseFocusable.extend({ tagName: 'md-radio-group', tabindex: 0, diff --git a/addon/components/paper-radio.js b/addon/components/paper-radio.js index 6385a1238..3404cc89a 100644 --- a/addon/components/paper-radio.js +++ b/addon/components/paper-radio.js @@ -1,9 +1,19 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; import RippleMixin from '../mixins/ripple-mixin'; import ColorMixin from 'ember-paper/mixins/color-mixin'; + const { computed, assert } = Ember; +/** + * @class PaperRadio + * @extends BaseFocusable + * @uses ColorMixin + * @uses RippleMixin + */ export default BaseFocusable.extend(RippleMixin, ColorMixin, { tagName: 'md-radio-button', classNames: ['md-default-theme'], diff --git a/addon/components/paper-select-container.js b/addon/components/paper-select-container.js index 7e518524d..c8131c6e2 100644 --- a/addon/components/paper-select-container.js +++ b/addon/components/paper-select-container.js @@ -1,5 +1,12 @@ +/** + * @module ember-paper + */ import PaperMenuContainerAbstract from './paper-menu-container-abstract'; +/** + * @class PaperSelectContainer + * @extends PaperMenuContainerAbstract + */ export default PaperMenuContainerAbstract.extend({ classNames: ['md-select-menu-container'], interaction: true diff --git a/addon/components/paper-select-core.js b/addon/components/paper-select-core.js index 64d2861e0..eaa5a579a 100644 --- a/addon/components/paper-select-core.js +++ b/addon/components/paper-select-core.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; @@ -16,6 +19,10 @@ function getOffsetRect(node) { } : { left: 0, top: 0, width: 0, height: 0 }; } +/** + * @class PaperSelectCore + * @extends PaperMenuAbstract + */ export default PaperMenuAbstract.extend({ tagName: 'md-select', placeholder: null, diff --git a/addon/components/paper-select-header.js b/addon/components/paper-select-header.js index 6fd49e849..1ada8e439 100644 --- a/addon/components/paper-select-header.js +++ b/addon/components/paper-select-header.js @@ -1,7 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Component } = Ember; +/** + * @class PaperSelectHeader + * @extends Ember.Component + */ export default Component.extend({ tagName: 'md-select-header' }); diff --git a/addon/components/paper-select-menu.js b/addon/components/paper-select-menu.js index da32693b6..ee22148af 100644 --- a/addon/components/paper-select-menu.js +++ b/addon/components/paper-select-menu.js @@ -1,11 +1,20 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperMenuAbstract from './paper-menu-abstract'; +const { Component } = Ember; + let searchStr = ''; let clearSearchTimeout, optNodes, optText; const CLEAR_SEARCH_AFTER = 300; -export default Ember.Component.extend({ +/** + * @class PaperSelectMenu + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-select-menu', classNames: ['md-default-theme'], diff --git a/addon/components/paper-select-value.js b/addon/components/paper-select-value.js index d13f7c813..1a5da2f84 100644 --- a/addon/components/paper-select-value.js +++ b/addon/components/paper-select-value.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperSelectValue + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'md-select-value', classNames: ['md-select-value'], classNameBindings: ['isPlaceholder:md-select-placeholder'], diff --git a/addon/components/paper-select.js b/addon/components/paper-select.js index 206d81d10..6dde9a161 100644 --- a/addon/components/paper-select.js +++ b/addon/components/paper-select.js @@ -1,8 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import PaperInput from './paper-input'; -let { computed } = Ember; +const { computed } = Ember; +/** + * @class PaperSelect + * @extends PaperInput + */ export default PaperInput.extend({ label: computed.alias('placeholder') }); diff --git a/addon/components/paper-sidenav-container.js b/addon/components/paper-sidenav-container.js index e3160a584..cee02a7db 100644 --- a/addon/components/paper-sidenav-container.js +++ b/addon/components/paper-sidenav-container.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component } = Ember; +/** + * @class PaperSidenavContainer + * @extends Ember.Component + */ export default Component.extend({ classNames: ['flex', 'layout-row'], attributeBindings: ['style'], diff --git a/addon/components/paper-sidenav-inner.js b/addon/components/paper-sidenav-inner.js index fa1ffa065..ca2774354 100644 --- a/addon/components/paper-sidenav-inner.js +++ b/addon/components/paper-sidenav-inner.js @@ -1,8 +1,17 @@ +/** + * @module ember-paper + */ +/* globals FastBoot */ import Ember from 'ember'; import TransitionMixin from 'ember-css-transitions/mixins/transition-mixin'; const { Component, inject, computed, $, run } = Ember; +/** + * @class PaperSidenavInner + * @extends Ember.Component + * @uses TransitionMixin + */ export default Component.extend(TransitionMixin, { tagName: 'md-sidenav', attributeBindings: ['tabindex'], @@ -26,7 +35,9 @@ export default Component.extend(TransitionMixin, { init() { // need to updateLockedOpen() first because otherwise the transition classes // would be applied due to transition mixin's `init` - this.updateLockedOpen(); + if (typeof FastBoot === 'undefined') { + this.updateLockedOpen(); + } this._super(...arguments); this.get('paperSidenav').register(this.get('name'), this); }, @@ -34,6 +45,7 @@ export default Component.extend(TransitionMixin, { didInsertElement() { this._super(...arguments); $(window).on(`resize.${this.elementId}`, run.bind(this, 'updateLockedOpen')); + this.updateLockedOpen(); }, willDestroyElement() { diff --git a/addon/components/paper-sidenav-toggle.js b/addon/components/paper-sidenav-toggle.js index 587e32f9a..7cda0ef21 100644 --- a/addon/components/paper-sidenav-toggle.js +++ b/addon/components/paper-sidenav-toggle.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component, inject } = Ember; +/** + * @class PaperSidenavToggle + * @extends Ember.Component + */ export default Component.extend({ tagName: '', diff --git a/addon/components/paper-sidenav.js b/addon/components/paper-sidenav.js index d53b3c36d..e48f7b1c7 100644 --- a/addon/components/paper-sidenav.js +++ b/addon/components/paper-sidenav.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component, computed } = Ember; +/** + * @class + * @extends Ember.Component + */ export default Component.extend({ tagName: '', diff --git a/addon/components/paper-slider.js b/addon/components/paper-slider.js index 94382a9e5..dbbbfe21e 100644 --- a/addon/components/paper-slider.js +++ b/addon/components/paper-slider.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import EventsMixin from 'ember-paper/mixins/events-mixin'; import BaseFocusable from './base-focusable'; @@ -5,6 +8,13 @@ import BaseFocusable from './base-focusable'; import ColorMixin from 'ember-paper/mixins/color-mixin'; import FlexMixin from 'ember-paper/mixins/flex-mixin'; +/** + * @class PaperSlider + * @extends BaseFocusable + * @uses ColorMixin + * @uses EventsMixin + * @uses FlexMixin + */ export default BaseFocusable.extend(EventsMixin, FlexMixin, ColorMixin, { tagName: 'md-slider', diff --git a/addon/components/paper-subheader.js b/addon/components/paper-subheader.js index 54e7223dc..65bf922da 100644 --- a/addon/components/paper-subheader.js +++ b/addon/components/paper-subheader.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Component.extend({ +const { Component } = Ember; + +/** + * @class PaperSubheader + * @extends Ember.Component + */ +export default Component.extend({ tagName: 'h2', classNames: ['md-subheader'] }); diff --git a/addon/components/paper-switch.js b/addon/components/paper-switch.js index ebfbc9f5b..46152a700 100644 --- a/addon/components/paper-switch.js +++ b/addon/components/paper-switch.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import BaseFocusable from './base-focusable'; import RippleMixin from 'ember-paper/mixins/ripple-mixin'; @@ -16,6 +19,13 @@ const { } = Ember; /* global Hammer */ +/** + * @class PaperSwitch + * @extends BaseFocusable + * @uses ColorMixin + * @uses ProxiableMixin + * @uses RippleMixin + */ export default BaseFocusable.extend(RippleMixin, ProxiableMixin, ColorMixin, { tagName: 'md-switch', classNames: ['paper-switch', 'md-default-theme'], diff --git a/addon/components/paper-toolbar-tools.js b/addon/components/paper-toolbar-tools.js index 4ddd3dd33..ed5a42f37 100644 --- a/addon/components/paper-toolbar-tools.js +++ b/addon/components/paper-toolbar-tools.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Component } = Ember; +/** + * @class PaperToolbarTools + * @extends Ember.Component + */ export default Component.extend({ classNames: ['md-toolbar-tools'] }); diff --git a/addon/components/paper-toolbar.js b/addon/components/paper-toolbar.js index c2638ba77..b6627414a 100644 --- a/addon/components/paper-toolbar.js +++ b/addon/components/paper-toolbar.js @@ -1,7 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ColorMixin from 'ember-paper/mixins/color-mixin'; + const { Component } = Ember; +/** + * @class PaperToolbar + * @extends Ember.Component + * @uses ColorMixin + */ export default Component.extend(ColorMixin, { tagName: 'md-toolbar', classNames: ['md-default-theme'], diff --git a/addon/helpers/underscore.js b/addon/helpers/underscore.js index 7639c71b8..f98a752e2 100644 --- a/addon/helpers/underscore.js +++ b/addon/helpers/underscore.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { Helper, String: Str } = Ember; diff --git a/addon/initializers/paper-wormhole.js b/addon/initializers/paper-wormhole.js index 55a242df1..2e777e58b 100644 --- a/addon/initializers/paper-wormhole.js +++ b/addon/initializers/paper-wormhole.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ const hasDOM = typeof document !== 'undefined'; const defaultWormhole = 'paper-wormhole'; diff --git a/addon/mixins/child-mixin.js b/addon/mixins/child-mixin.js index c0d88dfa5..170213e2e 100644 --- a/addon/mixins/child-mixin.js +++ b/addon/mixins/child-mixin.js @@ -1,7 +1,25 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -const { Mixin } = Ember; +import ParentMixin from 'ember-paper/mixins/parent-mixin'; +const { Mixin, computed } = Ember; + +/** + * @class ChildMixin + * @extends Ember.Mixin + */ export default Mixin.create({ + + // override to look for a specific parent class + parentClass: ParentMixin, + + // this will typically be overriden when yielding a contextual component + parentComponent: computed(function() { + return this.nearestOfType(this.get('parentClass')); + }), + init() { this._super(...arguments); if (this.get('parentComponent')) { @@ -15,4 +33,4 @@ export default Mixin.create({ this.get('parentComponent').unregister(this); } } -}); \ No newline at end of file +}); diff --git a/addon/mixins/color-mixin.js b/addon/mixins/color-mixin.js index 5f32e5980..f8ab5ff12 100644 --- a/addon/mixins/color-mixin.js +++ b/addon/mixins/color-mixin.js @@ -1,5 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Mixin.create({ +const { Mixin } = Ember; + +/** + * @class ColorMixin + * @extends Ember.Mixin; + */ +export default Mixin.create({ classNameBindings: ['warn:md-warn', 'accent:md-accent', 'primary:md-primary'] }); diff --git a/addon/mixins/events-mixin.js b/addon/mixins/events-mixin.js index 954b3c75c..b6664a634 100644 --- a/addon/mixins/events-mixin.js +++ b/addon/mixins/events-mixin.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Mixin.create({ +const { Mixin } = Ember; + +/** + * @class EventsMixin + * @extends Ember.Mixin + */ +export default Mixin.create({ touchStart(e) { return this.down(e); }, diff --git a/addon/mixins/flex-mixin.js b/addon/mixins/flex-mixin.js index 19cde9660..35d16bb8e 100644 --- a/addon/mixins/flex-mixin.js +++ b/addon/mixins/flex-mixin.js @@ -1,11 +1,19 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -/* +const { Mixin } = Ember; + +/** * Adds bindings to flex attributes * - flex=true|false * - flex-layout=column|row + * + * @class FlexMixin + * @extends Ember.Mixin */ -export default Ember.Mixin.create({ +export default Mixin.create({ attributeBindings: [ 'flex', 'flex-layout:layout', diff --git a/addon/mixins/parent-mixin.js b/addon/mixins/parent-mixin.js index 715f7af1a..e59d80196 100644 --- a/addon/mixins/parent-mixin.js +++ b/addon/mixins/parent-mixin.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Mixin, computed, A } = Ember; +/** + * @class ParentMixin + * @extends Ember.Mixin + */ export default Mixin.create({ childComponents: computed(function() { return A(); @@ -13,4 +21,4 @@ export default Mixin.create({ unregister(child) { this.get('childComponents').removeObject(child); } -}); \ No newline at end of file +}); diff --git a/addon/mixins/proxiable-mixin.js b/addon/mixins/proxiable-mixin.js index f9d0aed08..50b03abac 100644 --- a/addon/mixins/proxiable-mixin.js +++ b/addon/mixins/proxiable-mixin.js @@ -1,9 +1,16 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; import ProxyMixin from './proxy-mixin'; -const { computed, get, isEmpty } = Ember; +const { Mixin, computed, get, isEmpty } = Ember; -export default Ember.Mixin.create({ +/** + * @class ProxiableMixin + * @extends Ember.Mixin + */ +export default Mixin.create({ init() { this._super(...arguments); Ember.run.next(this, 'registerProxy'); diff --git a/addon/mixins/proxy-mixin.js b/addon/mixins/proxy-mixin.js index 63a7cac7d..0d16fe087 100644 --- a/addon/mixins/proxy-mixin.js +++ b/addon/mixins/proxy-mixin.js @@ -1,6 +1,15 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; -export default Ember.Mixin.create({ +const { Mixin } = Ember; + +/** + * @class ProxyMixin + * @extends Ember.Mixin + */ +export default Mixin.create({ proxiedComponents: Ember.computed(function() { return Ember.A(); }), diff --git a/addon/mixins/ripple-mixin.js b/addon/mixins/ripple-mixin.js index 11f097c46..395364459 100644 --- a/addon/mixins/ripple-mixin.js +++ b/addon/mixins/ripple-mixin.js @@ -1,9 +1,17 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { inject, computed, Mixin, run, $ } = Ember; /* global window */ const DURATION = 400; +/** + * @class RippleMixin + * @extends Ember.Mixin + */ export default Mixin.create({ util: inject.service(), rippleContainerSelector: '.md-container', diff --git a/addon/mixins/translate3d-mixin.js b/addon/mixins/translate3d-mixin.js index 7e1248b69..99ade7978 100644 --- a/addon/mixins/translate3d-mixin.js +++ b/addon/mixins/translate3d-mixin.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { @@ -11,6 +14,10 @@ const { K } = Ember; +/** + * @class Translate3dMixin + * @extends Ember.Mixin + */ export default Mixin.create({ constants: inject.service(), @@ -84,7 +91,7 @@ export default Mixin.create({ dialogClone.removeClass('md-transition-in'); dialogClone.addClass('md-transition-out'); dialogClone.attr('style', toStyle); - run.next(() => { + window.requestAnimationFrame(() => { this.waitTransitionEnd(dialogClone).then(() => { containerClone.remove(); this.onTranslateToEnd($(this.get('origin'))); diff --git a/addon/services/paper-sidenav.js b/addon/services/paper-sidenav.js index 8fb681e2d..7cd59dd4c 100644 --- a/addon/services/paper-sidenav.js +++ b/addon/services/paper-sidenav.js @@ -1,6 +1,14 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { Service, assert } = Ember; +/** + * @class PaperSidenav + * @extends Ember.Service + */ export default Service.extend({ init() { this._super(...arguments); diff --git a/addon/utils/grid-layout.js b/addon/utils/grid-layout.js index 49a596334..c6d311952 100644 --- a/addon/utils/grid-layout.js +++ b/addon/utils/grid-layout.js @@ -1,6 +1,9 @@ +/** + * @module ember-paper + */ let defaultAnimator = GridTileAnimator; -/* +/** * Publish layout function */ function GridLayout(colCount, tileSpans) { @@ -179,4 +182,3 @@ function calculateGridfor(colCount, tileSpans) { } export default GridLayout; - diff --git a/addon/utils/promise-proxies.js b/addon/utils/promise-proxies.js index c95c60383..7d55c5b75 100644 --- a/addon/utils/promise-proxies.js +++ b/addon/utils/promise-proxies.js @@ -1,3 +1,6 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; const { RSVP: { Promise } } = Ember; diff --git a/addon/validators/max.js b/addon/validators/max.js index 733630f2c..3f6427711 100644 --- a/addon/validators/max.js +++ b/addon/validators/max.js @@ -1,4 +1,8 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { isEmpty } = Ember; export function max(value, max) { @@ -9,4 +13,4 @@ export default { param: 'max', message: 'Must be less than %@.', validate: max -}; \ No newline at end of file +}; diff --git a/addon/validators/maxlength.js b/addon/validators/maxlength.js index 13057de89..f88f2ccb0 100644 --- a/addon/validators/maxlength.js +++ b/addon/validators/maxlength.js @@ -1,4 +1,8 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { isEmpty, isNone } = Ember; export function maxlength(value, maxlength) { @@ -9,4 +13,4 @@ export default { param: 'maxlength', message: 'Must not exceed %@ characters.', validate: maxlength -}; \ No newline at end of file +}; diff --git a/addon/validators/min.js b/addon/validators/min.js index be0ebc172..b82c25c95 100644 --- a/addon/validators/min.js +++ b/addon/validators/min.js @@ -1,4 +1,8 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { isEmpty } = Ember; export function min(value, min) { @@ -9,4 +13,4 @@ export default { param: 'min', message: 'Must be at least %@.', validate: min -}; \ No newline at end of file +}; diff --git a/addon/validators/minlength.js b/addon/validators/minlength.js index 1dcea774a..3e66be890 100644 --- a/addon/validators/minlength.js +++ b/addon/validators/minlength.js @@ -1,4 +1,8 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { isEmpty, isNone } = Ember; export function minlength(value, minlength) { @@ -9,4 +13,4 @@ export default { param: 'minlength', message: 'Must have at least %@ characters.', validate: minlength -}; \ No newline at end of file +}; diff --git a/addon/validators/required.js b/addon/validators/required.js index 3eec9f288..192a88600 100644 --- a/addon/validators/required.js +++ b/addon/validators/required.js @@ -1,4 +1,8 @@ +/** + * @module ember-paper + */ import Ember from 'ember'; + const { isEmpty } = Ember; export function required(value, required) { @@ -10,4 +14,4 @@ export default { message: 'This is required.', // required can be a boolean or 'style' for just required asterisk styling. validate: required -}; \ No newline at end of file +}; diff --git a/app/services/sniffer.js b/app/services/sniffer.js index dc42bf0b9..92514d15b 100644 --- a/app/services/sniffer.js +++ b/app/services/sniffer.js @@ -1,3 +1,4 @@ +/* globals FastBoot */ import Ember from 'ember'; let isString = function(value) { @@ -16,17 +17,28 @@ export default Ember.Service.extend({ vendorPrefix: '', transitions: false, animations: false, - document, - window, + _document: null, + _window: null, android: Ember.computed('', function() { - return toInt((/android (\d+)/.exec(lowercase((this.get('window').navigator || {}).userAgent)) || [])[1]); + return toInt((/android (\d+)/.exec(lowercase((this.get('_window').navigator || {}).userAgent)) || [])[1]); }), init() { this._super(...arguments); + if (typeof FastBoot !== 'undefined') { + return; + } + + let _document = document; + let _window = window; + + this.setProperties({ + _document, + _window + }); - let bodyStyle = this.get('document').body && this.get('document').body.style; + let bodyStyle = _document.body && _document.body.style; let vendorPrefix; let vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/; diff --git a/app/templates/components/paper-radio-group.hbs b/app/templates/components/paper-radio-group.hbs index d32d48a20..f41754d90 100644 --- a/app/templates/components/paper-radio-group.hbs +++ b/app/templates/components/paper-radio-group.hbs @@ -1,5 +1,5 @@ {{yield (hash - paper-radio=(component "paper-radio" + radio=(component "paper-radio" toggle=toggle disabled=disabled groupValue=groupValue diff --git a/index.js b/index.js index 65a36237a..b0c9fbf81 100644 --- a/index.js +++ b/index.js @@ -16,9 +16,8 @@ module.exports = { if (!process.env.EMBER_CLI_FASTBOOT) { app.import(app.bowerDirectory + '/hammer.js/hammer.js') app.import(app.bowerDirectory + '/matchMedia/matchMedia.js'); - }; - - app.import('vendor/propagating.js'); + app.import('vendor/propagating.js'); + } }, contentFor: function(type) { diff --git a/package.json b/package.json index 3161897be..64003c71b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ember-paper", "description": "The Ember approach to Material Design.", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.3", "directories": { "doc": "doc", "test": "tests" @@ -28,6 +28,7 @@ "ember-cli-app-version": "^1.0.0", "ember-cli-content-security-policy": "0.4.0", "ember-cli-dependency-checker": "^1.2.0", + "ember-cli-fastboot": "1.0.0-beta.4", "ember-cli-github-pages": "^0.1.0", "ember-cli-htmlbars": "^1.0.3", "ember-cli-htmlbars-inline-precompile": "^0.3.1", @@ -59,8 +60,8 @@ "broccoli-funnel": "^1.0.1", "broccoli-merge-trees": "^1.1.0", "ember-cli-babel": "^5.1.6", - "ember-css-transitions": "peec/ember-css-transitions#v0.1.3", - "ember-wormhole": "^0.3.4" + "ember-css-transitions": "peec/ember-css-transitions#v0.1.4", + "ember-wormhole": "^0.4.0" }, "keywords": [ "ember-addon", diff --git a/tests/dummy/app/templates/components/page-toolbar.hbs b/tests/dummy/app/templates/components/page-toolbar.hbs index c254ccc1d..ca09a4ce0 100644 --- a/tests/dummy/app/templates/components/page-toolbar.hbs +++ b/tests/dummy/app/templates/components/page-toolbar.hbs @@ -1,7 +1,7 @@ {{#paper-toolbar class="md-whiteframe-1dp page-main-toolbar" as |toolbar|}} {{#toolbar.tools}} - {{#paper-sidenav-toggle class="hide-gt-sm" as |toggleAction|}} - {{#paper-button onClick=(action toggleAction) iconButton=true}} + {{#paper-sidenav-toggle as |toggleAction|}} + {{#paper-button class="hide-gt-sm" onClick=(action toggleAction) iconButton=true}} {{paper-icon "menu"}} {{/paper-button}} {{/paper-sidenav-toggle}} diff --git a/tests/dummy/app/templates/demo/radio.hbs b/tests/dummy/app/templates/demo/radio.hbs index 4e54b874c..981dad6a4 100644 --- a/tests/dummy/app/templates/demo/radio.hbs +++ b/tests/dummy/app/templates/demo/radio.hbs @@ -14,15 +14,15 @@

Radio Button Group

{{! BEGIN-SNIPPET radio.group }} {{#paper-radio-group groupValue=groupValue onChange=(action (mut groupValue)) as |group|}} - {{#group.paper-radio value="1" primary=true}} + {{#group.radio value="1" primary=true}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2" warn=true}} + {{/group.radio}} + {{#group.radio value="2" warn=true}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}}

Selected value: {{groupValue}}

@@ -36,15 +36,15 @@

Radio Button w/ Images

{{! BEGIN-SNIPPET radio.images }} {{#paper-radio-group groupValue=groupValue2 onChange=(action (mut groupValue2)) as |group|}} - {{#group.paper-radio value="image1" primary=true}} + {{#group.radio value="image1" primary=true}} - {{/group.paper-radio}} - {{#group.paper-radio value="image2" warn=true}} + {{/group.radio}} + {{#group.radio value="image2" warn=true}} - {{/group.paper-radio}} - {{#group.paper-radio value="image3"}} + {{/group.radio}} + {{#group.radio value="image3"}} - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} {{! END-SNIPPET }} diff --git a/tests/dummy/app/templates/index.hbs b/tests/dummy/app/templates/index.hbs index d4c35cca6..ad7ff2169 100644 --- a/tests/dummy/app/templates/index.hbs +++ b/tests/dummy/app/templates/index.hbs @@ -13,7 +13,7 @@ {{/paper-toolbar}} {{#card.content}}

You are viewing the demonstration and documentation for a pre-production built of ember-paper. This version is in flux. For version 1.0, all components are being updated to reflect the latest Ember coding practices and Angular Material stylesheets. Components which have not yet been updated are shown with a {{paper-icon "warning"}} and are subject to API changes. Be sure to read CHANGELOG.md when updating.

-

Wrong version? The currently-released version of ember-paper is version 0.2, currently installed by
ember install ember-paper. See README.md for advice on which version to use. Switch to version 0.2.

+

Wrong version? The latest released stable version of ember-paper is 0.2, installed by
ember install ember-paper@^0.2. See README.md for advice on which version to use. Switch to version 0.2.

{{/card.content}} {{/paper-card}} @@ -22,10 +22,10 @@

Installation

-

Install your preferred version of this ember-cli addon in your ember-cli project. To install the 0.2 released version:

- {{code-snippet name="install-0.2.sh"}} -

To install the latest pre-production 1.0 version:

+

Install your preferred version of this ember-cli addon in your ember-cli project. To install the latest pre-production 1.0 version:

{{code-snippet name="install-1.0.sh"}} +

To install the latest stable 0.2 version:

+ {{code-snippet name="install-0.2.sh"}}

This should also automatically create an scss file under app/styles/app.scss with @import 'ember-paper'; and install ember-cli-sass.

Sass is an important part of Ember-paper. Using sass you can override default variables and easily change the default behavior of Ember-paper.

diff --git a/tests/dummy/app/templates/layout/child-alignment.hbs b/tests/dummy/app/templates/layout/child-alignment.hbs index ff808042a..c99b9adcb 100644 --- a/tests/dummy/app/templates/layout/child-alignment.hbs +++ b/tests/dummy/app/templates/layout/child-alignment.hbs @@ -46,57 +46,57 @@

Layout Direction

{{#paper-radio-group groupValue=layoutDirection onChange=(action (mut layoutDirection)) as |group|}} - {{#group.paper-radio value="row"}} + {{#group.radio value="row"}} row - {{/group.paper-radio}} - {{#group.paper-radio value="column"}} + {{/group.radio}} + {{#group.radio value="column"}} column - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}}

Alignment in Layout Direction

{{#paper-radio-group groupValue=mainDirection onChange=(action (mut mainDirection)) as |group|}} - {{#group.paper-radio value=""}} + {{#group.radio value=""}} none - {{/group.paper-radio}} - {{#group.paper-radio value="start"}} + {{/group.radio}} + {{#group.radio value="start"}} start (default) - {{/group.paper-radio}} - {{#group.paper-radio value="center"}} + {{/group.radio}} + {{#group.radio value="center"}} center - {{/group.paper-radio}} - {{#group.paper-radio value="end"}} + {{/group.radio}} + {{#group.radio value="end"}} end - {{/group.paper-radio}} - {{#group.paper-radio value="space-around"}} + {{/group.radio}} + {{#group.radio value="space-around"}} space-around - {{/group.paper-radio}} - {{#group.paper-radio value="space-between"}} + {{/group.radio}} + {{#group.radio value="space-between"}} space-between - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}}

Alignment in Perpendicular Direction

{{#paper-radio-group groupValue=perpDirection onChange=(action (mut perpDirection)) as |group|}} - {{#group.paper-radio value=""}} + {{#group.radio value=""}} none - {{/group.paper-radio}} - {{#group.paper-radio value="start"}} + {{/group.radio}} + {{#group.radio value="start"}} start - {{/group.paper-radio}} - {{#group.paper-radio value="center"}} + {{/group.radio}} + {{#group.radio value="center"}} center - {{/group.paper-radio}} - {{#group.paper-radio value="end"}} + {{/group.radio}} + {{#group.radio value="end"}} end - {{/group.paper-radio}} - {{#group.paper-radio value="stretch"}} + {{/group.radio}} + {{#group.radio value="stretch"}} stretch (default) - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}}
@@ -106,4 +106,4 @@ {{/paper-card}} -{{/doc-content}} \ No newline at end of file +{{/doc-content}} diff --git a/tests/dummy/app/templates/layout/introduction.hbs b/tests/dummy/app/templates/layout/introduction.hbs index 99b6d7789..dc1f77b07 100644 --- a/tests/dummy/app/templates/layout/introduction.hbs +++ b/tests/dummy/app/templates/layout/introduction.hbs @@ -5,20 +5,21 @@

Overview

- Ember Paper's layout features provide sugar to enable developers to more easily create modern, - responsive layouts on top of CSS3 flexbox. The layout API consists of a set of classes - that can be applied to any of your application's HTML content. + Ember Paper's layout features provide sugar to enable developers to more easily create modern, + responsive layouts on top of CSS3 flexbox. The layout API consists of a set of classes + that can be applied to any of your application's HTML content.

- Ember Paper's layout system is based on - Angular Material's. - Most of the class names can be derived from the attributes described in their documentation. + Ember Paper's layout system is based on + Angular Material's. + Most of the class names can be derived from the attributes described in their documentation. Ember Paper + uses classes rather than attributes for performance reasons. Under the hood, Angular does the same.

- The classes consist of an attribute and optional parameters, separated by - dashes. See the table below for an overview of the most important classes. + The classes consist of an attribute and optional parameters, separated by + dashes. See the table below for an overview of the most important classes.

{{paper-api @@ -41,8 +42,8 @@ }}

- We can associate breakpoints with mediaQuery definitions using breakpoint alias(es), - based on the breakpoints specified in the Material Design spec: + We can associate breakpoints with mediaQuery definitions using breakpoint alias(es), + based on the breakpoints specified in the Material Design spec:

{{paper-api @@ -63,11 +64,11 @@

API with Responsive Breakpoints

- Now we can combine the breakpoint alias with the layout classes to easily support responsive breakpoints - with our simple layout class convention. The alias is simply used as suffix extensions to the base attribute class. + Now we can combine the breakpoint alias with the layout classes to easily support responsive breakpoints + with our simple layout class convention. The alias is simply used as suffix extensions to the base attribute class.

- This notation results in, for example, the following table for the layout and flex classes: + This notation results in, for example, the following table for the layout and flex classes:

{{paper-api @@ -115,12 +116,12 @@

direction

{{#paper-radio-group groupValue=direction onChange=(action (mut direction)) as |group|}} - {{#group.paper-radio value="row"}} + {{#group.radio value="row"}} row - {{/group.paper-radio}} - {{#group.paper-radio value="column"}} + {{/group.radio}} + {{#group.radio value="column"}} column - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}}
diff --git a/tests/dummy/app/templates/layout/layout-containers.hbs b/tests/dummy/app/templates/layout/layout-containers.hbs index f6db0f209..afca1f4ad 100644 --- a/tests/dummy/app/templates/layout/layout-containers.hbs +++ b/tests/dummy/app/templates/layout/layout-containers.hbs @@ -23,10 +23,10 @@
First item in row
Second item in row
-
-
-
First item in column
-
Second item in column
+
+
First item in column
+
Second item in column
+
{{! END-SNIPPET }} diff --git a/tests/dummy/snippets/install-0.2.sh b/tests/dummy/snippets/install-0.2.sh index 41b81a5a9..27df270dd 100644 --- a/tests/dummy/snippets/install-0.2.sh +++ b/tests/dummy/snippets/install-0.2.sh @@ -1 +1 @@ -$ ember install ember-paper +$ ember install ember-paper@^0.2.0 diff --git a/tests/dummy/snippets/install-1.0.sh b/tests/dummy/snippets/install-1.0.sh index 4ea73db32..41b81a5a9 100644 --- a/tests/dummy/snippets/install-1.0.sh +++ b/tests/dummy/snippets/install-1.0.sh @@ -1 +1 @@ -$ ember install miguelcobain/ember-paper +$ ember install ember-paper diff --git a/tests/integration/components/paper-form-test.js b/tests/integration/components/paper-form-test.js index 51b5d5f62..7137a0da9 100644 --- a/tests/integration/components/paper-form-test.js +++ b/tests/integration/components/paper-form-test.js @@ -107,4 +107,37 @@ test('form is reset after submit action is invoked', function(assert) { this.$('button').click(); assert.equal(this.$('.ng-dirty').length, 0, 'inputs were reset'); -}); \ No newline at end of file +}); + +test('works without using contextual components', function(assert) { + assert.expect(4); + + this.render(hbs` + {{#paper-form as |form|}} + {{paper-input value=foo onChange=(action (mut foo)) label="Foo"}} + {{paper-input value=bar onChange=(action (mut bar)) label="Bar" errors=errors}} + + {{#if form.isInvalid}} +
Form is invalid!
+ {{/if}} + {{#if form.isValid}} +
Form is valid!
+ {{/if}} + + {{/paper-form}} + `); + + assert.equal(this.$('.invalid-div').length, 0); + assert.equal(this.$('.valid-div').length, 1); + + this.set('errors', [{ + message: 'foo should be a number.', + attribute: 'foo' + }, { + message: 'foo should be smaller than 12.', + attribute: 'foo' + }]); + + assert.equal(this.$('.invalid-div').length, 1); + assert.equal(this.$('.valid-div').length, 0); +}); diff --git a/tests/integration/components/paper-input-test.js b/tests/integration/components/paper-input-test.js index 3afc7157a..8f1b5c183 100644 --- a/tests/integration/components/paper-input-test.js +++ b/tests/integration/components/paper-input-test.js @@ -1,5 +1,6 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; +import wait from 'ember-test-helpers/wait'; moduleForComponent('paper-input', 'Integration | Component | paper input', { integration: true, @@ -421,12 +422,18 @@ test('displayed input value matches actual input value', function(assert) { this.render(hbs`{{paper-input onChange=onChange value=value}}`); this.$('input, textarea').val('12345').trigger('input'); - assert.equal(this.$('input, textarea').val(), '123', 'input value should be 123'); - assert.equal(this.value, '123', 'component value should be 123'); - this.$('input, textarea').val('abcdefg').trigger('input'); - assert.equal(this.$('input, textarea').val(), '123', 'input values do not match'); - assert.equal(this.value, '123', 'component value should be 123'); + return wait().then(() => { + assert.equal(this.$('input, textarea').val(), '123', 'input value should be 123'); + assert.equal(this.value, '123', 'component value should be 123'); + + this.$('input, textarea').val('abcdefg').trigger('input'); + + return wait(); + }).then(() => { + assert.equal(this.$('input, textarea').val(), '123', 'input values do not match'); + assert.equal(this.value, '123', 'component value should be 123'); + }); }); test('displayed input value matches actual input value with no onChange method', function(assert) { diff --git a/tests/integration/components/paper-radio-group-test.js b/tests/integration/components/paper-radio-group-test.js index b82f13f5a..015f32784 100644 --- a/tests/integration/components/paper-radio-group-test.js +++ b/tests/integration/components/paper-radio-group-test.js @@ -29,15 +29,15 @@ test('should set and remove checked css class', function(assert) { this.set('groupValue', '1'); this.render(hbs` {{#paper-radio-group groupValue=groupValue onChange=(action (mut groupValue)) as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); assert.ok(this.$('md-radio-button').hasClass('md-checked')); @@ -55,15 +55,15 @@ test('should trigger an action when checking', function(assert) { this.render(hbs` {{#paper-radio-group groupValue=groupValue onChange=handleChange as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); @@ -80,15 +80,15 @@ test('should trigger an action when unchecking (toggle is true)', function(asser this.render(hbs` {{#paper-radio-group groupValue=groupValue toggle=true onChange=handleChange as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); @@ -104,15 +104,15 @@ test('shouldn\'t trigger an action when disabled', function(assert) { this.render(hbs` {{#paper-radio-group groupValue=groupValue disabled=true onChange=(action (mut groupValue)) as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); @@ -124,15 +124,15 @@ test('should be possible to select next with down/right arrow in a paper-radio-g this.render(hbs` {{#paper-radio-group groupValue=groupValue onChange=(action (mut groupValue)) as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); @@ -150,15 +150,15 @@ test('should be possible to select next with up/left arrow in a paper-radio-grou this.render(hbs` {{#paper-radio-group groupValue=groupValue onChange=(action (mut groupValue)) as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} - {{#group.paper-radio value="2"}} + {{/group.radio}} + {{#group.radio value="2"}} Radio button 2 - {{/group.paper-radio}} - {{#group.paper-radio value="3"}} + {{/group.radio}} + {{#group.radio value="3"}} Radio button 3 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); @@ -177,9 +177,9 @@ test('the `onChange` action is mandatory for paper-radio-group', function(assert assert.throws(() => { this.render(hbs` {{#paper-radio-group groupValue=groupValue as |group|}} - {{#group.paper-radio value="1"}} + {{#group.radio value="1"}} Radio button 1 - {{/group.paper-radio}} + {{/group.radio}} {{/paper-radio-group}} `); }, /requires an `onChange` action/); diff --git a/vendor/propagating.js b/vendor/propagating.js index 0be650baa..9e9b3570f 100644 --- a/vendor/propagating.js +++ b/vendor/propagating.js @@ -1,6 +1,6 @@ 'use strict'; -(function(factory) { +(function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define([], factory); @@ -13,9 +13,8 @@ // Browser globals (root is window) window.propagating = factory(); } -}(function() { +}(function () { var _firstTarget = null; // singleton, will contain the target element where the touch event started - var _processing = false; // singleton, true when a touch event is being handled /** * Extend an Hammer.js instance with event propagation. @@ -33,7 +32,7 @@ * * @param {Hammer.Manager} hammer An hammer instance. * @param {Object} [options] Available options: - * - `preventDefault: true | 'mouse' | 'touch' | 'pen'`. + * - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`. * Enforce preventing the default browser behavior. * Cannot be set to `false`. * @return {Hammer.Manager} Returns the same hammer instance with extended @@ -51,14 +50,14 @@ var PropagatingHammer = function(element, options) { var o = Object.create(_options); - if (options) Hammer.extend(o, options); + if (options) Hammer.assign(o, options); return propagating(new Hammer(element, o), o); }; - Hammer.extend(PropagatingHammer, Hammer); + Hammer.assign(PropagatingHammer, Hammer); - PropagatingHammer.Manager = function(element, options) { + PropagatingHammer.Manager = function (element, options) { var o = Object.create(_options); - if (options) Hammer.extend(o, options); + if (options) Hammer.assign(o, options); return propagating(new Hammer.Manager(element, o), o); }; @@ -72,12 +71,12 @@ // attach to DOM element var element = hammer.element; - if (!element.hammer) element.hammer = []; + if(!element.hammer) element.hammer = []; element.hammer.push(wrapper); // register an event to catch the start of a gesture and store the // target in a singleton - hammer.on('hammer.input', function(event) { + hammer.on('hammer.input', function (event) { if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) { event.preventDefault(); } @@ -95,9 +94,9 @@ * @param {function} handler A callback function, called as handler(event) * @returns {Hammer.Manager} Returns the hammer instance */ - wrapper.on = function(events, handler) { + wrapper.on = function (events, handler) { // register the handler - split(events).forEach(function(event) { + split(events).forEach(function (event) { var _handlers = wrapper._handlers[event]; if (!_handlers) { wrapper._handlers[event] = _handlers = []; @@ -119,12 +118,12 @@ * are removed. * @returns {Hammer.Manager} Returns the hammer instance */ - wrapper.off = function(events, handler) { + wrapper.off = function (events, handler) { // unregister the handler - split(events).forEach(function(event) { + split(events).forEach(function (event) { var _handlers = wrapper._handlers[event]; if (_handlers) { - _handlers = handler ? _handlers.filter(function(h) { + _handlers = handler ? _handlers.filter(function (h) { return h !== handler; }) : []; @@ -152,12 +151,12 @@ hammer.emit(eventType, event); }; - wrapper.destroy = function() { + wrapper.destroy = function () { // Detach from DOM element var hammers = hammer.element.hammer; var idx = hammers.indexOf(wrapper); - if (idx !== -1) hammers.splice(idx,1); - if (!hammers.length) delete hammer.element.hammer; + if(idx !== -1) hammers.splice(idx,1); + if(!hammers.length) delete hammer.element.hammer; // clear all handlers wrapper._handlers = {}; @@ -194,13 +193,13 @@ // attach a stopPropagation function to the event var stopped = false; - event.stopPropagation = function() { + event.stopPropagation = function () { stopped = true; }; //wrap the srcEvent's stopPropagation to also stop hammer propagation: - var srcStop = event.srcEvent.stopPropagation; - if (typeof srcStop == "function") { + var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent); + if(typeof srcStop == "function") { event.srcEvent.stopPropagation = function(){ srcStop(); event.stopPropagation(); @@ -213,11 +212,12 @@ // propagate over all elements (until stopped) var elem = _firstTarget; while (elem && !stopped) { - if (elem.hammer){ + var elemHammer = elem.hammer; + if(elemHammer){ var _handlers; - for (var k = 0; k < elem.hammer.length; k++){ - _handlers = elem.hammer[k]._handlers[event.type]; - if (_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) { + for(var k = 0; k < elemHammer.length; k++){ + _handlers = elemHammer[k]._handlers[event.type]; + if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) { _handlers[i](event); } } @@ -228,4 +228,4 @@ return wrapper; }; -})); +})); \ No newline at end of file