Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu.../js/dist
File: blocks.js
const [name, actualValue] = actual[i];
[12000] Fix | Delete
const nameLower = name.toLowerCase();
[12001] Fix | Delete
[12002] Fix | Delete
// As noted above, if missing member in B, assume different.
[12003] Fix | Delete
if (!expectedAttributes.hasOwnProperty(nameLower)) {
[12004] Fix | Delete
logger.warning('Encountered unexpected attribute `%s`.', name);
[12005] Fix | Delete
return false;
[12006] Fix | Delete
}
[12007] Fix | Delete
const expectedValue = expectedAttributes[nameLower];
[12008] Fix | Delete
const isEqualAttributes = isEqualAttributesOfName[nameLower];
[12009] Fix | Delete
if (isEqualAttributes) {
[12010] Fix | Delete
// Defer custom attribute equality handling.
[12011] Fix | Delete
if (!isEqualAttributes(actualValue, expectedValue)) {
[12012] Fix | Delete
logger.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue);
[12013] Fix | Delete
return false;
[12014] Fix | Delete
}
[12015] Fix | Delete
} else if (actualValue !== expectedValue) {
[12016] Fix | Delete
// Otherwise strict inequality should bail.
[12017] Fix | Delete
logger.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue);
[12018] Fix | Delete
return false;
[12019] Fix | Delete
}
[12020] Fix | Delete
}
[12021] Fix | Delete
return true;
[12022] Fix | Delete
}
[12023] Fix | Delete
[12024] Fix | Delete
/**
[12025] Fix | Delete
* Token-type-specific equality handlers
[12026] Fix | Delete
*
[12027] Fix | Delete
* @type {Object}
[12028] Fix | Delete
*/
[12029] Fix | Delete
const isEqualTokensOfType = {
[12030] Fix | Delete
StartTag: (actual, expected, logger = createLogger()) => {
[12031] Fix | Delete
if (actual.tagName !== expected.tagName &&
[12032] Fix | Delete
// Optimization: Use short-circuit evaluation to defer case-
[12033] Fix | Delete
// insensitive check on the assumption that the majority case will
[12034] Fix | Delete
// have exactly equal tag names.
[12035] Fix | Delete
actual.tagName.toLowerCase() !== expected.tagName.toLowerCase()) {
[12036] Fix | Delete
logger.warning('Expected tag name `%s`, instead saw `%s`.', expected.tagName, actual.tagName);
[12037] Fix | Delete
return false;
[12038] Fix | Delete
}
[12039] Fix | Delete
return isEqualTagAttributePairs(...[actual, expected].map(getMeaningfulAttributePairs), logger);
[12040] Fix | Delete
},
[12041] Fix | Delete
Chars: isEquivalentTextTokens,
[12042] Fix | Delete
Comment: isEquivalentTextTokens
[12043] Fix | Delete
};
[12044] Fix | Delete
[12045] Fix | Delete
/**
[12046] Fix | Delete
* Given an array of tokens, returns the first token which is not purely
[12047] Fix | Delete
* whitespace.
[12048] Fix | Delete
*
[12049] Fix | Delete
* Mutates the tokens array.
[12050] Fix | Delete
*
[12051] Fix | Delete
* @param {Object[]} tokens Set of tokens to search.
[12052] Fix | Delete
*
[12053] Fix | Delete
* @return {Object | undefined} Next non-whitespace token.
[12054] Fix | Delete
*/
[12055] Fix | Delete
function getNextNonWhitespaceToken(tokens) {
[12056] Fix | Delete
let token;
[12057] Fix | Delete
while (token = tokens.shift()) {
[12058] Fix | Delete
if (token.type !== 'Chars') {
[12059] Fix | Delete
return token;
[12060] Fix | Delete
}
[12061] Fix | Delete
if (!REGEXP_ONLY_WHITESPACE.test(token.chars)) {
[12062] Fix | Delete
return token;
[12063] Fix | Delete
}
[12064] Fix | Delete
}
[12065] Fix | Delete
}
[12066] Fix | Delete
[12067] Fix | Delete
/**
[12068] Fix | Delete
* Tokenize an HTML string, gracefully handling any errors thrown during
[12069] Fix | Delete
* underlying tokenization.
[12070] Fix | Delete
*
[12071] Fix | Delete
* @param {string} html HTML string to tokenize.
[12072] Fix | Delete
* @param {Object} logger Validation logger object.
[12073] Fix | Delete
*
[12074] Fix | Delete
* @return {Object[]|null} Array of valid tokenized HTML elements, or null on error
[12075] Fix | Delete
*/
[12076] Fix | Delete
function getHTMLTokens(html, logger = createLogger()) {
[12077] Fix | Delete
try {
[12078] Fix | Delete
return new Tokenizer(new DecodeEntityParser()).tokenize(html);
[12079] Fix | Delete
} catch (e) {
[12080] Fix | Delete
logger.warning('Malformed HTML detected: %s', html);
[12081] Fix | Delete
}
[12082] Fix | Delete
return null;
[12083] Fix | Delete
}
[12084] Fix | Delete
[12085] Fix | Delete
/**
[12086] Fix | Delete
* Returns true if the next HTML token closes the current token.
[12087] Fix | Delete
*
[12088] Fix | Delete
* @param {Object} currentToken Current token to compare with.
[12089] Fix | Delete
* @param {Object|undefined} nextToken Next token to compare against.
[12090] Fix | Delete
*
[12091] Fix | Delete
* @return {boolean} true if `nextToken` closes `currentToken`, false otherwise
[12092] Fix | Delete
*/
[12093] Fix | Delete
function isClosedByToken(currentToken, nextToken) {
[12094] Fix | Delete
// Ensure this is a self closed token.
[12095] Fix | Delete
if (!currentToken.selfClosing) {
[12096] Fix | Delete
return false;
[12097] Fix | Delete
}
[12098] Fix | Delete
[12099] Fix | Delete
// Check token names and determine if nextToken is the closing tag for currentToken.
[12100] Fix | Delete
if (nextToken && nextToken.tagName === currentToken.tagName && nextToken.type === 'EndTag') {
[12101] Fix | Delete
return true;
[12102] Fix | Delete
}
[12103] Fix | Delete
return false;
[12104] Fix | Delete
}
[12105] Fix | Delete
[12106] Fix | Delete
/**
[12107] Fix | Delete
* Returns true if the given HTML strings are effectively equivalent, or
[12108] Fix | Delete
* false otherwise. Invalid HTML is not considered equivalent, even if the
[12109] Fix | Delete
* strings directly match.
[12110] Fix | Delete
*
[12111] Fix | Delete
* @param {string} actual Actual HTML string.
[12112] Fix | Delete
* @param {string} expected Expected HTML string.
[12113] Fix | Delete
* @param {Object} logger Validation logger object.
[12114] Fix | Delete
*
[12115] Fix | Delete
* @return {boolean} Whether HTML strings are equivalent.
[12116] Fix | Delete
*/
[12117] Fix | Delete
function isEquivalentHTML(actual, expected, logger = createLogger()) {
[12118] Fix | Delete
// Short-circuit if markup is identical.
[12119] Fix | Delete
if (actual === expected) {
[12120] Fix | Delete
return true;
[12121] Fix | Delete
}
[12122] Fix | Delete
[12123] Fix | Delete
// Tokenize input content and reserialized save content.
[12124] Fix | Delete
const [actualTokens, expectedTokens] = [actual, expected].map(html => getHTMLTokens(html, logger));
[12125] Fix | Delete
[12126] Fix | Delete
// If either is malformed then stop comparing - the strings are not equivalent.
[12127] Fix | Delete
if (!actualTokens || !expectedTokens) {
[12128] Fix | Delete
return false;
[12129] Fix | Delete
}
[12130] Fix | Delete
let actualToken, expectedToken;
[12131] Fix | Delete
while (actualToken = getNextNonWhitespaceToken(actualTokens)) {
[12132] Fix | Delete
expectedToken = getNextNonWhitespaceToken(expectedTokens);
[12133] Fix | Delete
[12134] Fix | Delete
// Inequal if exhausted all expected tokens.
[12135] Fix | Delete
if (!expectedToken) {
[12136] Fix | Delete
logger.warning('Expected end of content, instead saw %o.', actualToken);
[12137] Fix | Delete
return false;
[12138] Fix | Delete
}
[12139] Fix | Delete
[12140] Fix | Delete
// Inequal if next non-whitespace token of each set are not same type.
[12141] Fix | Delete
if (actualToken.type !== expectedToken.type) {
[12142] Fix | Delete
logger.warning('Expected token of type `%s` (%o), instead saw `%s` (%o).', expectedToken.type, expectedToken, actualToken.type, actualToken);
[12143] Fix | Delete
return false;
[12144] Fix | Delete
}
[12145] Fix | Delete
[12146] Fix | Delete
// Defer custom token type equality handling, otherwise continue and
[12147] Fix | Delete
// assume as equal.
[12148] Fix | Delete
const isEqualTokens = isEqualTokensOfType[actualToken.type];
[12149] Fix | Delete
if (isEqualTokens && !isEqualTokens(actualToken, expectedToken, logger)) {
[12150] Fix | Delete
return false;
[12151] Fix | Delete
}
[12152] Fix | Delete
[12153] Fix | Delete
// Peek at the next tokens (actual and expected) to see if they close
[12154] Fix | Delete
// a self-closing tag.
[12155] Fix | Delete
if (isClosedByToken(actualToken, expectedTokens[0])) {
[12156] Fix | Delete
// Consume the next expected token that closes the current actual
[12157] Fix | Delete
// self-closing token.
[12158] Fix | Delete
getNextNonWhitespaceToken(expectedTokens);
[12159] Fix | Delete
} else if (isClosedByToken(expectedToken, actualTokens[0])) {
[12160] Fix | Delete
// Consume the next actual token that closes the current expected
[12161] Fix | Delete
// self-closing token.
[12162] Fix | Delete
getNextNonWhitespaceToken(actualTokens);
[12163] Fix | Delete
}
[12164] Fix | Delete
}
[12165] Fix | Delete
if (expectedToken = getNextNonWhitespaceToken(expectedTokens)) {
[12166] Fix | Delete
// If any non-whitespace tokens remain in expected token set, this
[12167] Fix | Delete
// indicates inequality.
[12168] Fix | Delete
logger.warning('Expected %o, instead saw end of content.', expectedToken);
[12169] Fix | Delete
return false;
[12170] Fix | Delete
}
[12171] Fix | Delete
return true;
[12172] Fix | Delete
}
[12173] Fix | Delete
[12174] Fix | Delete
/**
[12175] Fix | Delete
* Returns an object with `isValid` property set to `true` if the parsed block
[12176] Fix | Delete
* is valid given the input content. A block is considered valid if, when serialized
[12177] Fix | Delete
* with assumed attributes, the content matches the original value. If block is
[12178] Fix | Delete
* invalid, this function returns all validations issues as well.
[12179] Fix | Delete
*
[12180] Fix | Delete
* @param {string|Object} blockTypeOrName Block type.
[12181] Fix | Delete
* @param {Object} attributes Parsed block attributes.
[12182] Fix | Delete
* @param {string} originalBlockContent Original block content.
[12183] Fix | Delete
* @param {Object} logger Validation logger object.
[12184] Fix | Delete
*
[12185] Fix | Delete
* @return {Object} Whether block is valid and contains validation messages.
[12186] Fix | Delete
*/
[12187] Fix | Delete
[12188] Fix | Delete
/**
[12189] Fix | Delete
* Returns an object with `isValid` property set to `true` if the parsed block
[12190] Fix | Delete
* is valid given the input content. A block is considered valid if, when serialized
[12191] Fix | Delete
* with assumed attributes, the content matches the original value. If block is
[12192] Fix | Delete
* invalid, this function returns all validations issues as well.
[12193] Fix | Delete
*
[12194] Fix | Delete
* @param {WPBlock} block block object.
[12195] Fix | Delete
* @param {WPBlockType|string} [blockTypeOrName = block.name] Block type or name, inferred from block if not given.
[12196] Fix | Delete
*
[12197] Fix | Delete
* @return {[boolean,Array<LoggerItem>]} validation results.
[12198] Fix | Delete
*/
[12199] Fix | Delete
function validateBlock(block, blockTypeOrName = block.name) {
[12200] Fix | Delete
const isFallbackBlock = block.name === getFreeformContentHandlerName() || block.name === getUnregisteredTypeHandlerName();
[12201] Fix | Delete
[12202] Fix | Delete
// Shortcut to avoid costly validation.
[12203] Fix | Delete
if (isFallbackBlock) {
[12204] Fix | Delete
return [true, []];
[12205] Fix | Delete
}
[12206] Fix | Delete
const logger = createQueuedLogger();
[12207] Fix | Delete
const blockType = normalizeBlockType(blockTypeOrName);
[12208] Fix | Delete
let generatedBlockContent;
[12209] Fix | Delete
try {
[12210] Fix | Delete
generatedBlockContent = getSaveContent(blockType, block.attributes);
[12211] Fix | Delete
} catch (error) {
[12212] Fix | Delete
logger.error('Block validation failed because an error occurred while generating block content:\n\n%s', error.toString());
[12213] Fix | Delete
return [false, logger.getItems()];
[12214] Fix | Delete
}
[12215] Fix | Delete
const isValid = isEquivalentHTML(block.originalContent, generatedBlockContent, logger);
[12216] Fix | Delete
if (!isValid) {
[12217] Fix | Delete
logger.error('Block validation failed for `%s` (%o).\n\nContent generated by `save` function:\n\n%s\n\nContent retrieved from post body:\n\n%s', blockType.name, blockType, generatedBlockContent, block.originalContent);
[12218] Fix | Delete
}
[12219] Fix | Delete
return [isValid, logger.getItems()];
[12220] Fix | Delete
}
[12221] Fix | Delete
[12222] Fix | Delete
/**
[12223] Fix | Delete
* Returns true if the parsed block is valid given the input content. A block
[12224] Fix | Delete
* is considered valid if, when serialized with assumed attributes, the content
[12225] Fix | Delete
* matches the original value.
[12226] Fix | Delete
*
[12227] Fix | Delete
* Logs to console in development environments when invalid.
[12228] Fix | Delete
*
[12229] Fix | Delete
* @deprecated Use validateBlock instead to avoid data loss.
[12230] Fix | Delete
*
[12231] Fix | Delete
* @param {string|Object} blockTypeOrName Block type.
[12232] Fix | Delete
* @param {Object} attributes Parsed block attributes.
[12233] Fix | Delete
* @param {string} originalBlockContent Original block content.
[12234] Fix | Delete
*
[12235] Fix | Delete
* @return {boolean} Whether block is valid.
[12236] Fix | Delete
*/
[12237] Fix | Delete
function isValidBlockContent(blockTypeOrName, attributes, originalBlockContent) {
[12238] Fix | Delete
external_wp_deprecated_default()('isValidBlockContent introduces opportunity for data loss', {
[12239] Fix | Delete
since: '12.6',
[12240] Fix | Delete
plugin: 'Gutenberg',
[12241] Fix | Delete
alternative: 'validateBlock'
[12242] Fix | Delete
});
[12243] Fix | Delete
const blockType = normalizeBlockType(blockTypeOrName);
[12244] Fix | Delete
const block = {
[12245] Fix | Delete
name: blockType.name,
[12246] Fix | Delete
attributes,
[12247] Fix | Delete
innerBlocks: [],
[12248] Fix | Delete
originalContent: originalBlockContent
[12249] Fix | Delete
};
[12250] Fix | Delete
const [isValid] = validateBlock(block, blockType);
[12251] Fix | Delete
return isValid;
[12252] Fix | Delete
}
[12253] Fix | Delete
[12254] Fix | Delete
;// CONCATENATED MODULE: ./node_modules/@wordpress/blocks/build-module/api/parser/convert-legacy-block.js
[12255] Fix | Delete
/**
[12256] Fix | Delete
* Convert legacy blocks to their canonical form. This function is used
[12257] Fix | Delete
* both in the parser level for previous content and to convert such blocks
[12258] Fix | Delete
* used in Custom Post Types templates.
[12259] Fix | Delete
*
[12260] Fix | Delete
* @param {string} name The block's name
[12261] Fix | Delete
* @param {Object} attributes The block's attributes
[12262] Fix | Delete
*
[12263] Fix | Delete
* @return {[string, Object]} The block's name and attributes, changed accordingly if a match was found
[12264] Fix | Delete
*/
[12265] Fix | Delete
function convertLegacyBlockNameAndAttributes(name, attributes) {
[12266] Fix | Delete
const newAttributes = {
[12267] Fix | Delete
...attributes
[12268] Fix | Delete
};
[12269] Fix | Delete
// Convert 'core/cover-image' block in existing content to 'core/cover'.
[12270] Fix | Delete
if ('core/cover-image' === name) {
[12271] Fix | Delete
name = 'core/cover';
[12272] Fix | Delete
}
[12273] Fix | Delete
[12274] Fix | Delete
// Convert 'core/text' blocks in existing content to 'core/paragraph'.
[12275] Fix | Delete
if ('core/text' === name || 'core/cover-text' === name) {
[12276] Fix | Delete
name = 'core/paragraph';
[12277] Fix | Delete
}
[12278] Fix | Delete
[12279] Fix | Delete
// Convert derivative blocks such as 'core/social-link-wordpress' to the
[12280] Fix | Delete
// canonical form 'core/social-link'.
[12281] Fix | Delete
if (name && name.indexOf('core/social-link-') === 0) {
[12282] Fix | Delete
// Capture `social-link-wordpress` into `{"service":"wordpress"}`
[12283] Fix | Delete
newAttributes.service = name.substring(17);
[12284] Fix | Delete
name = 'core/social-link';
[12285] Fix | Delete
}
[12286] Fix | Delete
[12287] Fix | Delete
// Convert derivative blocks such as 'core-embed/instagram' to the
[12288] Fix | Delete
// canonical form 'core/embed'.
[12289] Fix | Delete
if (name && name.indexOf('core-embed/') === 0) {
[12290] Fix | Delete
// Capture `core-embed/instagram` into `{"providerNameSlug":"instagram"}`
[12291] Fix | Delete
const providerSlug = name.substring(11);
[12292] Fix | Delete
const deprecated = {
[12293] Fix | Delete
speaker: 'speaker-deck',
[12294] Fix | Delete
polldaddy: 'crowdsignal'
[12295] Fix | Delete
};
[12296] Fix | Delete
newAttributes.providerNameSlug = providerSlug in deprecated ? deprecated[providerSlug] : providerSlug;
[12297] Fix | Delete
// This is needed as the `responsive` attribute was passed
[12298] Fix | Delete
// in a different way before the refactoring to block variations.
[12299] Fix | Delete
if (!['amazon-kindle', 'wordpress'].includes(providerSlug)) {
[12300] Fix | Delete
newAttributes.responsive = true;
[12301] Fix | Delete
}
[12302] Fix | Delete
name = 'core/embed';
[12303] Fix | Delete
}
[12304] Fix | Delete
[12305] Fix | Delete
// Convert Post Comment blocks in existing content to Comment blocks.
[12306] Fix | Delete
// TODO: Remove these checks when WordPress 6.0 is released.
[12307] Fix | Delete
if (name === 'core/post-comment-author') {
[12308] Fix | Delete
name = 'core/comment-author-name';
[12309] Fix | Delete
}
[12310] Fix | Delete
if (name === 'core/post-comment-content') {
[12311] Fix | Delete
name = 'core/comment-content';
[12312] Fix | Delete
}
[12313] Fix | Delete
if (name === 'core/post-comment-date') {
[12314] Fix | Delete
name = 'core/comment-date';
[12315] Fix | Delete
}
[12316] Fix | Delete
if (name === 'core/comments-query-loop') {
[12317] Fix | Delete
name = 'core/comments';
[12318] Fix | Delete
const {
[12319] Fix | Delete
className = ''
[12320] Fix | Delete
} = newAttributes;
[12321] Fix | Delete
if (!className.includes('wp-block-comments-query-loop')) {
[12322] Fix | Delete
newAttributes.className = ['wp-block-comments-query-loop', className].join(' ');
[12323] Fix | Delete
}
[12324] Fix | Delete
// Note that we also had to add a deprecation to the block in order
[12325] Fix | Delete
// for the ID change to work.
[12326] Fix | Delete
}
[12327] Fix | Delete
if (name === 'core/post-comments') {
[12328] Fix | Delete
name = 'core/comments';
[12329] Fix | Delete
newAttributes.legacy = true;
[12330] Fix | Delete
}
[12331] Fix | Delete
[12332] Fix | Delete
// The following code is only relevant for the Gutenberg plugin.
[12333] Fix | Delete
// It's a stand-alone if statement for dead-code elimination.
[12334] Fix | Delete
if (false) {}
[12335] Fix | Delete
return [name, newAttributes];
[12336] Fix | Delete
}
[12337] Fix | Delete
[12338] Fix | Delete
;// CONCATENATED MODULE: ./node_modules/hpq/es/get-path.js
[12339] Fix | Delete
/**
[12340] Fix | Delete
* Given object and string of dot-delimited path segments, returns value at
[12341] Fix | Delete
* path or undefined if path cannot be resolved.
[12342] Fix | Delete
*
[12343] Fix | Delete
* @param {Object} object Lookup object
[12344] Fix | Delete
* @param {string} path Path to resolve
[12345] Fix | Delete
* @return {?*} Resolved value
[12346] Fix | Delete
*/
[12347] Fix | Delete
function getPath(object, path) {
[12348] Fix | Delete
var segments = path.split('.');
[12349] Fix | Delete
var segment;
[12350] Fix | Delete
[12351] Fix | Delete
while (segment = segments.shift()) {
[12352] Fix | Delete
if (!(segment in object)) {
[12353] Fix | Delete
return;
[12354] Fix | Delete
}
[12355] Fix | Delete
[12356] Fix | Delete
object = object[segment];
[12357] Fix | Delete
}
[12358] Fix | Delete
[12359] Fix | Delete
return object;
[12360] Fix | Delete
}
[12361] Fix | Delete
;// CONCATENATED MODULE: ./node_modules/hpq/es/index.js
[12362] Fix | Delete
/**
[12363] Fix | Delete
* Internal dependencies
[12364] Fix | Delete
*/
[12365] Fix | Delete
[12366] Fix | Delete
/**
[12367] Fix | Delete
* Function returning a DOM document created by `createHTMLDocument`. The same
[12368] Fix | Delete
* document is returned between invocations.
[12369] Fix | Delete
*
[12370] Fix | Delete
* @return {Document} DOM document.
[12371] Fix | Delete
*/
[12372] Fix | Delete
[12373] Fix | Delete
var getDocument = function () {
[12374] Fix | Delete
var doc;
[12375] Fix | Delete
return function () {
[12376] Fix | Delete
if (!doc) {
[12377] Fix | Delete
doc = document.implementation.createHTMLDocument('');
[12378] Fix | Delete
}
[12379] Fix | Delete
[12380] Fix | Delete
return doc;
[12381] Fix | Delete
};
[12382] Fix | Delete
}();
[12383] Fix | Delete
/**
[12384] Fix | Delete
* Given a markup string or DOM element, creates an object aligning with the
[12385] Fix | Delete
* shape of the matchers object, or the value returned by the matcher.
[12386] Fix | Delete
*
[12387] Fix | Delete
* @param {(string|Element)} source Source content
[12388] Fix | Delete
* @param {(Object|Function)} matchers Matcher function or object of matchers
[12389] Fix | Delete
* @return {(Object|*)} Matched value(s), shaped by object
[12390] Fix | Delete
*/
[12391] Fix | Delete
[12392] Fix | Delete
[12393] Fix | Delete
function parse(source, matchers) {
[12394] Fix | Delete
if (!matchers) {
[12395] Fix | Delete
return;
[12396] Fix | Delete
} // Coerce to element
[12397] Fix | Delete
[12398] Fix | Delete
[12399] Fix | Delete
if ('string' === typeof source) {
[12400] Fix | Delete
var doc = getDocument();
[12401] Fix | Delete
doc.body.innerHTML = source;
[12402] Fix | Delete
source = doc.body;
[12403] Fix | Delete
} // Return singular value
[12404] Fix | Delete
[12405] Fix | Delete
[12406] Fix | Delete
if ('function' === typeof matchers) {
[12407] Fix | Delete
return matchers(source);
[12408] Fix | Delete
} // Bail if we can't handle matchers
[12409] Fix | Delete
[12410] Fix | Delete
[12411] Fix | Delete
if (Object !== matchers.constructor) {
[12412] Fix | Delete
return;
[12413] Fix | Delete
} // Shape result by matcher object
[12414] Fix | Delete
[12415] Fix | Delete
[12416] Fix | Delete
return Object.keys(matchers).reduce(function (memo, key) {
[12417] Fix | Delete
memo[key] = parse(source, matchers[key]);
[12418] Fix | Delete
return memo;
[12419] Fix | Delete
}, {});
[12420] Fix | Delete
}
[12421] Fix | Delete
/**
[12422] Fix | Delete
* Generates a function which matches node of type selector, returning an
[12423] Fix | Delete
* attribute by property if the attribute exists. If no selector is passed,
[12424] Fix | Delete
* returns property of the query element.
[12425] Fix | Delete
*
[12426] Fix | Delete
* @param {?string} selector Optional selector
[12427] Fix | Delete
* @param {string} name Property name
[12428] Fix | Delete
* @return {*} Property value
[12429] Fix | Delete
*/
[12430] Fix | Delete
[12431] Fix | Delete
function prop(selector, name) {
[12432] Fix | Delete
if (1 === arguments.length) {
[12433] Fix | Delete
name = selector;
[12434] Fix | Delete
selector = undefined;
[12435] Fix | Delete
}
[12436] Fix | Delete
[12437] Fix | Delete
return function (node) {
[12438] Fix | Delete
var match = node;
[12439] Fix | Delete
[12440] Fix | Delete
if (selector) {
[12441] Fix | Delete
match = node.querySelector(selector);
[12442] Fix | Delete
}
[12443] Fix | Delete
[12444] Fix | Delete
if (match) {
[12445] Fix | Delete
return getPath(match, name);
[12446] Fix | Delete
}
[12447] Fix | Delete
};
[12448] Fix | Delete
}
[12449] Fix | Delete
/**
[12450] Fix | Delete
* Generates a function which matches node of type selector, returning an
[12451] Fix | Delete
* attribute by name if the attribute exists. If no selector is passed,
[12452] Fix | Delete
* returns attribute of the query element.
[12453] Fix | Delete
*
[12454] Fix | Delete
* @param {?string} selector Optional selector
[12455] Fix | Delete
* @param {string} name Attribute name
[12456] Fix | Delete
* @return {?string} Attribute value
[12457] Fix | Delete
*/
[12458] Fix | Delete
[12459] Fix | Delete
function attr(selector, name) {
[12460] Fix | Delete
if (1 === arguments.length) {
[12461] Fix | Delete
name = selector;
[12462] Fix | Delete
selector = undefined;
[12463] Fix | Delete
}
[12464] Fix | Delete
[12465] Fix | Delete
return function (node) {
[12466] Fix | Delete
var attributes = prop(selector, 'attributes')(node);
[12467] Fix | Delete
[12468] Fix | Delete
if (attributes && attributes.hasOwnProperty(name)) {
[12469] Fix | Delete
return attributes[name].value;
[12470] Fix | Delete
}
[12471] Fix | Delete
};
[12472] Fix | Delete
}
[12473] Fix | Delete
/**
[12474] Fix | Delete
* Convenience for `prop( selector, 'innerHTML' )`.
[12475] Fix | Delete
*
[12476] Fix | Delete
* @see prop()
[12477] Fix | Delete
*
[12478] Fix | Delete
* @param {?string} selector Optional selector
[12479] Fix | Delete
* @return {string} Inner HTML
[12480] Fix | Delete
*/
[12481] Fix | Delete
[12482] Fix | Delete
function html(selector) {
[12483] Fix | Delete
return prop(selector, 'innerHTML');
[12484] Fix | Delete
}
[12485] Fix | Delete
/**
[12486] Fix | Delete
* Convenience for `prop( selector, 'textContent' )`.
[12487] Fix | Delete
*
[12488] Fix | Delete
* @see prop()
[12489] Fix | Delete
*
[12490] Fix | Delete
* @param {?string} selector Optional selector
[12491] Fix | Delete
* @return {string} Text content
[12492] Fix | Delete
*/
[12493] Fix | Delete
[12494] Fix | Delete
function es_text(selector) {
[12495] Fix | Delete
return prop(selector, 'textContent');
[12496] Fix | Delete
}
[12497] Fix | Delete
/**
[12498] Fix | Delete
* Creates a new matching context by first finding elements matching selector
[12499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function