From 6d99c03ac6dd4eb98fb09c004781a513878fb484 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Mon, 23 May 2022 23:56:31 +0200 Subject: [PATCH] Improve tab styles --- dist/electron-tabs.js | 2 +- dist/electron-tabs.js.map | 2 +- src/style.inline.css | 111 +++++++++++++++++++++++++------------- 3 files changed, 75 insertions(+), 40 deletions(-) diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index ff70bff..02836c8 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -1,4 +1,4 @@ -var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"; +var $5580883c37846f86$export$2e2bcd8739ae039 = "/* TODO: use custom properties */\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-rendering: optimizeLegibility;\n font-feature-settings: 'liga', 'clig', 'kern';\n}\n\n.etabs-tabgroup {\n width: 100%;\n height: 32px;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n background: #E7EAED;\n box-shadow: inset 0 -1px #DADCE0;\n border-top: 1px solid #DADCE0;\n}\n\n.etabs-tabgroup.visible {\n display: flex;\n}\n\n.etabs-tabs {\n height: 100%;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n height: 100%;\n background: #E7EAED;\n color: #696A6C;\n padding: 5px 9px;\n transition: background-color 150ms ease-out;\n box-shadow: inset 0 -1px #DADCE0;\n font: caption;\n font-size: 13px;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n cursor: grab;\n\tborder: none;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n box-shadow: none;\n\tborder-left: 1px solid #DADCE0;\n\tborder-right: 1px solid #DADCE0;\n\tpadding-left: 8px;\n\tpadding-right: 8px;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) {\n\tborder-left: 1px solid #B4B6B8;\n\tpadding-left: 8px;\n}\n\n.etabs-tab:not(.active):hover {\n\tbackground: #F1F3F4;\n}\n\n.etabs-buttons {\n border-left: 1px solid #B4B6B8;\n}\n\n.etabs-buttons button {\n display: block;\n color: #777;\n background: none;\n border: none;\n font-size: 16px;\n font-family: inherit;\n margin-top: 5px;\n border-radius: 50%;\n margin-left: 4px;\n width: 20px;\n height: 20px;\n text-align: center;\n line-height: 14px;\n padding: 1px 0 0 0;\n\tcursor: pointer;\n}\n\n.etabs-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #777;\n background: none;\n border: none;\n width: 20px;\n height: 20px;\n text-align: center;\n border-radius: 50%;\n cursor: pointer;\n padding: 1px 0 0 0;\n font-size: 16px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-views {\n position: relative;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index 5ba045c..3aec078 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\",\n newTabButton: this.getAttribute(\"new-tab-button\") || false,\n defaultTab: { title: \"New Tab\", active: true }\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setDefaultTab (tab) {\n this.options.defaultTab = tab;\n }\n\n addTab (args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTabButton) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\",\n newTabButton: this.getAttribute(\"new-tab-button\") || false,\n defaultTab: { title: \"New Tab\", active: true }\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setDefaultTab (tab) {\n this.options.defaultTab = tab;\n }\n\n addTab (args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTabButton) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n","/* TODO: use custom properties */\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-rendering: optimizeLegibility;\n font-feature-settings: 'liga', 'clig', 'kern';\n}\n\n.etabs-tabgroup {\n width: 100%;\n height: 32px;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n background: #E7EAED;\n box-shadow: inset 0 -1px #DADCE0;\n border-top: 1px solid #DADCE0;\n}\n\n.etabs-tabgroup.visible {\n display: flex;\n}\n\n.etabs-tabs {\n height: 100%;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n height: 100%;\n background: #E7EAED;\n color: #696A6C;\n padding: 5px 9px;\n transition: background-color 150ms ease-out;\n box-shadow: inset 0 -1px #DADCE0;\n font: caption;\n font-size: 13px;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n cursor: grab;\n\tborder: none;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n box-shadow: none;\n\tborder-left: 1px solid #DADCE0;\n\tborder-right: 1px solid #DADCE0;\n\tpadding-left: 8px;\n\tpadding-right: 8px;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) {\n\tborder-left: 1px solid #B4B6B8;\n\tpadding-left: 8px;\n}\n\n.etabs-tab:not(.active):hover {\n\tbackground: #F1F3F4;\n}\n\n.etabs-buttons {\n border-left: 1px solid #B4B6B8;\n}\n\n.etabs-buttons button {\n display: block;\n color: #777;\n background: none;\n border: none;\n font-size: 16px;\n font-family: inherit;\n margin-top: 5px;\n border-radius: 50%;\n margin-left: 4px;\n width: 20px;\n height: 20px;\n text-align: center;\n line-height: 14px;\n padding: 1px 0 0 0;\n\tcursor: pointer;\n}\n\n.etabs-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #777;\n background: none;\n border: none;\n width: 20px;\n height: 20px;\n text-align: center;\n border-radius: 50%;\n cursor: pointer;\n padding: 1px 0 0 0;\n font-size: 16px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-views {\n position: relative;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file diff --git a/src/style.inline.css b/src/style.inline.css index a626828..adda6e5 100644 --- a/src/style.inline.css +++ b/src/style.inline.css @@ -1,38 +1,64 @@ +/* TODO: use custom properties */ + +webview { + position: absolute; + visibility: hidden; + width: 100%; + height: 100%; +} + +webview.visible { + visibility: visible; +} + +.etabs { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + text-rendering: optimizeLegibility; + font-feature-settings: 'liga', 'clig', 'kern'; +} + .etabs-tabgroup { width: 100%; height: 32px; - background-color: #ccc; cursor: default; font: caption; font-size: 14px; -webkit-user-select: none; user-select: none; display: none; + background: #E7EAED; + box-shadow: inset 0 -1px #DADCE0; + border-top: 1px solid #DADCE0; } .etabs-tabgroup.visible { - display: block; + display: flex; +} + +.etabs-tabs { + height: 100%; } .etabs-tab { display: none; position: relative; - color: #333; - height: 22px; - padding: 6px 8px 4px; - border: 1px solid #aaa; - border-bottom: none; - border-left: none; - background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%); + height: 100%; + background: #E7EAED; + color: #696A6C; + padding: 5px 9px; + transition: background-color 150ms ease-out; + box-shadow: inset 0 -1px #DADCE0; font: caption; - font-size: 14px; - background-color: #ccc; - cursor: default; + font-size: 13px; + cursor: pointer; + box-sizing: border-box; } /* Dragula */ .etabs-tab.gu-mirror { padding-bottom: 0; + cursor: grab; + border: none; } .etabs-tab:first-child { @@ -45,34 +71,51 @@ .etabs-tab.active { background: #fff; + box-shadow: none; + border-left: 1px solid #DADCE0; + border-right: 1px solid #DADCE0; + padding-left: 8px; + padding-right: 8px; } .etabs-tab.flash { background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%); } -/* TODO: fix it */ +.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) { + border-left: 1px solid #B4B6B8; + padding-left: 8px; +} + +.etabs-tab:not(.active):hover { + background: #F1F3F4; +} + .etabs-buttons { - float: left; + border-left: 1px solid #B4B6B8; } .etabs-buttons button { - float: left; - color: #333; + display: block; + color: #777; background: none; border: none; - font-size: 12px; - margin-top: 6px; - border-radius: 2px; + font-size: 16px; + font-family: inherit; + margin-top: 5px; + border-radius: 50%; margin-left: 4px; width: 20px; + height: 20px; text-align: center; - padding: 4px 0; + line-height: 14px; + padding: 1px 0 0 0; + cursor: pointer; } .etabs-buttons button:hover { - color: #eee; - background-color: #aaa; + color: #333; + background-color: #bbb; } .etabs-tab-badge { @@ -112,36 +155,28 @@ .etabs-tab-buttons button { display: inline-block; - color: #333; + color: #777; background: none; border: none; width: 20px; + height: 20px; text-align: center; - border-radius: 2px; + border-radius: 50%; + cursor: pointer; + padding: 1px 0 0 0; + font-size: 16px; } .etabs-tab-buttons button:hover { - color: #eee; - background-color: #aaa; + color: #333; + background-color: #bbb; } .etabs-views { position: relative; - border-top: 1px solid #aaa; height: calc(100vh - 33px); } .etab-view { position: relative; } - -webview { - position: absolute; - visibility: hidden; - width: 100%; - height: 100%; -} - -webview.visible { - visibility: visible; -}