Index: desktop-options.js |
=================================================================== |
--- a/desktop-options.js |
+++ b/desktop-options.js |
@@ -547,14 +547,17 @@ |
return null; |
} |
- function sendMessageHandleErrors(message, onSuccess) |
+ function sendMessageHandleErrors(message, callback) |
{ |
browser.runtime.sendMessage(message, (errors) => |
{ |
- if (errors.length > 0) |
- alert(errors.join("\n")); |
- else if (onSuccess) |
- onSuccess(); |
+ if (callback) |
+ { |
+ if (errors.length > 0) |
+ callback(errors); |
+ else |
+ callback(); |
+ } |
}); |
} |
@@ -648,14 +651,35 @@ |
}); |
break; |
case "save-custom-filters": |
+ const filters = E("custom-filters-raw"); |
saroyanm
2018/01/29 11:44:48
Detail/Suggestion: We don't use the element anywhe
a.giammarchi
2018/01/29 13:09:02
I'll do that, but this is nitpicking ;-)
|
+ const filtersValue = filters.value; |
sendMessageHandleErrors({ |
type: "filters.importRaw", |
- text: E("custom-filters-raw").value, |
+ text: filtersValue, |
removeExisting: true |
}, |
- () => |
+ (errors) => |
{ |
- setCustomFiltersView("read"); |
+ if (errors) |
+ { |
+ E("custom-filters").classList.add("warning"); |
+ const lines = filtersValue.split(/\n+|\n\s+\n/); |
saroyanm
2018/01/29 11:44:48
Splitting same as it's done in the filterValidatio
a.giammarchi
2018/01/29 13:09:02
I've tested this before writing the RegExp, their
saroyanm
2018/01/29 14:30:49
I don't understand what you mean by "Logic keeps g
a.giammarchi
2018/01/29 15:01:09
if you have a textarea with
a
b
c
d
the filte
saroyanm
2018/01/30 12:03:44
This doesn't work on my(Manvel) test enviroment, A
|
+ const info = errors.map(error => lines[error.lineno - 1]); |
+ const editFilters = E("custom-filters-edit-filters"); |
+ info.forEach( |
saroyanm
2018/01/29 11:44:48
Detail: We usualy use for..of when looping through
a.giammarchi
2018/01/29 13:09:02
have we banned the forEach from the code? performa
saroyanm
2018/01/29 14:30:49
That is a news for me. AFAIK we used for...of beca
a.giammarchi
2018/01/29 15:01:09
It's actually usually slower because it involved A
|
+ message => |
+ { |
+ const li = document.createElement("li"); |
+ editFilters.appendChild(li).textContent = message; |
+ } |
+ ); |
+ if (errors.length > 5) |
+ editFilters.classList.add("many"); |
+ } |
+ else |
+ { |
+ setCustomFiltersView("read"); |
+ } |
}); |
break; |
case "show-more-filters-section": |
@@ -755,6 +779,10 @@ |
updateCustomFiltersUi(); |
if (mode == "read") |
{ |
+ E("custom-filters").classList.remove("warning"); |
+ const editFilters = E("custom-filters-edit-filters"); |
+ editFilters.textContent = ""; |
+ editFilters.classList.remove("many"); |
customFiltersElement.disabled = true; |
if (!customFiltersElement.value) |
{ |
@@ -918,10 +946,10 @@ |
{ |
setLinks("enable-acceptable-ads-description", link); |
}); |
- setElementText(E("tracking-warning-1"), "options_tracking_warning_1", |
+ setElementText(E("tracking-warning-1"), "options_tracking_warning_1", |
[getMessage("common_feature_privacy_title"), |
- getMessage("options_acceptableAds_ads_label")]); |
- setElementText(E("tracking-warning-3"), "options_tracking_warning_3", |
+ getMessage("options_acceptableAds_ads_label")]); |
+ setElementText(E("tracking-warning-3"), "options_tracking_warning_3", |
[getMessage("options_acceptableAds_privacy_label")]); |
getDocLink("privacy_friendly_ads", (link) => |
@@ -964,6 +992,7 @@ |
getDocLink("filterdoc", (link) => |
{ |
E("link-filters").setAttribute("href", link); |
+ E("link-filters-on-edit-error").setAttribute("href", link); |
}); |
getDocLink("subscriptions", (link) => |
@@ -1295,7 +1324,7 @@ |
updateSubscription(subscription); |
break; |
case "added": |
- let {url, recommended} = subscription; |
+ let {url} = subscription; |
// Handle custom subscription |
if (/^~user/.test(url)) |
{ |