From 6e2ab2902ab56abb8325c329e87942a536ad384b Mon Sep 17 00:00:00 2001 From: bat Date: Fri, 14 Apr 2023 04:52:53 +0000 Subject: [PATCH] collapse/expand --- app.js | 3 ++- file-group.js | 5 ++++- file-view.js | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 79a22e0..b012e03 100644 --- a/app.js +++ b/app.js @@ -73,7 +73,8 @@ class EditorApp extends HTMLElement { save(e) { const files = this.el.files.map( - ({name, data}) => ({name, data}) + ({name, data, collapsed}) => + ({name, data, collapsed}) ) const data = JSON.stringify({ type: 'm-file-group', diff --git a/file-group.js b/file-group.js index a1132a3..3653904 100644 --- a/file-group.js +++ b/file-group.js @@ -57,7 +57,7 @@ export class FileGroup extends HTMLElement { } } - addFile({name, data} = {}) { + addFile({name, data, collapsed} = {}) { const el = document.createElement('m-editor-file-view') if (name !== undefined) { el.name = name @@ -65,6 +65,9 @@ export class FileGroup extends HTMLElement { if (data !== undefined) { el.data = data } + if (collapsed !== undefined) { + el.collapsed = collapsed + } this.contentEl.appendChild(el) return el } diff --git a/file-view.js b/file-view.js index b925f22..0d59d9a 100644 --- a/file-view.js +++ b/file-view.js @@ -5,6 +5,16 @@ export class FileView extends HTMLElement { `, + down: ` + + + + `, + up: ` + + + + `, } textEn = { @@ -30,6 +40,14 @@ export class FileView extends HTMLElement { this.headerEl.appendChild(this.nameEl) this.editEl = document.createElement('m-editor-text-edit') this.contentEl.appendChild(this.editEl) + this.collapseBtn = document.createElement( + 'button' + ) + this.collapseBtn.innerHTML = this.icons.up + this.collapseBtn.addEventListener('click', () => { + this.collapsed = !this.collapsed + }) + this.headerEl.appendChild(this.collapseBtn) this.menuBtn = document.createElement('button') this.menuBtn.innerHTML = this.icons.menu this.menuBtn.addEventListener('click', () => { @@ -80,6 +98,10 @@ export class FileView extends HTMLElement { display: flex; flex-direction: column; align-items: stretch; + min-height: 5px; + } + div.content.collapsed > * { + display: none; } svg { height: 20px; @@ -105,6 +127,25 @@ export class FileView extends HTMLElement { return this.editEl.value } + set collapsed(value) { + const cl = this.contentEl.classList + if (value) { + cl.add('collapsed') + } else { + cl.remove('collapsed') + } + this.collapseBtn.innerHTML = ( + value ? + this.icons.down : this.icons.up + ) + } + + get collapsed() { + return this.contentEl.classList.contains( + 'collapsed' + ) + } + get language() { return this._language }