Skip to content

Commit d34b2c7

Browse files
committed
Refactor, reduce reliance on external promise dependency in csscritic
1 parent 7c98b67 commit d34b2c7

File tree

3 files changed

+145
-155
lines changed

3 files changed

+145
-155
lines changed

src/.jshintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"rasterizeHTML": true,
55
"inlineresources": true,
66
"imagediff": true,
7+
"Promise": true,
78
"ayepromise": true,
89
"indexedDB": true,
910
"console": true,

src/indexedDbStorage.js

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ csscriticLib.indexeddbstorage = function (util) {
88
};
99

1010
var getDb = function () {
11-
var defer = ayepromise.defer(),
12-
request = indexedDB.open("csscritic", 1);
13-
14-
request.onsuccess = function (event) {
15-
var db = event.target.result;
16-
defer.resolve(db);
17-
};
18-
request.onupgradeneeded = function (event) {
19-
var db = event.target.result;
20-
createDb(db);
21-
};
22-
return defer.promise;
11+
return new Promise(function (fulfill) {
12+
var request = indexedDB.open("csscritic", 1);
13+
14+
request.onsuccess = function (event) {
15+
var db = event.target.result;
16+
fulfill(db);
17+
};
18+
request.onupgradeneeded = function (event) {
19+
var db = event.target.result;
20+
createDb(db);
21+
};
22+
});
2323
};
2424

2525
var buildKey = function (testCase) {
@@ -35,74 +35,74 @@ csscriticLib.indexeddbstorage = function (util) {
3535
};
3636

3737
module.storeReferenceImage = function (testCase, referenceImage, viewport) {
38-
var defer = ayepromise.defer(),
39-
imageUri;
40-
41-
imageUri = util.getDataURIForImage(referenceImage);
38+
var imageUri = util.getDataURIForImage(referenceImage);
4239

4340
var key = buildKey(testCase);
4441

45-
getDb().then(function (db) {
46-
var request = db
47-
.transaction(["references"], "readwrite")
48-
.objectStore("references")
49-
.put({
50-
testCase: key,
51-
reference: {
52-
imageUri: imageUri,
53-
viewport: viewport,
54-
},
55-
});
42+
return getDb().then(function (db) {
43+
return new Promise(function (fulfill) {
44+
var request = db
45+
.transaction(["references"], "readwrite")
46+
.objectStore("references")
47+
.put({
48+
testCase: key,
49+
reference: {
50+
imageUri: imageUri,
51+
viewport: viewport,
52+
},
53+
});
5654

57-
request.onsuccess = function () {
58-
db.close();
55+
request.onsuccess = function () {
56+
db.close();
5957

60-
defer.resolve();
61-
};
58+
fulfill();
59+
};
60+
});
6261
});
63-
64-
return defer.promise;
6562
};
6663

6764
module.readReferenceImage = function (testCase) {
68-
var defer = ayepromise.defer(),
69-
key = buildKey(testCase);
70-
71-
getDb().then(function (db) {
72-
var request = db
73-
.transaction(["references"])
74-
.objectStore("references")
75-
.get(key);
76-
77-
request.onsuccess = function () {
78-
db.close();
79-
80-
if (
81-
request.result === undefined ||
82-
request.result.reference === undefined ||
83-
request.result.reference.imageUri === undefined
84-
) {
85-
defer.reject();
86-
return;
87-
}
88-
89-
var dataObj = request.result.reference;
90-
91-
util.getImageForUrl(dataObj.imageUri).then(function (img) {
92-
var viewport = dataObj.viewport || {
93-
width: img.width,
94-
height: img.height,
95-
};
65+
var key = buildKey(testCase);
9666

97-
defer.resolve({
98-
image: img,
99-
viewport: viewport,
67+
return getDb()
68+
.then(function (db) {
69+
return new Promise(function (fulfill, reject) {
70+
var request = db
71+
.transaction(["references"])
72+
.objectStore("references")
73+
.get(key);
74+
75+
request.onsuccess = function () {
76+
db.close();
77+
78+
if (
79+
request.result === undefined ||
80+
request.result.reference === undefined ||
81+
request.result.reference.imageUri === undefined
82+
) {
83+
reject();
84+
return;
85+
}
86+
87+
fulfill(request.result.reference);
88+
};
89+
});
90+
})
91+
.then(function (dataObj) {
92+
return util
93+
.getImageForUrl(dataObj.imageUri)
94+
.then(function (img) {
95+
var viewport = dataObj.viewport || {
96+
width: img.width,
97+
height: img.height,
98+
};
99+
100+
return {
101+
image: img,
102+
viewport: viewport,
103+
};
100104
});
101-
}, defer.reject);
102-
};
103-
});
104-
105-
return defer.promise;
105+
});
106106
};
107107

108108
return module;

src/util.js

Lines changed: 75 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,17 @@ csscriticLib.util = function () {
1616
};
1717

1818
module.getImageForUrl = function (url) {
19-
var defer = ayepromise.defer(),
20-
image = new window.Image();
21-
22-
image.onload = function () {
23-
defer.resolve(image);
24-
};
25-
image.onerror = function () {
26-
defer.reject();
27-
};
28-
image.src = url;
29-
30-
return defer.promise;
19+
return new Promise(function (fulfill, reject) {
20+
var image = new window.Image();
21+
22+
image.onload = function () {
23+
fulfill(image);
24+
};
25+
image.onerror = function () {
26+
reject();
27+
};
28+
image.src = url;
29+
});
3130
};
3231

3332
var getUncachableURL = function (url) {
@@ -41,90 +40,86 @@ csscriticLib.util = function () {
4140
};
4241

4342
module.ajax = function (url) {
44-
var defer = ayepromise.defer(),
45-
xhr = new XMLHttpRequest();
46-
47-
xhr.onload = function () {
48-
if (xhr.status === 200 || xhr.status === 0) {
49-
defer.resolve(xhr.response);
50-
} else {
51-
defer.reject();
43+
return new Promise(function (fulfill, reject) {
44+
var xhr = new XMLHttpRequest();
45+
46+
xhr.onload = function () {
47+
if (xhr.status === 200 || xhr.status === 0) {
48+
fulfill(xhr.response);
49+
} else {
50+
reject();
51+
}
52+
};
53+
54+
xhr.onerror = function () {
55+
reject();
56+
};
57+
58+
try {
59+
xhr.open("get", getUncachableURL(url), true);
60+
xhr.send();
61+
} catch (e) {
62+
reject();
5263
}
53-
};
54-
55-
xhr.onerror = function () {
56-
defer.reject();
57-
};
58-
59-
try {
60-
xhr.open("get", getUncachableURL(url), true);
61-
xhr.send();
62-
} catch (e) {
63-
defer.reject();
64-
}
65-
66-
return defer.promise;
64+
});
6765
};
6866

6967
module.loadAsBlob = function (url) {
70-
var defer = ayepromise.defer(),
71-
xhr = new XMLHttpRequest();
72-
73-
xhr.onload = function () {
74-
if (xhr.status === 200 || xhr.status === 0) {
75-
defer.resolve(xhr.response);
76-
} else {
77-
defer.reject(new Error(xhr.statusText));
68+
return new Promise(function (fulfill, reject) {
69+
var xhr = new XMLHttpRequest();
70+
71+
xhr.onload = function () {
72+
if (xhr.status === 200 || xhr.status === 0) {
73+
fulfill(xhr.response);
74+
} else {
75+
reject(new Error(xhr.statusText));
76+
}
77+
};
78+
79+
xhr.onerror = function (e) {
80+
reject(e);
81+
};
82+
83+
try {
84+
xhr.open("get", getUncachableURL(url), true);
85+
xhr.responseType = "blob";
86+
xhr.send();
87+
} catch (e) {
88+
reject(e);
7889
}
79-
};
80-
81-
xhr.onerror = function (e) {
82-
defer.reject(e);
83-
};
84-
85-
try {
86-
xhr.open("get", getUncachableURL(url), true);
87-
xhr.responseType = "blob";
88-
xhr.send();
89-
} catch (e) {
90-
defer.reject(e);
91-
}
92-
93-
return defer.promise;
90+
});
9491
};
9592

9693
module.loadBlobAsText = function (blob) {
97-
var defer = ayepromise.defer(),
98-
reader = new FileReader();
99-
100-
reader.onload = function (e) {
101-
defer.resolve(e.target.result);
102-
};
94+
return new Promise(function (fulfill, reject) {
95+
var reader = new FileReader();
10396

104-
reader.onerror = function () {
105-
defer.reject();
106-
};
97+
reader.onload = function (e) {
98+
fulfill(e.target.result);
99+
};
107100

108-
reader.readAsText(blob);
101+
reader.onerror = function () {
102+
reject();
103+
};
109104

110-
return defer.promise;
105+
reader.readAsText(blob);
106+
});
111107
};
112108

113109
module.loadBlobAsDataURI = function (blob) {
114-
var defer = ayepromise.defer(),
115-
reader = new FileReader();
116-
117-
reader.onload = function (e) {
118-
defer.resolve(e.target.result);
119-
};
110+
return new Promise(function (fulfill, reject) {
111+
var reader = new FileReader();
120112

121-
reader.onerror = function () {
122-
defer.reject();
123-
};
113+
reader.onload = function (e) {
114+
fulfill(e.target.result);
115+
};
124116

125-
reader.readAsDataURL(blob);
117+
reader.onerror = function () {
118+
reject();
119+
};
126120

127-
return defer.promise;
121+
reader.readAsDataURL(blob);
122+
});
128123
};
129124

130125
// excludeKeys(theMap, excludeKey...)
@@ -163,12 +158,6 @@ csscriticLib.util = function () {
163158
return theClone;
164159
};
165160

166-
var successfulPromise = function (value) {
167-
var defer = ayepromise.defer();
168-
defer.resolve(value);
169-
return defer.promise;
170-
};
171-
172161
module.workAroundTransparencyIssueInFirefox = function (image) {
173162
// Work around bug https://bugzilla.mozilla.org/show_bug.cgi?id=790468 where the content of a canvas
174163
// drawn to another one will be slightly different if transparency is involved.
@@ -179,7 +168,7 @@ csscriticLib.util = function () {
179168
dataUri = module.getDataURIForImage(image);
180169
} catch (e) {
181170
// Fallback for Chrome & Safari
182-
return successfulPromise(image);
171+
return Promise.resolve(image);
183172
}
184173

185174
return module.getImageForUrl(dataUri);

0 commit comments

Comments
 (0)