Brazen Framework - Item Attributes Resolver

Item attributes resolution for the Brazen user scripts framework

بۇ قوليازمىنى بىۋاسىتە قاچىلاشقا بولمايدۇ. بۇ باشقا قوليازمىلارنىڭ ئىشلىتىشى ئۈچۈن تەمىنلەنگەن ئامبار بولۇپ، ئىشلىتىش ئۈچۈن مېتا كۆرسەتمىسىگە قىستۇرىدىغان كود: // @require https://update.greasyfork.org/scripts/429587/1847311/Brazen%20Framework%20-%20Item%20Attributes%20Resolver.js

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

ئاپتورى
brazenvoid
نەشرى
3.0.1
قۇرۇلغان ۋاقتى
2021-07-19
يېڭىلانغان ۋاقتى
2026-06-09
Size
4.9 KB
ئىجازەتنامىسى
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).