summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/js/core/ajax.js2
-rw-r--r--addons/website/static/src/js/editor/snippets.options.js20
2 files changed, 21 insertions, 1 deletions
diff --git a/addons/web/static/src/js/core/ajax.js b/addons/web/static/src/js/core/ajax.js
index ae3194e2a45..a35c793e5c6 100644
--- a/addons/web/static/src/js/core/ajax.js
+++ b/addons/web/static/src/js/core/ajax.js
@@ -164,6 +164,8 @@ var loadCSS = (function () {
urlDefs[url] = new Promise(function (resolve, reject) {
$link.on('load', function () {
resolve();
+ }).on('error', function () {
+ reject(new Error("Couldn't load css dependency: " + $link[0].href));
});
});
$('head').append($link);
diff --git a/addons/website/static/src/js/editor/snippets.options.js b/addons/website/static/src/js/editor/snippets.options.js
index 5225c57b249..abd32016131 100644
--- a/addons/website/static/src/js/editor/snippets.options.js
+++ b/addons/website/static/src/js/editor/snippets.options.js
@@ -159,7 +159,7 @@ const FontFamilyPickerUserValueWidget = SelectUserValueWidget.extend({
{
text: _t("Save & Reload"),
classes: 'btn-primary',
- click: () => {
+ click: async () => {
const inputEl = dialog.el.querySelector('.o_input_google_font');
// if font page link (what is expected)
let m = inputEl.value.match(/\bspecimen\/([\w+]+)/);
@@ -171,6 +171,24 @@ const FontFamilyPickerUserValueWidget = SelectUserValueWidget.extend({
return;
}
}
+
+ let isValidFamily = false;
+
+ try {
+ const result = await fetch("https://fonts.googleapis.com/css?family=" + m[1], {method: 'HEAD'});
+ // Google fonts server returns a 400 status code if family is not valid.
+ if (result.ok) {
+ isValidFamily = true;
+ }
+ } catch (error) {
+ console.error(error);
+ }
+
+ if (!isValidFamily) {
+ inputEl.classList.add('is-invalid');
+ return;
+ }
+
const font = m[1].replace(/\+/g, ' ');
this.googleFonts.push(font);
this.trigger_up('google_fonts_custo_request', {