Enyo 2.3.0-rc.24 to 2.5.0 Release Notes
Welcome to Enyo 2.5.0! The items listed below have changed since the 2.3.0-rc.24 release. (Note that this list is not comprehensive; see the commit history in GitHub for a complete list of changes.)
Migration Notes
Some of the changes made in Enyo 2.5.0 may require updates to your existing Enyo applications. Please read the Enyo 2.3.0-rc.24 to 2.5.0 Migration Notes for a detailed discussion of these issues.
Performance Notes
Enyo 2.5.0 contains numerous changes designed to improve the performance of your applications. For a detailed list, please see the Enyo 2.3.0-rc.24 to 2.5.0 Performance Notes.
UX Notes
Enyo 2.5.0 also features a number of user experience enhancements, described in the Enyo 2.3.0-rc.24 to 2.5.0 UX Notes.
Detailed Release Notes
enyo
Reworked data layer code, adding support for relational data objects. Significant changes were made to existing kinds such as
enyo.Control
,enyo.Binding
,enyo.Source
, andenyo.Store
, and existing mixins such asenyo.BindingSupport
,enyo.ComputedSupport
, andenyo.ObserverSupport
.New data-related kinds include
enyo.Filter
,enyo.BucketFilter
,enyo.ProgressiveFilter
(coming soon),enyo.LinkedList
,enyo.ObserverChain
,enyo.ModelList
,enyo.AjaxSource
, andenyo.JsonpSource
; new mixins includeenyo.EventEmitter
andenyo.ProxyObject
.In addition, several stubbed kinds have received proper implementations, including
enyo.RelationalModel
andenyo.LocalStorageSource
.Finally,
enyo.RegisteredEventSupport
is now an alias to theenyo.EventEmitter
mixin.Enyo now provides support for the W3C Page Visibility API in the new file
page_visibility.js
, under thedom
package. This normalizesvisibilitychange
events, as well as thedocument.hidden
anddocument.visibilityState
properties. Fallbacks are used to support older browsers.Began transition to Mocha-based unit testing.
Added
enyo.SpriteAnimation
kind, which enables the creation of simple animated sprite images. Also added related sample, "SpriteAnimationSample".Added
enyo.Style
kind, used to dynamically generate<style>
tags.Added
enyo.StylesheetSupport
mixin, used to add an auxiliary, inline stylesheet (containing programmatically-generated CSS) to a control. Also added related sample, "StylesheetSupportSample".Added
enyo.HTMLStringDelegate
, a status object used byenyo.Control
for rendering.In
enyo.Ajax
, added support for synchronous loading of binary files.In
enyo.AjaxSource
, updatedcommit()
to set defaultcontentType
as"application/json"
.In
enyo.Animator
, updatednext()
to fireonEnd
event when animation has finished.In
enyo.Binding
, addedforce
parameter tosync()
method.Made several changes to
enyo.Collection
:enyo.Collection
is once again a subkind ofenyo.Component
.The
filtered
,filters
,filterProps
, andactiveFilter
properties have been removed, and thefilter()
method no longer can be used to clear the active filter. The whole filtering mechnanism is being rewritten for greater flexibility and improved performance.
In
enyo.Component
, addedtriggerHandler()
method, a public API for triggering the handler for a particular type of event. Also modifiedtoString()
to returnid
as well askindName
.Made several changes to
enyo.Control
:Updated
applyStyle()
to prevent invalid values from being propagated to thestyle
property.In
Control.normalizeCssStyleString()
, modified regular expression to fix issue with extra spaces in paths instyle
attribute.Added code to properly clear the
style
tag when appropriate.Fixed issue in rendering code causing picker to be dismissed when choosing a locale in "DatePickerSample".
Added call to
enyo.dom.updateScaleFactor()
inrenderInto()
.
In
enyo.DataList
, updatedcreate()
to synchronize the values ofshowing
andabsoluteShowing
. Also modifiedmodelsRemoved()
so thatsup
call is only made ifthis.$.scroller.canGenerate
istrue
.Made several updates to
enyo.DataRepeater
:controller
is no longer a special property; this affects DataRepeater, DataList, DataGridList, UiComponent (and its child kinds), and Application. DataRepeater, DataList, and DataGridList should use thecollection
property instead. For all other kinds, there is no direct replacement for the previous functionality. Instead, use a binding from the path to the desired local property.The
length
property is no longer bound. Developers are advised to check for the existence of thecollection
property, and then check the length of the collection (if it exists). This change affects DataList and DataGridList as well as DataRepeater.Fixed issue causing DataRepeater not to render in response to collection changes.
Modified
batchingChanged()
, adding call tothis.refresh()
.
In
enyo.dom
, added methodenyo.dom.getAbsoluteBounds()
, which takes into account translateX, translateY, and matrix3d transforms. The existingenyo.Control.getAbsoluteBounds()
API is unchanged, but its implementation now utilizes the new method onenyo.dom
.Also, added properties
_bodyScaleFactorX
and_bodyScaleFactorY
, which represent the ratio of the<body>
tag's size to the window size along the x and y axes. This value is updated viaenyo.dom.updateScaleFactor()
on page load and window resize.In
enyo.gesture
, introducedconfigureHoldPulse()
method, used indown()
to configure subsequentholdpulse
events.configureHoldPulse()
accepts a hash of options that may include values for"delay"
,"moveTolerance"
,"endHold"
, and"resume"
. Default values are defined inenyo.gesture.drag.holdPulseDefaultConfig
.Also, updated
makeEvent()
, adding code to update mouse/pointer coordinate values (clientX
andclientY
) if body is being scaled.In
hooks.js
, modfiedenyo.updateLocale()
so that it is the emitter of theonLocaleChange
event.Made several changes to
enyo.Image
:Added published properties
sizing
andposition
, along with change handler methods. Whensizing
is set, the image is rendered as a<div>
withbackground-image
. Valid values are"cover"
and"constrain"
. Whensizing
is used,position
determines the positioning of the image within its bounds (default is"center"
).Added
srcChanged()
, handler method for changes tosrc
property.Fixed issue in which some browsers could not read placeholder image data.
In
enyo.Image
andenyo.Video()
, updatedcreate()
method, adding call tothis.srcChanged()
.In
lang.js
, modifiedenyo.asyncMethod()
to accept an anonymous function as the lone parameter. The previous signature is still valid, as well.In
loader.js
, updateddecodePackagePath()
to properly handle URLs that begin with//
.In
log.js
, addedvalidateArgs()
to prevent (or gracefully handle) circular reference errors when stringifying objects.Made several updates to
enyo.Model
:enyo.Model
now employs the defaultenyo.ObserverSupport
andenyo.BindingSupport
; as a result, it shares the limitation of working only with theattributes
of a data record.Added support for
force
parameter inset()
method. Setting the value totrue
forces change notifications to fire, even if the new value is the same as the old one.Made changes to improve Model initialization time.
Fixed issue in which calling
destroy()
on previously fetched models would destroy the models locally, but not in the remote data source.
In
ObserverSupport.js
, modifiedenyo.concatHandler()
so that component overrides don't wipe out observers of the base kind.In
enyo.Option
, addedselected
property, a Boolean value indicating whether the option is currently selected. (Default isfalse
.)In
enyo.platform
, updated platform detection for Silk 3.x.Made several updates to
enyo.Popup
:Added
enyo.Popup.concat()
, which may be used to specify events to be captured (in addition to the usualondown
andontap
).In a related change, modified the kind to set
noDefer: true
by default.Added
allowDefault
flag. Default value isfalse
. Setting this totrue
will stoppreventDefault()
from being called on captured events.
Updated
ready.js
so that it no longer uses other Enyo code.In
enyo.Repeater
, updated documentation forbuild()
method.Made several changes to
enyo.Scroller
:Used absolute positioning to implement
enyo-scrollee-fit
style for scroller as a child of flexbox, since flexbox doesn't support percentage-based sizing.Rewrote
cacheScrollPosition()
to address caching bug.Modified
setScrollLeft()
andsetScrollTop()
to update the cached scroll position when the scroller is hidden or re-rendered.
Made several updates to
enyo.ScrollMath
Updated
mousewheel()
to allow horizontal scrolling frommousewheel
event.Modified
animate()
andscrollTo()
to ensure that final scroll position matches the originally-specified position.Adjusted value of
kFrictionEpsilon
when running on webOS for faster scroll stop on TV.
In
enyo.ScrollMath
andenyo.TouchScrollStrategy
, addressed issue that could cause touch scrolling to get stuck in overscroll at the bottom of a DataGridList.In
enyo.Select
, addedvalue
property, which contains the value of the selected option. (Default isnull
.)In
enyo.TouchScrollStrategy
, addedpreventDefault
flag. Set this tofalse
to allow default (i.e., platform-native) scrolling behavior. The default value istrue
, meaning that native scrolling is suppressed.In
transform.js
, modifiedenyo.dom.transformsToDom()
to set correct style property when control does not have DOM node.In
enyo.UiComponent
, removedcontrollerChanged()
; also modifiedbubble()
to callenyo.dom.updateScaleFactor()
if window is being resized.In
VerticalDelegate.js
, modifiedmodelsAdded()
to always update scroll thresholds.In
VerticalGridDelegate.js
, broke out new methodsupdateIndexBound()
,modelsAdded()
andmodelsRemoved()
from existingupdateMetrics()
. This improves performance by eliminating redundancy.In
enyo.xhr
, added support for boolean request parametersmozSystem
andmozAnon
. SetmozSystem
totrue
to create a cross-domain XHR; setmozAnon
totrue
to create an anonymous XHR that does not send cookies or authentication headers. Both parameters are currently supported on Firefox OS only.Also, updated
request()
, fixing error in code for handling synchronous requests.In
enyo.XHRSource
, updatedgo()
to switch order of parameters when callingopts.fail()
.Added new samples: "AnchorSample", "ButtonSample", "CheckboxSample", "DragAvatarSample", "GroupSample", "ImageSample", "InputSample", "PageVisibilitySample", "PopupSample", "RichTextSample", "SelectSample", "SpriteAnimationSample", "StylesheetSupportSample", "TableSample", "TextAreaSample", and "VideoSample".
Updated LESS to version 1.7.0.
Updated
deploy.js
to ensure that deployment errors out if a badly-formatteddeploy.json
file is found.Updated
lessc.js
andminify.js
to use relative URLs when compiling LESS files, to be compatible with the bootplateTheme.less
scheme for importing and then overriding library variables.In
minify.js
, fixed extra quote in external URLs that caused problems with external stylesheets in Firefox.Updated
walker.js
to allow remapping of files as well as folders.
moonstone
Removed deprecated kinds
moon.List
,moon.GridFlyweightRepeater
, andmoon.GridList
, along with related samples "ListHorizontalSample", "ListVerticalSample", and "GridListSample". Developers should usemoon.DataList
andmoon.DataGridList
instead.Deprecated the
moon.ToggleText
kind, which has been superseded bymoon.ToggleSwitch
.moon.ToggleText
will likely be removed in a future Moonstone release.Replaced all image assets in the library with font-based icons and CSS. When necessary, the icons may be colored using the
@moon-accent
LESS variable. This change, which involves modifications to kinds across all of Moonstone, makes it easier to implement UI themes, while also reducing the Moonstone library's file storage footprint.Updated
rendered()
functions of numerous Moonstone controls so they do not make DOM-related changes that could be made earlier (e.g., increate()
). Moved code as needed.In
moon.Accordion
, added binding fromdisabled
property on Accordion object todisabled
property inheaderWrapper
component. Also updated "AccordionSample" with related example.In
moon.Accordion
,moon.ExpandableListItem
, andmoon.RadioItemGroup
, corrected property names in code samples.In
moon.BodyText
, updatedcontentChanged()
to bubbleonRequestSetupBounds
event.Updated
moon.BreadcrumbArranger
to gracefully handle unrendered panels.In
moon.Button
,moon.IconButton
, andmoon.PagingControl
, addressed issue in which, when opening a system popup, theonKeyUp
event would not reach the application.Modified
moon.Calendar
to validate values in generic setter function instead of change handler. Also modified code for determining month length to use new functionality provided byiLib
.Added right-to-left support to
moon.ChannelInfoBadge
controls.In
moon.ContextualPopup
andmoon.ContextualPopupDecorator
, added support for hiding the popup if the activating control is pressed again while the popup is showing. Among other changes, the former kind receives the new methodcapturedTap()
, while the latter kind gainspopupShown()
, a handler foronShow
events.Made several changes to
moon.DataGridList
:Added handlers for
onSpotlightFocus
andonSpotlightBlur
events. Now when a DataGridList item receives focus, the z-index value is incremented; when focus is lost, the original z-index is restored. This improves performance for DataGridList items that contain Marquees.Added handler for
onSpotlightFocused
event as part of fix for up and down arrows' remaining active when 5-way navigation reaches first or last row, respectively.
In
moon.DataList
, fixed issue in which Spotlight (5-way) navigation would not proceed to next page if items at end of current page are disabled. Fix includes introduction of new methodsselectItem()
,selectPrev()
(which handlesonSpotlightUp
andonSpotlightLeft
events),selectNext()
(which handlesonSpotlightDown
andonSpotlightRight
),findSpottableControl()
, andgetNextSpottableChild()
.In
moon.DataListSpotlightSupport
, updatedgetNextSpottableChild()
, replacingfor...in
loop withfor
loop using incrementing counter.Updated
moon.DatePicker
andmoon.TimePicker
to support null value; also updated related samples "DatePickerSample" and "TimePickerSample".In
moon.Drawer
, fixed issue that could cause "dresser" area to be unfocusable.Updated
moon.Drawer
,moon.Drawers
,moon.Panel
, andmoon.Panels
so that panels and drawers are generally not spottable when hidden.In
moon.Drawers
, modifiedsetupHandles()
to check for existence of drawers before trying to work with them. Also modified thepointer-event
rule value to unblock mouse events.In
moon.Drawers
andmoon.Panels
, replacedfor 'x' in 'y'
structures with incrementing loop counters.Made several updates to
moon.ExpandableInput
:Updated behavior so that a 5-way Down keypress while in the open state causes the input's content to be submitted and the focus to shift downward (if applicable). Input content will also be submitted in response to a click outside of the control. Code changes include the introduction of two new methods,
inputBlur()
andcloseDrawerAndHighlightHeader()
.Changed
onkeydown
event handler to anonkeyup
handler with key code checking.Made change to respot header when closing the drawer while in pointer mode.
In
moon.ExpandableIntegerPicker
, added handling for newonRebuilt
event, allowing the picker to be reflowed, if necessary.Made several changes to `moon.ExpandableListItem:
Addressed issue preventing drawer from opening when the header text area is focused via 5-way navigation.
Fixed issue preventing the header of a disabled ExpandableListItem from reflecting its disabled state.
Added new "ExpandableListItemSample".
In
moon.ExpandablePicker
, added support for selection of multiple items. To enable multi-selection, set themultipleSelect
property totrue
(default isfalse
). Also added related example to "ExpandablePickerSample".In
moon.GridListImageItem
, setoverflow: hidden
to prevent unnecessary re-layout.Made several changes to
moon.Header
:Added new
type
property. Valid values fortype
are"small"
,"medium"
, and"large"
(the default). Also added handler for changes totype
value.Deprecated
small
property, which was previously used to distinguish between "small" and "large" headers; updated samples to usetype
property to specify header size/type.Removed time-delayed auto-marquee behavior from header title.
Changed color of horizontal rules.
In
moon.HighlightText
, overloaded render delegate to handle special behavior.In
moon.Icon
, made behavior more intuitive whenicon
orsrc
property changes. Also, fixed styling of disabled state.In
moon.IconButton
, fixed issue preventing grouped IconButtons from showing active state when pressed. Also, simplified CSS styles.Modified styling of
moon.Image
so that it only stretches to fit the full size of its container when the"sized"
CSS class has been applied.In
moon.InputHeader
, added support for ellipsizing overflow content.Updated
moon.ListActions
to use CSS transforms for animation, instead of relying onenyo.StyleAnimator
.In
moon.MarqueeSupport
, addedmarqueeOnRenderDelay
property. IfmarqueeOnRender
istrue
, the marquee animation will begin when this many milliseconds have elapsed after rendering.Also added
_marquee_startMarqueeCustomDelay()
, used internally to trigger the marquee animation.In
moon.ObjectActionDecorator
, fixed 5-way navigation; also converted Windows line endings to Unix line endings in source file.In
moon.Panel
, addedremoveSpottableProps()
and updatedupdatesSpottability()
to correct issue in which focus could be lost when using panels within drawers.Made several updates to
moon.Panels
:Improved performance by simplifying show/hide animation, and by reworking
pushPanel()
so that only pushed panels are resized.Added handler for
onSpotlightFocused
events, to ensure thatthis.index
gets updated when a new panel gains focus.Improved handling of changes to
brandingSrc
property, used to display a brand image in the lower left corner of an activity panel when a breadcrumb is visible.Updated
create()
method, adding call tothis.showingChanged()
. This is part of a fix for an issue that could prevent the sidebar from being invoked when the Always Viewing pattern is used.Updated
indexChanged()
to address issue preventing active panel from being spotted.In
setIndex()
, moved value clamping inside conditional statement. This addresses an issue that, under certain conditions, could prevent the Panels from closing as expected.Made change to prevent Spotlight from highlighting controls during panel transition.
Fixed issue causing unexpected behavior when right arrow key is pressed twice (panel index advances by one, instead of the expected two).
Fixed issue that could prevent panels from expanding when a breadcrumb is clicked. As part of fix, replaced handler for
onSpotlightFocused
events with handler foronSpotlightFocus
.Fixed issue that could cause two panels to overlap during a transition from one to the other.
Applied CSS translation to background scrim, enabling hardware acceleration.
In
spotlightLeft()
, fixed problem affecting leftward navigation via 5-way controller in an Always Viewing pattern.
Updated
moon.Popup
to prevent focus from escaping when in 5-way mode.In
moon.Scroller
, updatedscrollToControl()
, adding new parametersetLastFocusedChild
. When set totrue
, the control being scrolled to is set as the viewport's last focused child.Also, fixed issue causing scroller paging controls to remain visible when exiting the scroller via 5-way.
Made several updates to
moon.ScrollStrategy
:Cleaned up logic governing paging controls in 5-way mode.
Added
requestSetupBounds()
, handler method foronRequestSetupBounds
event. This updatesscrollBounds
without scrolling into view.Added
setLastFocusedChild()
, which sets the passed-in control as the last focused child in the viewport.Modified
requestScrollIntoView()
to address issue with calculation of bounds for an Accordion control at the bottom of the viewport.
Made several changes to
moon.SimpleIntegerPicker
:Added
onRebuilt
event, which fires when the picker is rebuilt, giving the controls it contains the opportunity to reflow the picker, if necessary.Added ability to easily adjust picker height.
Modified arrow button behavior to reflect design spec.
In
moon.SimplePicker
, modifiedselectedIndexChanged()
to callstartMarquee()
after enabling or disabling navigation buttons. This fixes broken marquee behavior.Also added handling for repeated keypresses.
In
moon.Slider
, made change to prevent slider from becoming Spotlight-unhighlighted if pointer moves away during a drag operation.Made several updates to
moon.Spinner
:GPU-accelerated CSS is now used for animations.
The font for spinner balls is now set explicitly. This addresses an issue in which the spinner would appear "shrunken" when non-Latin fonts were in use.
Added support for using marquees, long text, and
components
blocks inside a spinner.
In
moon.TimePicker
, updatedinitILib()
to fix issue with incorrectly localized meridiem values.In
moon.ToggleButton
, added radio button inside the control to more clearly indicate the active state. Also added support for customizing the text labels for "On" and "Off".In
moon.Tooltip
, modifiedcontentChanged()
, adding call todetectTextDirectionality()
to address right-to-left mode issues.Fixed styling of
moon.VideoFeedback
in right-to-left mode.Updated
moon.VideoFeedback
andmoon.VideoTransportSlider
so that feedback control is updated while in preview mode.Made several changes to
moon.VideoPlayer
:Updated
onjumpForward()
andonjumpBackward()
to respond to button presses between 200 ms and 400 ms in duration.In
create()
method, added call tothis.srcChanged()
.Corrected icons for "show additional controls" and "hide additional controls".
Fixed problems with Spotlight behavior when VideoPlayer is used inside a Panels. (A related change was made to the
_show()
method inmoon.Panels
.)Addressed issue in which playback controls could not be invoked using 5-way Up or Down keys.
Updated
moon.VideoTransportSlider
to watch Enyomove
event instead of DOMmousemove
event. This improves the tracking of mouse movement when screen content is upscaled.Added
moon-body-large-text
CSS style, for use when a large font size is needed. Also added related sample, "BodyLargeTextSample".Added CSS styling for selected text in input controls.
Fixed issues with sizing of Thai characters in input controls.
Modified CSS for paging controls so that disabled controls do not display an active state.
Updated samples to refer to LESS version 1.7.0.
Updated HTML pages in samples with proper
<meta>
tags specifying UTF-8 character set.Added "DynamicPanelsSample".
In "CalendarSample", fixed functionality of Reset button.
Updated "ContextualPopupSample" to set
value
property on ToggleButton instead of settingactive
property.Made several updates to "DataGridListSample":
Fixed behavior on refresh, replacing call to
removeAll()
(which currently does not exist onenyo.Collection
) with call toremove(collection.models)
.Addressed problem causing loss of checkbox selection state when popup list is closed.
Modified
generateRecords()
to referencethis.modelIndex
instead ofthis.index
.
Made several updates to "DataListSample":
Fixed issue causing unexpected focus behavior on 5-way Down keypress from drawer.
Modified
scrollToIndex()
to allow the method to be called when scrolling has occurred or when the current index differs from the desired index.Updated
generateRecords()
andrecordCountChanged()
to referencemodels
property onenyo.Collection
instead of outdatedrecords
property.
In "DatePickerSample", fixed issue causing input fields to be obscured in right-to-left mode.
In "DrawerSample", fixed spelling of "Third".
In "HighlightTextSample", temporarily removed filtering from sample until new implementation is ready.
Added new examples of
moon.Item
usage to "ItemSample".In "MarqueeSample", fixed behavior of "Stop Marquee" button.
Updated "ScrollerTextSample" to work with
value
property of ToggleButtons instead ofactive
property when declaring initial values and data bindings.In "SpinnerSample", added examples of spinners containing long text and
components
blocks.Updated "TimePickerSample" so that picker's locale is updated when the user selects a new locale. Also fixed exception thrown when setting locale, and updated method names for consistency.
layout
Removed
enyo.GridList
, the supporting kindenyo.GridFlyweightRepeater
, and "GridListSample". Developers should use theenyo.DataGridList
kind (underui/data
in Enyo core) instead.In
enyo.FittableLayout
, implemented CSS flexbox-based layout for improved performance on supported platforms. To use flexbox, setuseFlex: true
on a Fittable container. Otherwise, the existing JavaScript-based layout will be used. Related samples were also updated.Updated
enyo.FlyweightRepeater
to use delegate pattern, removing interim fix based on whether control was overloading the generator method. Also made changes for compatibility with recent changes toenyo.Control
.In
enyo.Panels
, implemented improved narrow fit detection using media queries (in CSS) and platform detection at initialization time (in newisNarrowDevice()
method). With these changes, resizing functionality has been restored.Also, modified
finishTransition()
so thatpopOnBack
is not ignored during transitions.
spotlight
Made several updates to
enyo.Spotlight
:Exposed
highlight()
andunhighlight()
functions, and addedbIgnoreMute
parameter to_highlight()
. When set totrue
, the highlighting code will run regardless of the muting state.Fixed issue in which Spotlight would blur the current control when attempting to navigate to a different control via 5-way.
Moved firing of
onSpotlightSelect
event fromthis.onSpotlightKeyDown()
tothis.onSpotlightKeyUp()
. Also added emulation ofholdPulse
foronSpotlightKeyDown
event.Fixed issue preventing show-on-focus captions from appearing when the activating control receives focus through a transition from pointer mode to 5-way mode.
Updated
enyo.Spotlight
andenyo.Spotlight.Accelerator
to cancel acceleration when Spotlight container boundary is reached.In
enyo.Spotlight.Container
, modifiedsetLastFocusedChild()
so thatgetFirstChild()
is called onenyo.Spotlight
instead of onthis
; also removed logging code that could cause unhandled exception.In
enyo.Spotlight.Muter
, added calls toenyo.Spotlight.highlight()
andenyo.Spotlight.unhighlight()
.
enyo-ilib
No changes.
enyo-webos
- Renamed
enyo.LS2Source
asenyo.LunaSource
and corrected order of parameters passed tooptions.success
.
bootplate-moonstone
- Bumped versions of submodules.
Known Issues and Limitations
- In right-to-left mode, in certain complex layouts involving scrollers, users may be unable to reach certain UI elements via 5-way keypresses.