first commit.
28
.gitignore
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.eslintcache
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# database contents
|
||||
/public/modules
|
||||
#/src/xoonips/assets/*.json
|
45
README.md
Normal file
@ -0,0 +1,45 @@
|
||||
# NeuroImaging Platform
|
||||
React project for nimg.neuroinf.jp
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `npm start`
|
||||
|
||||
Runs the app in the development mode.<br>
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.<br>
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `npm test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.<br>
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `build` folder.<br>
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.<br>
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `npm run eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
324
etc/common.inc.php
Normal file
@ -0,0 +1,324 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__.'/config.inc.php';
|
||||
|
||||
define('PROTECTOR_SKIP_DOS_CHECK', 1);
|
||||
define('PROTECTOR_SKIP_FILESCHECKER', 1);
|
||||
|
||||
// disable query logger
|
||||
define('XOOPS_LOGGER_ADDQUERY_DISABLED', true);
|
||||
|
||||
// ----
|
||||
if (!file_exists($mainfile)) {
|
||||
echo 'ERROR : mainfile.php not found'.PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
$xoops_path = '';
|
||||
$xoops_url = '';
|
||||
|
||||
foreach (file($mainfile) as $line) {
|
||||
if (preg_match('/^\s*define\s*\(\s*[\'"]XOOPS_ROOT_PATH[\'"]\s*,\s*[\'"](.+)[\'"]\)\s*;\s*$/', $line, $matches)) {
|
||||
$xoops_path = $matches[1];
|
||||
}
|
||||
if (preg_match('/^\s*define\s*\(\s*[\'"]XOOPS_URL[\'"]\s*,\s*[\'"](.+)[\'"]\)\s*;\s*$/', $line, $matches)) {
|
||||
$xoops_url = $matches[1];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($method) && 'POST' == strtoupper($method)) {
|
||||
$method = 'POST';
|
||||
} else {
|
||||
$method = 'GET';
|
||||
}
|
||||
$_SERVER['HTTP_USER_AGENT'] = 'php-cli';
|
||||
$_SERVER['REQUEST_METHOD'] = $method;
|
||||
$_ENV['HTTP_REFERER'] = $xoops_url.'/index.php';
|
||||
$_SERVER['QUERY_STRING'] = '/index.php';
|
||||
$_SERVER['REMOTE_ADDR'] = '192.168.0.1';
|
||||
|
||||
if (file_exists($xoops_path.'/modules/xoonips/include/common.inc.php')) {
|
||||
require_once $xoops_path.'/modules/xoonips/include/common.inc.php';
|
||||
} else {
|
||||
require_once $xoops_path.'/mainfile.php';
|
||||
require_once $xoops_path.'/modules/xoonips/condefs.php';
|
||||
require_once $xoops_path.'/modules/xoonips/include/functions.php';
|
||||
}
|
||||
|
||||
if (defined('XOOPS_DB_PROXY') && XOOPS_DB_PROXY == 1 && 'POST' == $method) {
|
||||
die('Error: not accept POST request'."\n");
|
||||
}
|
||||
|
||||
error_reporting(E_ALL);
|
||||
|
||||
// remove ob fileters
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
define('MYDUMPTOOL_OUTPUTDIR', __DIR__.'/data');
|
||||
MyDumpTool::makeDirectory('');
|
||||
MyDumpTool::makeDirectory('src');
|
||||
MyDumpTool::makeDirectory('public');
|
||||
|
||||
class MyDumpTool
|
||||
{
|
||||
public static function decode(&$data)
|
||||
{
|
||||
foreach ($data as $k => $v) {
|
||||
if (is_string($v)) {
|
||||
$v = html_entity_decode($v, ENT_QUOTES | ENT_HTML5);
|
||||
$v = mb_decode_numericentity($v, [0x0, 0x10000, 0, 0xfffff], 'UTF-8');
|
||||
$data[$k] = \Normalizer::normalize(trim($v), \Normalizer::FORM_C);
|
||||
} elseif (null === $v) {
|
||||
$data[$k] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function convertToInt(&$data, $keys, $zerofill = false)
|
||||
{
|
||||
foreach ($keys as $key) {
|
||||
if (isset($data[$key])) {
|
||||
$data[$key] = '' === $data[$key] ? ($zerofill ? 0 : null) : (int) $data[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function dropColumn(&$data, $keys)
|
||||
{
|
||||
foreach ($keys as $key) {
|
||||
if (isset($data[$key])) {
|
||||
unset($data[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function fileCopy($from, $to)
|
||||
{
|
||||
system('rsync -aq '.escapeshellarg($from).' '.escapeshellarg($to), $ret);
|
||||
|
||||
return 0 === $ret;
|
||||
}
|
||||
|
||||
public static function fixHtml($text)
|
||||
{
|
||||
static $config = [
|
||||
//'clean' => true,
|
||||
'hide-comments' => true,
|
||||
'indent' => true,
|
||||
'output-xhtml' => true,
|
||||
'preserve-entities' => true,
|
||||
'show-body-only' => true,
|
||||
'drop-proprietary-attributes' => true,
|
||||
'logical-emphasis' => true,
|
||||
'wrap' => 0,
|
||||
'input-encoding' => 'utf8',
|
||||
'output-encoding' => 'utf8',
|
||||
'output-bom' => false,
|
||||
];
|
||||
$text = tidy_repair_string($text, $config);
|
||||
$text = preg_replace('/<table([^>]*)>((?:\s*<caption[^>]*>.*<\/caption>)?\s*)<tr([^>]*)>/Us', '<table\1>\2<tbody><tr\3>', $text);
|
||||
$text = preg_replace('/<\/tr>(\s*)<\/table>/s', '</tr></tbody>\1</table>', $text);
|
||||
$text = tidy_repair_string($text, $config);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
public static function tableExists($name)
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT 1
|
||||
FROM `${prefix}_${name}`
|
||||
LIMIT 1
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
return false;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function makeDirectory($dirname)
|
||||
{
|
||||
$path = MYDUMPTOOL_OUTPUTDIR.('' !== $dirname ? '/'.$dirname : '');
|
||||
if (!is_dir($path)) {
|
||||
if (!@mkdir($path, 0755, true)) {
|
||||
exit('Failed to create directory: '.$path.PHP_EOL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function saveJson($fname, $data)
|
||||
{
|
||||
$path = MYDUMPTOOL_OUTPUTDIR.'/'.$fname;
|
||||
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
if (false === $data) {
|
||||
echo json_last_error_msg().PHP_EOL;
|
||||
exit('Failed to encode json data: '.$path.PHP_EOL);
|
||||
}
|
||||
if (false === file_put_contents($path, $data)) {
|
||||
exit('Failed to save json file: '.$path.PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
public static function fileDownload($url, $fpath)
|
||||
{
|
||||
$fp = fopen($fpath, 'w');
|
||||
if (false === $fp) {
|
||||
exit('Failed to open file: '.$fpath.PHP_EOL);
|
||||
}
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_FAILONERROR, true);
|
||||
curl_setopt($curl, CURLOPT_FILE, $fp);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
|
||||
$ret = curl_exec($curl);
|
||||
fclose($fp);
|
||||
if (false === $ret) {
|
||||
unlink($fpath);
|
||||
echo 'Failed to download file, unexpected error: '.$url.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
if (200 !== $code) {
|
||||
unlink($fpath);
|
||||
echo 'Failed to download file, invalid status code('.$code.'): '.$url.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function getMimeType($fpath)
|
||||
{
|
||||
$finfo = finfo_open(FILEINFO_MIME);
|
||||
$mime = finfo_file($finfo, $fpath);
|
||||
finfo_close($finfo);
|
||||
$mime = preg_replace('/(;.*)$/', '', $mime);
|
||||
|
||||
return $mime;
|
||||
}
|
||||
|
||||
public static function getModule($dirname)
|
||||
{
|
||||
$moduleHandler = xoops_gethandler('module');
|
||||
$moduleObj = $moduleHandler->getByDirname($dirname);
|
||||
|
||||
return [
|
||||
'id' => (int) $moduleObj->get('mid'),
|
||||
'name' => $moduleObj->get('name'),
|
||||
'dirname' => $moduleObj->get('dirname'),
|
||||
'version' => (int) $moduleObj->get('version'),
|
||||
'lastupdate' => (int) $moduleObj->get('last_update'),
|
||||
];
|
||||
}
|
||||
|
||||
public static function canModuleRead($dirname, $uid)
|
||||
{
|
||||
$moduleHandler = xoops_gethandler('module');
|
||||
$moduleObj = $moduleHandler->getByDirname($dirname);
|
||||
$moduleId = (int) $moduleObj->get('mid');
|
||||
$memberHandler = xoops_gethandler('member');
|
||||
$groupIds = 0 === $uid ? [XOOPS_GROUP_ANONYMOUS] : $memberHandler->getGroupsByUser($uid);
|
||||
$groupPermHandler = xoops_gethandler('groupperm');
|
||||
$ret = $groupPermHandler->checkRight('module_read', $moduleId, $groupIds);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public static function mlang($s, $url, $lang)
|
||||
{
|
||||
if (!defined('CUBE_UTILS_ML_LANGS')) {
|
||||
exit('Error: cubeUtils is not loaded'.PHP_EOL);
|
||||
}
|
||||
$mLanguage = $lang;
|
||||
$mLanguages = explode(',', CUBE_UTILS_ML_LANGS);
|
||||
$mLanguageNames = explode(',', CUBE_UTILS_ML_LANGNAMES);
|
||||
// escape brackets inside of <input type="text" value="...">
|
||||
$s = preg_replace_callback('/(\<input)([^>]*)(\>)/isU', 'self::mlang_escapeBracketTextBox', $s);
|
||||
// escape brackets inside of <textarea></textarea>
|
||||
$s = preg_replace_callback('/(\<textarea[^>]*\>)(.*)(<\/textarea\>)/isU', 'self::mlang_escapeBracket', $s);
|
||||
// multilanguage image tag
|
||||
$langimages = explode(',', CUBE_UTILS_ML_LANGIMAGES);
|
||||
$langnames = explode(',', CUBE_UTILS_ML_LANGNAMES);
|
||||
@list($url, $query) = explode('?', $url);
|
||||
if (empty($query)) {
|
||||
$link_base = '?'.CUBE_UTILS_ML_PARAM_NAME.'=';
|
||||
} elseif (false === ($pos = strpos($query, CUBE_UTILS_ML_PARAM_NAME.'='))) {
|
||||
$link_base = '?'.htmlspecialchars($query, ENT_QUOTES).'&'.CUBE_UTILS_ML_PARAM_NAME.'=';
|
||||
} elseif ($pos < 2) {
|
||||
$link_base = '?'.CUBE_UTILS_ML_PARAM_NAME.'=';
|
||||
} else {
|
||||
$link_base = '?'.htmlspecialchars(substr($query, 0, $pos - 1), ENT_QUOTES).'&'.CUBE_UTILS_ML_PARAM_NAME.'=';
|
||||
}
|
||||
$link_base = $url.$link_base;
|
||||
$langimage_html = '';
|
||||
foreach ($mLanguages as $l => $lang) {
|
||||
$langimage_html .= '<a rel="nofollow" href="'.$link_base.$lang.'"><img src="'.XOOPS_URL.'/'.$langimages[$l].'" alt="flag" title="'.$langnames[$l].'" /></a>';
|
||||
}
|
||||
$s = preg_replace('/\['.CUBE_UTILS_ML_IMAGETAG.'\]/', $langimage_html, $s);
|
||||
|
||||
$s = preg_replace('/\['.CUBE_UTILS_ML_URLTAG.':([^\]]*?)\]/', $link_base.'$1', $s);
|
||||
|
||||
// simple pattern to strip selected lang_tags
|
||||
$s = preg_replace('/\[(\/)?([^\]]+\|)?'.preg_quote($mLanguage).'(\|[^\]]+)?\](\<br \/\>)?/i', '', $s);
|
||||
|
||||
// eliminate description between the other language tags.
|
||||
foreach ($mLanguages as $lang) {
|
||||
if ($mLanguage == $lang) {
|
||||
continue;
|
||||
}
|
||||
$s = preg_replace_callback('/\[(?:^\/[^\]]+\|)?'.preg_quote($lang).'(?:\|[^\]]+)?\].*\[\/(?:^\/[^\]]+\|)?'.preg_quote($lang).'(?:\|[^\]]+)?(?:\]\<br \/\>|\])/isU', 'self::mlang_checkNeverCross', $s);
|
||||
}
|
||||
|
||||
// escape brackets inside of <input type="text" value="...">
|
||||
$s = preg_replace_callback('/(\<input)([^>]*)(\>)/isU', 'self::mlang_unEscapeBracketTextBox', $s);
|
||||
|
||||
// escape brackets inside of <textarea></textarea>
|
||||
$s = preg_replace_callback('/(\<textarea[^>]*\>)(.*)(<\/textarea\>)/isU', 'self::mlang_unEscapeBracket', $s);
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
public static function mlang_escapeBracketTextBox($matches)
|
||||
{
|
||||
if (preg_match('/type=["\']?(?=text|hidden)["\']?/i', $matches[2])) {
|
||||
return $matches[1].str_replace('[', '__ml[ml__', $matches[2]).$matches[3];
|
||||
} else {
|
||||
return $matches[1].$matches[2].$matches[3];
|
||||
}
|
||||
}
|
||||
|
||||
public static function mlang_escapeBracket($matches)
|
||||
{
|
||||
return $matches[1].str_replace('[', '__ml[ml__', $matches[2]).$matches[3];
|
||||
}
|
||||
|
||||
public static function mlang_unEscapeBracketTextBox($matches)
|
||||
{
|
||||
if (preg_match('/type=["\']?(?=text|hidden)["\']?/i', $matches[2])) {
|
||||
return $matches[1].str_replace('__ml[ml__', '[', $matches[2]).$matches[3];
|
||||
} else {
|
||||
return $matches[1].$matches[2].$matches[3];
|
||||
}
|
||||
}
|
||||
|
||||
public static function mlang_unEscapeBracket($matches)
|
||||
{
|
||||
return $matches[1].str_replace('__ml[ml__', '[', $matches[2]).$matches[3];
|
||||
}
|
||||
|
||||
public static function mlang_checkNeverCross($matches)
|
||||
{
|
||||
return preg_match(CUBE_UTILS_ML_NEVERCROSSREGEX, $matches[0]) ? $matches[0] : '';
|
||||
}
|
||||
}
|
51
etc/config.inc.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
$mainfile = '/data/www/nimg.neuroinf.jp/html/mainfile.php';
|
||||
|
||||
//$XOOPS_MODULE_D3FORUM = ['forum'];
|
||||
//$XOOPS_MODULE_PICO = ['credits'];
|
||||
|
||||
$XOOPS_STATIC_PAGES = [
|
||||
'/modules/xnpnimgcenter/utilities/brain_conv/howtouse.php' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgcenter/assets/howtouse.json'
|
||||
],
|
||||
'/modules/xnpnimgcenter/utilities/index.php' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgcenter/assets/utilities.json'
|
||||
],
|
||||
//'/modules/nimgdocs/tutorials/index.php' => [
|
||||
// 'type' => 'tsx',
|
||||
// 'file' => 'extras/nimgdocs/Tutorials.tsx',
|
||||
//],
|
||||
'/modules/nimgdocs/index.php?docname=about_NIMGPF' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/about.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=introduction' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/introduction.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=additem' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/additem.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=nimgcenter' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/nimgcenter.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=nimgsearch' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/nimgsearch.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=3DBrowse' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/3dbrowse.json',
|
||||
],
|
||||
'/modules/nimgdocs/index.php?docname=3DBrowse_usage' => [
|
||||
'type' => 'json',
|
||||
'file' => 'src/nimgdocs/assets/3dbrowse_usage.json',
|
||||
],
|
||||
];
|
||||
|
||||
$_CURLOPT_RESOLVE_VALUE = ['nimg.neuroinf.jp:443:127.0.0.1'];
|
15
etc/copy-brainexplorer.sh
Normal file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
XOOPS_ROOT_PATH=/data/www/nimg.neuroinf.jp/html
|
||||
DATADIR=$(dirname $0)/data
|
||||
|
||||
SRCDIR=${XOOPS_ROOT_PATH}/modules/brainexplorer/data/MRI
|
||||
DESTDIR=${DATADIR}/public/modules/brainexplorer/data/m3d
|
||||
|
||||
mkdir -p ${DESTDIR}
|
||||
rsync -av --delete ${SRCDIR}/ ${DESTDIR}/
|
||||
|
||||
SRCDIR=${XOOPS_ROOT_PATH}/modules/be2/data/g3d
|
||||
DESTDIR=${DATADIR}/public/modules/brainexplorer/data/g3d
|
||||
mkdir -p ${DESTDIR}
|
||||
rsync -av --delete ${SRCDIR}/ ${DESTDIR}/
|
18
etc/copy-nimgdocs.sh
Normal file
@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
XOOPS_ROOT_PATH=/data/www/nimg.neuroinf.jp/html
|
||||
DATADIR=$(dirname $0)/data
|
||||
|
||||
SRCDIR=${XOOPS_ROOT_PATH}/modules/nimgdocs
|
||||
DESTDIR=${DATADIR}/public/modules/nimgdocs
|
||||
rsync -av --delete ${SRCDIR}/tutorials/movie/ ${DESTDIR}/tutorials/movie/
|
||||
rsync -av ${SRCDIR}/tutorials/slide.html ${DESTDIR}/tutorials/
|
||||
rsync -av --delete ${SRCDIR}/tutorials/slide/ ${DESTDIR}/tutorials/slide/
|
||||
rsync -av ${SRCDIR}/tutorials/slide2.html ${DESTDIR}/tutorials/
|
||||
rsync -av --delete ${SRCDIR}/tutorials/slide2/ ${DESTDIR}/tutorials/slide2/
|
||||
rsync -av --delete ${SRCDIR}/docs/nimgcenter_document/ ${DESTDIR}/docs/nimgcenter_document/
|
||||
rsync -av --delete ${SRCDIR}/docs/nimgsearch_document/ ${DESTDIR}/docs/nimgsearch_document/
|
||||
rsync -av --delete ${SRCDIR}/docs/pdf/ ${DESTDIR}/docs/pdf/
|
||||
rsync -av --delete ${SRCDIR}/docs/poster/ ${DESTDIR}/docs/poster/
|
||||
rsync -av --delete ${SRCDIR}/docs/viewlet/ ${DESTDIR}/docs/viewlet/
|
||||
rsync -av --delete ${SRCDIR}/docs/winword/ ${DESTDIR}/docs/winword/
|
10
etc/copy-nimgsearch.sh
Normal file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
XOOPS_ROOT_PATH=/data/www/nimg.neuroinf.jp/html
|
||||
DATADIR=$(dirname $0)/data
|
||||
|
||||
SRCDIR=${XOOPS_ROOT_PATH}/modules/nimgsearch
|
||||
DESTDIR=${DATADIR}/public/modules/nimgsearch
|
||||
mkdir -p ${DESTDIR}
|
||||
rsync -av --delete ${SRCDIR}/res/ ${DESTDIR}/res/
|
||||
rsync -av --delete ${SRCDIR}/help/ ${DESTDIR}/help/
|
10
etc/dl-limit-items.csv
Normal file
@ -0,0 +1,10 @@
|
||||
610,fujimaki,"Norio Fujimaki",fujimaki@po.nict.go.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=610
|
||||
611,fujimaki,"Norio Fujimaki",fujimaki@po.nict.go.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=611
|
||||
612,fujimaki,"Norio Fujimaki",fujimaki@po.nict.go.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=612
|
||||
613,fujimaki,"Norio Fujimaki",fujimaki@po.nict.go.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=613
|
||||
1262,ichikawa,"Kazuhisa Ichikawa",kichi@ims.u-tokyo.ac.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=1262
|
||||
1343,kuriki,"Shinya Kuriki",sk@es.hokudai.ac.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?id=DD019
|
||||
1358,kuriki,"Shinya Kuriki",sk@es.hokudai.ac.jp,https://nimg.neuroinf.jp/modules/xoonips/detail.php?id=DD018
|
||||
6965,kiyotaka,根本清貴,kiyotaka@nemotos.net,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=6965
|
||||
6966,kiyotaka,根本清貴,kiyotaka@nemotos.net,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=6966
|
||||
6967,kiyotaka,根本清貴,kiyotaka@nemotos.net,https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=6967
|
|
154
etc/dumpCredits.php
Normal file
@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__.'/common.inc.php';
|
||||
require_once __DIR__.'/extras.inc.php';
|
||||
|
||||
$prefix = $xoopsDB->prefix();
|
||||
|
||||
$table = 'nipfcredits_organization';
|
||||
if (!MyDumpTool::tableExists($table)) {
|
||||
exit('credits module not found'.PHP_EOL);
|
||||
}
|
||||
MyDumpTool::makeDirectory('public/modules/credits');
|
||||
|
||||
// module
|
||||
$module = MyDumpTool::getModule('credits');
|
||||
|
||||
// organization
|
||||
$organization = [];
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`o`.*
|
||||
FROM `${prefix}_nipfcredits_organization` AS `o`
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($row);
|
||||
$organization = $row;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
$organization['com_email'] = str_replace('@', ' (at) ', $organization['com_email']);
|
||||
$organization['com_url'] = XOOPS_URL;
|
||||
$organization['institute'] = '[en]Neuroinformatics Unit, RIKEN Center for Brain Science[/en][ja]理化学研究所 脳神経科学研究センター 神経情報基盤ユニット[/ja]';
|
||||
$organization['url'] = 'https://www.ni.riken.jp/';
|
||||
$organization['email'] = 'office (at) ni.riken.jp';
|
||||
$organization['address'] = '[en]Hirosawa 2-1, Wako, Saitama, 351-0198 Japan[/en][ja]埼玉県和光市広沢 2-1[/ja]';
|
||||
$organization['tel'] = '+81 48 (462) 1111';
|
||||
|
||||
// member
|
||||
$member = [];
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`m`.*
|
||||
FROM `${prefix}_nipfcredits_member` AS `m`
|
||||
ORDER BY `m`.`weight`
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($row);
|
||||
$member[] = $row;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
$opage = getOrganizationPage($organization, $member, $module);
|
||||
MyDumpTool::saveJson('public/modules/credits/0.json', $opage);
|
||||
|
||||
// pages
|
||||
$pages = [];
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`p`.*
|
||||
FROM `${prefix}_nipfcredits_page` AS `p`
|
||||
ORDER BY `p`.`weight`
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($row);
|
||||
myDumpTool::convertToInt($row, ['pid', 'weight', 'lastupdate']);
|
||||
$content = replaceOrganization($row['content'], $organization);
|
||||
$content = normalizeHtml($content, '/modules/credits/index.php');
|
||||
$content = preg_replace('/<a (?:[^>]*)href="(?:'.preg_quote(XOOPS_URL, '/').')?\/modules\/xoonips\/(?:register|edit|user)[^"]*"(?:[^>]*)>(.*)<\/a>/Usi', '<s>\1</s>(closed)', $content);
|
||||
$row['content'] = $content;
|
||||
MyDumpTool::dropColumn($row, ['weight']);
|
||||
$pages[] = [
|
||||
'id' => $row['pid'],
|
||||
'title' => $row['title'],
|
||||
];
|
||||
MyDumpTool::saveJson('public/modules/credits/'.$row['pid'].'.json', $row);
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
$pages[] = [
|
||||
'id' => $opage['id'],
|
||||
'title' => $opage['title'],
|
||||
];
|
||||
|
||||
$data = [
|
||||
'name' => $module['name'],
|
||||
'pages' => $pages,
|
||||
];
|
||||
MyDumpTool::saveJson('public/modules/credits/index.json', $data);
|
||||
|
||||
function replaceOrganization($text, $org)
|
||||
{
|
||||
$map = [
|
||||
'{COMMITTEE_NAME}' => htmlspecialchars($org['committee']),
|
||||
//'{COMMITTEE_EMAIL}' => '<s>'.htmlspecialchars($org['com_email'], ENT_QUOTES).'</s>(committee email has been closed)',
|
||||
'{COMMITTEE_EMAIL}' => htmlspecialchars($org['com_email'], ENT_QUOTES),
|
||||
'{INSTITUTE_NAME}' => htmlspecialchars($org['institute'], ENT_QUOTES),
|
||||
'{INSTITUTE_URL}' => htmlspecialchars($org['url'], ENT_QUOTES),
|
||||
'{INSTITUTE_EMAIL}' => htmlspecialchars($org['email'], ENT_QUOTES),
|
||||
'{INSTITUTE_ADDRESS}' => htmlspecialchars($org['address'], ENT_QUOTES),
|
||||
'{INSTITUTE_TEL}' => htmlspecialchars($org['tel'], ENT_QUOTES),
|
||||
'{PLATFORM_URL}' => XOOPS_URL,
|
||||
];
|
||||
|
||||
return str_replace(array_keys($map), $map, $text);
|
||||
}
|
||||
|
||||
function getOrganizationPage($org, $member, $module)
|
||||
{
|
||||
$members = [];
|
||||
if (!empty($member)) {
|
||||
$members[] = ' <li>[en]Members[/en][ja]委員一覧[/ja]';
|
||||
$members[] = ' <ul>';
|
||||
foreach ($member as $m) {
|
||||
$members[] = ' <li>'.htmlspecialchars($m['name'].' : '.$m['division'], ENT_QUOTES).'</li>';
|
||||
}
|
||||
$members[] = ' </ul>';
|
||||
$members[] = ' </li>';
|
||||
}
|
||||
$members = implode("\n", $members);
|
||||
$committee = htmlspecialchars($org['committee'], ENT_QUOTES);
|
||||
$institute = htmlspecialchars($org['institute'], ENT_QUOTES);
|
||||
$address = htmlspecialchars($org['address'], ENT_QUOTES);
|
||||
$url = htmlspecialchars($org['url'], ENT_QUOTES);
|
||||
$email = htmlspecialchars($org['com_email'], ENT_QUOTES);
|
||||
$html = <<< HTML
|
||||
<h4>${committee}</h4>
|
||||
<ul>
|
||||
<li>E-Mail: <strike>${email}</strike></li>
|
||||
${members}
|
||||
</ul>
|
||||
<h4>${institute}</h4>
|
||||
<ul>
|
||||
<li>[en]Address[/en][ja]所在地[/ja]: ${address}</li>
|
||||
<li>URL: <a href="${url}" target="_blank" rel=”noopener noreferrer”>${url}</a></li>
|
||||
</ul>
|
||||
HTML;
|
||||
|
||||
return [
|
||||
'id' => 0,
|
||||
'title' => '[en]About Us[/en][ja]運用母体[/ja]',
|
||||
'content' => $html,
|
||||
'lastupdate' => 0,
|
||||
];
|
||||
}
|
44
etc/dumpNimgdocsBulletin.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__.'/common.inc.php';
|
||||
require_once __DIR__.'/extras.inc.php';
|
||||
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$table = 'nimgdocs_bulletin';
|
||||
if (!MyDumpTool::tableExists($table)) {
|
||||
exit('nimgdocs module not found'.PHP_EOL);
|
||||
}
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`b`.*
|
||||
FROM `${prefix}_${table}` AS `b`
|
||||
WHERE `b`.`accepted`=1
|
||||
ORDER BY `b`.`post_date` DESC
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
|
||||
$data = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
$row['tags'] = urldecode($row['tags']);
|
||||
$row['text_en'] = urldecode($row['text_en']);
|
||||
$row['text_jp'] = urldecode($row['text_jp']);
|
||||
MyDumpTool::decode($row);
|
||||
MyDumpTool::convertToInt($row, ['id', 'accepted']);
|
||||
$row['text'] = [
|
||||
'en' => $row['text_en'],
|
||||
'ja' => $row['text_jp'],
|
||||
];
|
||||
MyDumpTool::dropColumn($row, ['accepted', 'text_en', 'text_jp']);
|
||||
$row['tags'] = explode(' ', $row['tags']);
|
||||
$row['post_date'] = strtotime($row['post_date']);
|
||||
$row['end_date'] = strtotime($row['end_date']);
|
||||
$data[] = $row;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
MyDumpTool::makeDirectory('src/nimgdocs/assets');
|
||||
MyDumpTool::saveJson('src/nimgdocs/assets/bulletin.json', $data);
|
||||
|
102
etc/dumpPico.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__.'/common.inc.php';
|
||||
require_once __DIR__.'/extras.inc.php';
|
||||
|
||||
if (!isset($XOOPS_MODULE_PICO) || empty($XOOPS_MODULE_PICO)) {
|
||||
exit('Not configured for pico module'.PHP_EOL);
|
||||
}
|
||||
|
||||
error_reporting(0);
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/include/main_functions.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/include/common_functions.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/class/pico.textsanitizer.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoUriMapper.class.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoPermission.class.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoModelCategory.class.php';
|
||||
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoModelContent.class.php';
|
||||
require_once XOOPS_TRUST_PATH.'/libs/altsys/class/AltsysBreadcrumbs.class.php';
|
||||
error_reporting(E_ALL);
|
||||
|
||||
foreach ($XOOPS_MODULE_PICO as $pico) {
|
||||
dumpPico($pico);
|
||||
}
|
||||
|
||||
function dumpPico($pico)
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$table = $pico.'_contents';
|
||||
if (!MyDumpTool::tableExists($table)) {
|
||||
exit('pico('.$pico.') module not found'.PHP_EOL);
|
||||
}
|
||||
MyDumpTool::makeDirectory('public/modules/'.$pico);
|
||||
$moduleHandler = xoops_gethandler('module');
|
||||
$module = $moduleHandler->getByDirname($pico);
|
||||
$moduleConfigHandler = xoops_gethandler('config');
|
||||
$moduleConfig = $moduleConfigHandler->getConfigsByDirname($pico);
|
||||
$permObj = PicoPermission::getInstance();
|
||||
$perms = $permObj->getPermissions($pico);
|
||||
$categoryHandler = new PicoCategoryHandler($pico, $perms);
|
||||
$contentHandler = new PicoContentHandler($pico);
|
||||
$cats = $categoryHandler->getAllCategories();
|
||||
$confContents = [];
|
||||
$confCategories = [];
|
||||
$dataMap = [];
|
||||
$dataSeq = 1;
|
||||
foreach ($cats as $cat) {
|
||||
$catData = $cat->getData();
|
||||
$modConfig = $cat->getOverriddenModConfig();
|
||||
$link = pico_common_make_category_link4html($modConfig, $catData, $pico);
|
||||
MyDumpTool::decode($catData);
|
||||
$confCategories[] = [
|
||||
'id' => $catData['id'],
|
||||
'title' => $catData['cat_title'],
|
||||
'desc' => (string) $catData['cat_desc'],
|
||||
'pid' => (int) $catData['pid'],
|
||||
'weight' => (int) $catData['cat_weight'],
|
||||
'link' => $link,
|
||||
];
|
||||
$contents = $contentHandler->getCategoryContents($cat);
|
||||
foreach ($contents as $content) {
|
||||
$data = $content->getData();
|
||||
$link = pico_common_make_content_link4html($modConfig, $data);
|
||||
MyDumpTool::decode($data);
|
||||
$url = XOOPS_URL.'/modules/'.$pico.'/'.$link;
|
||||
$content_en = normalizeHtml(MyDumpTool::mlang($data['body_cached'], $url, 'en'), $url);
|
||||
$content_ja = normalizeHtml(MyDumpTool::mlang($data['body_cached'], $url, 'ja'), $url);
|
||||
$item = [
|
||||
'id' => $data['id'],
|
||||
'title' => $data['subject_raw'],
|
||||
'content' => [
|
||||
'en' => $content_en,
|
||||
'ja' => $content_ja,
|
||||
],
|
||||
];
|
||||
MyDumpTool::saveJson('public/modules/'.$pico.'/'.$data['id'].'.json', $item);
|
||||
$confContents[] = [
|
||||
'id' => $item['id'],
|
||||
'title' => $data['subject_raw'],
|
||||
'cat_id' => (int) $data['cat_id'],
|
||||
'weight' => (int) $data['weight'],
|
||||
'link' => $link,
|
||||
];
|
||||
}
|
||||
}
|
||||
$moduleinfo = [
|
||||
'name' => $module->get('name'),
|
||||
'dirname' => $pico,
|
||||
'message' => $moduleConfig['top_message'],
|
||||
'show_menuinmoduletop' => (int) $moduleConfig['show_menuinmoduletop'],
|
||||
'show_listasindex' => (int) $moduleConfig['show_listasindex'],
|
||||
'show_breadcrumbs' => (int) $moduleConfig['show_breadcrumbs'],
|
||||
'show_pagenavi' => (int) $moduleConfig['show_pagenavi'],
|
||||
];
|
||||
MyDumpTool::decode($moduleinfo);
|
||||
$config = [
|
||||
'module' => $moduleinfo,
|
||||
'categories' => $confCategories,
|
||||
'contents' => $confContents,
|
||||
];
|
||||
MyDumpTool::saveJson('public/modules/'.$pico.'/index.json', $config);
|
||||
}
|
207
etc/dumpStaticPage.php
Normal file
@ -0,0 +1,207 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__.'/common.inc.php';
|
||||
require_once __DIR__.'/extras.inc.php';
|
||||
|
||||
foreach ($XOOPS_STATIC_PAGES as $page => $config) {
|
||||
$data = [
|
||||
'en' => StaticFiles::getPage($page, 'en'),
|
||||
'ja' => StaticFiles::getPage($page, 'ja'),
|
||||
];
|
||||
MyDumpTool::makeDirectory(dirname($config['file']));
|
||||
switch ($config['type']) {
|
||||
case 'json':
|
||||
MyDumpTool::saveJson($config['file'], $data);
|
||||
break;
|
||||
case 'tsx':
|
||||
StaticFiles::saveTsx($config['file'], $data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
class StaticFiles
|
||||
{
|
||||
public static function saveTsx($fname, $data)
|
||||
{
|
||||
$path = MYDUMPTOOL_OUTPUTDIR.'/'.$fname;
|
||||
$cname = basename($fname, '.tsx');
|
||||
$content_ja = self::makeJsx($data['ja']);
|
||||
$content_en = self::makeJsx($data['en']);
|
||||
$tsx = <<< TSX
|
||||
import React, { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { MultiLang } from '../config';
|
||||
import Functions from '../functions';
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
interface State {
|
||||
isOpen: boolean;
|
||||
}
|
||||
|
||||
class ${cname} extends Component<Props, State> {
|
||||
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
isOpen: false
|
||||
};
|
||||
}
|
||||
|
||||
getContent(lang: MultiLang) {
|
||||
const contents = {
|
||||
en: <>
|
||||
${content_en}
|
||||
</>,
|
||||
ja: <>
|
||||
${content_ja}
|
||||
</>;
|
||||
}
|
||||
return contents[lang];
|
||||
}
|
||||
|
||||
render() {
|
||||
const { lang } = this.props;
|
||||
return this.getContent(lang);
|
||||
}
|
||||
}
|
||||
|
||||
export default ${cname};
|
||||
TSX;
|
||||
file_put_contents($path, $tsx);
|
||||
}
|
||||
|
||||
private static function makeJsx($text)
|
||||
{
|
||||
$text = preg_replace_callback('/<([a-z0-9]+)((?: +[a-z]+(?:="[^"]*")?)*)( *\/?)>/Us', function ($matches) {
|
||||
$tag = $matches[1];
|
||||
preg_match_all('/ +([a-z]+?)(?:="([^"]*)")??/Us', $matches[2], $out, PREG_SET_ORDER);
|
||||
$attribs = [];
|
||||
foreach ($out as $_out) {
|
||||
$key = $_out[1];
|
||||
$value = html_entity_decode(trim($_out[2]), ENT_QUOTES | ENT_HTML5);
|
||||
$attribs[$key] = $value;
|
||||
}
|
||||
$styles = [];
|
||||
if (isset($attribs['style'])) {
|
||||
foreach (array_map('trim', explode(';', $attribs['style'])) as $style) {
|
||||
if ('' === $style) {
|
||||
continue;
|
||||
}
|
||||
[$key, $value] = array_map('trim', explode(':', $style));
|
||||
$key = lcfirst(str_replace(' ', '', ucwords(str_replace('-', ' ', $key))));
|
||||
$styles[$key] = preg_replace('/ +/U', ' ', $value);
|
||||
}
|
||||
}
|
||||
$close = str_replace('/', ' /', trim($matches[3]));
|
||||
if (isset($attribs['class'])) {
|
||||
$attribs['className'] = $attribs['class'];
|
||||
unset($attribs['class']);
|
||||
}
|
||||
if ('a' === $tag && isset($attribs['target']) && '_blank' === $attribs['target'] && !isset($attribs['rel'])) {
|
||||
$attribs['rel'] = 'noopener noreferrer';
|
||||
}
|
||||
foreach (['align', 'width', 'height'] as $key) {
|
||||
$kmap = ['align' => 'textAlign'];
|
||||
$skey = isset($kmap[$key]) ? $kmap[$key] : $key;
|
||||
if (isset($attribs[$key])) {
|
||||
$styles[$skey] = $attribs[$key];
|
||||
unset($attribs[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$x = [];
|
||||
foreach ($styles as $key => $style) {
|
||||
$x[] = $key.': "'.$style.'"';
|
||||
}
|
||||
if (empty($x)) {
|
||||
unset($attribs['style']);
|
||||
} else {
|
||||
$attribs['style'] = '{'.implode(', ', $x).'}';
|
||||
}
|
||||
|
||||
$x = '';
|
||||
foreach ($attribs as $key => $value) {
|
||||
if ('' !== $x) {
|
||||
$x .= ' ';
|
||||
}
|
||||
switch ($key) {
|
||||
case 'style':
|
||||
$x .= $key.'={'.$value.'}';
|
||||
break;
|
||||
case 'controls':
|
||||
if ('' === $value) {
|
||||
$x .= $key;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$x .= $key.'="'.str_replace(''', '\'', htmlspecialchars($value, ENT_QUOTES)).'"';
|
||||
}
|
||||
}
|
||||
if ('' !== $x) {
|
||||
$x = ' '.$x;
|
||||
}
|
||||
|
||||
return '<'.$tag.$x.$close.'>';
|
||||
}, $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
public static function getPage($page, $lang)
|
||||
{
|
||||
$url = XOOPS_URL.$page;
|
||||
$html = self::fetch($url.(false !== strpos($page, '?') ? '&' : '?').'ml_lang='.$lang);
|
||||
$xml = self::getXml($html, 'content');
|
||||
|
||||
return normalizeHtml($xml, $url);
|
||||
}
|
||||
|
||||
public static function getXml($html, $id)
|
||||
{
|
||||
$text = MyDumpTool::fixHtml($html);
|
||||
$text = str_replace('&', '&', $text);
|
||||
$xml = simplexml_load_string($text);
|
||||
if (false === $xml) {
|
||||
die('failed to load xml: '.$text.PHP_EOL);
|
||||
}
|
||||
$objs = $xml->xpath('//*[@id="'.$id.'"]/*');
|
||||
if (false === $objs || empty($objs)) {
|
||||
die('failed to find id attribute: '.$id.PHP_EOL);
|
||||
}
|
||||
$ret = '';
|
||||
foreach ($objs as $obj) {
|
||||
$ret .= $obj->asXml();
|
||||
}
|
||||
$ret = str_replace('&', '&', $ret);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public static function fetch($url)
|
||||
{
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_FAILONERROR, true);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
|
||||
if (isset($GLOBALS['_CURLOPT_RESOLVE_VALUE'])) {
|
||||
curl_setopt($curl, CURLOPT_RESOLVE, $GLOBALS['_CURLOPT_RESOLVE_VALUE']);
|
||||
}
|
||||
$ret = curl_exec($curl);
|
||||
if (false === $ret) {
|
||||
exit('Failed to fetch, unexpected error: '.$url.PHP_EOL);
|
||||
}
|
||||
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
if (200 !== $code) {
|
||||
exit('Failed to download file, invalid status code('.$code.'): '.$url.PHP_EOL);
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
1241
etc/dumpXooNIps.php
Normal file
188
etc/extra.inc.php
Normal file
@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
function normalizeUrl($url, $base, $type)
|
||||
{
|
||||
$localpath = function ($url, $type) {
|
||||
$purl1 = parse_url($url);
|
||||
$purl2 = parse_url(XOOPS_URL);
|
||||
if (isset($purl1['host']) && isset($purl2['host']) && $purl1['host'] === $purl2['host']) {
|
||||
$url = preg_replace('/^http:/', 'https:', $url);
|
||||
}
|
||||
|
||||
$url = preg_replace('/^https?:\/\/nimg.neuroinf\.jp\/?/', '/', $url);
|
||||
$url = preg_replace('/^\/fmanager\/(view|tmb)\/(.*)(:?\?_t=.*)?$/U', '/modules/fmanager/index.php/\1/\2', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/detail\.php\?((:?item_)?id=.+)&download=.*$/U', '/modules/xoonips/detail.php?\1', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/image\.php\/thumbnail\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1.png', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/preview\.php\/\d+\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1.png', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/download\.php\/\d+\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1/\2', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/download\.php\/([^\/]+)\?file_id=(\d+)$/U', '/modules/xoonips/file/\2/\1', $url);
|
||||
if (preg_match('/^\/modules\/xoonips\/download\.php\?file_id=(\d+)$/U', $url, $matches)) {
|
||||
$fpath = MYDUMPTOOL_OUTPUTDIR.'/public/modules/xoonips/file/'.$matches[1];
|
||||
$found = false;
|
||||
foreach (glob($fpath.'/*') as $fname) {
|
||||
if ('.htaccess' === $fname) {
|
||||
continue;
|
||||
} else {
|
||||
$url = '/modules/xoonips/file/'.$matches[1].'/'.urlencode(basename($fname));
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
if (false === $found) {
|
||||
echo 'Failed to replace xoonips download url:'.$url.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// append
|
||||
if ('videoSrc' === $type) {
|
||||
//$url = preg_replace('/^\/modules\/xoonips\/file\/1459.png$/', '/modules/xoonips/file/1459/benham\'s_top.mp4', $url);
|
||||
//$url = preg_replace('/^\/modules\/xoonips\/file\/1469.png$/', '/modules/xoonips/file/1469/music_notes.mp4', $url);
|
||||
}
|
||||
|
||||
return $url;
|
||||
};
|
||||
if ('' === $url) {
|
||||
return $localpath($base, $type);
|
||||
}
|
||||
$purl = parse_url($url);
|
||||
if (isset($purl['scheme'])) {
|
||||
return $localpath($url, $type);
|
||||
}
|
||||
$pburl = parse_url($base);
|
||||
$path = $pburl['path'];
|
||||
if ('/' == $url[0]) {
|
||||
$path = '';
|
||||
} elseif ('#' !== $url[0] && '?' !== $url[0]) {
|
||||
$path = preg_replace('#/[^/]*$#', '', $path).'/';
|
||||
}
|
||||
$path .= $url;
|
||||
$pattern = ['#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'];
|
||||
do {
|
||||
$path = preg_replace($pattern, '/', $path, -1, $count);
|
||||
} while (0 < $count);
|
||||
|
||||
return $localpath($pburl['scheme'].'://'.$pburl['host'].$path, $type);
|
||||
}
|
||||
|
||||
function checkLocalFile($url, $tag)
|
||||
{
|
||||
$url2 = preg_replace('/'.preg_quote(XOOPS_URL, '/').'/', '', $url);
|
||||
if (preg_match('/^\//', $url2)) {
|
||||
if (!preg_match('/\/([^\/]+\.(php|html))?(\?.+)?(#.+)?$/i', $url2, $matches)) {
|
||||
$dstFpath = MYDUMPTOOL_OUTPUTDIR.'/public'.urldecode($url2);
|
||||
$srcFpath = XOOPS_ROOT_PATH.urldecode($url2);
|
||||
if (!file_exists($dstFpath)) {
|
||||
if (file_exists($srcFpath)) {
|
||||
MyDumpTool::makeDirectory('/public'.dirname($url2));
|
||||
if (!MyDumpTool::fileCopy($srcFpath, $dstFpath)) {
|
||||
echo 'Error: Failed to copy file: '.$fpath.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
echo 'Error: File not found: '.$fpath.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $url2;
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
function normalizeHtml($text, $path)
|
||||
{
|
||||
$text = MyDumpTool::fixHtml($text);
|
||||
$text = preg_replace_callback('/<img ([^>]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'imgSrc');
|
||||
$url = checkLocalFile($url, 'imgSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<img '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'/>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<a ([^>]*)href="([^"]+)"([^>]*)>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
if (!preg_match('/^#/', $url)) {
|
||||
$url = normalizeUrl($url, $path, 'aHref');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'aHref');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
return '<a '.$matches[1].'href="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<embed ([^>]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'embedSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'embedSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<embed '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'/>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<video ([^>]*)src="(.*)"([^>]*)>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'videoSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'videoSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<video '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'>';
|
||||
}, $text);
|
||||
$text = preg_replace('/ lang="([^"]+)"/Us', '', $text);
|
||||
$text = preg_replace('/ xml:lang="([^"]+)"/Us', '', $text);
|
||||
// remove font-family attributes
|
||||
$text = preg_replace_callback('/<span([^>]*?)>((?!<span).*)<\/span>/Us', function ($matches) use ($path) {
|
||||
if ('' === trim($matches[1]) || '' === trim($matches[2]) || ' ' === trim($matches[2])) {
|
||||
return $matches[2];
|
||||
}
|
||||
$m1 = $matches[1];
|
||||
$m1 = preg_replace_callback('/style="(.*)"/Us', function ($matches2) {
|
||||
$styles1 = array_map('trim', explode(';', htmlspecialchars_decode($matches2[1], ENT_QUOTES)));
|
||||
$styles2 = [];
|
||||
foreach ($styles1 as $style1) {
|
||||
if ('' === $style1) {
|
||||
continue;
|
||||
}
|
||||
$style = explode(':', $style1);
|
||||
list($key, $value) = array_map('trim', explode(':', $style1));
|
||||
if ('font-family' === $key || 'line-height' === $key || '' === $value || 'color' === $key && 'null' === $value) {
|
||||
// skip
|
||||
} else {
|
||||
$styles2[] = $key.':'.$value;
|
||||
}
|
||||
}
|
||||
|
||||
return 0 === count($styles2) ? '' : ('style="'.htmlspecialchars(implode(';', $styles2).';', ENT_QUOTES).'"');
|
||||
}, $m1);
|
||||
if ('' === trim($m1)) {
|
||||
return $matches[2];
|
||||
}
|
||||
if (strpos($m1, 'font-family') > 0) {
|
||||
echo 'trimed span:'.$path.PHP_EOL;
|
||||
}
|
||||
|
||||
return '<span'.$m1.'>'.$matches[2].'</span>';
|
||||
}, $text);
|
||||
$text = MyDumpTool::fixHtml($text);
|
||||
|
||||
return $text;
|
||||
}
|
188
etc/extras.inc.php
Normal file
@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
function normalizeUrl($url, $base, $type)
|
||||
{
|
||||
$localpath = function ($url, $type) {
|
||||
$purl1 = parse_url($url);
|
||||
$purl2 = parse_url(XOOPS_URL);
|
||||
if (isset($purl1['host']) && isset($purl2['host']) && $purl1['host'] === $purl2['host']) {
|
||||
$url = preg_replace('/^http:/', 'https:', $url);
|
||||
}
|
||||
|
||||
$url = preg_replace('/^https?:\/\/nimg.neuroinf\.jp\/?/', '/', $url);
|
||||
$url = preg_replace('/^\/fmanager\/(view|tmb)\/(.*)(:?\?_t=.*)?$/U', '/modules/fmanager/index.php/\1/\2', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/detail\.php\?((:?item_)?id=.+)&download=.*$/U', '/modules/xoonips/detail.php?\1', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/image\.php\/thumbnail\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1.png', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/preview\.php\/\d+\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1.png', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/download\.php\/\d+\/(\d+)\/(.*)$/U', '/modules/xoonips/file/\1/\2', $url);
|
||||
$url = preg_replace('/^\/modules\/xoonips\/download\.php\/([^\/]+)\?file_id=(\d+)$/U', '/modules/xoonips/file/\2/\1', $url);
|
||||
if (preg_match('/^\/modules\/xoonips\/download\.php\?file_id=(\d+)$/U', $url, $matches)) {
|
||||
$fpath = MYDUMPTOOL_OUTPUTDIR.'/public/modules/xoonips/file/'.$matches[1];
|
||||
$found = false;
|
||||
foreach (glob($fpath.'/*') as $fname) {
|
||||
if ('.htaccess' === $fname) {
|
||||
continue;
|
||||
} else {
|
||||
$url = '/modules/xoonips/file/'.$matches[1].'/'.urlencode(basename($fname));
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
if (false === $found) {
|
||||
echo 'Failed to replace xoonips download url:'.$url.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// append
|
||||
if ('videoSrc' === $type) {
|
||||
//$url = preg_replace('/^\/modules\/xoonips\/file\/1459.png$/', '/modules/xoonips/file/1459/benham\'s_top.mp4', $url);
|
||||
//$url = preg_replace('/^\/modules\/xoonips\/file\/1469.png$/', '/modules/xoonips/file/1469/music_notes.mp4', $url);
|
||||
}
|
||||
|
||||
return $url;
|
||||
};
|
||||
if ('' === $url) {
|
||||
return $localpath($base, $type);
|
||||
}
|
||||
$purl = parse_url($url);
|
||||
if (isset($purl['scheme'])) {
|
||||
return $localpath($url, $type);
|
||||
}
|
||||
$pburl = parse_url($base);
|
||||
$path = $pburl['path'];
|
||||
if ('/' == $url[0]) {
|
||||
$path = '';
|
||||
} elseif ('#' !== $url[0] && '?' !== $url[0]) {
|
||||
$path = preg_replace('#/[^/]*$#', '', $path).'/';
|
||||
}
|
||||
$path .= $url;
|
||||
$pattern = ['#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'];
|
||||
do {
|
||||
$path = preg_replace($pattern, '/', $path, -1, $count);
|
||||
} while (0 < $count);
|
||||
|
||||
return $localpath($pburl['scheme'].'://'.$pburl['host'].$path, $type);
|
||||
}
|
||||
|
||||
function checkLocalFile($url, $tag)
|
||||
{
|
||||
$url2 = preg_replace('/'.preg_quote(XOOPS_URL, '/').'/', '', $url);
|
||||
if (preg_match('/^\//', $url2)) {
|
||||
if (!preg_match('/\/([^\/]+\.(php|html))?(\?.+)?(#.+)?$/i', $url2, $matches)) {
|
||||
$dstFpath = MYDUMPTOOL_OUTPUTDIR.'/public'.urldecode($url2);
|
||||
$srcFpath = XOOPS_ROOT_PATH.urldecode($url2);
|
||||
if (!file_exists($dstFpath)) {
|
||||
if (file_exists($srcFpath)) {
|
||||
MyDumpTool::makeDirectory('/public'.dirname($url2));
|
||||
if (!MyDumpTool::fileCopy($srcFpath, $dstFpath)) {
|
||||
echo 'Error: Failed to copy file: '.$srcFpath.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
echo 'Error: File not found: '.$srcFpath.PHP_EOL;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $url2;
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
function normalizeHtml($text, $path)
|
||||
{
|
||||
$text = MyDumpTool::fixHtml($text);
|
||||
$text = preg_replace_callback('/<img ([^>]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'imgSrc');
|
||||
$url = checkLocalFile($url, 'imgSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<img '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'/>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<a ([^>]*)href="([^"]+)"([^>]*)>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
if (!preg_match('/^#/', $url)) {
|
||||
$url = normalizeUrl($url, $path, 'aHref');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'aHref');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
return '<a '.$matches[1].'href="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<embed ([^>]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'embedSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'embedSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<embed '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'/>';
|
||||
}, $text);
|
||||
$text = preg_replace_callback('/<video ([^>]*)src="(.*)"([^>]*)>/Us', function ($matches) use ($path) {
|
||||
$url = htmlspecialchars_decode($matches[2], ENT_QUOTES);
|
||||
$url = normalizeUrl($url, $path, 'videoSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
$url = checkLocalFile($url, 'videoSrc');
|
||||
if (false === $url) {
|
||||
exit($path.PHP_EOL);
|
||||
}
|
||||
|
||||
return '<video '.$matches[1].'src="'.htmlspecialchars($url, ENT_QUOTES).'"'.$matches[3].'>';
|
||||
}, $text);
|
||||
$text = preg_replace('/ lang="([^"]+)"/Us', '', $text);
|
||||
$text = preg_replace('/ xml:lang="([^"]+)"/Us', '', $text);
|
||||
// remove font-family attributes
|
||||
$text = preg_replace_callback('/<span([^>]*?)>((?!<span).*)<\/span>/Us', function ($matches) use ($path) {
|
||||
if ('' === trim($matches[1]) || '' === trim($matches[2]) || ' ' === trim($matches[2])) {
|
||||
return $matches[2];
|
||||
}
|
||||
$m1 = $matches[1];
|
||||
$m1 = preg_replace_callback('/style="(.*)"/Us', function ($matches2) {
|
||||
$styles1 = array_map('trim', explode(';', htmlspecialchars_decode($matches2[1], ENT_QUOTES)));
|
||||
$styles2 = [];
|
||||
foreach ($styles1 as $style1) {
|
||||
if ('' === $style1) {
|
||||
continue;
|
||||
}
|
||||
$style = explode(':', $style1);
|
||||
list($key, $value) = array_map('trim', explode(':', $style1));
|
||||
if ('font-family' === $key || 'line-height' === $key || '' === $value || 'color' === $key && 'null' === $value) {
|
||||
// skip
|
||||
} else {
|
||||
$styles2[] = $key.':'.$value;
|
||||
}
|
||||
}
|
||||
|
||||
return 0 === count($styles2) ? '' : ('style="'.htmlspecialchars(implode(';', $styles2).';', ENT_QUOTES).'"');
|
||||
}, $m1);
|
||||
if ('' === trim($m1)) {
|
||||
return $matches[2];
|
||||
}
|
||||
if (strpos($m1, 'font-family') > 0) {
|
||||
echo 'trimed span:'.$path.PHP_EOL;
|
||||
}
|
||||
|
||||
return '<span'.$m1.'>'.$matches[2].'</span>';
|
||||
}, $text);
|
||||
$text = MyDumpTool::fixHtml($text);
|
||||
|
||||
return $text;
|
||||
}
|
310
etc/fixXooNIps.php
Normal file
@ -0,0 +1,310 @@
|
||||
<?php
|
||||
|
||||
$method = 'POST';
|
||||
require_once __DIR__.'/common.inc.php';
|
||||
|
||||
$table = 'xoonips_item_basic';
|
||||
if (!MyDumpTool::tableExists($table)) {
|
||||
exit('xoonips module not found'.PHP_EOL);
|
||||
}
|
||||
|
||||
$tree = getPublicIndex();
|
||||
$items = getPublicItems();
|
||||
checkNimgCenterBaseItem();
|
||||
checkBadIndexItemLink();
|
||||
checkBadItemTitle();
|
||||
checkNimgCenterItem($items);
|
||||
|
||||
// check nimgcenter item
|
||||
function checkNimgCenterItem($items)
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
foreach ($items as $item) {
|
||||
if ('xnpnimgcenter' !== $item['item_type_name']) {
|
||||
continue;
|
||||
}
|
||||
appendNimgcenterInfo($item);
|
||||
$itemId = $item['item_id'];
|
||||
$indexIds = getPublicIndexIdsByItemId($itemId);
|
||||
$baseItemId = $item['baseitem_id'];
|
||||
$baseIndexIds = getPublicIndexIdsByItemId($baseItemId);
|
||||
if (empty($baseIndexIds)) {
|
||||
// private item found.
|
||||
foreach ($indexIds as $indexId) {
|
||||
$sql = <<< SQL
|
||||
INSERT INTO `${prefix}_xoonips_index_item_link` VALUES (NULL, $indexId, $baseItemId, 2)
|
||||
SQL;
|
||||
var_dump($sql);
|
||||
if (!($res = $xoopsDB->queryF($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check bad item title
|
||||
function checkBadItemTitle()
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT `it`.*
|
||||
FROM `${prefix}_xoonips_item_title` AS `it`
|
||||
LEFT JOIN `${prefix}_xoonips_item_basic` AS `ib` ON `it`.`item_id`=`ib`.`item_id`
|
||||
WHERE `ib`.`item_id` IS NULL
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$itemIds = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
$itemIds[] = $row['item_id'];
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
$itemIds = array_unique($itemIds);
|
||||
foreach ($itemIds as $itemId) {
|
||||
$sql = <<< SQL
|
||||
DELETE FROM `${prefix}_xoonips_item_title` WHERE `item_id`=$itemId
|
||||
SQL;
|
||||
var_dump($sql);
|
||||
if (!($res = $xoopsDB->queryF($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
var_dump($itemIds);
|
||||
}
|
||||
|
||||
// check bad index item link
|
||||
function checkBadIndexItemLink()
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT `iil`.*
|
||||
FROM `${prefix}_xoonips_index_item_link` AS `iil`
|
||||
LEFT JOIN `${prefix}_xoonips_item_basic` AS `ib` ON `iil`.`item_id`=`ib`.`item_id`
|
||||
WHERE `ib`.`item_id` IS NULL
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$itemIds = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
$itemIds[] = $row['item_id'];
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
$itemIds = array_unique($itemIds);
|
||||
foreach ($itemIds as $itemId) {
|
||||
$sql = <<< SQL
|
||||
DELETE FROM `${prefix}_xoonips_index_item_link` WHERE `item_id`=$itemId
|
||||
SQL;
|
||||
var_dump($sql);
|
||||
if (!($res = $xoopsDB->queryF($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
var_dump($itemIds);
|
||||
}
|
||||
|
||||
// check baseitem of nimgcenter item
|
||||
function checkNimgCenterBaseItem()
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT `id`.*
|
||||
FROM `${prefix}_xnpnimgcenter_item_detail` AS `id`
|
||||
INNER JOIN `${prefix}_xoonips_index_item_link` AS `iil` ON `id`.`nimgcenter_id`=`iil`.`item_id`
|
||||
INNER JOIN `${prefix}_xoonips_index` AS `idx` ON `iil`.`index_id`=`idx`.`index_id`
|
||||
LEFT JOIN `${prefix}_xoonips_item_basic` AS `ib` ON `id`.`baseitem_id`=`ib`.`item_id`
|
||||
WHERE `ib`.`item_id` IS NULL
|
||||
AND `iil`.`certify_state`=2
|
||||
AND `idx`.`open_level`=1
|
||||
GROUP BY `id`.`nimgcenter_id`
|
||||
ORDER BY `id`.`nimgcenter_id` ASC
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
while ($detail = $xoopsDB->fetchArray($res)) {
|
||||
echo 'baseitem not found: nimgcenter_item_id:'.$detail['nimgcenter_id'].', baseitem_id:'.$detail['baseitem_id'].PHP_EOL;
|
||||
withdrawItem($detail['nimgcenter_id']);
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
}
|
||||
|
||||
// withdraw item
|
||||
function withdrawItem($item_id)
|
||||
{
|
||||
$index_item_link_handler = &xoonips_getormhandler('xoonips', 'index_item_link');
|
||||
$criteria = new CriteriaCompo(new Criteria('item_id', $item_id));
|
||||
$criteria->add(new Criteria('certify_state', 2));
|
||||
$index_item_link_handler->deleteAll($criteria);
|
||||
|
||||
$item_show_handler = &xoonips_getormhandler('xoonips', 'item_show');
|
||||
$item_show_handler->deleteAll(new Criteria('item_id', $item_id));
|
||||
|
||||
$item_status_handler = &xoonips_getormhandler('xoonips', 'item_status');
|
||||
$item_status_handler->updateItemStatus($item_id);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// append nimgcenter info
|
||||
function appendNimgcenterInfo(&$row)
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$coord_type_names = [
|
||||
0 => 'Talairach',
|
||||
1 => 'NMI',
|
||||
2 => 'Unclear',
|
||||
];
|
||||
$item_id = $row['item_id'];
|
||||
$sql = <<< SQL
|
||||
SELECT `id`.*,
|
||||
`ity`.`display_name` AS `base_type_display_name`
|
||||
FROM `${prefix}_xnpnimgcenter_item_detail` AS `id`
|
||||
INNER JOIN `${prefix}_xoonips_item_type` AS `ity` ON `id`.`base_type_name`=`ity`.`name`
|
||||
WHERE `id`.`nimgcenter_id`=$item_id
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
while ($detail = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($detail);
|
||||
MyDumpTool::convertToInt($detail, ['baseitem_id', 'coord_type']);
|
||||
$detail['coord_type_name'] = $coord_type_names[$detail['coord_type']];
|
||||
MyDumpTool::dropColumn($detail, ['nimgcenter_id']);
|
||||
$row += $detail;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
$sql = <<< SQL
|
||||
SELECT *
|
||||
FROM `${prefix}_xnpnimgcenter_talairach_list`
|
||||
WHERE `nimgcenter_id`=$item_id
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$row['coordinate'] = [];
|
||||
while ($t = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::dropColumn($t, ['nimgcenter_id']);
|
||||
MyDumpTool::convertToInt($t, ['x', 'y', 'z']);
|
||||
$row['coordinate'][] = $t;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
}
|
||||
|
||||
// get public indexes
|
||||
function getPublicIndex()
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`idx`.*,
|
||||
`it`.`title`
|
||||
FROM `${prefix}_xoonips_index` AS `idx`
|
||||
INNER JOIN `${prefix}_xoonips_item_title` AS `it` ON `idx`.`index_id`=`it`.`item_id`
|
||||
WHERE `it`.`title_id`=0
|
||||
AND `idx`.`open_level`=1
|
||||
SQL;
|
||||
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$tree = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($row);
|
||||
MyDumpTool::convertToInt($row, ['index_id', 'parent_index_id', 'uid', 'gid', 'open_level', 'sort_number']);
|
||||
$tree[$row['index_id']] = $row;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
return $tree;
|
||||
}
|
||||
|
||||
// get public indexes by item id
|
||||
function getPublicIndexIdsByItemId($item_id)
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`iil`.`index_id`
|
||||
FROM `${prefix}_xoonips_index_item_link` AS `iil`
|
||||
INNER JOIN `${prefix}_xoonips_index` AS `idx` ON `iil`.`index_id`=`idx`.`index_id`
|
||||
WHERE `iil`.`item_id`=$item_id
|
||||
AND `idx`.`open_level`=1
|
||||
ORDER BY `iil`.`index_id`
|
||||
SQL;
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$indexes = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::convertToInt($row, ['index_id']);
|
||||
$indexes[] = $row['index_id'];
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
return $indexes;
|
||||
}
|
||||
|
||||
// get public items
|
||||
function getPublicItems()
|
||||
{
|
||||
global $xoopsDB;
|
||||
$prefix = $xoopsDB->prefix();
|
||||
$sql = <<< SQL
|
||||
SELECT
|
||||
`ib`.*,
|
||||
GROUP_CONCAT(DISTINCT `it`.`title` ORDER BY `it`.`title_id` ASC SEPARATOR '\n') AS `title`,
|
||||
`ity`.`display_name` AS `item_type_display_name`, `ity`.`name` AS `item_type_name`,
|
||||
`u`.`uname`, `u`.`name`, `u`.`email`
|
||||
FROM `${prefix}_xoonips_item_basic` AS `ib`
|
||||
INNER JOIN `${prefix}_xoonips_item_title` AS `it` ON `ib`.`item_id`=`it`.`item_id`
|
||||
INNER JOIN `${prefix}_xoonips_item_type` AS `ity` ON `ib`.`item_type_id`=`ity`.`item_type_id`
|
||||
INNER JOIN `${prefix}_xoonips_index_item_link` AS `iil` ON `ib`.`item_id`=`iil`.`item_id`
|
||||
INNER JOIN `${prefix}_xoonips_index` AS `idx` ON `iil`.`index_id`=`idx`.`index_id`
|
||||
LEFT JOIN `${prefix}_users` AS `u` ON `ib`.`uid`=`u`.`uid`
|
||||
WHERE `ity`.`display_name` != 'Index'
|
||||
AND `iil`.`certify_state`=2
|
||||
AND `idx`.`open_level`=1
|
||||
GROUP BY `ib`.`item_id`
|
||||
ORDER BY `ib`.`item_id` ASC
|
||||
SQL;
|
||||
|
||||
if (!($res = $xoopsDB->query($sql))) {
|
||||
var_dump($xoopsDB);
|
||||
exit();
|
||||
}
|
||||
$items = [];
|
||||
$itemIds = [];
|
||||
$baseItemIds = [];
|
||||
while ($row = $xoopsDB->fetchArray($res)) {
|
||||
MyDumpTool::decode($row);
|
||||
MyDumpTool::convertToInt($row, ['item_id', 'item_type_id', 'uid', 'last_update_date', 'creation_date', 'publication_year', 'publication_month', 'publication_mday']);
|
||||
$row['index'] = getPublicIndexIdsByItemId($row['item_id']);
|
||||
if (empty($row['index'])) {
|
||||
continue;
|
||||
}
|
||||
$items[$row['item_id']] = $row;
|
||||
}
|
||||
$xoopsDB->freeRecordSet($res);
|
||||
|
||||
return $items;
|
||||
}
|
465
etc/simpflink.csv
Normal file
@ -0,0 +1,465 @@
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6045,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=25
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=909,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=27
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1648,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=28
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=913,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=29
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1623,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=30
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1620,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=32
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=896,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=33
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2434,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=34
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2441,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=35
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5307,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=37
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?id=943,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=38
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=403,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=39
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=398,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=40
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=350,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=41
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=366,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=43
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=370,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=44
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=361,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=45
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=4449054b,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=46
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6110,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=47
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=7252867b,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=48
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6105,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=49
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2861,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=50
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=16625198b,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=51
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6422,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=52
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=19281836b,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=53
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=7941380b,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=54
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6448,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=55
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6106,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=56
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1027,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=57
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1030,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=58
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1031,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=59
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1033,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=61
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1034,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=62
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1035,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=63
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1036,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=64
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1037,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=65
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1038,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=66
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1041,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=67
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1042,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=68
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1043,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=69
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1044,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=70
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1045,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=71
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1046,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=72
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1047,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=73
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1048,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=74
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1051,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=76
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1052,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=77
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1054,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=78
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1056,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=79
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1057,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=80
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1059,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=81
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1060,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=82
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1061,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=83
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1062,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=84
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1064,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=85
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1065,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=86
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1066,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=87
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1067,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=114
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1068,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=116
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1069,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=117
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1071,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=119
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1073,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=121
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1076,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=124
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1077,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=125
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1078,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=126
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1079,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=127
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=296,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=128
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5586,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=129
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=297,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=130
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1080,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=131
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1081,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=132
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1082,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=133
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1084,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=134
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1085,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=135
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1086,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=136
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1087,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=137
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1088,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=138
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1089,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=139
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1098,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=140
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1099,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=141
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1100,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=142
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1101,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=143
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1102,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=144
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1103,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=145
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1105,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=146
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1106,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=147
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1107,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=148
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1108,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=149
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1109,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=150
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1110,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=151
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1111,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=152
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1112,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=153
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1113,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=154
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1114,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=155
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1115,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=156
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1119,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=159
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1120,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=160
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1121,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=161
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1122,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=162
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1123,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=163
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1124,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=164
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1125,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=165
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1127,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=167
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1128,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=168
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1129,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=169
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1130,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=170
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1131,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=171
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1132,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=172
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1134,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=174
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1135,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=175
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1136,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=176
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1137,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=177
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1138,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=178
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1139,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=179
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1140,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=180
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1141,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=181
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1142,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=182
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1143,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=183
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1144,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=184
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1146,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=186
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1147,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=187
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1148,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=188
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1149,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=189
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1150,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=190
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1152,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=192
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1153,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=193
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1154,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=194
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1156,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=195
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1157,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=196
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1159,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=198
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1160,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=199
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1161,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=200
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1162,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=201
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1163,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=202
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1164,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=203
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1165,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=204
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1166,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=205
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1167,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=206
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1168,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=207
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1169,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=208
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1170,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=209
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1171,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=210
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1173,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=212
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1174,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=213
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1175,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=214
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1176,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=215
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1177,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=216
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1178,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=217
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1179,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=218
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1180,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=219
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1181,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=220
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1182,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=221
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1183,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=222
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1184,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=223
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1185,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=224
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1186,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=225
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1187,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=226
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1188,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=227
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1189,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=228
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1190,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=229
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1191,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=230
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1192,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=231
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1193,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=232
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=15929656d,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=233
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=376,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=234
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=298,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=235
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1629,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=236
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1647,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=237
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1209,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=239
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1210,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=240
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1211,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=241
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1212,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=242
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1213,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=243
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1214,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=244
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1215,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=245
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1216,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=246
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1218,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=248
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1219,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=249
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1220,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=250
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1222,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=251
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1223,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=252
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1224,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=253
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1225,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=254
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1226,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=255
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1227,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=256
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1228,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=257
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1230,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=258
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1231,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=259
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1232,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=260
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1233,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=261
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1234,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=262
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1235,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=263
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1236,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=264
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1237,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=265
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1238,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=266
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1239,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=267
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1240,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=268
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1241,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=269
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1242,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=270
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1243,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=271
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1244,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=272
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1245,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=273
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1246,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=274
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1247,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=275
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1248,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=276
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1251,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=279
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1252,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=280
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1255,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=281
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1256,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=282
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1257,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=283
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1258,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=284
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1262,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=286
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1263,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=287
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1264,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=288
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1265,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=289
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1266,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=290
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1268,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=292
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1269,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=293
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1270,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=294
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1271,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=295
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1272,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=296
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1273,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=297
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1278,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=302
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1279,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=303
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1280,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=304
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1281,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=305
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1282,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=306
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1283,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=307
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1284,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=308
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1285,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=309
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1286,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=310
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1287,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=311
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1288,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=312
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1289,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=313
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1291,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=315
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1292,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=316
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1293,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=317
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1294,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=318
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1295,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=319
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1296,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=320
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1298,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=322
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1299,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=323
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1300,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=324
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1302,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=326
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1306,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=330
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1312,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=336
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1313,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=337
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1314,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=338
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1315,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=339
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=162,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=341
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5936,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=342
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/558/weaverWearne06.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=360
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=4449054c,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=367
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1039,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=416
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1040,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=417
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=7051,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=444
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1427,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=485
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1425,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=486
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1424,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=487
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1423,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=488
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1422,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=489
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1421,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=490
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1420,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=491
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1419,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=492
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1418,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=493
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1417,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=494
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1416,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=496
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=497
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=498
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1414,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=499
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1363,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=500
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1413,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=501
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1411,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=502
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=503
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1365,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=504
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1369,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=505
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1408,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=506
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1406,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=507
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=511
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=514
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1367,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=515
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1366,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=516
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1405,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=517
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=518
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1401,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=519
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=520
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1368,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=521
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1399,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=523
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1370,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=524
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1398,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=525
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1371,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=526
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1397,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=527
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1396,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=528
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1372,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=529
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1373,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=530
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1374,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=531
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1375,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=532
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1376,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=533
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1380,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=534
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1395,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=535
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1394,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=536
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1393,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=537
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1392,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=538
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1391,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=539
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1390,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=540
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1389,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=541
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1387,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=542
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1386,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=543
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1385,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=544
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1384,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=545
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1382,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=546
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1381,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=547
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=550
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1363,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=551
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=552
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1365,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=553
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1366,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=554
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1367,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=555
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1368,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=556
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1369,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=557
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1370,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=558
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1371,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=559
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1372,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=560
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1374,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=562
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1375,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=563
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1376,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=564
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1379,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=565
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1380,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=566
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1381,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=567
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1382,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=568
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1384,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=569
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1385,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=571
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1386,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=572
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1387,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=573
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1045,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=574
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1389,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=575
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1390,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=576
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1391,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=577
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1392,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=578
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1393,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=579
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1394,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=580
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1395,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=581
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1396,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=582
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1397,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=583
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1398,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=584
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1399,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=585
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1400,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=586
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1401,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=587
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1402,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=588
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1405,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=589
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=590
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=591
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1411,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=592
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1413,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=593
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1414,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=594
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=595
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1416,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=596
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1418,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=598
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1419,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=599
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1420,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=600
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1421,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=601
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1422,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=602
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1423,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=603
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1424,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=604
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1425,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=605
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1427,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=606
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1428,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=607
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1429,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=608
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1430,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=609
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1431,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=610
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1432,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=611
|
||||
visiome,https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=7252,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=612
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1434,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=613
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1435,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=614
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1450,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=615
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1452,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=616
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1453,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=617
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1454,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=618
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1455,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=619
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1458,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=620
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1460,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=621
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1461,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=622
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1462,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=623
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1463,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=624
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1466,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=625
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1465,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=626
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1467,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=627
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1470,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=628
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1471,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=629
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1472,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=630
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1473,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=631
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1474,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=632
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1476,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=633
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1477,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=634
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1479,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=635
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1481,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=636
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1482,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=637
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1483,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=638
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1486,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=639
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1487,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=640
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1488,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=641
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1489,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=642
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1490,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=643
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1493,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=644
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1496,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=645
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1497,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=646
|
||||
cerebellum,https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1498,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=647
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/533/SundtEtAl2015.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=656
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/536/baker_etal_JCNS_2010.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=657
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/538/CS56PyModelDB.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=659
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/539/TCconvergenceModel.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=660
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/540/BahlEtAl2012.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=661
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/541/ACh_ModelDB.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=662
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/543/OLMmodel_r3.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=664
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/548/GentilettiEtAl2016.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=668
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/556/FUS_model.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=677
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/560/ShepherdBrayton1979.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=680
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/561/gc-1.1_r2.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=681
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/564/VladimirovTuTraub2012.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=683
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/565/xiaoshenli.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=684
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/566/kv72-R213QW-mutations_r2.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=685
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/567/Ih_current.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=686
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/569/Schizophr.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=687
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/570/SaudargieneEtAl2015.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=688
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/571/bpap.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=689
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/572/magical7.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=691
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/575/HyunEtAl2015.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=696
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/576/MasurkarChen2011_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=697
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/577/Nakano_FICN_model_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=698
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/582/AshhadNarayanan2013.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=699
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/583/DiFrancescoNoble1985.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=700
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/584/DGC.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=701
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/586/DG_BC.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=703
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/587/DRG_Devor.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=704
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/588/Kv72_ModelDB.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=705
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/589/SousaEtAl2014.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=706
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/590/MiglioreEtAl2015.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=707
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/592/Chloride_Model.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=708
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/593/MiglioreEJN2016_r2.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=709
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/595/Moore2015.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=711
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/597/FFI_CA1_r3.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=713
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/598/stadler2014_layerV_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=714
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/600/2VN.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=716
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/602/Branch_Point_Tapering.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=718
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/604/MenonEtAl2009_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=720
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/606/CA3Atrophy.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=722
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/607/Gorin_et_al_2016.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=723
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/608/Poleg-PolskyDiamond2011.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=724
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/613/Demo.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=728
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/614/ShortEtAl2016.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=729
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/618/Casaleggio2014.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=733
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/623/MiglioreMcTavish2013.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=736
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/624/KimEtAl2017.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=737
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/626/fig1b.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=738
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/627/cortex_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=739
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/629/oltedal.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=741
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/632/ka_rgc.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=744
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/634/na_rgc.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=745
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/636/V1_PFC_ModelDB.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=747
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/640/moore83.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=751
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/642/SpaceClampDemo.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=753
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/644/anderson.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=755
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/645/VNO.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=756
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/645/VNO.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=757
|
||||
cns,https://cns.neuroinf.jp/modules/fmanager/index.php/view/647/Watanabe-et-al_2017_r1.zip,http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=758
|
|
64
package.json
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"name": "nimg",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@orrisroot/react-html-parser": "^2.1.1",
|
||||
"@testing-library/jest-dom": "^5.16.4",
|
||||
"@testing-library/react": "^13.3.0",
|
||||
"@testing-library/user-event": "^14.2.1",
|
||||
"@types/async-lock": "^1.1.5",
|
||||
"@types/jest": "^28.1.2",
|
||||
"@types/lokijs": "^1.5.7",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/react": "^18.0.14",
|
||||
"@types/react-dom": "^18.0.5",
|
||||
"@types/react-router-dom": "^5.3.3",
|
||||
"@types/react-router-hash-link": "^2.4.5",
|
||||
"async-lock": "^1.3.1",
|
||||
"axios": "^0.27.2",
|
||||
"lokijs": "^1.5.12",
|
||||
"moment": "^2.29.3",
|
||||
"rc-tree": "^5.6.5",
|
||||
"react": "^18.2.0",
|
||||
"react-app-polyfill": "^3.0.0",
|
||||
"react-cookie": "^4.1.1",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-ga4": "^1.4.1",
|
||||
"react-helmet-async": "^1.3.0",
|
||||
"react-image-lightbox": "^5.1.4",
|
||||
"react-overlays": "^5.2.0",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"react-router-hash-link": "^2.4.3",
|
||||
"react-scripts": "5.0.1",
|
||||
"react-spinner-material": "^1.4.0",
|
||||
"split-string": "^6.1.0",
|
||||
"typescript": "~4.7.4",
|
||||
"web-vitals": "^2.1.4",
|
||||
"xregexp": "^5.1.1"
|
||||
},
|
||||
"resolutions": {
|
||||
"@svgr/webpack": "^6.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "react-app"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
11
public/.htaccess
Normal file
@ -0,0 +1,11 @@
|
||||
RewriteEngine on
|
||||
RewriteBase /
|
||||
|
||||
RewriteCond %{QUERY_STRING} (^|&)file_id=([0-9]+)($|&)
|
||||
RewriteRule ^modules/xoonips/download.php /modules/xoonips/file/%2? [R=301,L]
|
||||
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d [OR]
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteCond %{REQUEST_FILENAME}index.html !-f
|
||||
RewriteRule . /index.html [L]
|
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 3.6 KiB |
19
public/index.html
Normal file
@ -0,0 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="NIMG-PF is the Neuroinformatics site of Neuroimaging under NIJC."
|
||||
/>
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<title>NIMG - NeuroImaging Platform</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
15
public/manifest.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"short_name": "NIMG-PF",
|
||||
"name": "NeuroImaging Platform",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "32x32 16x16",
|
||||
"type": "image/x-icon"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
2
public/robots.txt
Normal file
@ -0,0 +1,2 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
89
public/rss.xml
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>NeuroImaging Platform</title>
|
||||
<link>https://nimg.neuroinf.jp/</link>
|
||||
<description>NIMG-PF is the Neuroinformatics site of Neuroimaging under NIJC.</description>
|
||||
<language>en</language>
|
||||
<item>
|
||||
<title>Age-related effect of serotonin transporter genotype on amygdala and prefrontal cortex function in adolescence.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7998</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7998</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Age-related effect of serotonin transporter genotype on amygdala and prefrontal cortex function in adolescence.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7999</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7999</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Altered emotion processing circuits during the anticipation of emotional stimuli in women with borderline personality disorder.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=8002</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=8002</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Age-related effect of serotonin transporter genotype on amygdala and prefrontal cortex function in adolescence.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=8004</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=8004</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Altered emotion processing circuits during the anticipation of emotional stimuli in women with borderline personality disorder.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7996</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7996</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Altered emotion processing circuits during the anticipation of emotional stimuli in women with borderline personality disorder.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7997</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:02 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7997</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Violence-related PTSD and neural activation when seeing emotionally charged male-female interactions.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7984</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:01 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7984</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Valence-specific conflict moderation in the dorso-medial PFC and the caudate head in emotional speech.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7986</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:01 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7986</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Functional alteration in frontolimbic systems relevant to moral judgment in cocaine-dependent subjects.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7988</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:01 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7988</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Functional changes of the reward system underlie blunted response to social gaze in cocaine users.</title>
|
||||
<link>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7991</link>
|
||||
<pubDate>Sat, 11 May 2019 03:21:01 GMT</pubDate>
|
||||
<guid>https://nimg.neuroinf.jp/modules/xoonips/detail.php?item_id=7991</guid>
|
||||
<description></description>
|
||||
<category>Incoming Public Item</category>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
2
src/App.css
Normal file
@ -0,0 +1,2 @@
|
||||
@import url("./common/assets/xoops.css");
|
||||
@import url("./custom/assets/style.css");
|
10
src/App.test.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import React from "react";
|
||||
import App from "./App";
|
||||
|
||||
test("renders welcome message", () => {
|
||||
window.scrollTo = () => {};
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/NeuroImaging Platform/);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
20
src/App.tsx
Normal file
@ -0,0 +1,20 @@
|
||||
import React from "react";
|
||||
import { CookiesProvider } from "react-cookie";
|
||||
import { HelmetProvider } from "react-helmet-async";
|
||||
import { BrowserRouter } from "react-router-dom";
|
||||
import "./App.css";
|
||||
import AppRoot from "./common/AppRoot";
|
||||
|
||||
const App: React.FC = () => {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<CookiesProvider>
|
||||
<HelmetProvider>
|
||||
<AppRoot />
|
||||
</HelmetProvider>
|
||||
</CookiesProvider>
|
||||
</BrowserRouter>
|
||||
);
|
||||
};
|
||||
|
||||
export default App;
|
31
src/brainexplorer/BrainExplorer.tsx
Normal file
@ -0,0 +1,31 @@
|
||||
import React from "react";
|
||||
import { Helmet } from "react-helmet-async";
|
||||
import { Route, Routes } from "react-router-dom";
|
||||
import PageNotFound from "../common/lib/PageNotFound";
|
||||
import { MultiLang } from "../config";
|
||||
import Functions from "../functions";
|
||||
import BrainExplorerIndex from "./BrainExplorerIndex";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const BrainExplorer: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<title>Brain Explorer - {Functions.siteTitle(lang)}</title>
|
||||
</Helmet>
|
||||
<Routes>
|
||||
<Route path="index_jm_eng.php" element={<BrainExplorerIndex lang="en" type="jm" />} />
|
||||
<Route path="index_jm_jpn.php" element={<BrainExplorerIndex lang="ja" type="jm" />} />
|
||||
<Route path="index_hu_eng.php" element={<BrainExplorerIndex lang="en" type="hu" />} />
|
||||
<Route path="index_hu_jpn.php" element={<BrainExplorerIndex lang="ja" type="hu" />} />
|
||||
<Route path="*" element={<PageNotFound lang={lang} />} />
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default BrainExplorer;
|
49
src/brainexplorer/BrainExplorerIndex.module.css
Normal file
@ -0,0 +1,49 @@
|
||||
.panel {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: white;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.panel::after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.panelNavi {
|
||||
width: 22%;
|
||||
height: 100%;
|
||||
border-right: 2px solid #cccccc;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.panelButtons {
|
||||
border-bottom: 2px solid #cccccc;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.panelMenu {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.panelMenuAistLink {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.panelContent {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
float: right;
|
||||
padding: 5px;
|
||||
width: calc(100% - 22% - 2px);
|
||||
}
|
||||
|
||||
.panelContent iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
111
src/brainexplorer/BrainExplorerIndex.tsx
Normal file
@ -0,0 +1,111 @@
|
||||
import React, { useState } from "react";
|
||||
import { Modal } from "react-overlays";
|
||||
import { Link, useLocation } from "react-router-dom";
|
||||
import { MultiLang } from "../config";
|
||||
import Functions from "../functions";
|
||||
import imageLogoAist from "./assets/images/logo_aist.png";
|
||||
import imageNaviHome from "./assets/images/navi_home.png";
|
||||
import imageNaviInfo from "./assets/images/navi_info.png";
|
||||
import styles from "./BrainExplorerIndex.module.css";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
type: "jm" | "hu";
|
||||
}
|
||||
|
||||
const title = {
|
||||
en: "Brain Atlas Database of Japanese Monkey for WWW.",
|
||||
ja: "脳画像データベース",
|
||||
};
|
||||
const description = {
|
||||
en: "Neuroscience researches for elucidation of brain functions require electrophysiological, pharmacological or anatomical operations into the brain. However, no brain atlas of a Japanese monkey, which is used widely in these experiments, was made except detail maps of the brain stem. We have made magnetic resonance images as well as histological sections of a Japanese monkey brain. For the purpose of the practical and efficient use of these images, we will construct computer database for WWW, in which we can display, magnify, and compare these images by easy mouse operations.",
|
||||
ja: "脳の優れた機能を解明し工学に利用するために、ヒトに近い機能を持った霊長類の神経科学的研究が行われている。脳機能の解明のためには脳の内部に対してさまざまな処置を施す必要がある。例えば、脳の特定の位置に記録、刺激電極を刺入する、薬剤を注入する、局部的に破壊するなどの場合がある。これらの処置に必要な資料は、脳の組織標本である。しかし、研究で良く使われるニホンザルの脳の組織標本は脳幹部を除いては今まで利用できる資料はなかった。そこで脳のMRI(磁気共鳴映像法)連続画像を撮ると共に、高次機能を調べるうえで重要な脳皮質全体を含む組織標本の連続切片を作成した。実験上また文献を読むときなどの資料として有効かつ簡便に活用するために、それらの画像をデジタル化し、マウスの操作のみで簡便に参照できるデータベースを構築し、WWW上で公開する。",
|
||||
};
|
||||
|
||||
const BrainExplorerIndex: React.FC<Props> = (props: Props) => {
|
||||
const { lang, type } = props;
|
||||
const [showInfo, setShowInfo] = useState(false);
|
||||
const location = useLocation();
|
||||
const parentUrl = location.pathname.substring(0, location.pathname.lastIndexOf("/"));
|
||||
|
||||
const getUrl = (type: string, lang: MultiLang) => {
|
||||
const label = { en: "eng", ja: "jpn" };
|
||||
return `${parentUrl}/index_${type}_${label[lang]}.php`;
|
||||
};
|
||||
|
||||
const renderShowInfo = () => {
|
||||
return (
|
||||
<div>
|
||||
<h1>{title[lang]}</h1>
|
||||
<hr />
|
||||
<p>{description[lang]}</p>
|
||||
<hr />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const renderBrainExplorerContent = () => {
|
||||
const url = `./${type === "hu" ? "human" : "jmonkey"}.html?LANG=${lang === "en" ? "ENG" : "JPN"}`;
|
||||
return <iframe src={url} title="image"></iframe>;
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal show={true}>
|
||||
<div className={styles.panel}>
|
||||
<div className={styles.panelNavi}>
|
||||
<div className={styles.panelButtons}>
|
||||
<Link to="/">
|
||||
<img src={imageNaviHome} alt="HOME" />
|
||||
</Link>
|
||||
|
||||
<a
|
||||
href="/"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setShowInfo(true);
|
||||
}}
|
||||
>
|
||||
<img src={imageNaviInfo} alt="INFO" />
|
||||
</a>
|
||||
</div>
|
||||
<div className={styles.panelMenu}>
|
||||
<h3>Brain Explorer [MRI]</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<Link to={getUrl("jm", lang)} onClick={() => setShowInfo(false)}>
|
||||
{Functions.mlang("[en]Japanese Monkey[/en][ja]ニホンザル[/ja]", lang)}
|
||||
<br />
|
||||
<em>(Macaca fuscata)</em>
|
||||
<br />
|
||||
{Functions.mlang("[en]Developmental Data[/en][ja]発達の様子[/ja]", lang)}
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link to={getUrl("hu", lang)} onClick={() => setShowInfo(false)}>
|
||||
{Functions.mlang("[en]Human[/en][ja]ヒト[/ja]", lang)}
|
||||
<br />
|
||||
<em>(Homo sapiens)</em>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li>
|
||||
<Link to={getUrl(type, lang === "en" ? "ja" : "en")}>{Functions.mlang("[en]Japanese page.[/en][ja]English page.[/ja]", lang)}</Link>
|
||||
</li>
|
||||
</ul>
|
||||
<hr />
|
||||
<div className={styles.panelMenuAistLink}>
|
||||
<a href="http://www.aist.go.jp/" target="_blank" rel="noopener noreferrer">
|
||||
<img src={imageLogoAist} alt="AIST" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.panelContent}>{showInfo ? renderShowInfo() : renderBrainExplorerContent()}</div>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default BrainExplorerIndex;
|
BIN
src/brainexplorer/assets/images/logo_aist.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/brainexplorer/assets/images/navi_home.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
src/brainexplorer/assets/images/navi_info.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
1035
src/brainexplorer/lib/g3d.ts
Normal file
616
src/brainexplorer/lib/m3d.ts
Normal file
@ -0,0 +1,616 @@
|
||||
export interface M3DHeader {
|
||||
magic: number;
|
||||
x: number;
|
||||
y: number;
|
||||
z: number;
|
||||
filename: string;
|
||||
subject: string;
|
||||
direction: string;
|
||||
date: number;
|
||||
fov: number;
|
||||
weight: number;
|
||||
ax: number;
|
||||
ay: number;
|
||||
az: number;
|
||||
ox: number;
|
||||
oy: number;
|
||||
oz: number;
|
||||
dlen: number;
|
||||
dth: number;
|
||||
memo: string;
|
||||
}
|
||||
|
||||
interface M3DImageRenderingContext {
|
||||
a1: number;
|
||||
a2: number;
|
||||
a3: number;
|
||||
b1: number;
|
||||
b2: number;
|
||||
b3: number;
|
||||
c1: number;
|
||||
c2: number;
|
||||
c3: number;
|
||||
d1: number;
|
||||
d2: number;
|
||||
d3: number;
|
||||
ra1: number;
|
||||
ra1_2: number;
|
||||
ra2: number;
|
||||
ra2_2: number;
|
||||
ra3: number;
|
||||
ra3_2: number;
|
||||
rb1: number;
|
||||
rb1_2: number;
|
||||
rb2: number;
|
||||
rb2_2: number;
|
||||
rb3: number;
|
||||
rb3_2: number;
|
||||
rc1: number;
|
||||
rc1_2: number;
|
||||
rc2: number;
|
||||
rc2_2: number;
|
||||
rc3: number;
|
||||
rc3_2: number;
|
||||
rd1: number;
|
||||
rd2: number;
|
||||
rd3: number;
|
||||
}
|
||||
|
||||
/* MeshLength unit is same as fov unit */
|
||||
const MeshLength = 10;
|
||||
enum DrawingLineType {
|
||||
VLine = 0,
|
||||
VDottedLine = 1,
|
||||
HLine = 2,
|
||||
HDottedLine = 3,
|
||||
}
|
||||
const LineBrightness = 200;
|
||||
const DottedLineBrightness = 128;
|
||||
const EXACTSWITCH: 0 | 1 = 1;
|
||||
const MaxIntensity = 200;
|
||||
|
||||
class M3D {
|
||||
private data: ArrayBuffer;
|
||||
private header: M3DHeader | null = null;
|
||||
private xposView: Int32Array | null = null;
|
||||
private zposView: Int32Array | null = null;
|
||||
private yposView: Int32Array | null = null;
|
||||
private img3dView: Uint8ClampedArray | null = null;
|
||||
private imageSize = 0; // imagesize size : max (size_x, size_y, size_z)
|
||||
private centerX = 0; // camera coordinates origin : x
|
||||
private centerY = 0; // camera coordinates origin : y
|
||||
private centerZ = 0; // camera coordinates origin : z
|
||||
private ox = 0; // object coordinates origin : x
|
||||
private oy = 0; // object coordinates origin : y
|
||||
private oz = 0; // object coordinates origin : z
|
||||
|
||||
constructor(data: ArrayBuffer) {
|
||||
this.data = data;
|
||||
this._initialize();
|
||||
}
|
||||
|
||||
isBigEndian(): boolean {
|
||||
return new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x11;
|
||||
}
|
||||
|
||||
getHeader(): M3DHeader | null {
|
||||
return this.header;
|
||||
}
|
||||
|
||||
drawImage(canvas: HTMLCanvasElement, ax: number, ay: number, az: number, cutdepth: number, th: number, is3d: boolean, mesh: boolean): boolean {
|
||||
const irc: M3DImageRenderingContext = {
|
||||
a1: 0,
|
||||
a2: 0,
|
||||
a3: 0,
|
||||
b1: 0,
|
||||
b2: 0,
|
||||
b3: 0,
|
||||
c1: 0,
|
||||
c2: 0,
|
||||
c3: 0,
|
||||
d1: 0,
|
||||
d2: 0,
|
||||
d3: 0,
|
||||
ra1: 0,
|
||||
ra1_2: 0,
|
||||
ra2: 0,
|
||||
ra2_2: 0,
|
||||
ra3: 0,
|
||||
ra3_2: 0,
|
||||
rb1: 0,
|
||||
rb1_2: 0,
|
||||
rb2: 0,
|
||||
rb2_2: 0,
|
||||
rb3: 0,
|
||||
rb3_2: 0,
|
||||
rc1: 0,
|
||||
rc1_2: 0,
|
||||
rc2: 0,
|
||||
rc2_2: 0,
|
||||
rc3: 0,
|
||||
rc3_2: 0,
|
||||
rd1: 0,
|
||||
rd2: 0,
|
||||
rd3: 0,
|
||||
};
|
||||
// console.log(ax, ay, az, cutdepth, th, dim, mesh)
|
||||
if (this.header === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
canvas.width = this.imageSize;
|
||||
canvas.height = this.imageSize;
|
||||
const ctx = canvas.getContext('2d');
|
||||
if (ctx === null) {
|
||||
return false;
|
||||
}
|
||||
ctx.fillStyle = 'rgb(0, 0, 0)';
|
||||
ctx.fillRect(0, 0, this.imageSize, this.imageSize);
|
||||
const img = ctx.getImageData(0, 0, this.imageSize, this.imageSize);
|
||||
|
||||
this._setMatrix(ax, ay, az, irc);
|
||||
if (is3d) {
|
||||
const ddimg = [...Array<number>(this.imageSize * this.imageSize)].map(() => 0);
|
||||
this._makeDIMG(img, cutdepth, th, ddimg, irc);
|
||||
this._makeShadingImage(img, ddimg);
|
||||
} else {
|
||||
this._makeSliceImage(img, cutdepth, irc);
|
||||
}
|
||||
if (mesh) {
|
||||
this._drawMesh(img, irc);
|
||||
}
|
||||
ctx.putImageData(img, 0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
private _makeDIMG(img: ImageData, cutdepth: number, th: number, ddimg: number[], irc: M3DImageRenderingContext) {
|
||||
if (this.header === null) {
|
||||
return;
|
||||
}
|
||||
const pdimg = [...Array<number>(this.imageSize * this.imageSize)].map(() => 0);
|
||||
const sw = th > this.header.dth ? 1 : th < this.header.dth ? 2 : EXACTSWITCH;
|
||||
switch (sw) {
|
||||
case 0: {
|
||||
this._transSurface(cutdepth, pdimg, irc);
|
||||
let pos = 0;
|
||||
for (let j = 0; j < this.imageSize; j++) {
|
||||
for (let i = 0; i < this.imageSize; i++, pos++) {
|
||||
ddimg[pos] = pdimg[pos];
|
||||
const pix = this._getPixel(i, j, cutdepth, irc);
|
||||
if (pix > th) {
|
||||
this._drawPixel(img, pos, pix, pix, pix);
|
||||
ddimg[pos] = cutdepth;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
this._transSurface(cutdepth, pdimg, irc);
|
||||
let pos = 0;
|
||||
for (let y = 0; y < this.imageSize; y++) {
|
||||
for (let x = 0; x < this.imageSize; x++, pos++) {
|
||||
let pdPos = (ddimg[pos] = pdimg[pos]);
|
||||
if (pdPos === 0) {
|
||||
continue;
|
||||
}
|
||||
const pix = this._getPixel(x, y, cutdepth, irc);
|
||||
if (pix > th) {
|
||||
this._drawPixel(img, pos, pix, pix, pix);
|
||||
ddimg[pos] = cutdepth;
|
||||
continue;
|
||||
}
|
||||
if (pdPos < cutdepth) {
|
||||
pdPos = cutdepth;
|
||||
}
|
||||
ddimg[pos] = 0;
|
||||
for (let z = pdPos; z < this.imageSize; z++) {
|
||||
const pix = this._getPixel(x, y, z, irc);
|
||||
if (pix > th) {
|
||||
ddimg[pos] = z;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
let pos = 0;
|
||||
for (let y = 0; y < this.imageSize; y++) {
|
||||
for (let x = 0; x < this.imageSize; x++, pos++) {
|
||||
ddimg[pos] = 0;
|
||||
for (let z = cutdepth; z < this.imageSize; z++) {
|
||||
const pix = this._getPixel(x, y, z, irc);
|
||||
if (pix > th) {
|
||||
if (z === cutdepth) {
|
||||
this._drawPixel(img, pos, pix, pix, pix);
|
||||
} else {
|
||||
ddimg[pos] = z;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private _makeShadingImage(img: ImageData, ddimg: number[]) {
|
||||
let pos = 0;
|
||||
for (let x = 0; x < this.imageSize; x++) {
|
||||
for (let y = 0; y < this.imageSize; y++, pos++) {
|
||||
const base = pos * 4;
|
||||
if (img.data[base] === 0) {
|
||||
let timg2d = 0;
|
||||
if (x < this.imageSize - 2 && y < this.imageSize - 2) {
|
||||
if (ddimg[pos] !== 0) {
|
||||
const nx = (ddimg[pos] + ddimg[pos + this.imageSize] - ddimg[pos + 2] - ddimg[pos + 2 + this.imageSize]) / 4.0;
|
||||
const ny = (ddimg[pos] + ddimg[pos + 1] - ddimg[pos + this.imageSize * 2] - ddimg[pos + 1 + this.imageSize * 2]) / 4.0;
|
||||
const n = Math.sqrt(nx * nx + ny * ny + 1);
|
||||
timg2d = Math.round(MaxIntensity / n);
|
||||
}
|
||||
}
|
||||
this._drawPixel(img, pos, timg2d, timg2d, timg2d);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private _makeSliceImage(img: ImageData, cutdepth: number, irc: M3DImageRenderingContext) {
|
||||
let pos = 0;
|
||||
for (let y = 0; y < this.imageSize; y++) {
|
||||
for (let x = 0; x < this.imageSize; x++, pos++) {
|
||||
const pix = this._getPixel(x, y, cutdepth, irc);
|
||||
this._drawPixel(img, pos, pix, pix, pix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private _drawMesh(img: ImageData, irc: M3DImageRenderingContext) {
|
||||
let origx: number;
|
||||
let origy: number;
|
||||
if (this.header === null) {
|
||||
return;
|
||||
}
|
||||
if (this.header.ox !== 0 && this.header.oy !== 0) {
|
||||
origx = this.header.ox * irc.ra1 + this.header.oy * irc.rb1 + this.header.oz * irc.rc1 + irc.rd1;
|
||||
origy = this.header.ox * irc.ra2 + this.header.oy * irc.rb2 + this.header.oz * irc.rc2 + irc.rd2;
|
||||
} else {
|
||||
origx = this.centerX;
|
||||
origy = this.centerY;
|
||||
}
|
||||
origx = this._fround(origx, 5);
|
||||
origy = this._fround(origy, 5);
|
||||
|
||||
const band = (this.header.x * MeshLength) / this.header.fov;
|
||||
const r = 0;
|
||||
const g = 0;
|
||||
const b = LineBrightness;
|
||||
const sr = 0;
|
||||
const sg = 0;
|
||||
const sb = DottedLineBrightness;
|
||||
this._drawLine(img, Math.round(origx), r, g, b, DrawingLineType.VLine);
|
||||
this._drawLine(img, Math.round(origy), r, g, b, DrawingLineType.HLine);
|
||||
for (let pos = Math.round(origx) + band; pos < this.imageSize; pos += band) {
|
||||
this._drawLine(img, Math.round(pos), sr, sg, sb, DrawingLineType.VDottedLine);
|
||||
}
|
||||
for (let pos = Math.round(origx) - band; pos >= 0; pos -= band) {
|
||||
this._drawLine(img, Math.round(pos), sr, sg, sb, DrawingLineType.VDottedLine);
|
||||
}
|
||||
for (let pos = Math.round(origy) + band; pos < this.imageSize; pos += band) {
|
||||
this._drawLine(img, Math.round(pos), sr, sg, sb, DrawingLineType.HDottedLine);
|
||||
}
|
||||
for (let pos = Math.round(origy) - band; pos >= 0; pos -= band) {
|
||||
this._drawLine(img, Math.round(pos), sr, sg, sb, DrawingLineType.HDottedLine);
|
||||
}
|
||||
}
|
||||
|
||||
private _drawLine(img: ImageData, value: number, r: number, g: number, b: number, type: DrawingLineType) {
|
||||
switch (type) {
|
||||
case DrawingLineType.VLine: {
|
||||
let pos = value;
|
||||
for (let y = 0; y < this.imageSize; y++, pos += this.imageSize) {
|
||||
this._drawPixel(img, pos, r, g, b);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DrawingLineType.VDottedLine: {
|
||||
let pos = value;
|
||||
for (let y = 0; y < this.imageSize; y += 2, pos += this.imageSize * 2) {
|
||||
this._drawPixel(img, pos, r, g, b);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DrawingLineType.HLine: {
|
||||
let pos = value * this.imageSize;
|
||||
for (let x = 0; x < this.imageSize; x++, pos++) {
|
||||
this._drawPixel(img, pos, r, g, b);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DrawingLineType.HDottedLine: {
|
||||
let pos = value * this.imageSize;
|
||||
for (let x = 0; x < this.imageSize; x += 2, pos += 2) {
|
||||
this._drawPixel(img, pos, r, g, b);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private _drawPixel(img: ImageData, pos: number, r: number, g: number, b: number) {
|
||||
let base = pos * 4;
|
||||
img.data[base++] = r;
|
||||
img.data[base++] = g;
|
||||
img.data[base++] = b;
|
||||
img.data[base] = 255;
|
||||
}
|
||||
|
||||
private _getPixel(x: number, y: number, z: number, irc: M3DImageRenderingContext): number {
|
||||
const len = [...Array<number>(8)].map(() => 0);
|
||||
const ratio = [...Array<number>(8)].map(() => 0);
|
||||
|
||||
const tx = x * irc.a1 + y * irc.b1 + z * irc.c1 + irc.d1;
|
||||
const ty = x * irc.a2 + y * irc.b2 + z * irc.c2 + irc.d2;
|
||||
const tz = x * irc.a3 + y * irc.b3 + z * irc.c3 + irc.d3;
|
||||
|
||||
let ix = Math.floor(tx);
|
||||
let iy = Math.floor(ty);
|
||||
let iz = Math.floor(tz);
|
||||
|
||||
if (this.header === null || this.img3dView === null) {
|
||||
return 0;
|
||||
}
|
||||
if (ix < 0 || ix + 1 >= this.header.x || iy < 0 || iy + 1 >= this.header.y || iz < 0 || iz + 1 >= this.header.z) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const ax1 = Math.abs(tx - ix);
|
||||
const ax2 = Math.abs(1 - ax1);
|
||||
const ay1 = Math.abs(ty - iy);
|
||||
const ay2 = Math.abs(1 - ay1);
|
||||
const az1 = Math.abs(tz - iz);
|
||||
const az2 = Math.abs(1 - az1);
|
||||
|
||||
let sumlen1 = 0;
|
||||
for (let i = 0; i < 8; i++) {
|
||||
len[i] = i & 1 ? ax2 : ax1;
|
||||
len[i] += i & 2 ? ay2 : ay1;
|
||||
len[i] += i & 4 ? az2 : az1;
|
||||
if (len[i] < 0.001) {
|
||||
ix += i & 1 ? 1 : 0;
|
||||
iy += i & 2 ? 1 : 0;
|
||||
iz += i & 4 ? 1 : 0;
|
||||
return this.img3dView[ix + iy * this.header.x + iz * this.header.x * this.header.y];
|
||||
}
|
||||
sumlen1 += ratio[i] = 1 / len[i];
|
||||
}
|
||||
let pos = ix + iy * this.header.x + iz * this.header.x * this.header.y;
|
||||
let sumlen2 = this.img3dView[pos] * ratio[0];
|
||||
sumlen2 += this.img3dView[pos + 1] * ratio[1];
|
||||
sumlen2 += this.img3dView[pos + this.header.x] * ratio[2];
|
||||
sumlen2 += this.img3dView[pos + 1 + this.header.x] * ratio[3];
|
||||
pos += this.header.x * this.header.y;
|
||||
sumlen2 += this.img3dView[pos] * ratio[4];
|
||||
sumlen2 += this.img3dView[pos + 1] * ratio[5];
|
||||
sumlen2 += this.img3dView[pos + this.header.x] * ratio[6];
|
||||
sumlen2 += this.img3dView[pos + 1 + this.header.x] * ratio[7];
|
||||
|
||||
return Math.round(sumlen2 / sumlen1);
|
||||
}
|
||||
|
||||
private _transSurface(cutdepth: number, pdimg: number[], irc: M3DImageRenderingContext) {
|
||||
if (this.header === null || this.xposView === null || this.yposView === null || this.zposView === null) {
|
||||
return;
|
||||
}
|
||||
const ix = [...Array<number>(8)].map(() => 0);
|
||||
const iy = [...Array<number>(8)].map(() => 0);
|
||||
const iz = [...Array<number>(8)].map(() => 0);
|
||||
for (let i = 0; i < this.header.dlen; i++) {
|
||||
const x = this.xposView[i];
|
||||
const y = this.yposView[i];
|
||||
const z = this.zposView[i];
|
||||
ix[0] = x * irc.ra1 + y * irc.rb1 + z * irc.rc1 + irc.rd1;
|
||||
iy[0] = x * irc.ra2 + y * irc.rb2 + z * irc.rc2 + irc.rd2;
|
||||
iz[0] = x * irc.ra3 + y * irc.rb3 + z * irc.rc3 + irc.rd3;
|
||||
ix[1] = ix[0] + irc.ra1_2;
|
||||
iy[1] = iy[0] + irc.ra2_2;
|
||||
iz[1] = iz[0] + irc.ra3_2;
|
||||
ix[2] = ix[0] + irc.rb1_2;
|
||||
iy[2] = iy[0] + irc.rb2_2;
|
||||
iz[2] = iz[0] + irc.rb3_2;
|
||||
ix[3] = ix[0] + irc.rc1_2;
|
||||
iy[3] = iy[0] + irc.rc2_2;
|
||||
iz[3] = iz[0] + irc.rc3_2;
|
||||
ix[4] = ix[1] + irc.rb1_2;
|
||||
iy[4] = iy[1] + irc.rb2_2;
|
||||
iz[4] = iz[1] + irc.rb3_2;
|
||||
ix[5] = ix[1] + irc.rc1_2;
|
||||
iy[5] = iy[1] + irc.rc2_2;
|
||||
iz[5] = iz[1] + irc.rc3_2;
|
||||
ix[6] = ix[2] + irc.rc1_2;
|
||||
iy[6] = iy[2] + irc.rc2_2;
|
||||
iz[6] = iz[2] + irc.rc3_2;
|
||||
ix[7] = ix[4] + irc.rc1_2;
|
||||
iy[7] = iy[4] + irc.rc2_2;
|
||||
iz[7] = iz[4] + irc.rc3_2;
|
||||
for (let j = 0; j < 8; j++) {
|
||||
const xi = Math.round(ix[j]);
|
||||
const yi = Math.round(iy[j]);
|
||||
if (xi < 0 || xi >= this.imageSize || yi < 0 || yi >= this.imageSize || iz[j] < cutdepth || iz[j] >= this.imageSize) {
|
||||
continue;
|
||||
}
|
||||
const pos = xi + yi * this.imageSize;
|
||||
if (pdimg[pos] === 0 || pdimg[pos] > iz[j]) {
|
||||
pdimg[pos] = iz[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private _setMatrix(x: number, y: number, z: number, irc: M3DImageRenderingContext) {
|
||||
const xtr = [...Array<number>(9)].map(() => 0);
|
||||
const ytr = [...Array<number>(9)].map(() => 0);
|
||||
const ztr = [...Array<number>(9)].map(() => 0);
|
||||
const tmp = [...Array<number>(9)].map(() => 0);
|
||||
const tr = [...Array<number>(9)].map(() => 0);
|
||||
this._setXtr(xtr, (x * Math.PI) / 180.0);
|
||||
this._setYtr(ytr, (y * Math.PI) / 180.0);
|
||||
this._setZtr(ztr, (z * Math.PI) / 180.0);
|
||||
this._multi(ytr, xtr, tmp);
|
||||
this._multi(ztr, tmp, tr);
|
||||
irc.a1 = tr[0];
|
||||
irc.b1 = tr[1];
|
||||
irc.c1 = tr[2];
|
||||
irc.a2 = tr[3];
|
||||
irc.b2 = tr[4];
|
||||
irc.c2 = tr[5];
|
||||
irc.a3 = tr[6];
|
||||
irc.b3 = tr[7];
|
||||
irc.c3 = tr[8];
|
||||
irc.d1 = -irc.a1 * this.centerX - irc.b1 * this.centerY - irc.c1 * this.centerZ + this.ox;
|
||||
irc.d2 = -irc.a2 * this.centerX - irc.b2 * this.centerY - irc.c2 * this.centerZ + this.oy;
|
||||
irc.d3 = -irc.a3 * this.centerX - irc.b3 * this.centerY - irc.c3 * this.centerZ + this.oz;
|
||||
|
||||
this._setXtr(xtr, (-x * Math.PI) / 180.0);
|
||||
this._setYtr(ytr, (-y * Math.PI) / 180.0);
|
||||
this._setZtr(ztr, (-z * Math.PI) / 180.0);
|
||||
this._multi(ytr, ztr, tmp);
|
||||
this._multi(xtr, tmp, tr);
|
||||
irc.ra1 = tr[0];
|
||||
irc.rb1 = tr[1];
|
||||
irc.rc1 = tr[2];
|
||||
irc.ra2 = tr[3];
|
||||
irc.rb2 = tr[4];
|
||||
irc.rc2 = tr[5];
|
||||
irc.ra3 = tr[6];
|
||||
irc.rb3 = tr[7];
|
||||
irc.rc3 = tr[8];
|
||||
irc.rd1 = -irc.ra1 * this.ox - irc.rb1 * this.oy - irc.rc1 * this.oz + this.centerX;
|
||||
irc.rd2 = -irc.ra2 * this.ox - irc.rb2 * this.oy - irc.rc2 * this.oz + this.centerY;
|
||||
irc.rd3 = -irc.ra3 * this.ox - irc.rb3 * this.oy - irc.rc3 * this.oz + this.centerZ;
|
||||
irc.ra1_2 = irc.ra1 / 2;
|
||||
irc.rb1_2 = irc.rb1 / 2;
|
||||
irc.rc1_2 = irc.rc1 / 2;
|
||||
irc.ra2_2 = irc.ra2 / 2;
|
||||
irc.rb2_2 = irc.rb2 / 2;
|
||||
irc.rc2_2 = irc.rc2 / 2;
|
||||
irc.ra3_2 = irc.ra3 / 2;
|
||||
irc.rb3_2 = irc.rb3 / 2;
|
||||
irc.rc3_2 = irc.rc3 / 2;
|
||||
}
|
||||
|
||||
private _setXtr(xtr: number[], ang: number) {
|
||||
xtr[0] = 1;
|
||||
xtr[1] = 0;
|
||||
xtr[2] = 0;
|
||||
xtr[3] = 0;
|
||||
xtr[4] = Math.cos(ang);
|
||||
xtr[5] = -Math.sin(ang);
|
||||
xtr[6] = 0;
|
||||
xtr[7] = Math.sin(ang);
|
||||
xtr[8] = Math.cos(ang);
|
||||
}
|
||||
|
||||
private _setYtr(ytr: number[], ang: number) {
|
||||
ytr[0] = Math.cos(ang);
|
||||
ytr[1] = 0;
|
||||
ytr[2] = Math.sin(ang);
|
||||
ytr[3] = 0;
|
||||
ytr[4] = 1;
|
||||
ytr[5] = 0;
|
||||
ytr[6] = -Math.sin(ang);
|
||||
ytr[7] = 0;
|
||||
ytr[8] = Math.cos(ang);
|
||||
}
|
||||
|
||||
private _setZtr(ztr: number[], ang: number) {
|
||||
ztr[0] = Math.cos(ang);
|
||||
ztr[1] = -Math.sin(ang);
|
||||
ztr[2] = 0;
|
||||
ztr[3] = Math.sin(ang);
|
||||
ztr[4] = Math.cos(ang);
|
||||
ztr[5] = 0;
|
||||
ztr[6] = 0;
|
||||
ztr[7] = 0;
|
||||
ztr[8] = 1;
|
||||
}
|
||||
|
||||
private _multi(l: number[], r: number[], a: number[]) {
|
||||
a[0] = l[0] * r[0] + l[1] * r[3] + l[2] * r[6];
|
||||
a[3] = l[3] * r[0] + l[4] * r[3] + l[5] * r[6];
|
||||
a[6] = l[6] * r[0] + l[7] * r[3] + l[8] * r[6];
|
||||
a[1] = l[0] * r[1] + l[1] * r[4] + l[2] * r[7];
|
||||
a[4] = l[3] * r[1] + l[4] * r[4] + l[5] * r[7];
|
||||
a[7] = l[6] * r[1] + l[7] * r[4] + l[8] * r[7];
|
||||
a[2] = l[0] * r[2] + l[1] * r[5] + l[2] * r[8];
|
||||
a[5] = l[3] * r[2] + l[4] * r[5] + l[5] * r[8];
|
||||
a[8] = l[6] * r[2] + l[7] * r[5] + l[8] * r[8];
|
||||
}
|
||||
|
||||
private _fround(x: number, n: number) {
|
||||
return Math.round(x * Math.pow(10, n)) / Math.pow(10, n);
|
||||
}
|
||||
|
||||
private _initialize(): void {
|
||||
const view = new DataView(this.data);
|
||||
const magic = view.getInt32(0, true);
|
||||
const isLittleEndianFile = magic === 0x4d523344;
|
||||
if (!isLittleEndianFile && magic !== 0x4433524d) {
|
||||
console.log('invalid data format, this data is not m3d format');
|
||||
return;
|
||||
}
|
||||
let offset = 0;
|
||||
const decoder = new TextDecoder('utf-8');
|
||||
this.header = {
|
||||
magic: view.getInt32(offset, isLittleEndianFile),
|
||||
x: view.getInt32((offset += 4), isLittleEndianFile),
|
||||
y: view.getInt32((offset += 4), isLittleEndianFile),
|
||||
z: view.getInt32((offset += 4), isLittleEndianFile),
|
||||
filename: decoder.decode(new Uint8Array(this.data, (offset += 4), 256)).replace(/\0+$/, ''),
|
||||
subject: decoder.decode(new Uint8Array(this.data, (offset += 256), 256)).replace(/\0+$/, ''),
|
||||
direction: decoder.decode(new Uint8Array(this.data, (offset += 256), 4)).replace(/\0+$/, ''),
|
||||
date: view.getUint32((offset += 4), isLittleEndianFile),
|
||||
fov: view.getFloat64((offset += 4), isLittleEndianFile),
|
||||
weight: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
ax: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
ay: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
az: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
ox: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
oy: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
oz: view.getFloat64((offset += 8), isLittleEndianFile),
|
||||
dlen: view.getInt32((offset += 8), isLittleEndianFile),
|
||||
dth: view.getInt32((offset += 4), isLittleEndianFile),
|
||||
memo: decoder.decode(new Uint8Array(this.data, (offset += 4), 256)).replace(/\0+$/, ''),
|
||||
};
|
||||
// swap byte order if endian is not matched
|
||||
if ((this.isBigEndian() && isLittleEndianFile) || (!this.isBigEndian() && !isLittleEndianFile)) {
|
||||
const start = 864;
|
||||
const end = start + this.header.dlen * 4 * 3;
|
||||
for (let i = start; i < end; i += 4) {
|
||||
const data = new Uint8Array(this.data, i, 4);
|
||||
data.reverse();
|
||||
}
|
||||
}
|
||||
this.xposView = new Int32Array(this.data, 864, this.header.dlen);
|
||||
this.yposView = new Int32Array(this.data, 864 + this.header.dlen * 4, this.header.dlen);
|
||||
this.zposView = new Int32Array(this.data, 864 + this.header.dlen * 8, this.header.dlen);
|
||||
this.img3dView = new Uint8ClampedArray(this.data, 864 + this.header.dlen * 12, this.header.x * this.header.y * this.header.z);
|
||||
// set image generation offset
|
||||
this.imageSize = Math.ceil(Math.max(this.header.x, this.header.y, this.header.z) * Math.sqrt(3.0)) + 1;
|
||||
this.centerX = (this.imageSize - 1) / 2.0;
|
||||
this.centerY = (this.imageSize - 1) / 2.0;
|
||||
this.centerZ = (this.imageSize - 1) / 2.0;
|
||||
this.ox = (this.header.x - 1) / 2.0;
|
||||
this.oy = (this.header.y - 1) / 2.0;
|
||||
this.oz = (this.header.z - 1) / 2.0;
|
||||
}
|
||||
}
|
||||
|
||||
export default M3D;
|
41
src/common/AppRoot.tsx
Normal file
@ -0,0 +1,41 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useCookies } from "react-cookie";
|
||||
import ReactGA from "react-ga4";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import Config, { MultiLang } from "../config";
|
||||
import Page from "../custom/Page";
|
||||
|
||||
const AppMain: React.FC = () => {
|
||||
const [cookies, setCookie] = useCookies();
|
||||
const [lang, setLang] = useState<MultiLang>(["en", "ja"].includes(cookies.ml_lang) ? cookies.ml_lang : "en");
|
||||
const location = useLocation();
|
||||
|
||||
useEffect(() => {
|
||||
if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== "") {
|
||||
ReactGA.send("pageview");
|
||||
}
|
||||
const params = new URLSearchParams(location.search);
|
||||
const ml_lang = params.get("ml_lang");
|
||||
if (ml_lang != null && ["en", "ja"].includes(ml_lang)) {
|
||||
if (cookies.ml_lang !== ml_lang) {
|
||||
setCookie("ml_lang", ml_lang);
|
||||
}
|
||||
if (lang !== ml_lang) {
|
||||
setLang(ml_lang as MultiLang);
|
||||
}
|
||||
}
|
||||
window.scrollTo(0, 0);
|
||||
}, [cookies, setCookie, lang, location]);
|
||||
|
||||
return <Page lang={lang} />;
|
||||
};
|
||||
|
||||
const AppRoot: React.FC = () => {
|
||||
if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== "") {
|
||||
ReactGA.initialize(Config.GOOGLE_ANALYTICS_TRACKING_ID);
|
||||
}
|
||||
|
||||
return <AppMain />;
|
||||
};
|
||||
|
||||
export default AppRoot;
|
35
src/common/XoopsPathRedirect.tsx
Normal file
@ -0,0 +1,35 @@
|
||||
import React from "react";
|
||||
import { Navigate } from "react-router";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import { MultiLang } from "../config";
|
||||
import PageNotFound from "./lib/PageNotFound";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const XoopsPathRedirect: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
const location = useLocation();
|
||||
|
||||
const getRedirectUrl = () => {
|
||||
const { pathname } = location;
|
||||
switch (pathname || "") {
|
||||
case "/index.php": {
|
||||
return "/";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
||||
if (location.pathname === "/") {
|
||||
return null;
|
||||
}
|
||||
const url = getRedirectUrl();
|
||||
if (url === "") {
|
||||
return <PageNotFound lang={lang} />;
|
||||
}
|
||||
return <Navigate to={url} />;
|
||||
};
|
||||
|
||||
export default XoopsPathRedirect;
|
BIN
src/common/assets/images/mlang_english.gif
Normal file
After Width: | Height: | Size: 175 B |
BIN
src/common/assets/images/mlang_japanese.gif
Normal file
After Width: | Height: | Size: 126 B |
BIN
src/common/assets/images/no_avatar.gif
Normal file
After Width: | Height: | Size: 985 B |
BIN
src/common/assets/images/pagact.gif
Normal file
After Width: | Height: | Size: 121 B |
BIN
src/common/assets/images/paginact.gif
Normal file
After Width: | Height: | Size: 121 B |
BIN
src/common/assets/images/pagneutral.gif
Normal file
After Width: | Height: | Size: 121 B |
BIN
src/common/assets/images/rank3dbf8e94a6f72.gif
Normal file
After Width: | Height: | Size: 905 B |
BIN
src/common/assets/images/rank3dbf8e9e7d88d.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/common/assets/images/rank3dbf8ea81e642.gif
Normal file
After Width: | Height: | Size: 894 B |
BIN
src/common/assets/images/rank3dbf8eb1a72e7.gif
Normal file
After Width: | Height: | Size: 856 B |
BIN
src/common/assets/images/rank3dbf8edf15093.gif
Normal file
After Width: | Height: | Size: 789 B |
BIN
src/common/assets/images/rank3dbf8ee8681cd.gif
Normal file
After Width: | Height: | Size: 779 B |
BIN
src/common/assets/images/rank3e632f95e81ca.gif
Normal file
After Width: | Height: | Size: 475 B |
BIN
src/common/assets/images/smil3dbd4bf386b36.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
src/common/assets/images/smil3dbd4d4e4c4f2.gif
Normal file
After Width: | Height: | Size: 204 B |
BIN
src/common/assets/images/smil3dbd4d6422f04.gif
Normal file
After Width: | Height: | Size: 174 B |
BIN
src/common/assets/images/smil3dbd4d75edb5e.gif
Normal file
After Width: | Height: | Size: 204 B |
BIN
src/common/assets/images/smil3dbd4d8676346.gif
Normal file
After Width: | Height: | Size: 176 B |
BIN
src/common/assets/images/smil3dbd4d99c6eaa.gif
Normal file
After Width: | Height: | Size: 207 B |
BIN
src/common/assets/images/smil3dbd4daabd491.gif
Normal file
After Width: | Height: | Size: 170 B |
BIN
src/common/assets/images/smil3dbd4dbc14f3f.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
src/common/assets/images/smil3dbd4dcd7b9f4.gif
Normal file
After Width: | Height: | Size: 278 B |
BIN
src/common/assets/images/smil3dbd4ddd6835f.gif
Normal file
After Width: | Height: | Size: 202 B |
BIN
src/common/assets/images/smil3dbd4df1944ee.gif
Normal file
After Width: | Height: | Size: 678 B |
BIN
src/common/assets/images/smil3dbd4e02c5440.gif
Normal file
After Width: | Height: | Size: 263 B |
BIN
src/common/assets/images/smil3dbd4e1748cc9.gif
Normal file
After Width: | Height: | Size: 209 B |
BIN
src/common/assets/images/smil3dbd4e29bbcc7.gif
Normal file
After Width: | Height: | Size: 492 B |
BIN
src/common/assets/images/smil3dbd4e398ff7b.gif
Normal file
After Width: | Height: | Size: 205 B |
BIN
src/common/assets/images/smil3dbd4e4c2e742.gif
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/common/assets/images/smil3dbd4e5e7563a.gif
Normal file
After Width: | Height: | Size: 736 B |
BIN
src/common/assets/images/smil3dbd4e7853679.gif
Normal file
After Width: | Height: | Size: 273 B |
17
src/common/assets/xoops.css
Normal file
@ -0,0 +1,17 @@
|
||||
img {border: 0;}
|
||||
|
||||
#xoopsHiddenText {visibility: hidden; color: #000000; font-weight: normal; font-style: normal; text-decoration: none;}
|
||||
|
||||
.pagneutral {font-size: 10px; width: 16px; height: 19px;text-align: center; background-image: url(./images/pagneutral.gif);}
|
||||
.pagact {font-size: 10px; width: 16px; height: 19px;text-align: center; background-image: url(./images/pagact.gif);}
|
||||
.paginact {font-size: 10px; width: 16px; height: 19px;text-align: center; background-image: url(./images/paginact.gif);}
|
||||
|
||||
|
||||
#mainmenu a {text-align:left; display: block; margin: 0; padding: 4px;}
|
||||
#mainmenu a.menuTop {padding-left: 3px;}
|
||||
#mainmenu a.menuMain {padding-left: 3px;}
|
||||
#mainmenu a.menuSub {padding-left: 9px;}
|
||||
|
||||
#usermenu a {text-align:left; display: block; margin: 0; padding: 4px;}
|
||||
#usermenu a.menuTop {}
|
||||
#usermenu a.highlight {color: #0000ff; background-color: #fcc;}
|
33
src/common/lib/LangFlag.tsx
Normal file
@ -0,0 +1,33 @@
|
||||
import React from "react";
|
||||
import { Link, useLocation } from "react-router-dom";
|
||||
import { MultiLang } from "../../config";
|
||||
import mlangEnglish from "../assets/images/mlang_english.gif";
|
||||
import mlangJapanese from "../assets/images/mlang_japanese.gif";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
className?: string;
|
||||
image?: string;
|
||||
}
|
||||
|
||||
const langResources = {
|
||||
en: { image: mlangEnglish, title: "English" },
|
||||
ja: { image: mlangJapanese, title: "Japanese" },
|
||||
};
|
||||
|
||||
const LangFlag: React.FC<Props> = (props: Props) => {
|
||||
const { lang, className, image } = props;
|
||||
const location = useLocation();
|
||||
const params = new URLSearchParams(location.search);
|
||||
const flagLang = lang === "en" ? "ja" : "en";
|
||||
params.set("ml_lang", flagLang);
|
||||
const url = location.pathname + "?" + params.toString();
|
||||
const imageSrc = image || langResources[flagLang].image;
|
||||
return (
|
||||
<Link className={className} to={url}>
|
||||
<img src={imageSrc} alt={langResources[flagLang].title} title={langResources[flagLang].title} />
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
|
||||
export default LangFlag;
|
12
src/common/lib/Loading.tsx
Normal file
@ -0,0 +1,12 @@
|
||||
import React from "react";
|
||||
import Spinner from "react-spinner-material";
|
||||
|
||||
const Loading: React.FC = () => {
|
||||
return (
|
||||
<div style={{ display: "flex", justifyContent: "center", alignContent: "center", margin: "100px 0" }}>
|
||||
<Spinner radius={60} color={"#cccccc"} stroke={8} visible={true} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Loading;
|
15
src/common/lib/NoticeSiteHasBeenArchived.tsx
Normal file
@ -0,0 +1,15 @@
|
||||
import React from "react";
|
||||
import { MultiLang } from "../../config";
|
||||
import Functions from "../../functions";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const NoticeSiteHasBeenArchived: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
const notice = "[en]This site has been archived since FY2019 and is no longer updated.[/en][ja]このサイトは、2019年度よりアーカイブサイトとして運用されています。[/ja]";
|
||||
return <p style={{ color: "red" }}>{Functions.mlang(notice, lang)}</p>;
|
||||
};
|
||||
|
||||
export default NoticeSiteHasBeenArchived;
|
50
src/common/lib/PageNotFound.tsx
Normal file
@ -0,0 +1,50 @@
|
||||
import React, { useEffect } from "react";
|
||||
import { Helmet } from "react-helmet-async";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
import { MultiLang } from "../../config";
|
||||
import Functions from "../../functions";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const PageNotFound: React.FC<Props> = (props) => {
|
||||
const { lang } = props;
|
||||
const location = useLocation();
|
||||
const navigate = useNavigate();
|
||||
const url = "/";
|
||||
|
||||
useEffect(() => {
|
||||
let timer: NodeJS.Timeout | null = null;
|
||||
if (location.pathname !== "/" && process.env.NODE_ENV === "production") {
|
||||
if (timer === null) {
|
||||
timer = setTimeout(() => {
|
||||
navigate(url);
|
||||
}, 5000);
|
||||
}
|
||||
}
|
||||
return () => {
|
||||
if (timer !== null) {
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
}
|
||||
};
|
||||
}, [location, navigate]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Helmet>
|
||||
<title>Page Not Found - {Functions.siteTitle(lang)}</title>
|
||||
</Helmet>
|
||||
<h1>Page Not Found</h1>
|
||||
<section>
|
||||
<p>The page you were trying to access doesn't exist.</p>
|
||||
<p>
|
||||
If the page does not automatically reload, please click <a href={url}>here</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default PageNotFound;
|
132
src/common/lib/XoopsCode.tsx
Normal file
@ -0,0 +1,132 @@
|
||||
import ReactHtmlParser, { convertNodeToElement, DomElement, DomNode, Transform } from "@orrisroot/react-html-parser";
|
||||
import React from "react";
|
||||
import { HashLink } from "react-router-hash-link";
|
||||
import { MultiLang } from "../../config";
|
||||
import Functions from "../../functions";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
text: string;
|
||||
dohtml?: boolean;
|
||||
dosmiley?: boolean;
|
||||
doxcode?: boolean;
|
||||
doimage?: boolean;
|
||||
dobr?: boolean;
|
||||
}
|
||||
|
||||
const preConvertXCode = (text: string, doxcode: boolean): string => {
|
||||
if (doxcode) {
|
||||
return text.replace(/\[code\](.*)\[\/code\]/gs, (m0, m1) => {
|
||||
return "[code]" + Functions.base64Encode(m1) + "[/code]";
|
||||
});
|
||||
}
|
||||
return text;
|
||||
};
|
||||
|
||||
const postConvertXCode = (text: string, doxcode: boolean, doimage: boolean): string => {
|
||||
if (doxcode) {
|
||||
return text.replace(/\[code\](.*)\[\/code\]/gs, (m0, m1) => {
|
||||
const text = convertXCode(Functions.htmlspecialchars(Functions.base64Decode(m1)), doimage);
|
||||
return '<div class="xoopsCode"><pre><code>' + text + "</code></pre></div>";
|
||||
});
|
||||
}
|
||||
return text;
|
||||
};
|
||||
|
||||
const convertClickable = (text: string) => {
|
||||
text = text.replace(/(^|[^\]_a-zA-Z0-9-="'/]+)((?:https?|ftp)(?::\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+[a-zA-Z0-9=]))/g, (...matches) => {
|
||||
return matches[1] + '<a href="' + matches[2] + '" target="_blank" rel="external noopener noreferrer">' + matches[2] + "</a>";
|
||||
});
|
||||
text = text.replace(/(^|[^\]_a-zA-Z0-9-="'/:.]+)([a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+)/g, (...matches) => {
|
||||
return matches[1] + '<a href="mailto:' + matches[2] + '">' + matches[2] + "</a>";
|
||||
});
|
||||
return text;
|
||||
};
|
||||
|
||||
const convertXCode = (text: string, doimage: boolean): string => {
|
||||
// TODO: implement
|
||||
return text;
|
||||
};
|
||||
|
||||
const convertSmiley = (text: string) => {
|
||||
// TODO: implement
|
||||
return text;
|
||||
};
|
||||
|
||||
const convertBr = (text: string): string => {
|
||||
return text.replace(/(\r?\n|\r)/g, "<br />");
|
||||
};
|
||||
|
||||
const cssConvert = (text: string): object => {
|
||||
const ret: any = {};
|
||||
text.split(";").forEach((line) => {
|
||||
const line_ = line.trim();
|
||||
if (line.length === 0) {
|
||||
return;
|
||||
}
|
||||
const kv = line_.split(":");
|
||||
const key = Functions.camelCase(kv[0].trim());
|
||||
const value = kv[1].trim();
|
||||
ret[key] = value;
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
||||
const xoopsTransform: Transform = (node: DomNode, index: number | string, transform?: Transform): React.ReactNode => {
|
||||
if (node.type === "tag") {
|
||||
const node_ = node as DomElement;
|
||||
if (node_.name === "a") {
|
||||
const url = node_.attribs?.["href"] || "/";
|
||||
const download = (node_.attribs && node_.attribs["download"]) || "";
|
||||
const rel = (node_.attribs && node_.attribs["rel"]) || "";
|
||||
const klass = (node_.attribs && node_.attribs["class"]) || "";
|
||||
const isFile = download !== "" || /\.(zip|pdf|png|gif|jpg)$/.test(url);
|
||||
const isExternal = /external/.test(rel) || /external/.test(klass) || /^(mailto|https?:?\/\/)/.test(url);
|
||||
if (!isFile && !isExternal) {
|
||||
const style = node_.attribs?.["style"] || "";
|
||||
const title = node_.attribs?.["title"];
|
||||
return (
|
||||
<HashLink key={index} to={url} style={cssConvert(style)} title={title}>
|
||||
{node_.children.map((value: DomNode, index: number) => {
|
||||
return convertNodeToElement(value, index, transform);
|
||||
})}
|
||||
</HashLink>
|
||||
);
|
||||
}
|
||||
}
|
||||
if (node_.name === "img") {
|
||||
const src = (node_.attribs && node_.attribs["src"]) || "";
|
||||
node_.attribs["src"] = src.replace("`XOOPS_URL`", process.env.PUBLIC_URL);
|
||||
return convertNodeToElement(node_, index, transform);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const XoopsCode: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
let text = props.text;
|
||||
const dohtml = !!props.dohtml;
|
||||
const dosmiley = !!props.dosmiley;
|
||||
const doxcode = !!props.doxcode;
|
||||
const doimage = !!props.doimage;
|
||||
const dobr = !!props.dobr;
|
||||
text = preConvertXCode(text, doxcode);
|
||||
if (!dohtml) {
|
||||
text = Functions.htmlspecialchars(text);
|
||||
text = convertClickable(text);
|
||||
}
|
||||
if (dosmiley) {
|
||||
text = convertSmiley(text);
|
||||
}
|
||||
if (doxcode) {
|
||||
text = convertXCode(text, doimage);
|
||||
}
|
||||
if (dobr) {
|
||||
text = convertBr(text);
|
||||
}
|
||||
text = postConvertXCode(text, doxcode, doimage);
|
||||
text = Functions.mlang(text, lang);
|
||||
return <div>{ReactHtmlParser(text, { transform: xoopsTransform })}</div>;
|
||||
};
|
||||
|
||||
export default XoopsCode;
|
15
src/config.ts
Normal file
@ -0,0 +1,15 @@
|
||||
const SITE_TITLE = "NeuroImaging Platform";
|
||||
const SITE_SLOGAN = "";
|
||||
const GOOGLE_ANALYTICS_TRACKING_ID = "UA-3757403-1";
|
||||
const XOONIPS_ITEMTYPES = ["book", "paper", "presentation", "data", "tool", "nimgcenter", "model", "url"];
|
||||
|
||||
export type MultiLang = "en" | "ja";
|
||||
|
||||
const Config = {
|
||||
SITE_TITLE,
|
||||
SITE_SLOGAN,
|
||||
GOOGLE_ANALYTICS_TRACKING_ID,
|
||||
XOONIPS_ITEMTYPES,
|
||||
};
|
||||
|
||||
export default Config;
|
47
src/credits/Credits.tsx
Normal file
@ -0,0 +1,47 @@
|
||||
import React from "react";
|
||||
import { Navigate, Route, Routes, useLocation } from "react-router-dom";
|
||||
import PageNotFound from "../common/lib/PageNotFound";
|
||||
import { MultiLang } from "../config";
|
||||
import CreditsIndex from "./CreditsIndex";
|
||||
import CreditsPage from "./CreditsPage";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const CreditsTop: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
const location = useLocation();
|
||||
const params = new URLSearchParams(location.search);
|
||||
const paramId = params.get("id");
|
||||
if (null === paramId) {
|
||||
return <CreditsIndex lang={lang} />;
|
||||
}
|
||||
if (/^[1-9][0-9]*$/.test(paramId)) {
|
||||
const id = parseInt(paramId, 10);
|
||||
return <CreditsPage lang={lang} id={id} />;
|
||||
}
|
||||
return <PageNotFound lang={lang} />;
|
||||
};
|
||||
|
||||
const CreditsRedirectToTop: React.FC = () => {
|
||||
const location = useLocation();
|
||||
const url = location.pathname + "index.php" + location.search + location.hash;
|
||||
return <Navigate to={url} />;
|
||||
};
|
||||
|
||||
const Credits: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<>
|
||||
<Routes>
|
||||
<Route path="" element={<CreditsRedirectToTop />} />
|
||||
<Route path="index.php" element={<CreditsTop lang={lang} />} />
|
||||
<Route path="aboutus.php" element={<CreditsPage lang={lang} id={0} />} />
|
||||
<Route path="*" element={<PageNotFound lang={lang} />} />
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default Credits;
|
59
src/credits/CreditsIndex.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Helmet } from "react-helmet-async";
|
||||
import { Link } from "react-router-dom";
|
||||
import Loading from "../common/lib/Loading";
|
||||
import NoticeSiteHasBeenArchived from "../common/lib/NoticeSiteHasBeenArchived";
|
||||
import PageNotFound from "../common/lib/PageNotFound";
|
||||
import { MultiLang } from "../config";
|
||||
import Functions from "../functions";
|
||||
import CreditsUtils, { CreditsIndexData } from "./lib/CreditsUtils";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const CreditsIndex: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
const [loading, setLoading] = useState<boolean>(true);
|
||||
const [index, setIndex] = useState<CreditsIndexData | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const updatePage = async () => {
|
||||
const index = await CreditsUtils.getIndex();
|
||||
setLoading(false);
|
||||
setIndex(index);
|
||||
};
|
||||
updatePage();
|
||||
}, [lang]);
|
||||
|
||||
if (loading) {
|
||||
return <Loading />;
|
||||
}
|
||||
if (null === index) {
|
||||
return <PageNotFound lang={lang} />;
|
||||
}
|
||||
const mtitle = Functions.mlang(index.name, lang);
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<title>
|
||||
{mtitle} - {Functions.siteTitle(lang)}
|
||||
</title>
|
||||
</Helmet>
|
||||
<h3>{mtitle}</h3>
|
||||
<NoticeSiteHasBeenArchived lang={lang} />
|
||||
<ul>
|
||||
{index.pages.map((page) => {
|
||||
const title = Functions.mlang(page.title, lang);
|
||||
const url = CreditsUtils.getPageUrl(page.id);
|
||||
return (
|
||||
<li key={page.id}>
|
||||
<Link to={url}>{title}</Link>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</>
|
||||
);
|
||||
};
|
||||
export default CreditsIndex;
|
62
src/credits/CreditsPage.tsx
Normal file
@ -0,0 +1,62 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Helmet } from "react-helmet-async";
|
||||
import Loading from "../common/lib/Loading";
|
||||
import NoticeSiteHasBeenArchived from "../common/lib/NoticeSiteHasBeenArchived";
|
||||
import PageNotFound from "../common/lib/PageNotFound";
|
||||
import XoopsCode from "../common/lib/XoopsCode";
|
||||
import { MultiLang } from "../config";
|
||||
import Functions from "../functions";
|
||||
import CreditsUtils, { CreditsIndexData, CreditsPageDetailData } from "./lib/CreditsUtils";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
id: number;
|
||||
}
|
||||
|
||||
const CreditsPage: React.FC<Props> = (props: Props) => {
|
||||
const { lang, id } = props;
|
||||
const [loading, setLoading] = useState<boolean>(true);
|
||||
const [index, setIndex] = useState<CreditsIndexData | null>(null);
|
||||
const [page, setPage] = useState<CreditsPageDetailData | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const updatePage = async () => {
|
||||
const index = await CreditsUtils.getIndex();
|
||||
const page = await CreditsUtils.getPage(id);
|
||||
setLoading(false);
|
||||
setIndex(index);
|
||||
setPage(page);
|
||||
};
|
||||
updatePage();
|
||||
}, [id]);
|
||||
|
||||
if (loading) {
|
||||
return <Loading />;
|
||||
}
|
||||
if (page === null || index === null) {
|
||||
return <PageNotFound lang={lang} />;
|
||||
}
|
||||
|
||||
const mtitle = Functions.mlang(index.name, lang);
|
||||
const title = Functions.mlang(page.title, lang);
|
||||
const lastupdate = page.lastupdate === 0 ? "" : Functions.formatDate(page.lastupdate, "MMMM Do, YYYY");
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<title>
|
||||
{title} - {mtitle} - {Functions.siteTitle(lang)}
|
||||
</title>
|
||||
</Helmet>
|
||||
<h3>{title}</h3>
|
||||
<NoticeSiteHasBeenArchived lang={lang} />
|
||||
{"" !== lastupdate && (
|
||||
<div style={{ textAlign: "right" }}>
|
||||
{Functions.mlang("[en]Last Update[/en][ja]最終更新日[/ja]", lang)} : {lastupdate}
|
||||
</div>
|
||||
)}
|
||||
<hr />
|
||||
<XoopsCode lang={lang} text={page.content} dohtml={true} />
|
||||
</>
|
||||
);
|
||||
};
|
||||
export default CreditsPage;
|
47
src/credits/blocks/CreditsMenu.tsx
Normal file
@ -0,0 +1,47 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import Loading from "../../common/lib/Loading";
|
||||
import PageNotFound from "../../common/lib/PageNotFound";
|
||||
import { MultiLang } from "../../config";
|
||||
import Functions from "../../functions";
|
||||
import CreditsUtils, { CreditsMenuData } from "../lib/CreditsUtils";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const CreditsMenu: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
const [loading, setLoading] = useState<boolean>(true);
|
||||
const [menu, setMenu] = useState<CreditsMenuData[] | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const updatePage = async () => {
|
||||
const menu = await CreditsUtils.getMenu();
|
||||
setLoading(false);
|
||||
setMenu(menu);
|
||||
};
|
||||
updatePage();
|
||||
}, [lang]);
|
||||
|
||||
if (loading) {
|
||||
return <Loading />;
|
||||
}
|
||||
if (menu === null || menu.length === 0) {
|
||||
return <PageNotFound lang={lang} />;
|
||||
}
|
||||
const links = menu.map((item, idx) => {
|
||||
const title = Functions.mlang(item.title, lang);
|
||||
const style = idx === 0 ? "menuTop" : "menuMain";
|
||||
return (
|
||||
<li key={idx}>
|
||||
<Link className={style} to={item.link}>
|
||||
{title}
|
||||
</Link>
|
||||
</li>
|
||||
);
|
||||
});
|
||||
return <ul className="mainmenu">{links}</ul>;
|
||||
};
|
||||
|
||||
export default CreditsMenu;
|
77
src/credits/lib/CreditsUtils.ts
Normal file
@ -0,0 +1,77 @@
|
||||
import axios from "axios";
|
||||
|
||||
export interface CreditsPageData {
|
||||
id: number;
|
||||
title: string;
|
||||
}
|
||||
|
||||
export interface CreditsPageDetailData extends CreditsPageData {
|
||||
content: string;
|
||||
lastupdate: number;
|
||||
}
|
||||
|
||||
export interface CreditsIndexData {
|
||||
name: string;
|
||||
pages: CreditsPageData[];
|
||||
}
|
||||
|
||||
export interface CreditsMenuData {
|
||||
title: string;
|
||||
link: string;
|
||||
}
|
||||
|
||||
class CreditsUtils {
|
||||
private pathname: string;
|
||||
private index?: CreditsIndexData | null;
|
||||
|
||||
constructor(path: string) {
|
||||
this.pathname = path;
|
||||
}
|
||||
|
||||
getIndexUrl(): string {
|
||||
return this.pathname + "/";
|
||||
}
|
||||
|
||||
getPageUrl(id: number): string {
|
||||
return this.getIndexUrl() + (0 === id ? "aboutus.php" : "?id=" + id);
|
||||
}
|
||||
|
||||
async getIndex(): Promise<CreditsIndexData | null> {
|
||||
if (typeof this.index === "undefined") {
|
||||
try {
|
||||
const url = this.getIndexUrl() + "index.json";
|
||||
const response = await axios.get(url);
|
||||
const index = response.data as CreditsIndexData;
|
||||
this.index = index;
|
||||
} catch (err) {
|
||||
this.index = null;
|
||||
}
|
||||
}
|
||||
return this.index;
|
||||
}
|
||||
|
||||
async getMenu(): Promise<CreditsMenuData[]> {
|
||||
const menu: CreditsMenuData[] = [];
|
||||
const index = await this.getIndex();
|
||||
if (index !== null) {
|
||||
index.pages.forEach((page) => {
|
||||
menu.push({ title: page.title, link: this.getPageUrl(page.id) });
|
||||
});
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
|
||||
async getPage(id: number): Promise<CreditsPageDetailData | null> {
|
||||
let page = null;
|
||||
try {
|
||||
const url = this.getIndexUrl() + id + ".json";
|
||||
const response = await axios.get(url);
|
||||
page = response.data as CreditsPageDetailData;
|
||||
} catch (err) {
|
||||
// ignore
|
||||
}
|
||||
return page;
|
||||
}
|
||||
}
|
||||
|
||||
export default new CreditsUtils("/modules/credits");
|
52
src/custom/Footer.tsx
Normal file
@ -0,0 +1,52 @@
|
||||
import React from "react";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import { HashLink } from "react-router-hash-link";
|
||||
import { MultiLang } from "../config";
|
||||
import imageBannerNiu from "./assets/images/banner-niu.png";
|
||||
import imageBannerRikenCbs from "./assets/images/banner-riken-cbs.png";
|
||||
import imageBannerRiken from "./assets/images/banner-riken.png";
|
||||
import imageBannerXoonips from "./assets/images/banner-xoonips.png";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const Footer: React.FC<Props> = (props: Props) => {
|
||||
const location = useLocation();
|
||||
return (
|
||||
<footer id="footer">
|
||||
<div className="pageTop">
|
||||
<HashLink to={`${location.pathname}${location.search}#page`}>
|
||||
<span className="hidden">Go Page Top</span>
|
||||
</HashLink>
|
||||
</div>
|
||||
<div className="link">
|
||||
<span>
|
||||
<a href="http://www.riken.jp/" title="RIKEN" target="_blank" rel="noopener noreferrer">
|
||||
<img src={imageBannerRiken} alt="RIKEN" />
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="https://cbs.riken.jp/" title="RIKEN Center for Brain Science" target="_blank" rel="noopener noreferrer">
|
||||
<img src={imageBannerRikenCbs} alt="RIKEN Center for Brain Science" />
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="https://www.ni.riken.jp/" title="Neuroinformatics Unit, RIKEN Center for Brain Science" target="_blank" rel="noopener noreferrer">
|
||||
<img src={imageBannerNiu} alt="Neuroinformatics Unit, RIKEN Center for Brain Science" />
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="http://xoonips.osdn.jp/" title="XooNIps" target="_blank" rel="noopener noreferrer">
|
||||
<img src={imageBannerXoonips} alt="XooNIps" />
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div className="copyright">
|
||||
<span>Copyright (C) 2018 Neuroinformatics Unit, RIKEN Center for Brain Science</span>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
};
|
||||
|
||||
export default Footer;
|
73
src/custom/Header.tsx
Normal file
@ -0,0 +1,73 @@
|
||||
import React from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import LangFlag from "../common/lib/LangFlag";
|
||||
import Config, { MultiLang } from "../config";
|
||||
import imageJnode from "./assets/images/jnode.png";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const Header: React.FC<Props> = (props: Props) => {
|
||||
return (
|
||||
<header id="header">
|
||||
<div className="logo">
|
||||
<Link to="/" title="Home">
|
||||
<span className="hidden">{Config.SITE_TITLE}</span>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="jnode">
|
||||
<a href="https://www.neuroinf.jp/" target="_blank" rel="noopener noreferrer" title="INCF Japan Node">
|
||||
<img src={imageJnode} alt="INCF Japan Node" />
|
||||
</a>
|
||||
</div>
|
||||
<nav className="menubar">
|
||||
<ul className="mainmenu">
|
||||
<li>
|
||||
<Link id="hmm01" to="/modules/nimgdocs/index.php?docname=about_NIMGPF" title="NIMG-PFの基本理念、委員会構成、取り扱い説明等を掲載しています。">
|
||||
NIMG-PFについて About This Site
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hmm02" to="/modules/xoonips/" title="データベースを検索することができます。">
|
||||
XooNIpsモード XooNIps database mode
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hmm03" to="/modules/nimgsearch/" title="脳図から関連する文献を検索することができます。">
|
||||
脳図検索モード search with Brain Atlas
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hmm04" to="/modules/nimgdocs/tutorials/" title="脳イメージングについて説明した教育資料を閲覧できます。">
|
||||
チュートリアル NIMG-PF Tutorials
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hsm01" to="/modules/xnpnimgcenter/utilities/" title="ユーティリティ">
|
||||
ユーティリティ Utilities
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hsm03" to="/modules/nimgdocs/index.php?docname=3DBrowse" title="日本人脳データ">
|
||||
日本人脳データ 3D Browse
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link id="hsm04" to="/modules/nimgdocs/index.php?docname=3DBrowse" title="日本ザル脳データ">
|
||||
日本ザル脳データ 3D Browse
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<div className="lang">
|
||||
<LangFlag lang="en" />
|
||||
<LangFlag lang="ja" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
|
||||
export default Header;
|
148
src/custom/Page.tsx
Normal file
@ -0,0 +1,148 @@
|
||||
import React from "react";
|
||||
import { Outlet, Route, Routes } from "react-router-dom";
|
||||
import BrainExplorerIndex from "../brainexplorer/BrainExplorer";
|
||||
import XoopsPathRedirect from "../common/XoopsPathRedirect";
|
||||
import { MultiLang } from "../config";
|
||||
import CreditsMenu from "../credits/blocks/CreditsMenu";
|
||||
import Credits from "../credits/Credits";
|
||||
import NimgcenterUtilities from "../nimgcenter/NimgenterUtilities";
|
||||
import Nimgdocs from "../nimgdocs/Nimgdocs";
|
||||
import Nimgsearch from "../nimgsearch/Nimgsearch";
|
||||
import IndexTree from "../xoonips/blocks/IndexTree";
|
||||
import Ranking from "../xoonips/blocks/Rankings";
|
||||
import RecentContents from "../xoonips/blocks/RecentContents";
|
||||
import Search2 from "../xoonips/blocks/Search";
|
||||
import Xoonips from "../xoonips/Xoonips";
|
||||
import BulletinBoard from "./blocks/BulletinBoard";
|
||||
import HowToUseLinks from "./blocks/HowToUseLinks";
|
||||
import HowToUseVideo from "./blocks/HowToUseVideo";
|
||||
import Information from "./blocks/Information";
|
||||
import Questionnaire from "./blocks/Questionnaire";
|
||||
import RecentStatus from "./blocks/RecentStatus";
|
||||
import Footer from "./Footer";
|
||||
import Header from "./Header";
|
||||
|
||||
interface Props {
|
||||
lang: MultiLang;
|
||||
}
|
||||
|
||||
const MainContent: React.FC<Props> = (props: Props) => {
|
||||
return (
|
||||
<div id="main">
|
||||
<div className="mainContent">
|
||||
<Outlet />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const CenterColumn: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<div id="centercolumn">
|
||||
<Outlet />
|
||||
<Routes>
|
||||
<Route path="/*" element={<MainContent lang={lang} />}>
|
||||
<Route path="modules/credits/*" element={<Credits lang={lang} />} />
|
||||
<Route path="modules/xoonips/*" element={<Xoonips lang={lang} />} />
|
||||
<Route path="modules/nimgdocs/*" element={<Nimgdocs lang={lang} />} />
|
||||
<Route path="modules/nimgsearch/*" element={<Nimgsearch lang={lang} />} />
|
||||
<Route path="modules/xnpnimgcenter/utilities/*" element={<NimgcenterUtilities lang={lang} />} />
|
||||
<Route path="modules/brainexplorer/*" element={<BrainExplorerIndex lang={lang} />} />
|
||||
<Route path="*" element={<XoopsPathRedirect lang={lang} />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const CenterColumnBlock: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<>
|
||||
<div id="centerCcolumn">
|
||||
<Information lang={lang} />
|
||||
<BulletinBoard lang={lang} />
|
||||
<HowToUseVideo lang={lang} />
|
||||
<HowToUseLinks lang={lang} />
|
||||
<Questionnaire lang={lang} />
|
||||
<RecentStatus lang={lang} />
|
||||
</div>
|
||||
<div className="col2">
|
||||
<div id="centerLcolumn">
|
||||
<div className="block">
|
||||
<div className="blockTitle">XooNIps Ranking</div>
|
||||
<div className="blockContent">
|
||||
<Ranking lang={lang} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="centerRcolumn">
|
||||
<div className="block">
|
||||
<div className="blockTitle">XooNIps Update</div>
|
||||
<div className="blockContent">
|
||||
<RecentContents lang={lang} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const LeftColumn: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<div id="leftcolumn">
|
||||
<Outlet />
|
||||
<div className="block">
|
||||
<div className="blockTitle">Index Tree</div>
|
||||
<div className="blockContent">
|
||||
<IndexTree lang={lang} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="block">
|
||||
<div className="blockTitle">Site Information</div>
|
||||
<div className="blockContent">
|
||||
<CreditsMenu lang={lang} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const XoopsSearchBlock: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<div className="block">
|
||||
<div className="blockTitle">Item Search</div>
|
||||
<div className="blockContent">
|
||||
<Search2 lang={lang} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const Page: React.FC<Props> = (props: Props) => {
|
||||
const { lang } = props;
|
||||
return (
|
||||
<div id="page">
|
||||
<Header lang={lang} />
|
||||
<div className="col2">
|
||||
<Routes>
|
||||
<Route path="/*" element={<CenterColumn lang={lang} />}>
|
||||
<Route index element={<CenterColumnBlock lang={lang} />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
<Routes>
|
||||
<Route path="/*" element={<LeftColumn lang={lang} />}>
|
||||
<Route path="modules/xoonips/*" element={<XoopsSearchBlock lang={lang} />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</div>
|
||||
<Footer lang={lang} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
BIN
src/custom/assets/images/back.png
Normal file
After Width: | Height: | Size: 569 B |
BIN
src/custom/assets/images/banner-niu.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/custom/assets/images/banner-riken-cbs.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
src/custom/assets/images/banner-riken.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
src/custom/assets/images/banner-xoonips.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/custom/assets/images/blockTitle.png
Normal file
After Width: | Height: | Size: 633 B |
BIN
src/custom/assets/images/blockTitleBack.png
Normal file
After Width: | Height: | Size: 98 B |
BIN
src/custom/assets/images/blockTitleIndent12.png
Normal file
After Width: | Height: | Size: 269 B |
BIN
src/custom/assets/images/blockTitleIndent16.png
Normal file
After Width: | Height: | Size: 310 B |
BIN
src/custom/assets/images/footer_back.png
Normal file
After Width: | Height: | Size: 187 B |
BIN
src/custom/assets/images/h1_indent.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/custom/assets/images/h2_background.png
Normal file
After Width: | Height: | Size: 98 B |
BIN
src/custom/assets/images/jnode.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
src/custom/assets/images/logo.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
src/custom/assets/images/mlang_english.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/custom/assets/images/mlang_japanese.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
src/custom/assets/images/mmenu_01.png
Normal file
After Width: | Height: | Size: 3.7 KiB |