scrollToBottom option
This commit is contained in:
		| @ -1,8 +1,6 @@ | ||||
| class Task { | ||||
|     // _manager = undefined; | ||||
|     // _id = 0; | ||||
|     // _urls = []; | ||||
|     _data = {}; | ||||
|     _data_keys = []; | ||||
|     /** | ||||
|      * Create a task. | ||||
|      * constructor(itemsSelector:string, fieldSelectors:string[]) | ||||
| @ -11,9 +9,10 @@ class Task { | ||||
|      * constructor(itemsSelector:string, fieldSelectors:string[], urls:string[]) | ||||
|      * @param {...any} args | ||||
|      */ | ||||
|     constructor(...args) { | ||||
|     constructor(options, ...args) { | ||||
|         if (!testArgs(...args)) | ||||
|             throw new Error(`Invalid call arguments.\n\n${signitures}\n\n`); | ||||
|         this._options = options; | ||||
|         this._itemsSelector = args.shift(); | ||||
|         this._fieldSelectors = args.shift(); | ||||
|         this._urls = parseUrls(...args); | ||||
| @ -25,39 +24,52 @@ class Task { | ||||
|         return this._data; | ||||
|     } | ||||
|     get results() { | ||||
|         return this._urls.reduce((p, c) => { | ||||
|         return this._data_keys.reduce((p, c) => { | ||||
|             return p.concat(this._data[c]); | ||||
|         }, []); | ||||
|     } | ||||
|     get fieldSelectors() { | ||||
|         return this._fieldSelectors; | ||||
|     } | ||||
|     clean() { | ||||
|         this._data = {}; | ||||
|     } | ||||
|     async execute(tab, upstreamData) { | ||||
|         if (!tab) throw new Error("No tab to execute the task."); | ||||
|         if (!this._urls.length) { | ||||
|         if (!tab) return Promise.reject("No tab to execute the task."); | ||||
|         let urls = this._urls | ||||
|         if (!urls.length) { | ||||
|             if (upstreamData) { | ||||
|                 this._urls = parseUrls(upstreamData); | ||||
|                 urls = parseUrls(upstreamData); | ||||
|             } else { | ||||
|                 this._urls = [await queryUrl(tab)]; | ||||
|                 urls = [await queryUrl(tab)]; | ||||
|             } | ||||
|         } | ||||
|         return this._urls.reduce((p, url, i) => p.then( | ||||
|         let saveResult = (results, key) => { | ||||
|             this._data[key] = results; | ||||
|             this._data_keys.push(key); | ||||
|         } | ||||
|         return urls.reduce((p, url, i) => p.then( | ||||
|             results => { | ||||
|                 if (i > 0) { | ||||
|                     if (!MSG_URL_SKIPPED.isEqual(results)) { | ||||
|                         let lastURL = this._urls[i - 1]; | ||||
|                         this._data[lastURL] = results; | ||||
|                     }  | ||||
|                         let lastURL = urls[i - 1]; | ||||
|                         saveResult(results, lastURL); | ||||
|                     } | ||||
|                 } | ||||
|                 return this._data[url] ? MSG_URL_SKIPPED : redirectTab(tab, url).then( | ||||
|                 if (this._data[url]) return MSG_URL_SKIPPED; | ||||
|                 let pms = redirectTab(tab, url); | ||||
|                 if (this._options["scrollToBottom"]) { | ||||
|                     pms = pms.then(() => scrollToBottom(tab)); | ||||
|                 } | ||||
|                 return pms.then( | ||||
|                     () => extractTabData(tab, this._itemsSelector, this._fieldSelectors) | ||||
|                 ); | ||||
|             } | ||||
|         ), Promise.resolve(null)).then( | ||||
|             results => { | ||||
|                 if (!MSG_URL_SKIPPED.isEqual(results)) { | ||||
|                     let lastURL = this._urls[this._urls.length - 1]; | ||||
|                     this._data[lastURL] = results; | ||||
|                     let lastURL = urls[urls.length - 1]; | ||||
|                     saveResult(results, lastURL); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user