Skip to content

Commit eea19fd

Browse files
committed
#419: Nested Links If User Adds Link Attribute & Link Widget to Banner/Slide - Content Widget validation for Banner/Slide elements.
1 parent aa71a04 commit eea19fd

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

app/code/Magento/PageBuilder/view/adminhtml/ui_component/pagebuilder_banner_form.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,11 @@
108108
<dataScope>message</dataScope>
109109
<validation>
110110
<rule name="validate-no-url" xsi:type="boolean">true</rule>
111+
<rule name="validate-no-widget" xsi:type="boolean">true</rule>
111112
</validation>
112113
<imports>
113114
<link name="validation.validate-no-url">${$.parentName}.link_url:value</link>
115+
<link name="validation.validate-no-widget">${$.parentName}.link_url:value</link>
114116
</imports>
115117
</settings>
116118
<formElements>
@@ -129,9 +131,11 @@
129131
<urlTypes class="Magento\Ui\Model\UrlInput\LinksConfigProvider"/>
130132
<validation>
131133
<rule name="validate-message-no-link" xsi:type="boolean">true</rule>
134+
<rule name="validate-message-no-widget" xsi:type="boolean">true</rule>
132135
</validation>
133136
<imports>
134137
<link name="validation.validate-message-no-link">${$.parentName}.message:value</link>
138+
<link name="validation.validate-message-no-widget">${$.parentName}.message:value</link>
135139
</imports>
136140
</settings>
137141
</urlInput>

app/code/Magento/PageBuilder/view/adminhtml/ui_component/pagebuilder_slide_form.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,11 @@
127127
<dataScope>content</dataScope>
128128
<validation>
129129
<rule name="validate-no-url" xsi:type="boolean">true</rule>
130+
<rule name="validate-no-widget" xsi:type="boolean">true</rule>
130131
</validation>
131132
<imports>
132133
<link name="validation.validate-no-url">${$.parentName}.link_url:value</link>
134+
<link name="validation.validate-no-widget">${$.parentName}.link_url:value</link>
133135
</imports>
134136
</settings>
135137
<formElements>
@@ -148,9 +150,11 @@
148150
<urlTypes class="Magento\Ui\Model\UrlInput\LinksConfigProvider"/>
149151
<validation>
150152
<rule name="validate-message-no-link" xsi:type="boolean">true</rule>
153+
<rule name="validate-message-no-widget" xsi:type="boolean">true</rule>
151154
</validation>
152155
<imports>
153156
<link name="validation.validate-message-no-link">${$.parentName}.content:value</link>
157+
<link name="validation.validate-message-no-widget">${$.parentName}.content:value</link>
154158
</imports>
155159
</settings>
156160
</urlInput>

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/element/validator-rules-mixin.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ define([
5252
return (/<a[\s]+([^>]+)>|<a>|<\/a>/igm).test(str);
5353
}
5454

55+
/**
56+
* Validate that string has a widget
57+
* @param {String} str
58+
* @return {Boolean}
59+
*/
60+
function validateWysiwygHasWidget(str) {
61+
return (/({{widget)+([^}}]+)}}/igm).test(str);
62+
}
63+
5564
/**
5665
* Validate that string is a proper css-class
5766
* @param {String} str
@@ -74,6 +83,19 @@ define([
7483
url[url.type].length > 0);
7584
}
7685

86+
/**
87+
* Validate message field and url field html standards, nested widget
88+
* @param {String} message
89+
* @param {Object} url
90+
* @return {Boolean}
91+
*/
92+
function validateNestedWidgetElement(message, url) {
93+
return !(validateWysiwygHasWidget(message) &&
94+
['page', 'product', 'category', 'default'].indexOf(url.type) !== -1 &&
95+
url[url.type] &&
96+
url[url.type].length > 0);
97+
}
98+
7799
/**
78100
* Validate a field with an expected data value of type object, like margins_and_padding field
79101
* @param {Function} validator
@@ -246,6 +268,22 @@ define([
246268
$.mage.__('Adding link in both content and outer element is not allowed.')
247269
);
248270

271+
validator.addRule(
272+
'validate-message-no-widget',
273+
function (url, message) {
274+
return validateNestedWidgetElement(message, url);
275+
},
276+
$.mage.__('Adding link in outer element and widget in content is not allowed.')
277+
);
278+
279+
validator.addRule(
280+
'validate-no-widget',
281+
function (message, url) {
282+
return validateNestedWidgetElement(message, url);
283+
},
284+
$.mage.__('Adding widget in content and link in outer element is not allowed.')
285+
);
286+
249287
validator.addRule(
250288
'validate-calc',
251289
function (value) {

0 commit comments

Comments
 (0)