Refactor manage::codeIsEqual -> storage::styleSectionsEqual
This commit is contained in:
parent
d49622dd27
commit
e807d41eb7
55
manage.js
55
manage.js
|
@ -1,3 +1,4 @@
|
||||||
|
/* globals styleSectionsEqual */
|
||||||
var lastUpdatedStyleId = null;
|
var lastUpdatedStyleId = null;
|
||||||
var installed;
|
var installed;
|
||||||
|
|
||||||
|
@ -257,7 +258,7 @@ function checkUpdate(element, callback) {
|
||||||
chrome.runtime.sendMessage({method: "getStyles", id: id}, function(styles) {
|
chrome.runtime.sendMessage({method: "getStyles", id: id}, function(styles) {
|
||||||
var style = styles[0];
|
var style = styles[0];
|
||||||
var needsUpdate = false;
|
var needsUpdate = false;
|
||||||
if (!forceUpdate && codeIsEqual(style.sections, serverJson.sections)) {
|
if (!forceUpdate && styleSectionsEqual(style, serverJson)) {
|
||||||
handleNeedsUpdate("no", id, serverJson);
|
handleNeedsUpdate("no", id, serverJson);
|
||||||
} else {
|
} else {
|
||||||
handleNeedsUpdate("yes", id, serverJson);
|
handleNeedsUpdate("yes", id, serverJson);
|
||||||
|
@ -368,58 +369,6 @@ function doUpdate(event) {
|
||||||
chrome.runtime.sendMessage(updatedCode, function () {});
|
chrome.runtime.sendMessage(updatedCode, function () {});
|
||||||
}
|
}
|
||||||
|
|
||||||
function codeIsEqual(a, b) {
|
|
||||||
if (a.length != b.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var properties = ["code", "urlPrefixes", "urls", "domains", "regexps"];
|
|
||||||
for (var i = 0; i < a.length; i++) {
|
|
||||||
var found = false;
|
|
||||||
for (var j = 0; j < b.length; j++) {
|
|
||||||
var allEquals = properties.every(function(property) {
|
|
||||||
return jsonEquals(a[i], b[j], property);
|
|
||||||
});
|
|
||||||
if (allEquals) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function jsonEquals(a, b, property) {
|
|
||||||
var aProp = a[property], typeA = getType(aProp);
|
|
||||||
var bProp = b[property], typeB = getType(bProp);
|
|
||||||
if (typeA != typeB) {
|
|
||||||
// consider empty arrays equivalent to lack of property
|
|
||||||
if ((typeA == "undefined" || (typeA == "array" && aProp.length == 0)) && (typeB == "undefined" || (typeB == "array" && bProp.length == 0))) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (typeA == "undefined") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeA == "array") {
|
|
||||||
if (aProp.length != bProp.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (var i = 0; i < aProp.length; i++) {
|
|
||||||
if (bProp.indexOf(aProp[i]) == -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeA == "string") {
|
|
||||||
return aProp == bProp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function searchStyles(immediately) {
|
function searchStyles(immediately) {
|
||||||
var query = document.getElementById("search").value.toLocaleLowerCase();
|
var query = document.getElementById("search").value.toLocaleLowerCase();
|
||||||
if (query == (searchStyles.lastQuery || "")) {
|
if (query == (searchStyles.lastQuery || "")) {
|
||||||
|
|
31
storage.js
31
storage.js
|
@ -574,3 +574,34 @@ function getSync() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function styleSectionsEqual(styleA, styleB) {
|
||||||
|
if (styleA.sections.length != styleB.sections.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const properties = ['code', 'urlPrefixes', 'urls', 'domains', 'regexps'];
|
||||||
|
return styleA.sections.every(sectionA =>
|
||||||
|
styleB.sections.some(sectionB =>
|
||||||
|
properties.every(property => sectionEquals(sectionA, sectionB, property))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
function sectionEquals(a, b, property) {
|
||||||
|
const aProp = a[property], typeA = getType(aProp);
|
||||||
|
const bProp = b[property], typeB = getType(bProp);
|
||||||
|
if (typeA != typeB) {
|
||||||
|
// consider empty arrays equivalent to lack of property
|
||||||
|
return ((typeA == 'undefined' || (typeA == 'array' && aProp.length == 0)) &&
|
||||||
|
(typeB == 'undefined' || (typeB == 'array' && bProp.length == 0)));
|
||||||
|
}
|
||||||
|
if (typeA == 'undefined') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (typeA == 'array') {
|
||||||
|
return aProp.length == bProp.length && aProp.every(item => bProp.includes(item));
|
||||||
|
}
|
||||||
|
if (typeA == 'string') {
|
||||||
|
return aProp == bProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user