Skip to content

Commit

Permalink
Add a element decorator to handle creating custom elements
Browse files Browse the repository at this point in the history
  • Loading branch information
abe33 committed Dec 7, 2015
1 parent 8dabe21 commit f182311
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions lib/decorators/element.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
'use babel'

import {registerOrUpdateElement} from 'atom-utils'

/**
* Generates a decorator function to convert a class into a custom element
* through the `registerOrUpdateElement` method from `atom-utils`.
*
* The decorator will take care to return the generated element class so that
* you can just export it directly as demonstrated below.
*
* As supported by the `registerOrUpdateElement` method, static member will
* be available on the new class.
*
* **Note: As there's some limitations when modifying the prototype
* of a custom element, if you need to inject element callbacks (like
* `createdCallback`) through a mixin, the mixins should be included before
* converting the class as a custom element. You'll be able to achieve that by
* placing the `include` decorator after the `element` one as shown in the
* second example.**
*
* @param {string} elementName the node name of the element to register
* @return {Function} the element class as returned by
* `document.registerElement`
* @example
* @element('dummy-element-name')
* export default class SomeClass {
* // ...
* }
*
* @element('dummy-element-with-mixin')
* @include(SomeMixin)
* export default class SomeClass {
* // ...
* }
*/
export default function element (elementName) {
return function (cls) {
let elementClass = registerOrUpdateElement(elementName, {
class: cls
})
return elementClass
}
}

0 comments on commit f182311

Please sign in to comment.