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
}