code optimize
This commit is contained in:
		| @ -4,21 +4,36 @@ | ||||
|  * @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item | ||||
|  * @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages] | ||||
|  */ | ||||
| function extract(itemsSelector, fieldSelectors, ...args) { | ||||
| async function extract(itemsSelector, fieldSelectors, ...args) { | ||||
|     let data = await extractData(itemsSelector, fieldSelectors, ...args); | ||||
|     data.unshift(fieldSelectors); | ||||
|     saveFileAsk(data); | ||||
|     resolve("save done.") | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Extract data from current tab / multiple urls. | ||||
|  * @param {string} itemsSelector items selectors for selecting items (data rows) | ||||
|  * @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item | ||||
|  * @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages] | ||||
|  */ | ||||
| async function extractData(itemsSelector, fieldSelectors, ...args) { | ||||
|     let urls = []; | ||||
|     let listOrTempl = args.shift(); | ||||
|     if (listOrTempl instanceof Array) { | ||||
|         urls = listOrTempl; | ||||
|     } else if (url) { | ||||
|         let urlTempl = listOrTempl; | ||||
|         if (args[0] instanceof Array) { | ||||
|             urls = args[0].map(p => urlTempl.replace("${page}", p)); | ||||
|         } else if (args.length >= 3) { | ||||
|             let from = args.shift(); | ||||
|             let to = args.shift(); | ||||
|             let interval = args.shift(); | ||||
|             for (let i = from; i <= to; i += interval) { | ||||
|                 urls.push(urlTempl.replace("${page}", i)); | ||||
|     let arg = args.shift(); | ||||
|     if (arg instanceof Array) { | ||||
|         urls = arg; | ||||
|     } else { | ||||
|         let urlTempl = arg; | ||||
|         if (urlTempl) { | ||||
|             if (args[0] instanceof Array) { | ||||
|                 urls = args[0].map(p => urlTempl.replace("${page}", p)); | ||||
|             } else if (args.length >= 3) { | ||||
|                 let from = args.shift(); | ||||
|                 let to = args.shift(); | ||||
|                 let interval = args.shift(); | ||||
|                 for (let i = from; i <= to; i += interval) { | ||||
|                     urls.push(urlTempl.replace("${page}", i)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -35,20 +50,18 @@ function extract(itemsSelector, fieldSelectors, ...args) { | ||||
|                     results => { | ||||
|                         data.push(...results); | ||||
|                         return redirectTab(tab, url).then( | ||||
|                             () => extractData(tab, itemsSelector, fieldSelectors) | ||||
|                             () => extractTabData(tab, itemsSelector, fieldSelectors) | ||||
|                         ); | ||||
|                     }, | ||||
|                     () => p | ||||
|                 ), Promise.resolve([])); | ||||
|             } else { | ||||
|                 pms = extractData(tab, itemsSelector, fieldSelectors); | ||||
|                 pms = extractTabData(tab, itemsSelector, fieldSelectors); | ||||
|             } | ||||
|             pms.then( | ||||
|                 results => { | ||||
|                     data.push(...results); | ||||
|                     data.unshift(fieldSelectors); | ||||
|                     saveFileAsk(data); | ||||
|                     resolve("save done.") | ||||
|                     resolve(data); | ||||
|                 }, | ||||
|                 err => reject(err) | ||||
|             ); | ||||
| @ -74,13 +87,13 @@ function redirectTab(tab, url) { | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * extract data in from the target tab, usually used to detect if the content script is ready. | ||||
|  * extract data in from the target tab. | ||||
|  * @param {any} tab target tab | ||||
|  * @param {string} itemsSelector items selectors for selecting items (data rows) | ||||
|  * @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item | ||||
|  * @returns {Promise<string[]>} a promise of extracted data | ||||
|  */ | ||||
| function extractData(tab, itemsSelector, fieldSelectors) { | ||||
| function extractTabData(tab, itemsSelector, fieldSelectors) { | ||||
|     let req = { | ||||
|         from: "DataExtracter:Extract", | ||||
|         itemsSelector: itemsSelector, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user