Skip to content

Commit e0ad5fd

Browse files
committed
Code refactoring
- Normalizing properties and columns after scraping
1 parent 58d10b7 commit e0ad5fd

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

extension/scripts/Sitemap.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,15 @@ Sitemap.prototype = {
179179
getDataColumns: function () {
180180
var columns = [];
181181
this.selectors.forEach(function (selector) {
182-
183182
columns = columns.concat(selector.getDataColumns());
184183
});
185184

186-
return columns;
185+
var uniqueColumns = [];
186+
$.each(columns, function (i, e) {
187+
if ($.inArray(e, result) == -1) result.push(e);
188+
});
189+
190+
return uniqueColumns;
187191
},
188192
getDataExportCsvBlob: function (data, option) {
189193

extension/scripts/Store.js

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,39 @@ var StoreScrapeResultWriter = function(db) {
99
this.db = db;
1010
};
1111

12+
/**
13+
* Make sure all obj have the same properties
14+
* They can differe if table selector retrieves dynamic columns
15+
*/
16+
var normalizeProperties = function (docs) {
17+
// get all keys of the objects
18+
var keys = [];
19+
docs.forEach(function (doc) {
20+
for (var key in doc) {
21+
if (doc.hasOwnProperty(key) && keys.indexOf(key) === -1) { keys.push(key); }
22+
};
23+
});
24+
25+
// add missing keys to objects
26+
docs.forEach(function (doc) {
27+
var objKeys = Object.keys(doc)
28+
keys.forEach(function (key) {
29+
if (!(key in doc)) {
30+
doc[key] = "";
31+
}
32+
});
33+
});
34+
};
35+
1236
StoreScrapeResultWriter.prototype = {
37+
1338
writeDocs: function(docs, callback) {
1439
if(docs.length === 0) {
1540
callback();
1641
}
1742
else {
1843

19-
// get all keys of the objects
20-
var keys = [];
21-
docs.forEach(function (doc) {
22-
for (var key in doc) {
23-
if (doc.hasOwnProperty(key) && keys.indexOf(key) === -1) { keys.push(key); }
24-
};
25-
});
26-
27-
// add missing keys to objects
28-
// This can happen if same element containing different properties <table>
29-
docs.forEach(function (doc) {
30-
var objKeys = Object.keys(doc)
31-
keys.forEach(function (key) {
32-
if (!(key in doc)) {
33-
doc[key] = "";
34-
}
35-
});
36-
});
37-
44+
normalizeProperties(docs);
3845
this.db.bulkDocs({docs:docs}, function(err, response) {
3946
if(err !== null) {
4047
console.log("Error while persisting scraped data to db", err);
@@ -46,7 +53,7 @@ StoreScrapeResultWriter.prototype = {
4653
};
4754

4855
Store.prototype = {
49-
56+
5057
sanitizeSitemapDataDbName: function(dbName) {
5158
return 'sitemap-data-'+dbName.replace(/[^a-z0-9_\$\(\)\+\-/]/gi, "_");
5259
},
@@ -86,7 +93,9 @@ Store.prototype = {
8693

8794
this.sitemapDb.put(sitemapJson, function(sitemap, err, response) {
8895
// @TODO handle err
89-
sitemap._rev = response.rev;
96+
if (response) {
97+
sitemap._rev = response.rev;
98+
}
9099
callback(sitemap);
91100
}.bind(this, sitemap));
92101
},
@@ -133,8 +142,9 @@ Store.prototype = {
133142
var doc = response.rows[i].doc;
134143
responseData.push(doc);
135144
}
145+
normalizeProperties(responseData);
136146
callback(responseData);
137-
});
147+
}.bind(this));
138148
},
139149
// @TODO make this call lighter
140150
sitemapExists: function (sitemapId, callback) {

0 commit comments

Comments
 (0)