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

140
node_modules/json2php/README.md generated vendored Normal file
View File

@@ -0,0 +1,140 @@
json2php
========
### Instalation
To install json2php you could clone the project from Github or use NPM to install it.
```bash
$ npm install json2php
```
### Usage
Convert JavaScript object/array/string/number/boolean to string that is the corresponding PHP representation.
#### String
When the content is just a string the output will be the same string.
```javascript
s = json2php('Hello World!')
// => s = 'Hello World!'
```
#### Number
Numbers are the same.
```javascript
s = json2php(123)
// => s = '123'
```
#### Boolean
```javascript
s = json2php( true )
// => s = 'true'
```
#### Undefined/Null
`null` and `undefined` are returned as `null`
```javascript
s = json2php(undefined)
// => s = 'null'
```
#### Array
```javascript
s = json2php([1, 2, 3])
// => s = 'array(1, 2, 3)'
```
#### Object
```javascript
s = json2php({a: 1, b: 2, c: 'text', false: true, undefined: null})
// => s = "array('a' => 1, 'b' => 2, 'c' => 'text', 'false': true, 'undefined': null)"
```
#### Non-valid JSON
```javascript
s = json2php(new Date())
// => s = "null"
```
### Pretty printing
Create custom 'printers' with `json2php.make`:
```javascript
const printer = json2php.make({linebreak:'\n', indent:'\t', shortArraySyntax: true})
printer({one: 3, two: 20, three: [9, 3, 2]})
/* result:.
[
'one' => 3,
'two' => 20,
'set' => [
9,
3,
2
]
]
*/
```
### For Contributors
#### Tests
To run test we use `mocha` framework.
```bash
$ npm test
```
#### CoffeeScript Source
But in any case you will depend on `coffee-script`
```bash
$ npm run build
```
### Changelog
#### 0.0.7
* Add `shortArraySyntax` to pretty print options
#### 0.0.6
* Add pretty print capability via `json2php.make` (thanks to @stokesman)
#### 0.0.5
* Update and clean up (thanks to @SumoTTo)
* Add boolean type (thanks to @SumoTTo)
#### 0.0.4
* Fix for single quotes escaping (thanks to @ksky521)
#### 0.0.3
* Fixed the case when non-valid JSON is passed
* Fixing the bug with the object section
#### 0.0.2
* Adding the package.json to Git repository, also package dependency
* Changes into the file structure
* Adding CoffeeScript source ( Not finished yet )
* Adding Cakefile and task `test`
* Adding Mocha for test framework.
* Adding `test`, `src`, `lib` directory
* Adding tests
#### 0.0.1
* Init the project into NPM
* module.exports for Node.js
* Added json2php into the global scope with global.json2php

66
node_modules/json2php/lib/json2php.js generated vendored Normal file
View File

@@ -0,0 +1,66 @@
// Generated by CoffeeScript 2.7.0
var json2php, make,
hasProp = {}.hasOwnProperty;
make = function({linebreak = '', indent = '', shortArraySyntax = false} = {}) {
var arrClose, arrOpen, nest, transform;
arrOpen = shortArraySyntax ? '[' : 'array(';
arrClose = shortArraySyntax ? ']' : ')';
nest = {
'[object Array]': function(obj, parentIndent) {
var i, len, results, value;
results = [];
for (i = 0, len = obj.length; i < len; i++) {
value = obj[i];
results.push(transform(value, parentIndent));
}
return results;
},
'[object Object]': function(obj, parentIndent) {
var key, results, value;
results = [];
for (key in obj) {
if (!hasProp.call(obj, key)) continue;
value = obj[key];
results.push(transform(key, parentIndent) + ' => ' + transform(value, parentIndent));
}
return results;
}
};
return transform = function(obj, parentIndent = '') {
var items, nestIndent, objType, result;
objType = Object.prototype.toString.call(obj);
switch (objType) {
case '[object Null]':
case '[object Undefined]':
result = 'null';
break;
case '[object String]':
result = "'" + obj.replace(/\\/g, '\\\\').replace(/\'/g, "\\'") + "'";
break;
case '[object Number]':
case '[object Boolean]':
result = obj.toString();
break;
case '[object Array]':
case '[object Object]':
nestIndent = parentIndent + indent;
items = nest[objType](obj, nestIndent);
result = `${arrOpen}${linebreak + nestIndent}${items.join(',' + (linebreak === '' ? ' ' : linebreak + nestIndent))}${linebreak + parentIndent}${arrClose}`;
break;
default:
result = 'null';
}
return result;
};
};
json2php = make();
json2php.make = make;
if (typeof module !== 'undefined' && module.exports) {
module.exports = json2php;
// Not that good but useful
global.json2php = json2php;
}

36
node_modules/json2php/package.json generated vendored Normal file
View File

@@ -0,0 +1,36 @@
{
"name": "json2php",
"version": "0.0.7",
"description": "JSON to PHP converter",
"main": "lib/json2php.js",
"scripts": {
"build": "coffee -c -b -o ./lib src/json2php.coffee",
"test": "mocha --require coffeescript/register 'test/**/*.coffee'"
},
"repository": {
"type": "git",
"url": "https://github.com/daniel-zahariev/json2php.git"
},
"keywords": [
"JSON",
"PHP",
"Converter"
],
"author": "Daniel Zahariev <daniel.zahariev@gmail.com>",
"contributors": [
{
"name": "Daniel Zahariev",
"email": "daniel.zahariev@gmail.com"
},
{
"name": "Bozhidar Dryanovski",
"email": "bozhidar.dryanovski@gmail.com"
}
],
"devDependencies": {
"coffeescript": "^2",
"mocha": "^9"
},
"license": "BSD",
"readmeFilename": "README.md"
}

42
node_modules/json2php/src/json2php.coffee generated vendored Normal file
View File

@@ -0,0 +1,42 @@
make = ({linebreak = '', indent = '', shortArraySyntax = false} = {}) ->
arrOpen = if shortArraySyntax then '[' else 'array('
arrClose = if shortArraySyntax then ']' else ')'
nest = {
'[object Array]': (obj, parentIndent) ->
for value in obj
transform(value, parentIndent)
'[object Object]': (obj, parentIndent) ->
for own key, value of obj
transform(key, parentIndent) + ' => ' + transform(value, parentIndent)
}
transform = (obj, parentIndent = '') ->
objType = Object.prototype.toString.call(obj)
switch objType
when '[object Null]', '[object Undefined]'
result = 'null'
when '[object String]'
result = "'" + obj.replace(///\\///g, '\\\\').replace(///\'///g, "\\'") + "'"
when '[object Number]', '[object Boolean]'
result = obj.toString()
when '[object Array]', '[object Object]'
nestIndent = parentIndent + indent
items = nest[objType](obj, nestIndent)
result = """
#{arrOpen}#{linebreak + nestIndent}#{
items.join(',' + if linebreak == '' then ' ' else linebreak + nestIndent)
}#{linebreak + parentIndent}#{arrClose}
"""
else
result = 'null'
result
json2php = make()
json2php.make = make
if typeof module isnt 'undefined' and module.exports
module.exports = json2php
# Not that good but useful
global.json2php = json2php

45
node_modules/json2php/test/json2php_test.coffee generated vendored Normal file
View File

@@ -0,0 +1,45 @@
json2php = require('../src/json2php.coffee')
describe 'json2php', ->
it 'If you give string you should get string.', ->
assert.equal "'dummydummy'", json2php("dummydummy")
assert.equal "'\\\'escaping\\\'quotes\\\''", json2php("'escaping'quotes'")
it 'If you give number you should get number.', ->
assert.equal 1, json2php(1)
assert.equal -1, json2php(-1)
assert.equal 0, json2php(0)
it 'if you give true or false you should get boolean true or false.', ->
assert.equal 'true', json2php(true)
assert.equal 'false', json2php(false)
it 'if you give undefined or null you should get null.', ->
assert.equal 'null', json2php(undefined)
assert.equal 'null', json2php(null)
it 'If you give array you should get php array.', ->
# Single level
assert.equal 'array(1, 2, 3)', json2php([1, 2, 3])
# Multi level
assert.equal 'array(1, array(2), 3)', json2php([1, [2], 3])
it 'If you give object you should get php array of it.', ->
assert.equal "array('a' => 1, 'c' => 'text', 'false' => true, 'undefined' => null)", json2php({ a:1, c:'text', false: true, undefined: null})
it 'If you give object you should get php array of it.', ->
assert.equal "array('name' => 'Noel', 'surname' => 'Broda', 'childrens' => array('John' => array('name' => 'John', 'surname' => 'Bainotti'), 'Tin' => array('name' => 'Tin', 'surname' => 'Tassi')))", json2php({ name: 'Noel', surname: 'Broda', childrens: { John: {name: 'John', surname: 'Bainotti'}, Tin: {name: 'Tin', surname: 'Tassi'} } })
describe 'json2php.make({linebreak:"🔪", indent:"🧱"})', ->
it 'returns a pretty printed php array given an array or object.', ->
pretty = json2php.make({linebreak:'🔪', indent:'🧱'})
assert.equal(
"array(🔪🧱'one',🔪🧱'two',🔪🧱array(🔪🧱🧱'name' => 'Noel',🔪🧱🧱'surname' => 'Broda',🔪🧱🧱'childrens' => array(🔪🧱🧱🧱'John' => array(🔪🧱🧱🧱🧱'name' => 'John',🔪🧱🧱🧱🧱'surname' => 'Bainotti'🔪🧱🧱🧱),🔪🧱🧱🧱'Tin' => array(🔪🧱🧱🧱🧱'name' => 'Tin',🔪🧱🧱🧱🧱'surname' => 'Tassi'🔪🧱🧱🧱)🔪🧱🧱)🔪🧱)🔪)",
pretty(['one', 'two', { name: 'Noel', surname: 'Broda', childrens: { John: {name: 'John', surname: 'Bainotti'}, Tin: {name: 'Tin', surname: 'Tassi'} } }])
)
describe 'json2php.make({shortArraySyntax: true})', ->
it 'returns a pretty printed php array using short array syntax.', ->
pretty = json2php.make({shortArraySyntax: true})
assert.equal "['a' => 1, 'c' => 'text', 'false' => true, 'undefined' => null]", pretty({ a:1, c:'text', false: true, undefined: null})
assert.equal '[1, [2], 3]', pretty([1, [2], 3])

1
node_modules/json2php/test/test_helper.coffee generated vendored Normal file
View File

@@ -0,0 +1 @@
global.assert = require("assert")