Skip to content

Commit cc95328

Browse files
committed
MC-3865: Content Types With Links Redirect On Storefront If Link Is Empty
Use preview converter for link_href to prevent javascript:void(0) from appearing as href on stage
1 parent f30731a commit cc95328

File tree

12 files changed

+190
-46
lines changed

12 files changed

+190
-46
lines changed

app/code/Magento/PageBuilder/view/adminhtml/pagebuilder/content_type/banner.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</element>
3838
<element name="link">
3939
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
40-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
40+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
4141
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
4242
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
4343
</element>
@@ -112,7 +112,7 @@
112112
</element>
113113
<element name="link">
114114
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
115-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
115+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
116116
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
117117
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
118118
</element>
@@ -187,7 +187,7 @@
187187
</element>
188188
<element name="link">
189189
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
190-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
190+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
191191
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
192192
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
193193
</element>
@@ -263,7 +263,7 @@
263263
</element>
264264
<element name="link">
265265
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
266-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
266+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
267267
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
268268
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
269269
</element>

app/code/Magento/PageBuilder/view/adminhtml/pagebuilder/content_type/button_item.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<style name="margins" storage_key="margins_and_padding" reader="Magento_PageBuilder/js/property/margins" converter="Magento_PageBuilder/js/converter/style/margins"/>
4444
<style name="padding" storage_key="margins_and_padding" reader="Magento_PageBuilder/js/property/paddings" converter="Magento_PageBuilder/js/converter/style/paddings"/>
4545
<attribute name="button_link" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
46-
<attribute name="virtual_link_href" storage_key="button_link" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
46+
<attribute name="virtual_link_href" storage_key="button_link" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
4747
<attribute name="virtual_link_target" storage_key="button_link" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
4848
<attribute name="virtual_link_type" storage_key="button_link" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
4949
<css name="button_type"/>

app/code/Magento/PageBuilder/view/adminhtml/pagebuilder/content_type/image.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
</element>
5353
<element name="link">
5454
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
55-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
55+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
5656
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
5757
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
5858
<attribute name="title_attribute" source="title"/>

app/code/Magento/PageBuilder/view/adminhtml/pagebuilder/content_type/slide.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
</element>
115115
<element name="link">
116116
<attribute name="link_url" reader="Magento_PageBuilder/js/property/link" persistence_mode="read"/>
117-
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" persistence_mode="write"/>
117+
<attribute name="virtual_link_href" storage_key="link_url" source="href" converter="Magento_PageBuilder/js/converter/attribute/link-href" preview_converter="Magento_PageBuilder/js/converter/attribute/preview/link-href"/>
118118
<attribute name="virtual_link_target" storage_key="link_url" source="target" converter="Magento_PageBuilder/js/converter/attribute/link-target" persistence_mode="write"/>
119119
<attribute name="virtual_link_type" storage_key="link_url" source="data-link-type" converter="Magento_PageBuilder/js/converter/attribute/link-type" persistence_mode="write"/>
120120
</element>

app/code/Magento/PageBuilder/view/adminhtml/web/js/converter/attribute/link-href.js

Lines changed: 30 additions & 13 deletions
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/js/converter/attribute/link-type.js

Lines changed: 1 addition & 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/js/converter/attribute/preview/link-href.js

Lines changed: 58 additions & 0 deletions
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/js/master-format/read/configurable.js

Lines changed: 10 additions & 5 deletions
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/converter/attribute/link-href.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ export default class CreateValueForHref implements ConverterInterface {
4949
* @returns {string | object}
5050
*/
5151
public fromDom(value: string): string | object {
52+
if (value === "") {
53+
value = "javascript:void(0)";
54+
}
55+
5256
return value;
5357
}
5458

@@ -60,37 +64,49 @@ export default class CreateValueForHref implements ConverterInterface {
6064
* @returns {string}
6165
*/
6266
public toDom(name: string, data: DataObject): string {
67+
const link = data[name] as any;
68+
let href;
6369

64-
const link = data[name];
65-
let href = "javascript:void(0)";
70+
if (typeof link === "undefined") {
71+
href = "javascript:void(0)";
72+
} else if (typeof link.type !== "undefined") {
73+
if (typeof link.href !== "undefined" && link.type === "default") {
74+
link[link.type] = link.href;
75+
}
6676

67-
if (!link) {
68-
return href;
69-
}
77+
delete link.href;
78+
79+
if (link[link.type] === "javascript:void(0)") {
80+
link[link.type] = "";
81+
}
7082

71-
const linkType = link.type;
72-
const isHrefId = !isNaN(parseInt(link[linkType], 10));
83+
href = link[link.type];
7384

74-
if (isHrefId && link) {
75-
href = this.convertToWidget(link[linkType], this.widgetParamsByLinkType[linkType]);
76-
} else if (link[linkType]) {
77-
href = link[linkType];
85+
if (!href.length) {
86+
href = "javascript:void(0)";
87+
}
88+
89+
const isHrefIdReference = !isNaN(parseInt(href, 10)) && link.type !== "default";
90+
91+
if (isHrefIdReference) {
92+
href = this.convertToWidget(href, link.type);
93+
}
7894
}
95+
7996
return href;
8097
}
8198

8299
/**
83100
* @param {string} href
84-
* @param {object} widgetAttributes
101+
* @param {string} linkType
85102
* @returns {string}
86103
*/
87-
private convertToWidget(href: string, widgetAttributes: object): string {
104+
private convertToWidget(href: string, linkType: string): string {
88105
const attributesString = _.map(
89-
widgetAttributes,
106+
this.widgetParamsByLinkType[linkType],
90107
(val: string, key: string) => `${key}='${val.replace(":href", href)}'`,
91108
).join(" ");
92109

93110
return `{{widget ${attributesString} }}`;
94111
}
95-
96112
}

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/converter/attribute/link-type.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export default class CreateValueForLinkType implements ConverterInterface {
2929
* @returns {string}
3030
*/
3131
public toDom(name: string, data: DataObject): string {
32-
33-
return data[name] ? data[name].type : "";
32+
return data[name] && data[name].type ? data[name].type : "default";
3433
}
3534
}

0 commit comments

Comments
 (0)