diff --git a/app/renderer/components/browserActionButton.js b/app/renderer/components/browserAction.js
similarity index 52%
rename from app/renderer/components/browserActionButton.js
rename to app/renderer/components/browserAction.js
index 911285b3568..c309cedb417 100644
--- a/app/renderer/components/browserActionButton.js
+++ b/app/renderer/components/browserAction.js
@@ -7,11 +7,13 @@ const ImmutableComponent = require('../../../js/components/immutableComponent')
const electron = require('electron')
const ipc = electron.ipcRenderer
const Button = require('../../../js/components/button')
+const BrowserActionBadge = require('../../renderer/components/browserActionBadge')
const cx = require('../../../js/lib/classSet')
const extensionState = require('../../common/state/extensionState')
const windowActions = require('../../../js/actions/windowActions')
+const {StyleSheet, css} = require('aphrodite')
-class BrowserActionButton extends ImmutableComponent {
+class BrowserAction extends ImmutableComponent {
constructor () {
super()
this.onClick = this.onClick.bind(this)
@@ -34,19 +36,38 @@ class BrowserActionButton extends ImmutableComponent {
}
render () {
+ const browserBadgeText = this.props.browserAction.get('text')
+ const browserBadgeColor = this.props.browserAction.get('color')
// TODO(bridiver) should have some visual notification of hover/press
- return
+ return
+
+ { browserBadgeText
+ ?
+ : null
+ }
+
}
}
-module.exports = BrowserActionButton
+const styles = StyleSheet.create({
+ browserActionButton: {
+ position: 'relative'
+ },
+ extensionButton: {
+ '-webkit-app-region': 'no-drag',
+ backgroundSize: 'contain',
+ height: '17px',
+ margin: '4px 0 0 0',
+ opacity: '0.85',
+ backgroundRepeat: 'no-repeat',
+ backgroundPosition: 'center'
+ }
+})
+
+module.exports = BrowserAction
diff --git a/app/renderer/components/browserActionBadge.js b/app/renderer/components/browserActionBadge.js
new file mode 100644
index 00000000000..ba786cbdd66
--- /dev/null
+++ b/app/renderer/components/browserActionBadge.js
@@ -0,0 +1,63 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const React = require('react')
+const ImmutableComponent = require('../../../js/components/immutableComponent')
+const {StyleSheet, css} = require('aphrodite')
+const commonStyles = require('./styles/global')
+
+class BrowserActionBadge extends ImmutableComponent {
+ constructor () {
+ super()
+ this.determineLayout = this.determineLayout.bind(this)
+ }
+
+ determineLayout () {
+ this.centered = this.refs.badge && this.refs.badge.offsetWidth > 16
+ }
+
+ componentDidMount () {
+ this.determineLayout()
+ }
+
+ componentDidUpdate () {
+ this.determineLayout()
+ }
+
+ render () {
+ return {this.props.text}
+ }
+}
+
+const styles = StyleSheet.create({
+ browserActionBadge: {
+ color: '#FFF',
+ borderRadius: '2px',
+ padding: '1px 2px',
+ pointerEvents: 'none',
+ font: '7pt "Arial Narrow"',
+ textAlign: 'center',
+ position: 'absolute',
+ top: '50%',
+ left: '40%',
+ border: '.5px solid #FFF',
+ minWidth: '8px'
+ },
+ centered: {
+ left: '50%',
+ transform: 'translateX(-50%)',
+ maxWidth: 'calc(100% - 5px)',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis'
+ }
+})
+
+module.exports = BrowserActionBadge
diff --git a/js/components/main.js b/js/components/main.js
index 569903e9f06..a0f59595b01 100644
--- a/js/components/main.js
+++ b/js/components/main.js
@@ -27,7 +27,7 @@ const UpdateBar = require('./updateBar')
const NotificationBar = require('./notificationBar')
const DownloadsBar = require('../../app/renderer/components/downloadsBar')
const Button = require('./button')
-const BrowserActionButton = require('../../app/renderer/components/browserActionButton')
+const BrowserAction = require('../../app/renderer/components/browserAction')
const SiteInfo = require('./siteInfo')
const BraveryPanel = require('./braveryPanel')
const ClearBrowsingDataPanel = require('./clearBrowsingDataPanel')
@@ -736,7 +736,7 @@ class Main extends ImmutableComponent {
if (node.classList &&
(node.classList.contains('popupWindow') ||
node.classList.contains('contextMenu') ||
- node.classList.contains('extensionButton') ||
+ node.matches('[class*="extensionButton_"]') ||
node.classList.contains('menubarItem') ||
node.classList.contains('bookmarkHanger'))) {
// Middle click (on context menu) needs to fire the click event.
@@ -838,7 +838,7 @@ class Main extends ImmutableComponent {
.map((extension) => extensionState.getBrowserActionByTabId(this.props.appState, extension.get('id'), this.activeTabId))
.filter((browserAction) => browserAction)
let buttons = extensionBrowserActions.map((browserAction, id) =>
-