diff --git a/docs/METRICS.md b/docs/METRICS.md
index 641a40f89a..6bb72c0038 100644
--- a/docs/METRICS.md
+++ b/docs/METRICS.md
@@ -315,6 +315,7 @@ These are events that an add-on user can encounter on a shot they own
32. [x] Click the download button `web/download/navbar`
33. [x] Visit an image directly, when the image isn't embedded directly in a Screenshots shot page, `web/visit/direct-view-owner`
34. [x] View an image directly, when the image is being shown as part of a Facebook/Twitter style preview (the og:image or twitter:image), `web/visit/direct-view-embedded-owner`
+35. [x] Close new edit tools promotion dialog, `web/promo-closed`
#### Shot Index (My Shots)
diff --git a/locales/en-US/server.ftl b/locales/en-US/server.ftl
index 8457301d2e..a56cacbc02 100644
--- a/locales/en-US/server.ftl
+++ b/locales/en-US/server.ftl
@@ -175,6 +175,14 @@ timeDiffFutureDays = { $number ->
errorThirdPartyCookiesEnabled = If you took this shot and cannot delete it, you may need to temporarily enable third party cookies from your browser’s preferences.
+## Shot Page New Feature Promotion Dialog.
+# Note: If possible, choose a short translation to better fit into the card.
+promoTitle = Take Note!
+promoMessage = Updated editing tools let you crop, highlight, and even add text to your shot.
+promoLink = Give them a try
+promoCloseButton =
+ .title = Close notification
+
## Annotations
annotationPenButton =
diff --git a/server/src/pages/shot/controller.js b/server/src/pages/shot/controller.js
index 3559dbbfd2..67cc655f1a 100644
--- a/server/src/pages/shot/controller.js
+++ b/server/src/pages/shot/controller.js
@@ -20,6 +20,22 @@ function shouldHighlightEditIcon(model) {
return !hasSeen;
}
+function shouldShowPromo(model) {
+ if (!model.isOwner || !model.enableAnnotations) {
+ return false;
+ }
+ let show = false;
+ const count = localStorage.hasSeenPromoDialog;
+ if (!count) {
+ localStorage.hasSeenPromoDialog = 1;
+ show = true;
+ } else if (count < 3) {
+ localStorage.hasSeenPromoDialog = parseInt(count, 10) + 1;
+ show = true;
+ }
+ return show;
+}
+
exports.launch = function(data) {
const firstSet = !model;
model = data;
@@ -57,6 +73,7 @@ exports.launch = function(data) {
}
}
model.highlightEditButton = shouldHighlightEditIcon(model);
+ model.promoDialog = shouldShowPromo(model);
if (firstSet) {
refreshHash();
}
diff --git a/server/src/pages/shot/promo-dialog.js b/server/src/pages/shot/promo-dialog.js
new file mode 100644
index 0000000000..47545ed709
--- /dev/null
+++ b/server/src/pages/shot/promo-dialog.js
@@ -0,0 +1,40 @@
+const React = require("react");
+const PropTypes = require("prop-types");
+const { Localized } = require("fluent-react/compat");
+const sendEvent = require("../../browser-send-event.js");
+
+exports.PromoDialog = class PromoDialog extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ if (this.props.display) {
+ return
+
+
+
+
+
Take Note!
+
+
+
+ Updated editing tools let you crop, highlight, and even add text to your shot.
+