您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Helper class for loading account subscriptions
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/424516/1114774/Brazen%20Subscriptions%20Loader.js
- // ==UserScript==
- // @name Brazen Subscriptions Loader
- // @namespace brazenvoid
- // @version 1.0.1
- // @author brazenvoid
- // @license GPL-3.0-only
- // @description Helper class for loading account subscriptions
- // ==/UserScript==
- class BrazenSubscriptionsLoader
- {
- /**
- * @callback SubscriptionLoaderGetPageCountCallback
- * @param {JQuery} page
- * @return {number}
- */
- /**
- * @callback SubscriptionLoaderGetPageUrlCallback
- * @param {string} baseUrl
- * @param {number} pageNo
- * @return {string}
- */
- /**
- * @callback SubscriptionLoaderProgressReportingCallback
- * @param {string} status
- */
- /**
- * @callback SubscriptionLoaderSubscriptionsGatheredCallback
- * @param {string[]} subscriptions
- */
- /**
- * @typedef {{url: string, getPageCount: SubscriptionLoaderGetPageCountCallback, getPageUrl: SubscriptionLoaderGetPageUrlCallback,
- * subscriptionNameSelector: string, subscriptionsCountSelector: string}} SubscriptionLoaderConfig
- */
- /**
- * @param {SubscriptionLoaderProgressReportingCallback} onProgressUpdate
- * @param {SubscriptionLoaderSubscriptionsGatheredCallback} onSubscriptionsGathered
- */
- constructor (onProgressUpdate, onSubscriptionsGathered)
- {
- /**
- * @type {number}
- * @private
- */
- this._configIterator = 0
- /**
- * @type {SubscriptionLoaderConfig[]}
- * @private
- */
- this._configs = []
- /**
- * @type {SubscriptionLoaderProgressReportingCallback}
- * @private
- */
- this._onProgressUpdate = onProgressUpdate
- /**
- * @type {SubscriptionLoaderSubscriptionsGatheredCallback}
- * @private
- */
- this._onSubscriptionsGathered = onSubscriptionsGathered
- /**
- * @type {JQuery}
- * @private
- */
- this._sandbox = null
- /**
- * @type {SubscriptionLoaderConfig}
- * @private
- */
- this._selectedConfig = {}
- /**
- * @type {*[]}
- * @private
- */
- this._subscriptions = []
- }
- /**
- * Loads and records subscriptions by page
- * @param {number} maxPage
- * @param {number} pageNo
- * @private
- */
- _loadSubscriptionsPage (pageNo, maxPage)
- {
- this._sandbox.empty().load(this._selectedConfig.getPageUrl(this._selectedConfig.url, pageNo), () => {
- this._sandbox.find(this._selectedConfig.subscriptionNameSelector).each((index, element) => {
- this._subscriptions.push($(element).text().trim())
- })
- this._onProgressUpdate('Gathering subscriptions - ' + Math.ceil(((pageNo / maxPage) * 100)) + '% Complete')
- pageNo++
- if (pageNo <= maxPage) {
- this._loadSubscriptionsPage(pageNo, maxPage)
- } else {
- this._configIterator++
- if (this._configIterator < this._configs.length) {
- this._processSubscriptions()
- } else {
- this._sandbox.remove()
- this._onProgressUpdate('Loaded ' + this._subscriptions.length + ' subscriptions.')
- this._onSubscriptionsGathered(this._subscriptions)
- this._configIterator = 0
- this._subscriptions = []
- }
- }
- })
- }
- /**
- * @private
- */
- _processSubscriptions ()
- {
- this._selectedConfig = this._configs[this._configIterator]
- this._sandbox.empty().load(this._selectedConfig.url + ' ' + this._selectedConfig.subscriptionsCountSelector, () => {
- this._loadSubscriptionsPage(1, Math.ceil(this._selectedConfig.getPageCount(this._sandbox)))
- })
- }
- /**
- * @param {SubscriptionLoaderConfig} config
- * @returns {BrazenSubscriptionsLoader}
- */
- addConfig (config)
- {
- this._configs.push(config)
- return this
- }
- run ()
- {
- this._onProgressUpdate('Gathering subscriptions - 0% Complete')
- this._sandbox = $('<div id="brazen-subscriptions-loader-sandbox" hidden/>').appendTo('body')
- this._processSubscriptions()
- }
- }