 Issue 29674584:
  Issue 5549 - Implement missing error handlings for custom filter lists  (Closed)
    
  
    Issue 29674584:
  Issue 5549 - Implement missing error handlings for custom filter lists  (Closed) 
  | 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)) | 
| { |