Document application modes (development/debug/production) Add global file drop handler, order column normalization, SPA hash fix Serve CDN assets via /_vendor/ URLs instead of merging into bundles Add production minification with license preservation Improve JSON formatting for debugging and production optimization Add CDN asset caching with CSS URL inlining for production builds Add three-mode system (development, debug, production) Update Manifest CLAUDE.md to reflect helper class architecture Refactor Manifest.php into helper classes for better organization Pre-manifest-refactor checkpoint: Add app_mode documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
115 lines
5.0 KiB
JavaScript
Executable File
115 lines
5.0 KiB
JavaScript
Executable File
import * as DomUtils from "domutils";
|
|
import boolbase from "boolbase";
|
|
import { compile as compileRaw, compileUnsafe, compileToken, } from "./compile.js";
|
|
import { getNextSiblings } from "./pseudo-selectors/subselects.js";
|
|
const defaultEquals = (a, b) => a === b;
|
|
const defaultOptions = {
|
|
adapter: DomUtils,
|
|
equals: defaultEquals,
|
|
};
|
|
function convertOptionFormats(options) {
|
|
var _a, _b, _c, _d;
|
|
/*
|
|
* We force one format of options to the other one.
|
|
*/
|
|
// @ts-expect-error Default options may have incompatible `Node` / `ElementNode`.
|
|
const opts = options !== null && options !== void 0 ? options : defaultOptions;
|
|
// @ts-expect-error Same as above.
|
|
(_a = opts.adapter) !== null && _a !== void 0 ? _a : (opts.adapter = DomUtils);
|
|
// @ts-expect-error `equals` does not exist on `Options`
|
|
(_b = opts.equals) !== null && _b !== void 0 ? _b : (opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals);
|
|
return opts;
|
|
}
|
|
function wrapCompile(func) {
|
|
return function addAdapter(selector, options, context) {
|
|
const opts = convertOptionFormats(options);
|
|
return func(selector, opts, context);
|
|
};
|
|
}
|
|
/**
|
|
* Compiles the query, returns a function.
|
|
*/
|
|
export const compile = wrapCompile(compileRaw);
|
|
export const _compileUnsafe = wrapCompile(compileUnsafe);
|
|
export const _compileToken = wrapCompile(compileToken);
|
|
function getSelectorFunc(searchFunc) {
|
|
return function select(query, elements, options) {
|
|
const opts = convertOptionFormats(options);
|
|
if (typeof query !== "function") {
|
|
query = compileUnsafe(query, opts, elements);
|
|
}
|
|
const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);
|
|
return searchFunc(query, filteredElements, opts);
|
|
};
|
|
}
|
|
export function prepareContext(elems, adapter, shouldTestNextSiblings = false) {
|
|
/*
|
|
* Add siblings if the query requires them.
|
|
* See https://github.com/fb55/css-select/pull/43#issuecomment-225414692
|
|
*/
|
|
if (shouldTestNextSiblings) {
|
|
elems = appendNextSiblings(elems, adapter);
|
|
}
|
|
return Array.isArray(elems)
|
|
? adapter.removeSubsets(elems)
|
|
: adapter.getChildren(elems);
|
|
}
|
|
function appendNextSiblings(elem, adapter) {
|
|
// Order matters because jQuery seems to check the children before the siblings
|
|
const elems = Array.isArray(elem) ? elem.slice(0) : [elem];
|
|
const elemsLength = elems.length;
|
|
for (let i = 0; i < elemsLength; i++) {
|
|
const nextSiblings = getNextSiblings(elems[i], adapter);
|
|
elems.push(...nextSiblings);
|
|
}
|
|
return elems;
|
|
}
|
|
/**
|
|
* @template Node The generic Node type for the DOM adapter being used.
|
|
* @template ElementNode The Node type for elements for the DOM adapter being used.
|
|
* @param elems Elements to query. If it is an element, its children will be queried..
|
|
* @param query can be either a CSS selector string or a compiled query function.
|
|
* @param [options] options for querying the document.
|
|
* @see compile for supported selector queries.
|
|
* @returns All matching elements.
|
|
*
|
|
*/
|
|
export const selectAll = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0
|
|
? []
|
|
: options.adapter.findAll(query, elems));
|
|
/**
|
|
* @template Node The generic Node type for the DOM adapter being used.
|
|
* @template ElementNode The Node type for elements for the DOM adapter being used.
|
|
* @param elems Elements to query. If it is an element, its children will be queried..
|
|
* @param query can be either a CSS selector string or a compiled query function.
|
|
* @param [options] options for querying the document.
|
|
* @see compile for supported selector queries.
|
|
* @returns the first match, or null if there was no match.
|
|
*/
|
|
export const selectOne = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0
|
|
? null
|
|
: options.adapter.findOne(query, elems));
|
|
/**
|
|
* Tests whether or not an element is matched by query.
|
|
*
|
|
* @template Node The generic Node type for the DOM adapter being used.
|
|
* @template ElementNode The Node type for elements for the DOM adapter being used.
|
|
* @param elem The element to test if it matches the query.
|
|
* @param query can be either a CSS selector string or a compiled query function.
|
|
* @param [options] options for querying the document.
|
|
* @see compile for supported selector queries.
|
|
* @returns
|
|
*/
|
|
export function is(elem, query, options) {
|
|
const opts = convertOptionFormats(options);
|
|
return (typeof query === "function" ? query : compileRaw(query, opts))(elem);
|
|
}
|
|
/**
|
|
* Alias for selectAll(query, elems, options).
|
|
* @see [compile] for supported selector queries.
|
|
*/
|
|
export default selectAll;
|
|
// Export filters, pseudos and aliases to allow users to supply their own.
|
|
/** @deprecated Use the `pseudos` option instead. */
|
|
export { filters, pseudos, aliases } from "./pseudo-selectors/index.js";
|
|
//# sourceMappingURL=index.js.map
|