helper function $

This commit is contained in:
2020-01-10 13:22:37 +08:00
parent 26c6c1159e
commit 4656e4ff64
5 changed files with 48 additions and 32 deletions

View File

@ -15,7 +15,6 @@ class Extractor {
task(...args) {
if (!testArgs(...args)) {
console.log(`Invalid task arguments: ${argsToString(...args)}\n\n${signitures}\n`);
// break call chain to avoid unexpected task running
return this;
}
// given >2 arguments means the task specifies target page,
@ -31,6 +30,7 @@ class Extractor {
clear() {
this._tasks = [];
this._results = [];
return this;
}
/**
* Start the task chain.
@ -64,6 +64,7 @@ class Extractor {
result => {
this._results[this._tasks[this._tasks.length - 1]] = result;
this._running = false;
console.log("Tasks are all done.")
this.save();
}
).catch(err => {
@ -122,9 +123,16 @@ class Extractor {
console.log(`No result for task #${taskid}. Forget to call ".start()"?`);
return;
}
if (confirm(
`Click confirm to download if the sample data looks good (${result.data.length} items)\n\n${result.toString(50) || "- Empty -"}`
)) {
if (result.data.length <= 1) { // 1 for selector headers
console.log(`No result for task #${taskid}. Forget to call ".start()"?`);
return;
}
let msg = `
Please confirm to download (${result.data.length - 1} items)
${result.toString(50) || "- Empty -"}
`.trim();
if (confirm(msg)) {
saveFile(result, "text/csv");
}
}

View File

@ -0,0 +1,3 @@
function $(...args) {
return new Extractor().task(...args).start();
}

View File

@ -1,17 +1,21 @@
const signitures = `
## Usage
new Extractor().task(...args).task(...args).start();
// single task
$(...args);
// managed task chains
e = new Extractor();
e.task(...args).task(...args).start();
## Extractor.task() Signitures:
function(itemsSelector:string, fieldSelectors:string[])
function(itemsSelector:string, fieldSelectors:string[], url:string, from:number, to:number, interval:number)
function(itemsSelector:string, fieldSelectors:string[], url:string, pages:number[])
function(itemsSelector:string, fieldSelectors:string[], urls:string[])
## Task Call Signitures:
function(itemsSelector:string, fieldSelectors:string[]);
function(itemsSelector:string, fieldSelectors:string[], url:string, from:number, to:number, interval:number);
function(itemsSelector:string, fieldSelectors:string[], url:string, pages:number[]);
function(itemsSelector:string, fieldSelectors:string[], urls:string[]);
## Example:
// extract all links text & url under '.item' elements
// use 'selector@attr' to get attribute of the field elements
new Extractor().task(".item", ["a", "a@href"]).start();
$(".item", ["a", "a@href"]);
## See Detailed Help:
https://git.jebbs.co/jebbs/data-extracter-extesion