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 installed;
|
||||
|
||||
|
@ -257,7 +258,7 @@ function checkUpdate(element, callback) {
|
|||
chrome.runtime.sendMessage({method: "getStyles", id: id}, function(styles) {
|
||||
var style = styles[0];
|
||||
var needsUpdate = false;
|
||||
if (!forceUpdate && codeIsEqual(style.sections, serverJson.sections)) {
|
||||
if (!forceUpdate && styleSectionsEqual(style, serverJson)) {
|
||||
handleNeedsUpdate("no", id, serverJson);
|
||||
} else {
|
||||
handleNeedsUpdate("yes", id, serverJson);
|
||||
|
@ -368,58 +369,6 @@ function doUpdate(event) {
|
|||
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) {
|
||||
var query = document.getElementById("search").value.toLocaleLowerCase();
|
||||
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