Brazen Framework - Item Attributes Resolver

Item attributes resolution for the Brazen user scripts framework

Ce script ne devrait pas être installé directement. C'est une librairie créée pour d'autres scripts. Elle doit être inclus avec la commande // @require https://update.greasyfork.org/scripts/429587/1847311/Brazen%20Framework%20-%20Item%20Attributes%20Resolver.js

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

Auteur
brazenvoid
Version
3.0.1
Créer
2021-07-19
Mis à jour
2026-06-09
Taille
4,91 ko
Licence
GPL-3.0-only

Brazen Framework — Item Attributes Resolver (developer guide)

Resolve per-tile metadata for compliance filters when search results do not expose everything on the thumbnail row.

Greasy Fork: Item Attributes Resolver · Requires: Utilities · Used by: Framework core

Class name: BrazenItemAttributesResolver (filename uses singular Attribute).


Constructor config

new BrazenItemAttributesResolver({
  itemLinkSelector: 'a.thumb',           // href for deep fetch
  itemDeepAnalysisSelector: '#metadata', // fragment loaded from detail page
  requestDelay: 200,                     // ms multiplier between deep loads
  onDeepAttributesResolution: (item) => { /* re-run compliance */ },
})

Framework wires onDeepAttributesResolution to _complyItem(item) + _onAfterComplianceRun.


Storage model

Resolved values live on the DOM node: item[0].scriptAttributes — a plain object keyed by normalized attribute names.

Attribute names are formatted: attribute.toLowerCase().replaceAll(' ', '_').


Attribute kinds

Registration When it runs Framework usage
addAttribute(name, extractor) During resolveAttributes(item) on first compliance pass Shallow read from list tile
addAsyncAttribute(name, extractor) Not auto-invoked by framework Register for custom/manual use
addDeepAttribute(name, extractor) Lazy — when get() misses and deep attrs exist Detail-page scrape

Shallow flow

this._itemAttributesResolver.addAttribute('tags', (item) => {
  return item.find('.tag').map((i, el) => $(el).text()).get()
})

resolveAttributes(item) creates scriptAttributes, runs all shallow extractors, does not call async or deep extractors.

Deep flow

When get(item, 'tags') returns undefined and _hasDeepAttributes:

  1. Read href from item.find(itemLinkSelector).first().
  2. Utilities.sleep(_requestIteration * requestDelay) — throttles parallel fetches.
  3. Hidden sandbox #brazen-item-attributes-resolver-sandbox loads url + ' ' + itemDeepAnalysisSelector.
  4. Each deep extractor runs with sandbox jQuery as argument.
  5. onDeepAttributesResolution(item) fires.
  6. Sandbox emptied; _requestIteration incremented.

Manual injection

this._itemAttributesResolver.set(item, 'synthetic_tag', 'value')

Use in _onFirstHitBeforeCompliance when parsing tile DOM before filters run.


Public API

Method Role
addAttribute(name, callback) Shallow extractor (item: JQuery) => *
addAsyncAttribute(name, callback) Stored only; not called by resolveAttributes
addDeepAttribute(name, callback) Deep extractor (sandbox: JQuery) => *
resolveAttributes(item, afterCallback?) First-pass shallow resolution
get(item, attribute) Read value; may trigger deep load
set(item, attribute, value) Write into scriptAttributes
completeResolutionRun() Reset _requestIteration to 1 between compliance passes

Framework calls completeResolutionRun() at end of _validateCompliance.


Built-in framework attributes

Constant Name Source
ITEM_NAME name itemNameSelector text (if selector non-empty)
ITEM_PROCESSED_ONCE processed_once false until first compliance completes

Access in app code via this._get(item, ITEM_NAME) (framework protected helper).


When to use deep attributes

Use when compact search layouts omit tags on tiles, or duration/rating exists only on the detail page.

Cost: extra HTTP work and cumulative delay (requestDelay * iteration). Prefer shallow reads when the DOM already exposes data.

Filter helpers such as _addItemTagAttribute and _addItemDurationRangeFilter register attributes automatically.

Next in stack: Framework core (optional Paginator / Subscriptions Loader before core).