Skip to content

Commit f5244eb

Browse files
committed
feat(lp): pencil toggle for edit mode with pro upsell for free users
Turn the live-preview toolbar's play button into an edit-mode toggle: - Icon: fa-play → fa-pencil; title "Toggle Preview Mode (F8)" → "Toggle Edit Mode (F8)" via new LIVE_PREVIEW_MODE_TOGGLE_EDIT string. - Invert the .selected semantics — the button now lights amber when LiveDevelopment.getCurrentMode() === LIVE_EDIT_MODE (not when in preview). _initializeMode reconciles .selected against the real mode on every livePreviewMode pref change, so state and visuals stay synchronized. - Click handler routes through LiveDevelopment.setMode(LIVE_EDIT_MODE) instead of PreferencesManager.set, so we pick up the entitlement gate for free: setMode returns false for users without the live-edit entitlement, and we then invoke KernalModeTrust.ProDialogs.showProUpsellDialog(UPSELL_TYPE_LIVE_EDIT) — the same dialog the mode dropdown's "Edit Mode" item opens (main.js:459-466). Pro users in edit drop back to preview; pro users not in edit enter edit. - F8 keybinding routes through the same click handler, so it gets the same behavior and upsell for free. No existing tests are affected — the two suites that touch #previewModeLivePreviewButton only assert its visibility, never the icon, the .selected class, or the click path.
1 parent db412a1 commit f5244eb

3 files changed

Lines changed: 29 additions & 16 deletions

File tree

src/extensionsIntegrated/Phoenix-live-preview/main.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,10 @@ define(function (require, exports, module) {
369369
function _initializeMode() {
370370
const currentMode = LiveDevelopment.getCurrentMode();
371371

372-
// when in preview mode, we need to give the play button a selected state
373-
if (currentMode === LiveDevelopment.CONSTANTS.LIVE_PREVIEW_MODE) {
372+
// Pencil button lights up only when edit mode is active; preview /
373+
// highlight modes leave it un-tinted. Click toggles between edit
374+
// and preview.
375+
if (currentMode === LiveDevelopment.CONSTANTS.LIVE_EDIT_MODE) {
374376
$previewBtn.addClass('selected');
375377
} else {
376378
$previewBtn.removeClass('selected');
@@ -744,19 +746,29 @@ define(function (require, exports, module) {
744746
}
745747

746748
/**
747-
* Handle preview button click - toggles between preview mode and the user's default mode.
748-
* PRO users toggle between preview and edit mode.
749-
* community users toggle between preview and highlight mode.
749+
* Toggles between edit mode and preview mode. The pencil button lights up
750+
* (via .selected applied in _initializeMode) when edit mode is active;
751+
* clicking it when already in edit drops back to preview. Clicking when
752+
* NOT in edit tries to enter edit through LiveDevelopment.setMode, which
753+
* returns false for users without the live-edit entitlement — in that
754+
* case we show the same pro upsell dialog the mode dropdown uses,
755+
* mirroring its "Edit Mode" item. _initializeMode reconciles the
756+
* .selected class against the actual current mode after the pref
757+
* change lands.
750758
*/
751759
function _handlePreviewBtnClick() {
752-
if($previewBtn.hasClass('selected')) {
753-
$previewBtn.removeClass('selected');
754-
const defaultMode = isProEditUser ? 'edit' : 'highlight';
755-
PreferencesManager.set(PREFERENCE_LIVE_PREVIEW_MODE, defaultMode);
756-
} else {
757-
// Currently NOT in preview mode - switch to preview
758-
$previewBtn.addClass('selected');
759-
PreferencesManager.set(PREFERENCE_LIVE_PREVIEW_MODE, "preview");
760+
const currentMode = LiveDevelopment.getCurrentMode();
761+
if (currentMode === LiveDevelopment.CONSTANTS.LIVE_EDIT_MODE) {
762+
LiveDevelopment.setMode(LiveDevelopment.CONSTANTS.LIVE_PREVIEW_MODE);
763+
return;
764+
}
765+
if (!LiveDevelopment.setMode(LiveDevelopment.CONSTANTS.LIVE_EDIT_MODE)) {
766+
if (KernalModeTrust.ProDialogs) {
767+
KernalModeTrust.ProDialogs.showProUpsellDialog(
768+
KernalModeTrust.ProDialogs.UPSELL_TYPE_LIVE_EDIT);
769+
} else {
770+
Metrics.countEvent(Metrics.EVENT_TYPE.PRO, "proUpsellDlg", "fail");
771+
}
760772
}
761773
}
762774

@@ -765,7 +777,7 @@ define(function (require, exports, module) {
765777
Strings: Strings,
766778
livePreview: Strings.LIVE_DEV_STATUS_TIP_OUT_OF_SYNC,
767779
clickToReload: Strings.LIVE_DEV_CLICK_TO_RELOAD_PAGE,
768-
clickToPreview: Strings.LIVE_PREVIEW_MODE_TOGGLE_PREVIEW,
780+
clickToToggleEdit: Strings.LIVE_PREVIEW_MODE_TOGGLE_EDIT,
769781
switchToDesignMode: Strings.CCB_SWITCH_TO_DESIGN_MODE,
770782
livePreviewSettings: Strings.LIVE_DEV_SETTINGS,
771783
livePreviewConfigureModes: Strings.LIVE_PREVIEW_CONFIGURE_MODES,

src/extensionsIntegrated/Phoenix-live-preview/panel.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<button id="designModeToggleLivePreviewButton" title="{{switchToDesignMode}}" class="btn-alt-quiet toolbar-button">
88
<i class="fa-solid fa-expand"></i>
99
</button>
10-
<button id="previewModeLivePreviewButton" title="{{clickToPreview}}" class="btn-alt-quiet toolbar-button">
11-
<i class="fa-solid fa-play"></i>
10+
<button id="previewModeLivePreviewButton" title="{{clickToToggleEdit}}" class="btn-alt-quiet toolbar-button">
11+
<i class="fa-solid fa-pencil"></i>
1212
</button>
1313
<button id="livePreviewModeBtn" title="{{livePreviewConfigureModes}}" class="btn-alt-quiet toolbar-button btn-dropdown btn"><!-- Content will come here dynamically --></button>
1414
</div>

src/nls/root/strings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ define({
544544
"IMAGE_SEARCH_PRO_THROTTLE_MESSAGE": "Image search is temporarily unavailable due to high demand. This usually clears within an hour — please try again shortly.",
545545
"LIVE_PREVIEW_CUSTOM_SERVER_BANNER": "Getting preview from your custom server {0}",
546546
"LIVE_PREVIEW_MODE_TOGGLE_PREVIEW": "Toggle Preview Mode (F8)",
547+
"LIVE_PREVIEW_MODE_TOGGLE_EDIT": "Toggle Edit Mode (F8)",
547548
"LIVE_PREVIEW_MODE_PREVIEW": "Preview Mode",
548549
"LIVE_PREVIEW_MODE_HIGHLIGHT": "Highlight Mode",
549550
"LIVE_PREVIEW_MODE_EDIT": "Edit Mode",

0 commit comments

Comments
 (0)