Skip to content

Commit a068e8f

Browse files
authored
Merge pull request #55 from github/use-connectedcallback
Use the connectedCallback function to set button styles instead of the constructor
2 parents 314ae02 + 7e3d22c commit a068e8f

File tree

2 files changed

+48
-31
lines changed

2 files changed

+48
-31
lines changed

src/index.ts

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,22 @@ class MarkdownButtonElement extends HTMLElement {
111111
}
112112

113113
class MarkdownHeaderButtonElement extends MarkdownButtonElement {
114-
constructor() {
115-
super()
116-
114+
connectedCallback() {
117115
const level = parseInt(this.getAttribute('level') || '3', 10)
116+
this.#setLevelStyle(level)
117+
}
118+
119+
static get observedAttributes() {
120+
return ['level']
121+
}
122+
123+
attributeChangedCallback(name: string, oldValue: string, newValue: string) {
124+
if (name !== 'level') return
125+
const level = parseInt(newValue || '3', 10)
126+
this.#setLevelStyle(level)
127+
}
128+
129+
#setLevelStyle(level: number) {
118130
if (level < 1 || level > 6) {
119131
return
120132
}
@@ -132,8 +144,7 @@ if (!window.customElements.get('md-header')) {
132144
}
133145

134146
class MarkdownBoldButtonElement extends MarkdownButtonElement {
135-
constructor() {
136-
super()
147+
connectedCallback() {
137148
styles.set(this, {prefix: '**', suffix: '**', trimFirst: true})
138149
}
139150
}
@@ -144,8 +155,7 @@ if (!window.customElements.get('md-bold')) {
144155
}
145156

146157
class MarkdownItalicButtonElement extends MarkdownButtonElement {
147-
constructor() {
148-
super()
158+
connectedCallback() {
149159
styles.set(this, {prefix: '_', suffix: '_', trimFirst: true})
150160
}
151161
}
@@ -156,8 +166,7 @@ if (!window.customElements.get('md-italic')) {
156166
}
157167

158168
class MarkdownQuoteButtonElement extends MarkdownButtonElement {
159-
constructor() {
160-
super()
169+
connectedCallback() {
161170
styles.set(this, {prefix: '> ', multiline: true, surroundWithNewlines: true})
162171
}
163172
}
@@ -168,8 +177,7 @@ if (!window.customElements.get('md-quote')) {
168177
}
169178

170179
class MarkdownCodeButtonElement extends MarkdownButtonElement {
171-
constructor() {
172-
super()
180+
connectedCallback() {
173181
styles.set(this, {prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```'})
174182
}
175183
}
@@ -180,8 +188,7 @@ if (!window.customElements.get('md-code')) {
180188
}
181189

182190
class MarkdownLinkButtonElement extends MarkdownButtonElement {
183-
constructor() {
184-
super()
191+
connectedCallback() {
185192
styles.set(this, {prefix: '[', suffix: '](url)', replaceNext: 'url', scanFor: 'https?://'})
186193
}
187194
}
@@ -192,8 +199,7 @@ if (!window.customElements.get('md-link')) {
192199
}
193200

194201
class MarkdownImageButtonElement extends MarkdownButtonElement {
195-
constructor() {
196-
super()
202+
connectedCallback() {
197203
styles.set(this, {prefix: '![', suffix: '](url)', replaceNext: 'url', scanFor: 'https?://'})
198204
}
199205
}
@@ -204,8 +210,7 @@ if (!window.customElements.get('md-image')) {
204210
}
205211

206212
class MarkdownUnorderedListButtonElement extends MarkdownButtonElement {
207-
constructor() {
208-
super()
213+
connectedCallback() {
209214
styles.set(this, {prefix: '- ', multiline: true, unorderedList: true})
210215
}
211216
}
@@ -216,8 +221,7 @@ if (!window.customElements.get('md-unordered-list')) {
216221
}
217222

218223
class MarkdownOrderedListButtonElement extends MarkdownButtonElement {
219-
constructor() {
220-
super()
224+
connectedCallback() {
221225
styles.set(this, {prefix: '1. ', multiline: true, orderedList: true})
222226
}
223227
}
@@ -228,8 +232,7 @@ if (!window.customElements.get('md-ordered-list')) {
228232
}
229233

230234
class MarkdownTaskListButtonElement extends MarkdownButtonElement {
231-
constructor() {
232-
super()
235+
connectedCallback() {
233236
styles.set(this, {prefix: '- [ ] ', multiline: true, surroundWithNewlines: true})
234237
}
235238
}
@@ -240,8 +243,7 @@ if (!window.customElements.get('md-task-list')) {
240243
}
241244

242245
class MarkdownMentionButtonElement extends MarkdownButtonElement {
243-
constructor() {
244-
super()
246+
connectedCallback() {
245247
styles.set(this, {prefix: '@', prefixSpace: true})
246248
}
247249
}
@@ -252,8 +254,7 @@ if (!window.customElements.get('md-mention')) {
252254
}
253255

254256
class MarkdownRefButtonElement extends MarkdownButtonElement {
255-
constructor() {
256-
super()
257+
connectedCallback() {
257258
styles.set(this, {prefix: '#', prefixSpace: true})
258259
}
259260
}
@@ -264,8 +265,7 @@ if (!window.customElements.get('md-ref')) {
264265
}
265266

266267
class MarkdownStrikethroughButtonElement extends MarkdownButtonElement {
267-
constructor() {
268-
super()
268+
connectedCallback() {
269269
styles.set(this, {prefix: '~~', suffix: '~~', trimFirst: true})
270270
}
271271
}
@@ -276,10 +276,6 @@ if (!window.customElements.get('md-strikethrough')) {
276276
}
277277

278278
class MarkdownToolbarElement extends HTMLElement {
279-
constructor() {
280-
super()
281-
}
282-
283279
connectedCallback(): void {
284280
if (!this.hasAttribute('role')) {
285281
this.setAttribute('role', 'toolbar')

test/test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,18 @@ describe('markdown-toolbar-element', function () {
831831
})
832832

833833
describe('header', function () {
834+
it('sets the level correctly even when dynamically created', function () {
835+
const headerElement = document.createElement('md-header')
836+
headerElement.setAttribute('level', '2')
837+
headerElement.textContent = 'h2'
838+
const toolbar = document.querySelector('markdown-toolbar')
839+
toolbar.appendChild(headerElement)
840+
841+
setVisualValue('|title|')
842+
clickToolbar('md-header[level="2"]')
843+
assert.equal('## |title|', visualValue())
844+
})
845+
834846
it('inserts header syntax with cursor in description', function () {
835847
setVisualValue('|title|')
836848
clickToolbar('md-header')
@@ -848,6 +860,15 @@ describe('markdown-toolbar-element', function () {
848860
clickToolbar('md-header[level="10"]')
849861
assert.equal('|title|', visualValue())
850862
})
863+
864+
it('dynamically changes header level based on the level attribute', function () {
865+
setVisualValue('|title|')
866+
const headerButton = document.querySelector('md-header[level="1"]')
867+
headerButton.setAttribute('level', '2')
868+
headerButton.click()
869+
870+
assert.equal('## |title|', visualValue())
871+
})
851872
})
852873
})
853874
})

0 commit comments

Comments
 (0)