fix: prevent asset conflicts between React and Grid.js versions

Add coexistence checks to all enqueue methods to prevent loading
both React and Grid.js assets simultaneously.

Changes:
- ReactAdmin.php: Only enqueue React assets when ?react=1
- Init.php: Skip Grid.js when React active on admin pages
- Form.php, Coupon.php, Access.php: Restore classic assets when ?react=0
- Customer.php, Product.php, License.php: Add coexistence checks

Now the toggle between Classic and React versions works correctly.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
dwindown
2026-04-18 17:02:14 +07:00
parent bd9cdac02e
commit e8fbfb14c1
74973 changed files with 6658406 additions and 71 deletions

View File

@@ -0,0 +1,56 @@
/** @type {HTMLTextAreaElement} */
let _decodeTextArea;
/**
* Decodes the HTML entities from a given string.
*
* @param {string} html String that contain HTML entities.
*
* @example
* ```js
* import { decodeEntities } from '@wordpress/html-entities';
*
* const result = decodeEntities( '&aacute;' );
* console.log( result ); // result will be "á"
* ```
*
* @return {string} The decoded string.
*/
export function decodeEntities(html) {
// Not a string, or no entities to decode.
if ('string' !== typeof html || -1 === html.indexOf('&')) {
return html;
}
// Create a textarea for decoding entities, that we can reuse.
if (undefined === _decodeTextArea) {
if (document.implementation && document.implementation.createHTMLDocument) {
_decodeTextArea = document.implementation.createHTMLDocument('').createElement('textarea');
} else {
_decodeTextArea = document.createElement('textarea');
}
}
_decodeTextArea.innerHTML = html;
const decoded = _decodeTextArea.textContent;
_decodeTextArea.innerHTML = '';
/**
* Cast to string, HTMLTextAreaElement should always have `string` textContent.
*
* > The `textContent` property of the `Node` interface represents the text content of the
* > node and its descendants.
* >
* > Value: A string or `null`
* >
* > * If the node is a `document` or a Doctype, `textContent` returns `null`.
* > * If the node is a CDATA section, comment, processing instruction, or text node,
* > textContent returns the text inside the node, i.e., the `Node.nodeValue`.
* > * For other node types, `textContent returns the concatenation of the textContent of
* > every child node, excluding comments and processing instructions. (This is an empty
* > string if the node has no children.)
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
*/
return /** @type {string} */decoded;
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["_decodeTextArea","decodeEntities","html","indexOf","undefined","document","implementation","createHTMLDocument","createElement","innerHTML","decoded","textContent"],"sources":["@wordpress/html-entities/src/index.js"],"sourcesContent":["/** @type {HTMLTextAreaElement} */\nlet _decodeTextArea;\n\n/**\n * Decodes the HTML entities from a given string.\n *\n * @param {string} html String that contain HTML entities.\n *\n * @example\n * ```js\n * import { decodeEntities } from '@wordpress/html-entities';\n *\n * const result = decodeEntities( '&aacute;' );\n * console.log( result ); // result will be \"á\"\n * ```\n *\n * @return {string} The decoded string.\n */\nexport function decodeEntities( html ) {\n\t// Not a string, or no entities to decode.\n\tif ( 'string' !== typeof html || -1 === html.indexOf( '&' ) ) {\n\t\treturn html;\n\t}\n\n\t// Create a textarea for decoding entities, that we can reuse.\n\tif ( undefined === _decodeTextArea ) {\n\t\tif (\n\t\t\tdocument.implementation &&\n\t\t\tdocument.implementation.createHTMLDocument\n\t\t) {\n\t\t\t_decodeTextArea = document.implementation\n\t\t\t\t.createHTMLDocument( '' )\n\t\t\t\t.createElement( 'textarea' );\n\t\t} else {\n\t\t\t_decodeTextArea = document.createElement( 'textarea' );\n\t\t}\n\t}\n\n\t_decodeTextArea.innerHTML = html;\n\tconst decoded = _decodeTextArea.textContent;\n\t_decodeTextArea.innerHTML = '';\n\n\t/**\n\t * Cast to string, HTMLTextAreaElement should always have `string` textContent.\n\t *\n\t * > The `textContent` property of the `Node` interface represents the text content of the\n\t * > node and its descendants.\n\t * >\n\t * > Value: A string or `null`\n\t * >\n\t * > * If the node is a `document` or a Doctype, `textContent` returns `null`.\n\t * > * If the node is a CDATA section, comment, processing instruction, or text node,\n\t * > textContent returns the text inside the node, i.e., the `Node.nodeValue`.\n\t * > * For other node types, `textContent returns the concatenation of the textContent of\n\t * > every child node, excluding comments and processing instructions. (This is an empty\n\t * > string if the node has no children.)\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent\n\t */\n\treturn /** @type {string} */ ( decoded );\n}\n"],"mappings":"AAAA;AACA,IAAIA,eAAe;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAEC,IAAI,EAAG;EACtC;EACA,IAAK,QAAQ,KAAK,OAAOA,IAAI,IAAI,CAAC,CAAC,KAAKA,IAAI,CAACC,OAAO,CAAE,GAAI,CAAC,EAAG;IAC7D,OAAOD,IAAI;EACZ;;EAEA;EACA,IAAKE,SAAS,KAAKJ,eAAe,EAAG;IACpC,IACCK,QAAQ,CAACC,cAAc,IACvBD,QAAQ,CAACC,cAAc,CAACC,kBAAkB,EACzC;MACDP,eAAe,GAAGK,QAAQ,CAACC,cAAc,CACvCC,kBAAkB,CAAE,EAAG,CAAC,CACxBC,aAAa,CAAE,UAAW,CAAC;IAC9B,CAAC,MAAM;MACNR,eAAe,GAAGK,QAAQ,CAACG,aAAa,CAAE,UAAW,CAAC;IACvD;EACD;EAEAR,eAAe,CAACS,SAAS,GAAGP,IAAI;EAChC,MAAMQ,OAAO,GAAGV,eAAe,CAACW,WAAW;EAC3CX,eAAe,CAACS,SAAS,GAAG,EAAE;;EAE9B;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACC,OAAO,qBAAwBC,OAAO;AACvC","ignoreList":[]}