| Index: new-options.js |
| =================================================================== |
| --- a/new-options.js |
| +++ b/new-options.js |
| @@ -43,18 +43,25 @@ |
| this.items = []; |
| } |
| - Collection.prototype._setEmpty = function(table, text) |
| + Collection.prototype._setEmpty = function(table, texts) |
| { |
| - let placeholder = table.querySelector(".empty-placeholder"); |
| - if (text && !placeholder) |
| + let placeholders = table.querySelectorAll(".empty-placeholder"); |
| + |
| + if (texts && placeholders.length == 0) |
| { |
| - placeholder = document.createElement("li"); |
| - placeholder.className = "empty-placeholder"; |
| - placeholder.textContent = getMessage(text); |
| - table.appendChild(placeholder); |
| + for (let i = 0; i < texts.length; i++) |
|
Thomas Greiner
2017/05/09 13:42:56
Detail: You're not using the index so I'd recommen
saroyanm
2017/05/16 20:20:07
Well spotted, done.
|
| + { |
| + let placeholder = document.createElement("li"); |
| + placeholder.className = "empty-placeholder"; |
| + placeholder.textContent = getMessage(texts[i]); |
| + table.appendChild(placeholder); |
| + } |
| } |
| - else if (placeholder) |
| - table.removeChild(placeholder); |
| + else if (placeholders.length > 0) |
| + { |
| + for (let i = 0; i < placeholders.length; i++) |
| + table.removeChild(placeholders[i]); |
| + } |
| }; |
| Collection.prototype._createElementQuery = function(item) |
| @@ -284,17 +291,17 @@ |
| collections.langs = new Collection([ |
| { |
| id: "blocking-languages-table", |
| - emptyText: "options_dialog_language_added_empty" |
| + emptyText: ["options_dialog_language_added_empty"] |
| }, |
| { |
| id: "blocking-languages-dialog-table", |
| - emptyText: "options_dialog_language_added_empty" |
| + emptyText: ["options_dialog_language_added_empty"] |
| } |
| ]); |
| collections.allLangs = new Collection([ |
| { |
| id: "all-lang-table", |
| - emptyText: "options_dialog_language_other_empty", |
| + emptyText: ["options_dialog_language_other_empty"], |
| searchable: true |
| } |
| ]); |
| @@ -311,13 +318,13 @@ |
| collections.whitelist = new Collection([ |
| { |
| id: "whitelisting-table", |
| - emptyText: "options_whitelisted_empty" |
| + emptyText: ["options_whitelist_empty_1", "options_whitelist_empty_2"] |
| } |
| ]); |
| collections.customFilters = new Collection([ |
| { |
| id: "custom-filters-table", |
| - emptyText: "options_customFilters_empty" |
| + emptyText: ["options_customFilters_empty"] |
| } |
| ]); |
| collections.filterLists = new Collection([ |
| @@ -767,10 +774,57 @@ |
| let placeholderValue = getMessage("options_dialog_language_find"); |
| E("find-language").setAttribute("placeholder", placeholderValue); |
| E("find-language").addEventListener("keyup", onFindLanguageKeyUp, false); |
| - E("whitelisting-textbox").addEventListener("keypress", (e) => |
| + let exampleValue = getMessage("options_whitelist_placeholder_example"); |
| + exampleValue += " www.example.com"; |
| + E("whitelisting-textbox").setAttribute("placeholder", exampleValue); |
| + E("whitelisting-textbox").addEventListener("keyup", (e) => |
|
Thomas Greiner
2017/05/09 13:42:56
I'm not sure it's a good idea to validate the inpu
saroyanm
2017/05/16 20:20:06
It will, that's why I'm using keyUp instead.
saroyanm
2017/05/18 16:21:52
Fine for now because we are checking for only empt
|
| { |
| + let addWhitelistButton = E("whitelisting-add-button"); |
| + let validationElement = E("whitelisting-validation"); |
| if (getKey(e) == "Enter") |
| - addWhitelistedDomain(); |
| + { |
| + if (!E("whitelisting-add-button").hasAttribute("disabled")) |
| + addWhitelistedDomain(); |
| + } |
| + else |
| + { |
| + let validIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25" |
|
saroyanm
2017/04/21 12:03:17
Regular expression to match Hostname and IP addres
Thomas Greiner
2017/05/09 13:42:56
Detail: Those are constants that we can simply com
Thomas Greiner
2017/05/09 13:42:56
I don't think we need to be that specific. Somethi
saroyanm
2017/05/16 20:20:07
I think this is not anymore relevant, while the va
|
| + + "[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; |
|
Thomas Greiner
2017/05/09 13:42:56
You need to escape the escape characters since you
|
| + let validHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9]" |
|
Thomas Greiner
2017/05/09 13:42:56
Same here. I don't think we need to be that specif
|
| + +")\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; |
| + |
| + let isDuplicate = false; |
| + for (let i = 0; i < collections.whitelist.items.length; i++) |
| + { |
| + if (collections.whitelist.items[i].title == e.target.value) |
| + isDuplicate = true; |
|
Thomas Greiner
2017/05/09 13:42:56
Detail: Why do we need this variable? We could jus
|
| + } |
| + |
| + if (isDuplicate) |
| + { |
| + addWhitelistButton.setAttribute("disabled", ""); |
|
saroyanm
2017/04/21 12:03:17
I think we should use checkValidity() method inste
Thomas Greiner
2017/05/09 13:42:56
Detail: Can't we just do `addWhitelistButton.disab
saroyanm
2017/05/16 20:20:06
done.
|
| + validationElement.textContent = |
| + getMessage("options_whitelist_duplicate"); |
| + } |
| + else if (new RegExp(validIpAddressRegex).test(e.target.value) || |
| + new RegExp(validHostnameRegex).test(e.target.value)) |
| + { |
| + addWhitelistButton.removeAttribute("disabled"); |
| + validationElement.textContent = ""; |
| + } |
| + else if (!e.target.value) |
| + { |
| + validationElement.textContent = ""; |
| + addWhitelistButton.setAttribute("disabled", ""); |
| + } |
| + else |
| + { |
| + addWhitelistButton.setAttribute("disabled", ""); |
| + validationElement.textContent = |
| + getMessage("options_whitelist_invalid"); |
| + |
| + } |
| + } |
| }, false); |
| // Advanced tab |
| @@ -986,8 +1040,7 @@ |
| } |
| domain.value = ""; |
| - document.querySelector("#whitelisting .controls") |
| - .classList.remove("mode-edit"); |
| + E("whitelisting-add-button").setAttribute("disabled", ""); |
| } |
| function editCustomFilters() |