diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 356f3efc8..344314d05 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -526,6 +526,27 @@
"panel_help_setup": {
"message": "Set Up Ghostery"
},
+ "panel_insights_audit_tags": {
+ "message": "Audit marketing tags on a page"
+ },
+ "panel_insights_promotion_explore_trends": {
+ "message": "Explore global digital trends"
+ },
+ "panel_insights_promotion_call_to_action": {
+ "message": "Try for free"
+ },
+ "panel_insights_promotion_header": {
+ "message": "Try Ghostery Insights"
+ },
+ "panel_insights_promotion_description": {
+ "message": "Speed up and clean up digital user experience with our professional tag analytics tool."
+ },
+ "panel_insights_promotion_trace_poor_performance": {
+ "message": "Trace sources of poor performance"
+ },
+ "panel_insights_promotion_watch_pings": {
+ "message": "Watch pings fire in real-time"
+ },
"panel_about_panel_header": {
"message": "About Ghostery Browser Extension"
},
@@ -1786,9 +1807,18 @@
"subscribe_pitch_learn_more": {
"message": "Learn more"
},
+ "subscribe_pitch_button_label": {
+ "message": "Get Ghostery Plus!"
+ },
+ "subscribe_pitch_no_thanks": {
+ "message": "No thanks, maybe later"
+ },
"subscribe_pitch_sign_here": {
"message": "Already a subscriber? Sign in here"
},
+ "subscribe_pitch_sign_in": {
+ "message": "Already subscribed? Sign in"
+ },
"subscription_midnight_theme": {
"message": "Midnight Theme"
},
diff --git a/app/fonts/roboto-all-charsets.woff b/app/fonts/roboto-all-charsets.woff
deleted file mode 100644
index 96c1986f0..000000000
Binary files a/app/fonts/roboto-all-charsets.woff and /dev/null differ
diff --git a/app/fonts/roboto-condensed-latin-bold-700.woff2 b/app/fonts/roboto-condensed-latin-bold-700.woff2
new file mode 100644
index 000000000..1a32150b5
Binary files /dev/null and b/app/fonts/roboto-condensed-latin-bold-700.woff2 differ
diff --git a/app/fonts/roboto-latin-bold-300.woff2 b/app/fonts/roboto-latin-bold-300.woff2
new file mode 100644
index 000000000..ef8c8836b
Binary files /dev/null and b/app/fonts/roboto-latin-bold-300.woff2 differ
diff --git a/app/fonts/roboto-latin-bold-500.woff2 b/app/fonts/roboto-latin-bold-500.woff2
new file mode 100644
index 000000000..6362d7f64
Binary files /dev/null and b/app/fonts/roboto-latin-bold-500.woff2 differ
diff --git a/app/fonts/roboto-latin-bold-700.woff2 b/app/fonts/roboto-latin-bold-700.woff2
new file mode 100644
index 000000000..32b25eee7
Binary files /dev/null and b/app/fonts/roboto-latin-bold-700.woff2 differ
diff --git a/app/fonts/roboto-latin-bold-900.woff2 b/app/fonts/roboto-latin-bold-900.woff2
new file mode 100644
index 000000000..802499d3f
Binary files /dev/null and b/app/fonts/roboto-latin-bold-900.woff2 differ
diff --git a/app/images/panel/checked-circle-icon.svg b/app/images/panel/checked-circle-icon.svg
new file mode 100644
index 000000000..493ad4055
--- /dev/null
+++ b/app/images/panel/checked-circle-icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/images/panel/insights-ribbon.svg b/app/images/panel/insights-ribbon.svg
new file mode 100644
index 000000000..568714725
--- /dev/null
+++ b/app/images/panel/insights-ribbon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/panel/actions/PanelActions.js b/app/panel/actions/PanelActions.js
index 601f169e9..55618cf28 100644
--- a/app/panel/actions/PanelActions.js
+++ b/app/panel/actions/PanelActions.js
@@ -17,7 +17,8 @@ import {
CLOSE_NOTIFICATION,
TOGGLE_EXPERT,
SET_THEME,
- CLEAR_THEME
+ CLEAR_THEME,
+ TOGGLE_INSIGHTS_MODAL
} from '../constants/constants';
import { sendMessageInPromise } from '../utils/msg';
@@ -98,3 +99,13 @@ export const getTheme = name => dispatch => (
}
})
);
+
+/**
+ * Triggered when the user signs in through the Insights modal into an account that does not have an insights subscription, prompting to re-display the modal, requiring a re-render
+ * @return {Object}
+ */
+export function toggleInsightsModal() {
+ return {
+ type: TOGGLE_INSIGHTS_MODAL,
+ };
+}
diff --git a/app/panel/components/BuildingBlocks/ModalExitButton.jsx b/app/panel/components/BuildingBlocks/ModalExitButton.jsx
new file mode 100644
index 000000000..92dad90e3
--- /dev/null
+++ b/app/panel/components/BuildingBlocks/ModalExitButton.jsx
@@ -0,0 +1,40 @@
+
+/**
+ * Modal Exit Button Component
+ *
+ * Ghostery Browser Extension
+ * https://www.ghostery.com/
+ *
+ * Copyright 2019 Ghostery, Inc. All rights reserved.
+ *
+ * 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
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+
+/**
+ * A Functional React component for a Exit Button
+ * @return {JSX} JSX for rendering a Exit Button
+ * @memberof SharedComponents
+ */
+const ModalExitButton = (props) => {
+ const {
+ toggleModal
+ } = props;
+
+ return (
+
+ );
+};
+
+// PropTypes ensure we pass required props of the correct type
+ModalExitButton.propTypes = {
+ toggleModal: PropTypes.func.isRequired
+};
+
+export default ModalExitButton;
diff --git a/app/panel/components/BuildingBlocks/index.js b/app/panel/components/BuildingBlocks/index.js
index e689a77de..3cb86a8ca 100644
--- a/app/panel/components/BuildingBlocks/index.js
+++ b/app/panel/components/BuildingBlocks/index.js
@@ -23,6 +23,7 @@ import PauseButton from './PauseButton';
import ToggleSlider from './ToggleSlider';
import RewardDetail from './RewardDetail';
import RewardListItem from './RewardListItem';
+import ModalExitButton from './ModalExitButton';
export {
ClickOutside,
@@ -33,5 +34,6 @@ export {
PauseButton,
ToggleSlider,
RewardDetail,
- RewardListItem
+ RewardListItem,
+ ModalExitButton
};
diff --git a/app/panel/components/InsightsPromoModal.jsx b/app/panel/components/InsightsPromoModal.jsx
new file mode 100644
index 000000000..f881a8bac
--- /dev/null
+++ b/app/panel/components/InsightsPromoModal.jsx
@@ -0,0 +1,87 @@
+/**
+ * Insights Promo Modal Component
+ *
+ * Ghostery Browser Extension
+ * https://www.ghostery.com/
+ *
+ * Copyright 2019 Ghostery, Inc. All rights reserved.
+ *
+ * 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
+ */
+
+import React from 'react';
+import Modal from '../../shared-components/Modal';
+import history from '../utils/history';
+import ModalExitButton from './BuildingBlocks/ModalExitButton';
+
+// A Functional React component for a Modal
+class InsightsPromoModal extends React.Component {
+ clickSignIn = () => {
+ history.push({
+ pathname: '/login',
+ });
+ this.props.actions.toggleInsightsModal();
+ };
+
+ render() {
+ return (
+