Skip to content

Commit fdfd6fc

Browse files
authored
feat: Add events generator (#707)
* feat Move the generator into the repo * feat Add support for the config object * feat Remove the better-config tool; not used * feat Pull out changes to index file; update generator command * feat Update changelog * feat Fix bug Michael found in dangling comma * feat Comment out invalid placeholder CSS and set up line clear in the template * feat Update changelog * feat Save conflict resolution file :) * feat Update package-lock * feat Update documentation, tidy up spacing in demo files, parity standalone packages with monorepo * feat Add events to the generator * feat Add to readme and add emitEvent to function * feat Add changelog update, clean up newline, clear out demo listing * feat Remove pfe-foo from listing * feat Remove unnecessary / unrelated updates * feat Add events to the schemas, update commenting approach * feat Remove duplicate component type * feat Adjust spacing * feat Move observed attributes after type * feat Fix logic on attribute commenting selector * feat Adjusting spacing on comments
1 parent 384c314 commit fdfd6fc

File tree

7 files changed

+163
-114
lines changed

7 files changed

+163
-114
lines changed

CHANGELOG-prerelease.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## Prerelease 41 ( TBD )
2+
3+
Tag: [v1.0.0-prerelease.41](https://github.com/patternfly/patternfly-elements/releases/tag/v1.0.0-prerelease.41)
4+
5+
- [](https://github.com/patternfly/patternfly-elements/commit/) feat: Add events to the generator
6+
17
## Prerelease 40 ( 2020-03-10 )
28

39
Tag: [v1.0.0-prerelease.40](https://github.com/patternfly/patternfly-elements/releases/tag/v1.0.0-prerelease.40)
@@ -7,7 +13,6 @@ Tag: [v1.0.0-prerelease.40](https://github.com/patternfly/patternfly-elements/re
713
- [7deb9bb](https://github.com/patternfly/patternfly-elements/commit/7deb9bb6227c0560b60a665ecd43b450db0f90e1) fix: Prevent default pfe-cta arrow from wrapping to a new line by itself #679 (#765)
814
- [ba9d8b2](https://github.com/patternfly/patternfly-elements/commit/ba9d8b2cfed50580671041778d3d00cb5d5741d1) chore: Fixed invalid Markdown, was missing a back tic (#762)
915

10-
1116
## Prerelease 39 ( 2020-02-19 )
1217

1318
Tag: [v1.0.0-prerelease.39](https://github.com/patternfly/patternfly-elements/releases/tag/v1.0.0-prerelease.39)
@@ -35,6 +40,7 @@ Tag: [v1.0.0-prerelease.38](https://github.com/patternfly/patternfly-elements/re
3540
- [5585188](https://github.com/patternfly/patternfly-elements/commit/558518849087bd9b348c2827549acfe081d8ed96) docs: switching pfe-collapse story from heading tag to button
3641

3742
## Prerelease 37 ( 2020-01-28 )
43+
3844
Tag: [v1.0.0-prerelease.37](https://github.com/patternfly/patternfly-elements/releases/tag/v1.0.0-prerelease.37)
3945

4046
- [6a41811](https://github.com/patternfly/patternfly-elements/commit/6a418112668ba580918ac4a8b4b54e8df05c1155) fix: reference error when slot is missing in pfe-navigation

generators/element/index.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ module.exports = class extends Generator {
8787
if (config.author) {
8888
ret = typeof config.author.name === "undefined";
8989
}
90-
9190
return ret;
9291
}
9392
},
@@ -153,6 +152,20 @@ module.exports = class extends Generator {
153152
.split(",")
154153
.filter(s => s.length);
155154
}
155+
},
156+
{
157+
type: "input",
158+
name: "events",
159+
message:
160+
"List any events you want registered for the element, separated by commas (i.e., change, click)",
161+
// validate: function(answer) {},
162+
filter: function(response) {
163+
// remove whitespace, split on comma, and remove empty entries
164+
return response
165+
.replace(/\s/g, "")
166+
.split(",")
167+
.filter(s => s.length);
168+
}
156169
}
157170
]).then(answers => {
158171
if (Object.keys(answers).length > 0) {
@@ -241,6 +254,7 @@ module.exports = class extends Generator {
241254
rollupConfigLocation: rollupConfigLocation,
242255
attributes: answers.attributes,
243256
slots: answers.slots,
257+
events: answers.events,
244258
testFileLocation: testFileLocation
245259
};
246260

generators/element/templates/pfelement-README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ Explain how this component meets accessibility standards.
3939
## Events
4040
Describe any events that are accessible external to the web component. There is no need to describe all the internal-only functions.
4141

42+
<%_ for(let i = 0; i < events.length; i++) { _%>
43+
### <%= elementName %>:<%= events[i] %>
44+
45+
<%_ } _%>
46+
4247
## Dependencies
4348
Describe any dependent elements or libraries here too.
4449

generators/element/templates/src/element.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,21 @@ class <%= elementClassName %> extends PFElement {
2121
<%_ } _%>
2222
}
2323

24-
<%_ if (attributes.length > 0) { _%>
25-
static get observedAttributes() {
26-
return [<% if (isPfelement) { %><%- _.join(attributes.map(item => `"pfe-${item}"`), ", ") %><% } else { %><%- _.join(attributes.map(item => `"${item}"`), ", ") %><% } %>];
27-
}
28-
<%_ } else { _%>
29-
// static get observedAttributes() {
30-
// return [];
31-
// }
32-
<%_ } _%>
24+
<% if (events.length < 1) { %>// <% } %>static get events() {
25+
<% if (events.length < 1) { %>// <% } %>return {<% for(let i = 0; i < events.length; i++) { %>
26+
<%= events[i] %>: `${this.tag}:<%= events[i] %>`<% if (i < (events.length - 1)) { %>,<% } } %>
27+
<% if (events.length < 1) { %>// <% } %>};
28+
<% if (events.length < 1) { %>// <% } %>}
3329

3430
// Declare the type of this component
3531
static get PfeType() {
3632
return PFElement.PfeTypes.<%= _.capitalize(template_type) %>;
3733
}
3834

35+
<% if (attributes.length < 1) { %>// <% } %>static get observedAttributes() {
36+
<% if (attributes.length < 1) { %>// <% } %>return [<% if (isPfelement) { %><%- _.join(attributes.map(item => `"pfe-${item}"`), ", ") %><% } else { %><%- _.join(attributes.map(item => `"${item}"`), ", ") %><% } %>];
37+
<% if (attributes.length < 1) { %>// <% } %>}
38+
3939
constructor() {
4040
super(<%= elementClassName %>, { type: <%= elementClassName %>.PfeType });
4141
<%_ if (slots.length > 0) { %>
@@ -56,17 +56,31 @@ class <%= elementClassName %> extends PFElement {
5656
// this.<%= slots[i] %>.addEventListener("slotchange", this._init);
5757
<%_ } _%>
5858
<%_ } _%>
59+
60+
<%_ for(let i = 0; i < events.length; i++) { _%>
61+
this.addEventListener(<%= elementClassName %>.events.<%= events[i] %>, this._<%= events[i] %>Handler);
62+
<%_ } _%>
5963
}
6064

61-
// disconnectedCallback() {}
65+
disconnectedCallback() {
66+
<%_ for(let i = 0; i < events.length; i++) { _%>
67+
this.removeEventListener(<%= elementClassName %>.events.<%= events[i] %>, this._<%= events[i] %>Handler);
68+
<%_ } _%>
69+
}
6270

6371
<%_ if (attributes.length > 0) { _%>
6472
// Process the attribute change
65-
attributeChangedCallback(attr, oldValue, newValue) {
66-
super.attributeChangedCallback(attr, oldValue, newValue);
73+
<% if (attributes.length < 1) { %>// <% } %>attributeChangedCallback(attr, oldValue, newValue) {
74+
<% if (attributes.length < 1) { %>// <% } %>super.attributeChangedCallback(attr, oldValue, newValue);
75+
<% if (attributes.length < 1) { %>// <% } %>}
76+
<%_ } _%>
77+
78+
<%_ for(let i = 0; i < events.length; i++) { _%>
79+
_<%= events[i] %>Handler(event) {
80+
this.emitEvent(<%= elementClassName %>.events.<%= events[i] %>, {
81+
detail: {}
82+
});
6783
}
68-
<%_ } else { _%>
69-
// attributeChangedCallback(attr, oldValue, newValue) {}
7084
<%_ } _%>
7185
}
7286

generators/element/templates/src/element.json

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,23 @@
4747
"default": "",
4848
"prefixed": <% if (isPfelement) { %>true<% } else { %>false<% } %>
4949
}<% if(attributes.length > 1 && i < attributes.length - 1) { %>,<% } %>
50-
<%_ } %>}<% if(attributes.length > 1) { %>,
50+
<% } %>}<% if(attributes.length > 1) { %>,
5151
"required": [ "<%= attributes[0] %>" ]<% } %>
52+
},
53+
"events": {
54+
"title": "Events",
55+
"description": "Definition of the supported events",
56+
"type": "object",
57+
"properties": {<% for(let i = 0; i < events.length; i++) { %><% if (i > 0) { %>,<% } %>
58+
"<%= events[i] %>": {
59+
"title": "<%= _.capitalize(events[i]) %>",
60+
"type": "string",
61+
"default": "<%= elementName %>:<%= events[i] %>"
62+
}<% } %>
63+
}
5264
}
5365
},
54-
"required": [ "slots", "attributes" ],
66+
"required": [ "slots", "attributes", "events" ],
5567
"additionalProperties": false
5668
}
5769

generators/element/templates/standalone-README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,32 @@ Explain how this component meets accessibility standards.
1717

1818
## Slots
1919

20+
<%_ if (slots.length > 0) { _%>
21+
<%_ for(let i = 0; i < slots.length; i++) { _%>
22+
- `<%= slots[i] %>`: Describe this slot and best practices around what markup it can contain.
23+
<%_ } _%>
24+
<%_ } else { _%>
2025
- `namedSlot`: Describe each available slot and best practices around what markup it can contain.
26+
<%_ } _%>
2127

2228
## Attributes
2329

30+
<%_ if (attributes.length > 0) { _%>
31+
<%_ for(let i = 0; i < attributes.length; i++) { _%>
32+
- `<% if (isPfelement) { %>pfe-<% } %><%= attributes[i] %>`: Describe this attribute and what function is serves.
33+
<%_ } _%>
34+
<%_ } else { _%>
2435
- `attr`: Describe each available attribute and what function is serves.
36+
<%_ } _%>
2537

2638
## Events
2739
Describe any events that are accessible external to the web component. There is no need to describe all the internal-only functions.
2840

41+
<%_ for(let i = 0; i < events.length; i++) { _%>
42+
### <%= elementName %>:<%= events[i] %>
43+
44+
<%_ } _%>
45+
2946
## Dependencies
3047
Describe any dependent elements or libraries here too.
3148

0 commit comments

Comments
 (0)