Skip to content

Commit 2420232

Browse files
committed
Merge remote-tracking branch 'origin/MC-877-couldnt-save-button-text-without-focusing-out-of-live-edit' into cms-team-2-button-bugs
2 parents 59b1ad7 + a19a6fa commit 2420232

File tree

3 files changed

+111
-2
lines changed

3 files changed

+111
-2
lines changed

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderButtonItemTests.xml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,4 +1191,52 @@
11911191
<seeElementInDOM selector="{{ButtonItemOnStage.moveHandleDisabled('1')}}" stepKey="seeMoveHandleDisabled2"/>
11921192
<dontSeeElementInDOM selector="{{ButtonItemOnStage.moveHandle('1')}}" stepKey="dontSeeMoveHandleEnabled2"/>
11931193
</test>
1194+
<test name="ButtonItemCanSaveButtonTextWithoutFocusingOutsideOfLiveEdit">
1195+
<annotations>
1196+
<features value="PageBuilder"/>
1197+
<stories value="Buttons"/>
1198+
<title value="Button Item - Can Save Button Text Without Focusing Outside of Live Edit"/>
1199+
<description value="A user should be able to edit a button item inline on the stage and save the edit without first focusing outside of the live edit area."/>
1200+
<severity value="AVERAGE"/>
1201+
<useCaseId value="MC-877"/>
1202+
<testCaseId value="MC-3672"/>
1203+
<group value="pagebuilder"/>
1204+
<group value="pagebuilder-buttons"/>
1205+
<group value="pagebuilder-buttonItem"/>
1206+
</annotations>
1207+
<before>
1208+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
1209+
<actionGroup ref="navigateToAPageWithPageBuilder" stepKey="navigateToAPageWithPageBuilder"/>
1210+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
1211+
</before>
1212+
<after>
1213+
<actionGroup ref="logout" stepKey="logout"/>
1214+
</after>
1215+
<actionGroup ref="addPageBuilderPageTitle" stepKey="enterPageTitle">
1216+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
1217+
</actionGroup>
1218+
<!-- Add Button Group -->
1219+
<comment userInput="Add Button Group" stepKey="commentAddButtonGroup"/>
1220+
<actionGroup ref="expandPageBuilderPanelGroup" stepKey="expandPageBuilderPanelGroup">
1221+
<argument name="group" value="PageBuilderButtonsContentType"/>
1222+
</actionGroup>
1223+
<actionGroup ref="dragContentTypeToStage" stepKey="dragButtonsOntoStage">
1224+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
1225+
</actionGroup>
1226+
<!-- Enter Text On Stage -->
1227+
<comment userInput="Enter Text On Stage" stepKey="commentEnterText"/>
1228+
<waitForElementVisible selector="{{ButtonItemOnStage.editableButtonItemElement('1')}}" stepKey="waitForButtonEditable"/>
1229+
<click selector="{{ButtonItemOnStage.editableButtonItemElement('1')}}" stepKey="clickButtonText"/>
1230+
<pressKey selector="{{ButtonItemOnStage.editableButtonItemElement('1')}}" userInput="{{PageBuilderButtonItemText_Common.value}}" stepKey="enterButtonText"/>
1231+
<!-- Click Save -->
1232+
<comment userInput="Click Save" stepKey="commentSave"/>
1233+
<moveMouseOver selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="moveMouseOverSave"/>
1234+
<click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="clickSaveAndContinueEditCmsPage"/>
1235+
<waitForPageLoad stepKey="waitForCmsPageLoad"/>
1236+
<waitForElementVisible selector="{{CmsNewPagePageActionsSection.cmsPageTitle}}" stepKey="waitForCmsPageTitle"/>
1237+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
1238+
<!-- Validate Stage After Page Save -->
1239+
<comment userInput="Validate Stage After Page Save" stepKey="commentValidateStage2"/>
1240+
<seeElement selector="{{ButtonItemOnStage.buttonItemText('1', PageBuilderButtonItemText_Common.value)}}" stepKey="seeButtonTextStage"/>
1241+
</test>
11941242
</tests>

app/code/Magento/PageBuilder/view/adminhtml/web/js/binding/live-edit.js

Lines changed: 35 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/binding/live-edit.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import $ from "jquery";
99
import ko from "knockout";
1010
import keyCodes from "Magento_Ui/js/lib/key-codes";
11+
import _ from "underscore";
1112

1213
/**
1314
* Add or remove the placeholder-text class from the element based on its content
@@ -37,7 +38,6 @@ ko.bindingHandlers.liveEdit = {
3738
init(element, valueAccessor, allBindings, viewModel, bindingContext) {
3839
const {field, placeholder} = valueAccessor();
3940
let focusedValue = element.innerHTML;
40-
4141
/**
4242
* Strip HTML and return text
4343
*
@@ -81,6 +81,7 @@ ko.bindingHandlers.liveEdit = {
8181
*
8282
* Prevent styling such as bold, italic, and underline using keyboard commands
8383
* Prevent multi-line entries
84+
* Debounce the saving of the state to 1 second to ensure that on save without first unfocus will succeed
8485
*
8586
* @param {any} event
8687
*/
@@ -100,6 +101,32 @@ ko.bindingHandlers.liveEdit = {
100101
if (key === "pageLeftKey" || key === "pageRightKey") {
101102
event.stopPropagation();
102103
}
104+
105+
_.debounce(() => {
106+
const selection = window.getSelection();
107+
const range = document.createRange();
108+
const getCharPosition = (editableDiv: HTMLElement): number => {
109+
let charPosition = 0;
110+
111+
if (window.getSelection) {
112+
if (selection.rangeCount) {
113+
if (selection.getRangeAt(0).commonAncestorContainer.parentNode === editableDiv) {
114+
charPosition = selection.getRangeAt(0).endOffset;
115+
}
116+
}
117+
}
118+
return charPosition;
119+
};
120+
const pos: number = getCharPosition(element);
121+
122+
if (focusedValue !== stripHtml(element.innerHTML)) {
123+
viewModel.updateData(field, stripHtml(element.innerHTML));
124+
}
125+
range.setStart(element.childNodes[0], pos);
126+
range.collapse(true);
127+
selection.removeAllRanges();
128+
selection.addRange(range);
129+
}, 300).call(this);
103130
};
104131

105132
/**

0 commit comments

Comments
 (0)