2019-11-08 03:40:20 +01:00
|
|
|
import { ReactElement, createElement } from 'react';
|
|
|
|
import ChildrenOf from '../components/ChildrenOf';
|
2019-12-18 23:54:23 +01:00
|
|
|
import { getCurrentNode } from './nodes';
|
2019-11-08 03:40:20 +01:00
|
|
|
|
2019-11-19 04:29:29 +01:00
|
|
|
/**
|
|
|
|
* Turn [CHILDREN ... ] into a proper React component.
|
|
|
|
* @param data
|
|
|
|
*/
|
2019-11-08 03:40:20 +01:00
|
|
|
const parseChildrenOf = (data: any): ReactElement|false => {
|
|
|
|
const currentNode = getCurrentNode();
|
|
|
|
let matches;
|
|
|
|
|
|
|
|
matches = data.match(/\[CHILDREN Folder="?([A-Za-z0-9_<>\/]+)"?.*?\]/);
|
|
|
|
if (matches) {
|
|
|
|
const folderName = matches[1].replace(/<\/?em>/g, '_');
|
|
|
|
const asList = matches[0].match(' asList');
|
2019-11-20 22:26:11 +01:00
|
|
|
const includeFolders = matches[0].match(' includeFolders');
|
|
|
|
const reverse = matches[0].match(' reverse');
|
|
|
|
return createElement(ChildrenOf, { folderName, currentNode, asList, includeFolders, reverse })
|
2019-11-08 03:40:20 +01:00
|
|
|
}
|
|
|
|
matches = data.match(/\[CHILDREN Exclude="?([A-Za-z0-9_,]+)"?.*?\]/);
|
|
|
|
if (matches) {
|
|
|
|
const asList = matches[0].match(' asList');
|
2019-11-20 22:26:11 +01:00
|
|
|
const includeFolders = matches[0].match(' includeFolders');
|
|
|
|
const reverse = matches[0].match(' reverse');
|
2019-11-08 03:40:20 +01:00
|
|
|
const exclude = matches[1].replace(/<\/?em>/g, '_');
|
2019-11-20 22:26:11 +01:00
|
|
|
return createElement(ChildrenOf, { exclude, currentNode, asList, includeFolders, reverse })
|
|
|
|
}
|
|
|
|
matches = data.match(/\[CHILDREN Only="?([A-Za-z0-9_,]+)"?.*?\]/);
|
|
|
|
if (matches) {
|
|
|
|
const asList = matches[0].match(' asList');
|
|
|
|
const includeFolders = matches[0].match(' includeFolders');
|
|
|
|
const reverse = matches[0].match(' reverse');
|
|
|
|
const only = matches[1].replace(/<\/?em>/g, '_');
|
|
|
|
return createElement(ChildrenOf, { only, currentNode, asList, includeFolders, reverse })
|
|
|
|
}
|
|
|
|
matches = data.match(/\[CHILDREN(\sasList)?.*?\]/);
|
|
|
|
if (matches) {
|
|
|
|
const asList = !!matches[1];
|
|
|
|
const includeFolders = matches[0].match(' includeFolders');
|
|
|
|
const reverse = matches[0].match(' reverse');
|
|
|
|
|
|
|
|
return createElement(ChildrenOf, { currentNode, asList, includeFolders, reverse })
|
2019-11-08 03:40:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
export default parseChildrenOf;
|