9 Commits
Author SHA1 Message Date
Yoshihiro OKUMURA 15c4f3093f docs: update the paths for the new directory layout
The repository now sits next to static-contents/ under a per-site
directory, so the symlinks are relative and the data no longer lives
under /data.

- point the public/ symlinks at ../../static-contents
- describe the surrounding layout
- link xoops-static-exporter by URL rather than a relative path
2026-09-11 16:40:00 +09:00
Yoshihiro OKUMURA 4ddad68439 chore: drop the stale dl-limit-items.csv ignore rule
The dump script that writes it now lives in xoops-static-exporter and
writes under its own data/ directory, so the file never appears here.
2026-09-11 16:24:17 +09:00
Yoshihiro OKUMURA bed2435ba2 build: follow the vite react-ts template and clear the build warnings
The config files had drifted from what `npm create vite` scaffolds, and
the build printed two warnings on every run.

- drop tsconfig options that are redundant or no longer used
  (resolveJsonModule, esModuleInterop, useDefineForClassFields, ...)
  and move both projects to ES2023
- keep erasableSyntaxOnly off for src: SortConditionOrderDir is an enum
- keep strict on, which the current template omits
- externalise fs so lokijs stops warning about it
- split node_modules into a vendor chunk, which puts every chunk back
  under the 500 kB warning threshold without raising the limit
- emit nested files under public/, which the previous flat walk dropped
  without reporting them
2026-09-11 15:25:49 +09:00
Yoshihiro OKUMURA a6a98b755a refactor: clear the biome warnings inherited from the CRA code
The five rules downgraded when Biome was introduced are now satisfied,
so the linter runs on the plain recommended preset.

- type the LokiJS filters through a shared ItemFilter and cast once at
  the call into loki, instead of `any` at every construction site
- join author lists into a string so they no longer need element keys;
  key the remaining lists by label, type or value
- render newline separated roles with white-space: pre-line
- pair the hover handlers with onFocus/onBlur, name the 404 link target
  and associate the date field label with its checkbox
- drop the stale files.includes entries, and exclude the archive
  symlinks rather than all of public/ so manifest.json is formatted
2026-09-11 15:03:19 +09:00
Yoshihiro OKUMURA f84be5504e chore: update dependencies to the latest versions
- react / react-dom / @types/react / @types/react-dom to 19.3.0
- vite to 8.3.0
- @biomejs/biome to 2.5.13 (schema URL in biome.json follows)
2026-09-11 14:46:40 +09:00
Yoshihiro OKUMURA 99515ab8e2 build: keep the archive data out of the build output
The converted XOOPS data is served straight from the archive storage,
but publicDir copied all 1.1 GB of it into dist/ on every build.

- turn off build.copyPublicDir and emit only the real files in public/,
  which skips the symlinks pointing at the archive
- document that the server must symlink the archive into the document
  root; an Alias would bypass .htaccess and break the legacy XOOPS URLs
2026-09-10 18:18:26 +09:00
Yoshihiro OKUMURA b7fa3a74cc fix: redirect legacy /database/file URLs to the new location
Moving the XooNIps payloads under /modules/xoonips/ broke inbound
links to the previous download URLs, which are cited from outside the
site.
2026-09-10 18:15:23 +09:00
Yoshihiro OKUMURA d8747ee7b3 feat: migrate from Create React App to Vite
The CRA toolchain was several major versions behind and no longer
maintained, so the whole build, lint and runtime stack is replaced.
Converted XOOPS data also moves out of the bundle into the archive
storage so the repository holds only source.

- replace react-scripts with Vite 8 and TypeScript 7
- upgrade to React 19 and react-router 7 (declarative mode)
- swap unmaintained libraries: react-html-parser, axios, react-ga,
  react-image-lightbox, react-helmet, moment, xregexp
- replace ESLint with Biome for linting and formatting
- switch the package manager from yarn to npm
- load tree/simpf-links/news/dbtools/publication JSON at runtime from
  modules/<module>/ instead of importing them into the bundle
- move XooNIps files to /modules/xoonips/file/ and update .htaccess
2026-09-10 18:13:54 +09:00
Yoshihiro OKUMURA f4ef258dd5 chore: move XOOPS conversion tools to xoops-static-exporter
The dump scripts under etc/ are shared with the other archived sites,
so they now live in a dedicated repository instead of being
duplicated per site.
2026-09-10 18:13:45 +09:00
174 changed files with 6109 additions and 16750 deletions
+24 -27
View File
@@ -1,32 +1,29 @@
# 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
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.eslintcache
pnpm-debug.log*
lerna-debug.log*
# database contents
/dl-limit-items.csv
/public/database
node_modules
dist
dist-ssr
coverage
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Converted XOOPS data, symlinked in from the archive storage
/public/modules
/public/uploads
/src/database/assets/*.json
/src/customs/assets/*.json
+65 -24
View File
@@ -1,44 +1,85 @@
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
# BSI-Neuroinformatics
## Available Scripts
RIKEN BSI Research Database Portal — a [Vite](https://vite.dev/) + React + TypeScript single page application.
In the project directory, you can run:
## Requirements
### `npm start`
- Node.js 22.22.2+ / 24.15+ / 26+ (developed on Node 24)
- npm
Runs the app in the development mode.<br>
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
## Setup
The page will reload if you make edits.<br>
You will also see any lint errors in the console.
```sh
npm install
```
### `npm test`
The converted XOOPS data (`modules/`, `uploads/`) is not tracked in git and is not part of the
build. Symlink it into `public/` so the dev server can serve it:
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.
```sh
ln -s ../../static-contents/modules public/modules
ln -s ../../static-contents/uploads public/uploads
```
That assumes the repository is checked out next to `static-contents/`:
```
bsi-ni.brain.riken.jp/
├── bsi-ni.brain.riken.jp/ this repository
└── static-contents/ modules/ and uploads/
```
That data is produced by [xoops-static-exporter](https://git.ni.riken.jp/niu/xoops-static-exporter)
(`sites/bsi-ni.brain.riken.jp/`).
## Scripts
### `npm run dev`
Starts the Vite dev server on [http://localhost:5173](http://localhost:5173) with hot module replacement.
### `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.
Type-checks the project (`tsc -b`) and builds the production bundle into `dist/`.
The build is minified and the filenames include the hashes.<br>
Your app is ready to be deployed!
### `npm run preview`
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
Serves the contents of `dist/` locally to verify a production build.
### `npm run eject`
### `npm run typecheck`
**Note: this is a one-way operation. Once you `eject`, you cant go back!**
Runs the TypeScript project references build without emitting output.
If you arent 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.
### `npm run lint` / `npm run format` / `npm run check`
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 youre on your own.
Runs [Biome](https://biomejs.dev/) (`biome.json`): `lint` reports problems, `format` rewrites
formatting, and `check` applies both plus import sorting.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.
## Deployment
`npm run build` writes a static bundle to `dist/` (a few MB). The archive data is deliberately left
out of it: `build.copyPublicDir` is off and only the real files in `public/` are emitted, so the
symlinked `modules/` and `uploads/` are skipped.
On the server, place `dist/` at the document root and symlink the archive data into it:
```sh
ln -s /path/to/archive/modules /var/www/bsi-ni/modules
ln -s /path/to/archive/uploads /var/www/bsi-ni/uploads
```
Apache needs `Options FollowSymLinks` and `Require all granted` on the archive directory.
Use symlinks rather than `Alias`. An `Alias /modules ...` maps the URL outside the document root,
so `public/.htaccess` no longer applies to it and every legacy `/modules/<module>/*.php` URL stops
reaching the SPA redirect handler. With symlinks the existing precedence still holds: real files
are served directly, everything else falls through to `index.html`.
Because the app uses HTML5 history routing, the web server must fall back to `index.html` for
unknown paths — see `public/.htaccess`.
## 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/).
- [Vite documentation](https://vite.dev/guide/)
- [React documentation](https://react.dev/)
- [React Router documentation](https://reactrouter.com/)
+39
View File
@@ -0,0 +1,39 @@
{
"$schema": "https://biomejs.dev/schemas/2.5.13/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"includes": ["**", "!**/dist", "!public/modules", "!public/uploads", "!src/common/assets"]
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 4,
"lineWidth": 120
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"jsxQuoteStyle": "double",
"semicolons": "always",
"trailingCommas": "es5",
"arrowParentheses": "always"
}
},
"linter": {
"enabled": true,
"rules": {
"preset": "recommended"
}
},
"assist": {
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}
-197
View File
@@ -1,197 +0,0 @@
<?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)
{
$textutil = xoonips_getutility('text');
foreach ($data as $k => $v) {
if (is_string($v)) {
$v = $textutil->html_numeric_entities($v);
$v = mb_decode_numericentity($v, array(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,
'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);
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)) {
exit('Failed to create directory: '.$path.PHP_EOL);
}
}
}
public static function saveJson($fname, $data)
{
$path = MYDUMPTOOL_OUTPUTDIR.'/'.$fname;
if (false === file_put_contents($path, json_encode($data, JSON_UNESCAPED_UNICODE))) {
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) {
exit('Failed to download file, 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 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;
}
}
-9
View File
@@ -1,9 +0,0 @@
<?php
$mainfile = '/data/www/html/mainfile.php';
$XOONIPS_SIMPF_LINKFILE = __DIR__.'/simpflink.csv';
#$XOOPS_MODULE_D3FORUM = ['forum'];
$XOOPS_MODULE_PICO = ['dbtools', 'news', 'about', 'publication', 'contact', 'page'];
define('XOONIPS_RANNKING_LIMIT', 10);
-166
View File
@@ -1,166 +0,0 @@
<?php
require_once __DIR__.'/common.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);
$config = [];
foreach ($XOOPS_MODULE_PICO as $pico) {
dumpPico($pico, $config);
}
MyDumpTool::makeDirectory('src/pico');
MyDumpTool::makeDirectory('src/pico/assets');
MyDumpTool::saveJson('src/pico/assets/config.json', $config);
function dumpPico($pico, &$config)
{
global $xoopsDB;
$prefix = $xoopsDB->prefix();
$table = $pico.'_contents';
if (!MyDumpTool::tableExists($table)) {
exit('pico('.$pico.') module not found'.PHP_EOL);
}
MyDumpTool::makeDirectory('public/'.$pico);
MyDumpTool::makeDirectory('public/'.$pico.'/images');
$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 = [];
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);
$content = MyDumpTool::fixHtml($data['body_cached']);
$imageId = 1;
$dataId = [];
$content = preg_replace_callback('/<img ([^>]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use (&$imageId, $pico, $data, $link) {
$url = $matches[2];
if (!preg_match('/^http/', $url)) {
if (preg_match('/^\//', $url)) {
$url = XOOPS_URL.$url;
} else {
$xpath = dirname($link);
$url = XOOPS_URL.'/modules/'.$pico.'/'.$xpath.'/'.$url;
}
}
$fname = '/'.$pico.'/images/'.$data['id'].'_'.$imageId.'.dat';
$fpath = MYDUMPTOOL_OUTPUTDIR.'/public'.$fname;
MyDumpTool::fileDownload($url, $fpath);
$mime = MyDumpTool::getMimeType($fpath);
switch ($mime) {
case 'image/gif':
$fpath_ = preg_replace('/.dat$/', '.gif', $fpath);
$fname = preg_replace('/.dat$/', '.gif', $fname);
rename($fpath, $fpath_);
$fpath = $fpath_;
break;
case 'image/png':
$fpath_ = preg_replace('/.dat$/', '.png', $fpath);
$fname = preg_replace('/.dat$/', '.png', $fname);
rename($fpath, $fpath_);
$fpath = $fpath_;
break;
case 'image/jpeg':
$fpath_ = preg_replace('/.dat$/', '.jpeg', $fpath);
$fname = preg_replace('/.dat$/', '.jpeg', $fname);
rename($fpath, $fpath_);
$fpath = $fpath_;
break;
default:
exit('unknown mime type '.$mime.' found: '.$fname.' from '.$url.PHP_EOL);
}
++$imageId;
return '<img '.$matches[1].'src="'.$fname.'"'.$matches[3].'/>';
}, $content);
$content = preg_replace_callback('/<a ([^>]*)href="([^"]+)"([^>]*)>/Us', function ($matches) use (&$dataId, $pico, $data, $link) {
$url = $matches[2];
if (preg_match('/^(.+)\/([^\/]+\.pdf)(\?.+)?$/', $url, $m)) {
if (!isset($dataId[$m[1]])) {
$dataId[$m[1]] = count($dataId) + 1;
}
$id = $dataId[$m[1]];
$fname = '/'.$pico.'/data/'.$data['id'].'/'.$id.'/'.urldecode($m[2]);
$fpath = MYDUMPTOOL_OUTPUTDIR.'/public'.$fname;
if (!file_exists($fpath)) {
MyDumpTool::makeDirectory('public/'.$pico.'/data');
MyDumpTool::makeDirectory('public/'.$pico.'/data/'.$data['id']);
MyDumpTool::makeDirectory('public/'.$pico.'/data/'.$data['id'].'/'.$id);
if (preg_match('/^\//', $url)) {
$url = XOOPS_URL.$url;
}
MyDumpTool::fileDownload($url, $fpath);
}
$url = '/'.$pico.'/data/'.$data['id'].'/'.$id.'/'.$m[2];
}
return '<a '.$matches[1].'href="'.$url.'"'.$matches[3].'>';
}, $content);
$item = [
'id' => $data['id'],
'title' => $data['subject_raw'],
'content' => $content,
'created' => $data['created_time'],
'last_update' => $data['modified_time'],
'extra' => pico_common_unserialize($data['extra_fields']),
];
MyDumpTool::saveJson('public/'.$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,
];
}
-1176
View File
File diff suppressed because it is too large Load Diff
-92
View File
@@ -1,92 +0,0 @@
<?php
require_once __DIR__.'/common.inc.php';
if (!isset($XOOPS_MODULE_PICO) || empty($XOOPS_MODULE_PICO)) {
exit('Not configured for pico module'.PHP_EOL);
}
$config_fpath = __DIR__.'/data/src/pico/assets/config.json';
if (!file_exists($config_fpath)) {
die('config file not found'.PHP_EOL);
}
$config = json_decode(file_get_contents($config_fpath), true);
MyDumpTool::makeDirectory('dist');
MyDumpTool::makeDirectory('dist/src');
MyDumpTool::makeDirectory('dist/src/custom');
MyDumpTool::makeDirectory('dist/src/custom/assets');
MyDumpTool::makeDirectory('dist/public');
MyDumpTool::makeDirectory('dist/public/uploads');
// news
$news = array_pop(array_filter($config, function ($module) {return $module['module']['dirname'] === 'news';}));
$data = [];
foreach ($news['contents'] as $meta) {
if ($meta['cat_id'] !== 1) {
continue;
}
$content = json_decode(file_get_contents(__DIR__.'/data/public/news/'.$meta['id'].'.json'), true);
$data[] = [
'id' => $meta['id'],
'title' => $meta['title'],
'date' => date('Y.m.d', $content['created']),
'content' => str_replace('/news/data/40/1/BSI-NI_access201803.pdf', '/uploads/BSI-NI_access201803.pdf', $content['content']),
];
}
$fname = '/uploads/BSI-NI_access201803.pdf';
$ifpath = XOOPS_ROOT_PATH.$fname;
$ofpath = __DIR__.'/data/dist/public'.$fname;
MyDumpTool::fileCopy($ifpath, $ofpath);
file_put_contents(__DIR__.'/data/dist/src/custom/assets/news.json', json_encode($data, JSON_UNESCAPED_UNICODE));
// dbtools
MyDumpTool::makeDirectory('dist/public/uploads/dbtools');
$dbtools = array_pop(array_filter($config, function ($module) {return $module['module']['dirname'] === 'dbtools';}));
$data = [];
foreach ($dbtools['contents'] as $meta) {
if ($meta['cat_id'] !== 1) {
continue;
}
$content = json_decode(file_get_contents(__DIR__.'/data/public/dbtools/'.$meta['id'].'.json'), true);
$summary = trim(preg_replace('/<\/?p[^>]*>/', '', $content['content']));
$summary = trim(preg_replace('/\s+/', ' ', $summary));
$summary = trim(preg_replace('/(?:\s+)?\[\/(ja|en)\]\s+\[(ja|en)\](?:\s+)?/', '[/\1][\2]', $summary));
$image0 = '/uploads/dbtools/imagefile_0_'.$content['extra']['imagefile'];
$ifpath = XOOPS_ROOT_PATH.$image0;
$ofpath = __DIR__.'/data/dist/public'.$image0;
MyDumpTool::fileCopy($ifpath, $ofpath);
$image1 = '/uploads/dbtools/imagefiles_1_'.$content['extra']['imagefiles'];
$ifpath = XOOPS_ROOT_PATH.$image1;
$ofpath = __DIR__.'/data/dist/public'.$image1;
MyDumpTool::fileCopy($ifpath, $ofpath);
$data[] = [
'id' => $meta['id'],
'title' => $meta['title'],
'summary' => $summary,
'type' => $content['extra']['databaseortool'] == 1 ? 'database' : 'tool',
'jnode' => $content['extra']['kind'] == 2 ? true : false,
'group' => $content['extra']['contactgroup'],
'person' => $content['extra']['contactperson'],
'email' => $content['extra']['contactemail'],
'url' => $content['extra']['url'],
'image0' => $image0,
'image1' => $image1,
];
}
file_put_contents(__DIR__.'/data/dist/src/custom/assets/dbtools.json', json_encode($data, JSON_UNESCAPED_UNICODE));
// page
MyDumpTool::makeDirectory('dist/public/uploads/page');
$page = array_pop(array_filter($config, function ($module) {return $module['module']['dirname'] === 'page';}));
foreach ($page['contents'] as $meta) {
$content = json_decode(file_get_contents(__DIR__.'/data/public/page/'.$meta['id'].'.json'), true);
$image0 = '/uploads/page/imagefile_0_'.$content['extra']['imagefile'];
$ifpath = XOOPS_ROOT_PATH.$image0;
$ofpath = __DIR__.'/data/dist/public'.$image0;
MyDumpTool::fileCopy($ifpath, $ofpath);
}
//var_dump($config);
//data/public/dbtools/15.json
-17
View File
@@ -1,17 +0,0 @@
<?php
require_once __DIR__.'/common.inc.php';
MyDumpTool::makeDirectory('dist/src/database');
MyDumpTool::makeDirectory('dist/src/database/assets');
MyDumpTool::makeDirectory('dist/public/database');
$ifpath = __DIR__.'/data/public/database/';
$ofpath = __DIR__.'/data/dist/public/database/';
MyDumpTool::fileCopy($ifpath, $ofpath);
$ifpath = __DIR__.'/data/src/database/assets/tree.json';
$ofpath = __DIR__.'/data/dist/src/database/assets/tree.json';
MyDumpTool::fileCopy($ifpath, $ofpath);
//var_dump($config);
//data/public/dbtools/15.json
-465
View File
@@ -1,465 +0,0 @@
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
1 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6045 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=25
2 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=909 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=27
3 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1648 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=28
4 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=913 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=29
5 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1623 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=30
6 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1620 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=32
7 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=896 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=33
8 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2434 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=34
9 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2441 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=35
10 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5307 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=37
11 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?id=943 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=38
12 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=403 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=39
13 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=398 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=40
14 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=350 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=41
15 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=366 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=43
16 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=370 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=44
17 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=361 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=45
18 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=4449054b http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=46
19 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6110 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=47
20 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=7252867b http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=48
21 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6105 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=49
22 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=2861 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=50
23 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=16625198b http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=51
24 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6422 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=52
25 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=19281836b http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=53
26 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=7941380b http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=54
27 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6448 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=55
28 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=6106 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=56
29 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1027 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=57
30 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1030 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=58
31 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1031 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=59
32 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1033 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=61
33 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1034 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=62
34 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1035 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=63
35 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1036 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=64
36 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1037 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=65
37 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1038 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=66
38 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1041 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=67
39 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1042 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=68
40 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1043 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=69
41 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1044 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=70
42 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1045 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=71
43 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1046 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=72
44 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1047 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=73
45 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1048 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=74
46 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1051 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=76
47 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1052 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=77
48 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1054 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=78
49 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1056 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=79
50 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1057 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=80
51 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1059 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=81
52 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1060 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=82
53 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1061 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=83
54 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1062 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=84
55 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1064 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=85
56 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1065 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=86
57 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1066 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=87
58 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1067 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=114
59 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1068 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=116
60 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1069 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=117
61 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1071 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=119
62 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1073 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=121
63 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1076 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=124
64 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1077 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=125
65 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1078 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=126
66 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1079 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=127
67 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=296 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=128
68 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5586 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=129
69 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=297 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=130
70 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1080 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=131
71 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1081 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=132
72 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1082 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=133
73 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1084 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=134
74 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1085 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=135
75 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1086 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=136
76 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1087 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=137
77 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1088 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=138
78 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1089 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=139
79 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1098 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=140
80 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1099 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=141
81 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1100 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=142
82 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1101 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=143
83 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1102 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=144
84 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1103 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=145
85 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1105 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=146
86 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1106 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=147
87 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1107 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=148
88 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1108 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=149
89 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1109 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=150
90 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1110 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=151
91 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1111 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=152
92 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1112 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=153
93 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1113 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=154
94 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1114 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=155
95 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1115 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=156
96 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1119 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=159
97 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1120 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=160
98 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1121 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=161
99 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1122 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=162
100 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1123 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=163
101 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1124 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=164
102 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1125 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=165
103 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1127 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=167
104 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1128 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=168
105 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1129 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=169
106 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1130 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=170
107 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1131 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=171
108 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1132 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=172
109 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1134 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=174
110 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1135 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=175
111 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1136 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=176
112 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1137 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=177
113 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1138 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=178
114 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1139 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=179
115 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1140 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=180
116 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1141 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=181
117 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1142 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=182
118 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1143 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=183
119 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1144 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=184
120 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1146 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=186
121 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1147 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=187
122 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1148 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=188
123 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1149 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=189
124 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1150 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=190
125 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1152 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=192
126 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1153 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=193
127 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1154 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=194
128 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1156 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=195
129 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1157 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=196
130 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1159 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=198
131 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1160 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=199
132 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1161 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=200
133 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1162 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=201
134 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1163 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=202
135 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1164 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=203
136 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1165 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=204
137 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1166 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=205
138 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1167 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=206
139 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1168 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=207
140 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1169 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=208
141 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1170 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=209
142 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1171 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=210
143 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1173 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=212
144 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1174 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=213
145 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1175 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=214
146 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1176 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=215
147 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1177 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=216
148 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1178 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=217
149 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1179 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=218
150 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1180 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=219
151 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1181 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=220
152 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1182 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=221
153 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1183 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=222
154 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1184 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=223
155 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1185 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=224
156 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1186 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=225
157 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1187 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=226
158 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1188 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=227
159 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1189 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=228
160 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1190 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=229
161 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1191 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=230
162 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1192 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=231
163 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1193 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=232
164 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=15929656d http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=233
165 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=376 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=234
166 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=298 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=235
167 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1629 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=236
168 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=1647 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=237
169 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1209 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=239
170 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1210 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=240
171 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1211 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=241
172 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1212 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=242
173 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1213 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=243
174 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1214 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=244
175 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1215 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=245
176 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1216 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=246
177 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1218 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=248
178 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1219 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=249
179 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1220 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=250
180 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1222 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=251
181 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1223 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=252
182 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1224 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=253
183 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1225 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=254
184 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1226 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=255
185 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1227 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=256
186 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1228 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=257
187 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1230 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=258
188 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1231 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=259
189 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1232 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=260
190 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1233 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=261
191 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1234 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=262
192 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1235 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=263
193 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1236 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=264
194 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1237 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=265
195 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1238 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=266
196 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1239 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=267
197 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1240 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=268
198 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1241 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=269
199 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1242 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=270
200 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1243 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=271
201 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1244 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=272
202 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1245 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=273
203 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1246 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=274
204 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1247 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=275
205 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1248 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=276
206 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1251 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=279
207 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1252 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=280
208 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1255 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=281
209 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1256 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=282
210 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1257 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=283
211 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1258 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=284
212 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1262 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=286
213 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1263 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=287
214 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1264 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=288
215 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1265 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=289
216 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1266 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=290
217 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1268 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=292
218 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1269 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=293
219 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1270 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=294
220 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1271 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=295
221 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1272 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=296
222 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1273 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=297
223 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1278 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=302
224 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1279 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=303
225 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1280 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=304
226 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1281 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=305
227 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1282 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=306
228 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1283 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=307
229 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1284 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=308
230 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1285 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=309
231 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1286 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=310
232 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1287 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=311
233 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1288 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=312
234 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1289 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=313
235 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1291 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=315
236 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1292 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=316
237 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1293 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=317
238 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1294 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=318
239 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1295 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=319
240 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1296 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=320
241 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1298 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=322
242 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1299 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=323
243 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1300 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=324
244 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1302 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=326
245 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1306 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=330
246 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1312 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=336
247 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1313 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=337
248 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1314 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=338
249 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1315 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=339
250 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=162 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=341
251 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5936 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=342
252 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/558/weaverWearne06.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=360
253 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?id=4449054c http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=367
254 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1039 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=416
255 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1040 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=417
256 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=7051 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=444
257 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1427 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=485
258 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1425 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=486
259 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1424 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=487
260 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1423 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=488
261 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1422 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=489
262 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1421 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=490
263 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1420 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=491
264 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1419 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=492
265 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1418 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=493
266 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1417 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=494
267 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1416 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=496
268 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=497
269 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=498
270 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1414 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=499
271 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1363 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=500
272 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1413 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=501
273 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1411 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=502
274 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=503
275 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1365 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=504
276 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1369 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=505
277 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1408 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=506
278 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1406 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=507
279 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=511
280 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=514
281 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1367 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=515
282 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1366 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=516
283 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1405 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=517
284 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=518
285 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1401 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=519
286 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=520
287 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1368 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=521
288 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1399 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=523
289 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1370 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=524
290 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1398 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=525
291 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1371 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=526
292 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1397 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=527
293 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1396 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=528
294 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1372 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=529
295 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1373 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=530
296 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1374 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=531
297 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1375 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=532
298 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1376 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=533
299 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1380 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=534
300 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1395 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=535
301 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1394 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=536
302 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1393 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=537
303 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1392 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=538
304 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1391 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=539
305 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1390 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=540
306 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1389 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=541
307 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1387 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=542
308 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1386 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=543
309 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1385 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=544
310 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1384 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=545
311 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1382 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=546
312 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1381 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=547
313 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1362 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=550
314 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1363 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=551
315 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1364 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=552
316 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1365 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=553
317 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1366 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=554
318 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1367 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=555
319 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1368 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=556
320 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1369 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=557
321 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1370 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=558
322 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1371 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=559
323 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1372 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=560
324 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1374 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=562
325 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1375 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=563
326 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1376 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=564
327 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1379 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=565
328 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1380 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=566
329 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1381 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=567
330 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1382 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=568
331 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1384 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=569
332 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1385 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=571
333 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1386 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=572
334 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1387 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=573
335 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1045 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=574
336 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1389 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=575
337 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1390 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=576
338 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1391 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=577
339 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1392 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=578
340 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1393 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=579
341 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1394 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=580
342 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1395 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=581
343 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1396 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=582
344 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1397 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=583
345 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1398 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=584
346 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1399 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=585
347 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1400 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=586
348 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1401 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=587
349 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1402 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=588
350 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1405 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=589
351 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=590
352 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1409 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=591
353 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1411 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=592
354 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1413 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=593
355 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1414 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=594
356 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1415 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=595
357 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1416 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=596
358 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1418 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=598
359 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1419 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=599
360 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1420 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=600
361 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1421 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=601
362 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1422 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=602
363 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1423 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=603
364 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1424 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=604
365 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1425 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=605
366 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1427 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=606
367 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1428 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=607
368 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1429 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=608
369 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1430 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=609
370 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1431 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=610
371 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1432 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=611
372 visiome https://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=7252 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=612
373 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1434 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=613
374 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1435 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=614
375 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1450 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=615
376 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1452 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=616
377 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1453 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=617
378 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1454 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=618
379 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1455 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=619
380 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1458 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=620
381 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1460 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=621
382 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1461 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=622
383 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1462 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=623
384 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1463 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=624
385 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1466 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=625
386 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1465 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=626
387 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1467 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=627
388 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1470 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=628
389 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1471 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=629
390 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1472 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=630
391 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1473 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=631
392 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1474 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=632
393 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1476 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=633
394 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1477 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=634
395 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1479 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=635
396 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1481 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=636
397 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1482 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=637
398 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1483 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=638
399 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1486 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=639
400 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1487 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=640
401 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1488 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=641
402 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1489 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=642
403 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1490 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=643
404 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1493 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=644
405 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1496 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=645
406 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1497 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=646
407 cerebellum https://cerebellum.neuroinf.jp/modules/xoonips/detail.php?item_id=1498 http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=647
408 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/533/SundtEtAl2015.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=656
409 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
410 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/538/CS56PyModelDB.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=659
411 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/539/TCconvergenceModel.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=660
412 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/540/BahlEtAl2012.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=661
413 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
414 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
415 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/548/GentilettiEtAl2016.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=668
416 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
417 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/560/ShepherdBrayton1979.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=680
418 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
419 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/564/VladimirovTuTraub2012.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=683
420 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/565/xiaoshenli.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=684
421 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
422 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
423 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/569/Schizophr.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=687
424 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/570/SaudargieneEtAl2015.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=688
425 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/571/bpap.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=689
426 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/572/magical7.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=691
427 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/575/HyunEtAl2015.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=696
428 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
429 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
430 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/582/AshhadNarayanan2013.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=699
431 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/583/DiFrancescoNoble1985.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=700
432 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/584/DGC.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=701
433 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
434 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
435 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
436 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/589/SousaEtAl2014.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=706
437 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/590/MiglioreEtAl2015.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=707
438 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
439 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
440 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/595/Moore2015.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=711
441 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
442 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
443 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/600/2VN.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=716
444 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
445 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
446 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/606/CA3Atrophy.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=722
447 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
448 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
449 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/613/Demo.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=728
450 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/614/ShortEtAl2016.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=729
451 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/618/Casaleggio2014.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=733
452 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/623/MiglioreMcTavish2013.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=736
453 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/624/KimEtAl2017.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=737
454 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/626/fig1b.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=738
455 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
456 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/629/oltedal.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=741
457 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
458 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
459 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
460 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/640/moore83.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=751
461 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/642/SpaceClampDemo.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=753
462 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/644/anderson.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=755
463 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/645/VNO.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=756
464 cns https://cns.neuroinf.jp/modules/fmanager/index.php/view/645/VNO.zip http://sim.neuroinf.jp/modules/xoonips/detail.php?item_id=757
465 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
+4 -3
View File
@@ -1,8 +1,8 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="shortcut icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
@@ -13,11 +13,12 @@
<meta name="keywords" content="neuroinformatics, bsi, bsi-ni, brain science, xoonips, database" />
<meta name="author" content="RIKEN Brain Science Institute" />
<meta name="copyright" content="Copyright &copy; 2018" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="manifest" href="/manifest.json" />
<title>BSI-Neuroinformatics - RIKEN BSI Research Database Portal</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
+1947
View File
File diff suppressed because it is too large Load Diff
+39 -57
View File
@@ -1,59 +1,41 @@
{
"name": "bsi-ni",
"version": "1.0.0",
"private": true,
"dependencies": {
"@types/async-lock": "^1.1.2",
"@types/jest": "26.0.23",
"@types/lokijs": "^1.5.4",
"@types/node": "15.6.1",
"@types/react": "17.0.8",
"@types/react-dom": "17.0.5",
"@types/react-helmet": "^6.1.1",
"@types/react-html-parser": "^2.0.1",
"@types/react-router-dom": "^5.1.7",
"@types/react-router-hash-link": "^2.4.0",
"async-lock": "^1.3.0",
"axios": "^0.21.1",
"lokijs": "^1.5.12",
"moment": "^2.29.1",
"react": "^17.0.2",
"react-app-polyfill": "^2.0.0",
"react-cookie": "^4.0.3",
"react-dom": "^17.0.2",
"react-ga": "^3.3.0",
"react-helmet": "^6.1.0",
"react-html-parser": "^2.0.2",
"react-image-lightbox": "^5.1.1",
"react-overlays": "^5.0.1",
"react-router-dom": "^5.2.0",
"react-router-hash-link": "^2.4.3",
"react-scripts": "4.0.3",
"react-spinner-material": "^1.3.1",
"typescript": "4.3.2",
"xregexp": "^5.0.2"
},
"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",
"ie 11"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version",
"ie 11"
]
}
"name": "bsi-ni",
"version": "2.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview",
"lint": "biome lint",
"format": "biome format --write",
"check": "biome check --write",
"typecheck": "tsc -b --noEmit"
},
"dependencies": {
"@dr.pogodin/react-helmet": "^3.2.3",
"@orrisroot/react-html-parser": "^3.0.1",
"async-lock": "^1.4.1",
"ky": "^2.1.0",
"lokijs": "^1.5.12",
"normalize.css": "^8.0.1",
"react": "^19.3.0",
"react-cookie": "^8.1.2",
"react-dom": "^19.3.0",
"react-ga4": "^3.0.1",
"react-overlays": "^5.2.1",
"react-router": "^8.3.1",
"yet-another-react-lightbox": "^3.32.2"
},
"devDependencies": {
"@biomejs/biome": "^2.5.13",
"@types/async-lock": "^1.4.2",
"@types/lokijs": "^1.5.14",
"@types/node": "^24.13.3",
"@types/react": "^19.3.0",
"@types/react-dom": "^19.3.0",
"@vitejs/plugin-react": "^6.1.1",
"typescript": "~7.0.2",
"vite": "^8.3.0"
}
}
+4 -1
View File
@@ -2,7 +2,10 @@ RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} (^|&)file_id=([0-9]+)($|&)
RewriteRule ^modules/xoonips/download.php /database/file/%2? [R=301,L]
RewriteRule ^modules/xoonips/download.php /modules/xoonips/file/%2? [R=301,L]
# File downloads moved under /modules/xoonips/ ; keep the old links alive.
RewriteRule ^database/file/(.*)$ /modules/xoonips/file/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
+13 -13
View File
@@ -1,15 +1,15 @@
{
"short_name": "BSI-NI",
"name": "BSI Neuroinformatics Research Database",
"icons": [
{
"src": "favicon.ico",
"sizes": "32x32 24x24",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
"short_name": "BSI-NI",
"name": "BSI Neuroinformatics Research Database",
"icons": [
{
"src": "favicon.ico",
"sizes": "32x32 24x24",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
+2 -2
View File
@@ -1,2 +1,2 @@
@import url('./common/assets/xoops.css');
@import url('./common/assets/theme/style.css');
@import url("./common/assets/xoops.css");
@import url("./common/assets/theme/style.css");
-9
View File
@@ -1,9 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
});
+11 -9
View File
@@ -1,17 +1,19 @@
import React from 'react';
import { HelmetProvider } from '@dr.pogodin/react-helmet';
import { CookiesProvider } from 'react-cookie';
import { BrowserRouter } from 'react-router-dom';
import { BrowserRouter } from 'react-router';
import './App.css';
import AppRoot from './common/AppRoot';
const App: React.FC = () => {
const App = () => {
return (
<CookiesProvider>
<BrowserRouter>
<AppRoot />
</BrowserRouter>
</CookiesProvider>
<HelmetProvider>
<CookiesProvider>
<BrowserRouter>
<AppRoot />
</BrowserRouter>
</CookiesProvider>
</HelmetProvider>
);
}
};
export default App;
+49 -61
View File
@@ -1,78 +1,66 @@
import React, { Component } from 'react';
import { ReactCookieProps, withCookies } from 'react-cookie';
import ReactGA from 'react-ga';
import { RouteComponentProps, withRouter } from 'react-router-dom';
import Config, { MultiLang } from '../config';
import { useEffect, useRef } from 'react';
import { useCookies } from 'react-cookie';
import ReactGA from 'react-ga4';
import { useLocation } from 'react-router';
import Config, { type MultiLang } from '../config';
import Footer from './Footer';
import Header from './Header';
import MainContent from './MainContent';
const isAnalyticsEnabled = import.meta.env.PROD && Config.GOOGLE_ANALYTICS_TRACKING_ID !== '';
interface Props extends RouteComponentProps, ReactCookieProps { }
interface State {
lang: MultiLang;
if (isAnalyticsEnabled) {
ReactGA.initialize(Config.GOOGLE_ANALYTICS_TRACKING_ID);
}
class AppRoot extends Component<Props, State> {
const toMultiLang = (value: unknown): MultiLang | null => {
return value === 'en' || value === 'ja' ? value : null;
};
constructor(props: Props) {
super(props);
this.state = { lang: 'en' };
if (process.env.NODE_ENV === 'production' && Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') {
ReactGA.initialize(Config.GOOGLE_ANALYTICS_TRACKING_ID);
}
}
const AppRoot = () => {
const location = useLocation();
const [cookies, setCookie] = useCookies(['ml_lang']);
const previousLocation = useRef<string | null>(null);
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
const params = new URLSearchParams(nextProps.location.search);
const param_lang = params.get('ml_lang');
const cookie_lang = typeof nextProps.cookies !== 'undefined' ? nextProps.cookies.get('ml_lang') : null;
let lang = param_lang || (typeof cookie_lang === 'string' ? cookie_lang : null) || prevState.lang;
if (lang !== 'en' && lang !== 'ja') {
lang = 'en';
const paramLang = toMultiLang(new URLSearchParams(location.search).get('ml_lang'));
const cookieLang = toMultiLang(cookies.ml_lang);
const lang: MultiLang = paramLang ?? cookieLang ?? 'en';
useEffect(() => {
if (cookies.ml_lang !== lang) {
setCookie('ml_lang', lang, { path: '/' });
}
if (cookie_lang !== lang) {
if (typeof nextProps.cookies !== 'undefined') {
nextProps.cookies.set('ml_lang', lang, { path: '/' });
}, [cookies.ml_lang, lang, setCookie]);
useEffect(() => {
if (isAnalyticsEnabled) {
ReactGA.send({ hitType: 'pageview', page: location.pathname });
}
const current = location.pathname + location.search + location.hash;
const changed = previousLocation.current !== null && previousLocation.current !== current;
previousLocation.current = current;
if (location.hash !== '') {
// React Router does not restore hash anchors on its own.
const target = document.getElementById(decodeURIComponent(location.hash.slice(1)));
if (target !== null) {
target.scrollIntoView();
return;
}
}
if (prevState.lang !== lang) {
return { lang };
}
return null;
}
componentDidMount() {
const { pathname } = this.props.location;
if (process.env.NODE_ENV === 'production' && Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') {
ReactGA.set({ page: pathname });
ReactGA.pageview(pathname);
}
}
componentDidUpdate(prevProps: Props) {
const { pathname, search } = this.props.location;
if (process.env.NODE_ENV === 'production' && Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') {
ReactGA.set({ page: pathname });
ReactGA.pageview(pathname);
}
if (pathname !== prevProps.location.pathname || search !== prevProps.location.search) {
if (changed) {
window.scrollTo(0, 0);
}
}
}, [location.pathname, location.search, location.hash]);
render() {
const { lang } = this.state;
return (
<div id="page">
<Header lang={lang} />
<div id="main">
<MainContent lang={lang} />
</div>
<Footer lang={lang} />
return (
<div id="page">
<Header lang={lang} />
<div id="main">
<MainContent lang={lang} />
</div>
);
}
}
<Footer />
</div>
);
};
export default withCookies(withRouter(AppRoot));
export default AppRoot;
+31 -23
View File
@@ -1,40 +1,48 @@
import React from 'react';
import { MultiLang } from '../config';
import bannerJNODE from './assets/theme/images/banner_incf-japan-node.png';
import bannerINCF from './assets/theme/images/banner_incf.png';
import bannerNIU from './assets/theme/images/banner_riken-cbs-niu.png';
import bannerCBS from './assets/theme/images/banner_riken-cbs.png';
import bannerJNODE from './assets/theme/images/banner_incf-japan-node.png';
import bannerRIKEN from './assets/theme/images/banner_riken.png';
import bannerCBS from './assets/theme/images/banner_riken-cbs.png';
import bannerNIU from './assets/theme/images/banner_riken-cbs-niu.png';
import bannerXOONIPS from './assets/theme/images/banner_xoonips.png';
interface Props {
lang: MultiLang;
}
const links = [
{title: 'RIKEN', url: 'http://www.riken.jp/', image: bannerRIKEN},
{title: 'RIKEN Center for Brain Science', url: 'https://cbs.riken.jp/', image: bannerCBS},
{title: 'Neuroinformatics Unit, RIKEN Center for Brain Science', url: 'https://www.ni.riken.jp/', image: bannerNIU},
{title: 'INCF Japan Node', url: 'https://www.neuroinf.jp/', image: bannerJNODE},
{title: 'INCF', url: 'https://www.incf.org/', image: bannerINCF},
{title: 'XooNIps Offical Site', url: 'https://xoonips.osdn.jp/', image: bannerXOONIPS},
]
{ title: 'RIKEN', url: 'http://www.riken.jp/', image: bannerRIKEN },
{ title: 'RIKEN Center for Brain Science', url: 'https://cbs.riken.jp/', image: bannerCBS },
{
title: 'Neuroinformatics Unit, RIKEN Center for Brain Science',
url: 'https://www.ni.riken.jp/',
image: bannerNIU,
},
{ title: 'INCF Japan Node', url: 'https://www.neuroinf.jp/', image: bannerJNODE },
{ title: 'INCF', url: 'https://www.incf.org/', image: bannerINCF },
{ title: 'XooNIps Offical Site', url: 'https://xoonips.osdn.jp/', image: bannerXOONIPS },
];
const Footer: React.FC<Props> = (props: Props) => {
const Footer = () => {
return (
<footer id="footer" className="clearfix">
<div className="copyright">
&copy; 2007-2018 RIKEN Brain Science Institute,<br />
&copy; 2007-2018 RIKEN Brain Science Institute,
<br />
&copy; 2018- RIKEN Center for Brain Science, All rights reserved.
</div>
<div className="links">
{links.map((item)=> {
return <a key={item.title} href={item.url} title={item.title} target="_blank" rel="noopener noreferrer"><img src={item.image} alt={item.title} /></a>
{links.map((item) => {
return (
<a
key={item.title}
href={item.url}
title={item.title}
target="_blank"
rel="noopener noreferrer"
>
<img src={item.image} alt={item.title} />
</a>
);
})}
</div>
</footer>
);
}
};
export default Footer;
export default Footer;
+23 -13
View File
@@ -1,19 +1,19 @@
import React from 'react';
import { Link, RouteComponentProps, withRouter } from 'react-router-dom';
import Config, { MultiLang } from '../config';
import { Link, useLocation } from 'react-router';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
interface Props extends RouteComponentProps {
interface Props {
lang: MultiLang;
}
const Header: React.FC<Props> = (props: Props) => {
const { lang, location } = props;
const Header = (props: Props) => {
const { lang } = props;
const location = useLocation();
const params = new URLSearchParams(location.search);
const nextLang = lang === 'en' ? 'ja' : 'en';
const nextLangTitle = lang === 'en' ? '日本語' : 'English';
params.set('ml_lang', nextLang);
const nextLangUrl = location.pathname + '?' + params.toString();
const nextLangUrl = `${location.pathname}?${params.toString()}`;
const links = [
{ title: 'Home', link: '/' },
{ title: '[en]Databases & Tools[/en][ja]データベース・ツール[/ja]', link: '/dbtools' },
@@ -21,23 +21,33 @@ const Header: React.FC<Props> = (props: Props) => {
{ title: '[en]About BSI-NI[/en][ja]プロジェクト概要[/ja]', link: '/about' },
{ title: '[en]Related Publications[/en][ja]関連論文[/ja]', link: '/publication' },
{ title: '[en]Contact[/en][ja]お問い合わせ先[/ja]', link: '/contact' },
]
];
return (
<header id="header">
<div className="main-visual">
<Link className="title-link" to="/"><span className="hidden">{Config.SITE_TITLE}</span></Link>
<Link className="title-link" to="/">
<span className="hidden">{Config.SITE_TITLE}</span>
</Link>
</div>
<div className="nav">
<ul className="global-nav">
{links.map((item) => {
return <li key={item.title}><Link to={item.link}>{Functions.mlang(item.title, lang)}</Link></li>
return (
<li key={item.title}>
<Link to={item.link}>{Functions.mlang(item.title, lang)}</Link>
</li>
);
})}
</ul>
<div className="lang-nav"><Link className={`lang-nav-${nextLang}`} to={nextLangUrl}><span className="hidden">{nextLangTitle}</span></Link></div>
<div className="lang-nav">
<Link className={`lang-nav-${nextLang}`} to={nextLangUrl}>
<span className="hidden">{nextLangTitle}</span>
</Link>
</div>
</div>
</header>
);
}
};
export default withRouter(Header);
export default Header;
+32 -28
View File
@@ -1,6 +1,5 @@
import React from 'react';
import { Route, RouteComponentProps, Switch } from 'react-router-dom';
import { MultiLang } from '../config';
import { Route, Routes, useParams } from 'react-router';
import type { MultiLang } from '../config';
import About from '../custom/About';
import Contact from '../custom/Contact';
import DbTools from '../custom/DbTools';
@@ -18,36 +17,41 @@ interface Props {
lang: MultiLang;
}
const MainContent: React.FC<Props> = (props: Props) => {
const PageRoute = (props: Props) => {
const { lang } = props;
const { id: rawId } = useParams<{ id: string }>();
const id = rawId === '6' ? 6 : rawId === '9' ? 9 : 0;
if (id === 0) {
return <PageNotFound lang={lang} />;
}
return <Page lang={lang} id={id} />;
};
const MainContent = (props: Props) => {
const { lang } = props;
return (
<div className="mainContent">
<Switch>
<Route exact path="/" render={() => <WhatsNew lang={lang} />} />
</Switch>
<Routes>
<Route path="/" element={<WhatsNew lang={lang} />} />
{/* React Router warns about unmatched locations, so opt out explicitly. */}
<Route path="*" element={null} />
</Routes>
<div className="block">
<Switch>
<Route exact path="/" render={() => <DbToolsTop lang={lang} />} />
<Route path="/dbtools" render={() => <DbTools lang={lang} />} />
<Route path="/news" render={() => <News lang={lang} />} />
<Route path="/about" render={() => <About lang={lang} />} />
<Route path="/publication" render={() => <Publication lang={lang} />} />
<Route path="/contact" render={() => <Contact lang={lang} />} />
<Route path='/database' render={() => <Database lang={lang} />} />
<Route path='/page/:id' render={(props: RouteComponentProps<{ id: string }>) => {
const {match} = props;
const id = match.params.id === '6' ? 6 : (match.params.id === '9' ? 9 : 0);
if (id === 0) {
return <PageNotFound lang={lang} />
}
return <Page lang={lang} id={id} />;
}} />
<Route path="/modules/xoonips" render={() => <DatabaseXoopsPathRedirect lang={lang} />} />
<Route component={XoopsPathRedirect} />
</Switch>
<Routes>
<Route path="/" element={<DbToolsTop lang={lang} />} />
<Route path="/dbtools/*" element={<DbTools lang={lang} />} />
<Route path="/news/*" element={<News lang={lang} />} />
<Route path="/about/*" element={<About lang={lang} />} />
<Route path="/publication/*" element={<Publication lang={lang} />} />
<Route path="/contact/*" element={<Contact lang={lang} />} />
<Route path="/database/*" element={<Database lang={lang} />} />
<Route path="/page/:id" element={<PageRoute lang={lang} />} />
<Route path="/modules/xoonips/*" element={<DatabaseXoopsPathRedirect lang={lang} />} />
<Route path="*" element={<XoopsPathRedirect lang={lang} />} />
</Routes>
</div>
</div>
);
}
};
export default MainContent;
export default MainContent;
+34 -49
View File
@@ -1,60 +1,45 @@
import React, { Component } from 'react';
import { Redirect, RouteComponentProps } from 'react-router';
import { MultiLang } from '../config';
import { Navigate, useLocation } from 'react-router';
import type { MultiLang } from '../config';
import PageNotFound from './lib/PageNotFound';
interface Params {
module: string;
pathname: string;
}
interface Props extends RouteComponentProps<Params> {
interface Props {
lang: MultiLang;
}
class XoopsPathRedirect extends Component<Props> {
getRedirectUrl() {
const { pathname, search } = this.props.location;
const query = new URLSearchParams(search);
switch (pathname || '') {
case '/index.php': {
return '/';
}
case '/modules/dbtools/index.php': {
return '/dbtools';
}
case '/modules/news/index.php': {
return '/news';
}
case '/modules/about/index.php': {
return '/about';
}
case '/modules/publication/index.php': {
return '/publication';
}
case '/modules/contact/index.php': {
return '/contact';
}
case '/modules/page/index.php': {
const id = query.get('content_id') || '';
return `/page/${id}`;
}
const getRedirectUrl = (pathname: string, search: string): string => {
const query = new URLSearchParams(search);
switch (pathname || '') {
case '/index.php':
return '/';
case '/modules/dbtools/index.php':
return '/dbtools';
case '/modules/news/index.php':
return '/news';
case '/modules/about/index.php':
return '/about';
case '/modules/publication/index.php':
return '/publication';
case '/modules/contact/index.php':
return '/contact';
case '/modules/page/index.php': {
const id = query.get('content_id') || '';
return `/page/${id}`;
}
return '';
}
return '';
};
render() {
const { lang } = this.props;
if (this.props.location.pathname === '/') {
return null;
}
const url = this.getRedirectUrl();
if (url === '') {
return <PageNotFound lang={lang} />;
}
return <Redirect to={url} />;
const XoopsPathRedirect = (props: Props) => {
const { lang } = props;
const location = useLocation();
if (location.pathname === '/') {
return null;
}
}
const url = getRedirectUrl(location.pathname, location.search);
if (url === '') {
return <PageNotFound lang={lang} />;
}
return <Navigate to={url} replace />;
};
export default XoopsPathRedirect;
+310 -306
View File
@@ -1,23 +1,23 @@
*,
*::before,
*::after {
box-sizing: border-box;
box-sizing: border-box;
}
html,
body,
#root,
#page {
height: 100%;
width: 100%;
height: 100%;
width: 100%;
}
body {
font-family: arial, sans-serif;
color: #333333;
background-color: #ffffff;
margin: 0;
font-size: 80%;
font-family: arial, sans-serif;
color: #333333;
background-color: #ffffff;
margin: 0;
font-size: 80%;
}
h1,
@@ -26,593 +26,597 @@ h3,
h4,
h5,
h6 {
margin-bottom: 0.5rem;
font-family: inherit;
font-weight: bold;
line-height: 1.2;
color: inherit;
margin-bottom: 0.5rem;
font-family: inherit;
font-weight: bold;
line-height: 1.2;
color: inherit;
}
h1 {
font-size: 1.802em;
/*
font-size: 1.802em;
/*
background: url(images/indent_h1.png) no-repeat left center;
text-indent: 40px;
*/
}
h2 {
font-size: 1.602em;
/*
font-size: 1.602em;
/*
background: url(images/indent_h2.png) no-repeat left center;
text-indent: 30px;
*/
}
h3 {
font-size: 1.424em;
/*
font-size: 1.424em;
/*
background: url(images/indent_h3.png) no-repeat left center;
text-indent: 25px;
*/
}
h4 {
font-size: 1.266em;
font-size: 1.266em;
}
h5 {
font-size: 1.125em;
font-size: 1.125em;
}
h6 {
font-size: 1em;
font-size: 1em;
}
a {
color: #333333;
text-decoration: none;
color: #333333;
text-decoration: none;
}
a:visited {
color: #333333;
color: #333333;
}
a:hover {
color: #ff3333;
color: #ff3333;
}
p {
font-size: 93%;
font-size: 93%;
}
hr {
border-width: 1px 0px 0px 0px;
border-style: solid;
border-color: #cccccc;
height: 1px;
border-width: 1px 0px 0px 0px;
border-style: solid;
border-color: #cccccc;
height: 1px;
}
ul,
ol {
padding-left: 1.5em;
padding-left: 1.5em;
}
table {
width: 100%;
width: 100%;
}
td,
th {
text-align: left;
vertical-align: top;
text-align: left;
vertical-align: top;
}
th {
padding: 3px;
vertical-align: middle;
font-weight: normal;
color: #666;
border-bottom: 1px solid #ccc;
background: #eee;
padding: 3px;
vertical-align: middle;
font-weight: normal;
color: #666;
border-bottom: 1px solid #ccc;
background: #eee;
}
tr.even td {
padding: 2px;
padding: 2px;
}
tr.odd td {
padding: 2px;
padding: 2px;
}
tr.even {
color: inherit;
background: #f7f7f7;
color: inherit;
background: #f7f7f7;
}
tr.odd {
color: inherit;
background: #fafafa;
color: inherit;
background: #fafafa;
}
tr.odd:hover,
tr.even:hover {
color: #000;
border-bottom: 1px solid #cacaca;
background: #dfdfdf;
color: #000;
border-bottom: 1px solid #cacaca;
background: #dfdfdf;
}
.outer {
border: 1px solid #eee;
border: 1px solid #eee;
}
.head {
padding: 5px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #f2f2f2;
padding: 5px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #f2f2f2;
}
.even {
padding: 2px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #f7f7f7;
padding: 2px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #f7f7f7;
}
.odd {
padding: 2px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #fafafa;
padding: 2px;
color: inherit;
border-bottom: 1px solid #cacaca;
background: #fafafa;
}
.foot {
padding: 5px;
font-weight: bold;
padding: 5px;
font-weight: bold;
}
.clearfix::after {
content: "";
display: block;
clear: both;
content: "";
display: block;
clear: both;
}
.hidden {
display: none;
display: none;
}
.text-center {
text-align: center;
text-align: center;
}
.text-left {
text-align: left;
text-align: left;
}
.text-right {
text-align: right;
text-align: right;
}
.font-weight-bold {
font-weight: bold;
font-weight: bold;
}
.font-italic {
font-style: italic;
font-style: italic;
}
.block .blockTitle {
height: 21px;
margin-bottom: 0.4rem;
padding: 0 10px 0 32px;
color: #369;
line-height: 21px;
font-weight: bold;
height: 21px;
margin-bottom: 0.4rem;
padding: 0 10px 0 32px;
color: #369;
line-height: 21px;
font-weight: bold;
}
.block .blockContent {
padding: 0 10px;
padding: 0 10px;
}
#main {
width: 902px;
margin: 10px auto;
line-height: 1.5;
border: 1px solid #c2c7c7;
background-color: #e2e7e7;
width: 902px;
margin: 10px auto;
line-height: 1.5;
border: 1px solid #c2c7c7;
background-color: #e2e7e7;
}
.mainContent {
margin: 10px;
margin: 10px;
}
.block {
padding: 10px;
margin-bottom: 10px;
border: 1px solid #c2c7c7;
background-color: #fff;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #c2c7c7;
background-color: #fff;
}
#header {
background: url(images/header_background.png) repeat-x;
background: url(images/header_background.png) repeat-x;
}
#header .main-visual {
margin: 0 auto;
width: 902px;
height: 175px;
background-image: url(images/header_main.png);
margin: 0 auto;
width: 902px;
height: 175px;
background-image: url(images/header_main.png);
}
#header .main-visual .title-link {
display: inline-block;
width: 420px;
height: 100px;
display: inline-block;
width: 420px;
height: 100px;
}
#header .nav {
margin: 0 auto;
height: 40px;
width: 902px;
margin: 0 auto;
height: 40px;
width: 902px;
}
#header .global-nav {
float: left;
margin: 0;
padding: 0 2px;
overflow: hidden;
background: url(images/header_global-nav-separator.png) no-repeat;
float: left;
margin: 0;
padding: 0 2px;
overflow: hidden;
background: url(images/header_global-nav-separator.png) no-repeat;
}
#main .global-nav::after {
content: "";
display: block;
clear: both;
content: "";
display: block;
clear: both;
}
#header .global-nav li {
display: inline-block;
height: 40px;
padding: 0 2px 0 0;
background: url(images/header_global-nav-separator.png) no-repeat right;
display: inline-block;
height: 40px;
padding: 0 2px 0 0;
background: url(images/header_global-nav-separator.png) no-repeat right;
}
#header .global-nav li a {
display: inline-block;
height: 40px;
padding: 0 8px;
line-height: 40px;
display: inline-block;
height: 40px;
padding: 0 8px;
line-height: 40px;
}
#header .lang-nav {
float: right;
position: relative;
top: 13px;
float: right;
position: relative;
top: 13px;
}
#header .lang-nav a {
display: inline-block;
height: 11px;
background-image: url(images/header_lang-nav.png);
display: inline-block;
height: 11px;
background-image: url(images/header_lang-nav.png);
}
#header .lang-nav a.lang-nav-ja {
width: 37px;
background-position: 0 0;
width: 37px;
background-position: 0 0;
}
#header .lang-nav a.lang-nav-ja:hover {
background-position: 0 -11px;
background-position: 0 -11px;
}
#header .lang-nav a.lang-nav-en {
width: 50px;
background-position: -37px 0;
width: 50px;
background-position: -37px 0;
}
#header .lang-nav a.lang-nav-en:hover {
background-position: -37px -11px;
background-position: -37px -11px;
}
#footer {
margin: 0 auto;
width: 902px;
margin: 0 auto;
width: 902px;
}
#footer .copyright {
float: left;
font-size: 13px;
float: left;
font-size: 13px;
}
#footer .links {
float: right;
float: right;
}
#footer .links a {
display: inline-block;
margin: 0 5px;
display: inline-block;
margin: 0 5px;
}
#main a {
text-decoration: underline;
text-decoration: underline;
}
#main section {
margin: 1em 0.5em;
margin: 1em 0.5em;
}
#main section p {
margin-left: 5px;
margin-right: 5px;
margin-left: 5px;
margin-right: 5px;
}
#main h2 {
margin: 0.8rem 0 0.5rem;
position: relative;
padding-left: 20px;
border: 1px solid #cccccc;
border-radius: 3px;
background: linear-gradient(#ffffff 0%, #eeeeee 100%);
box-shadow: inset -1px -1px 0 rgba(255, 255, 255, 1);
font-size: 123.1%;
font-weight: bold;
line-height: 37px;
height: 37px;
margin: 0.8rem 0 0.5rem;
position: relative;
padding-left: 20px;
border: 1px solid #cccccc;
border-radius: 3px;
background: linear-gradient(#ffffff 0%, #eeeeee 100%);
box-shadow: inset -1px -1px 0 rgba(255, 255, 255, 1);
font-size: 123.1%;
font-weight: bold;
line-height: 37px;
height: 37px;
}
#main h2::after {
position: absolute;
top: 50%;
left: 10px;
transform: translateY(-50%);
content: "";
width: 2px;
height: 24px;
background-color: #c40018;
position: absolute;
top: 50%;
left: 10px;
transform: translateY(-50%);
content: "";
width: 2px;
height: 24px;
background-color: #c40018;
}
#main h3 {
margin-left: 5px;
background: url(images/h3-bullet.png) no-repeat left center;
text-indent: 16px;
line-height: 20px;
padding: 0 0 5px 0;
font-size: 108%;
height: 24px;
border-bottom: 3px double #cccccc;
margin-left: 5px;
background: url(images/h3-bullet.png) no-repeat left center;
text-indent: 16px;
line-height: 20px;
padding: 0 0 5px 0;
font-size: 108%;
height: 24px;
border-bottom: 3px double #cccccc;
}
#main .whatsnew::after {
content: "";
display: block;
clear: both;
content: "";
display: block;
clear: both;
}
#main .whatsnew .title {
float: left;
width: 130px;
float: left;
width: 130px;
}
#main .whatsnew .title h3 {
font-weight: 123.1%;
line-height: 24px;
border-bottom: none;
font-weight: 123.1%;
line-height: 24px;
border-bottom: none;
}
#main .whatsnew .news {
float: left;
border-left: 1px dotted #cccccc;
width: calc(100% - 150px);
float: left;
border-left: 1px dotted #cccccc;
width: calc(100% - 150px);
}
#main .whatsnew .title .more {
margin: 0.3em 20px;
padding-left: 5px;
background: url(images/more-bullet.png) no-repeat left center;
margin: 0.3em 20px;
padding-left: 5px;
background: url(images/more-bullet.png) no-repeat left center;
}
#main .whatsnew .title .more a {
color: #22528d;
color: #22528d;
}
#main .whatsnew .title .more a:hover {
color: #ff3333;
color: #ff3333;
}
#main .whatsnew .news ul {
padding-left: 10px;
width: 100%;
padding-left: 10px;
width: 100%;
}
#main .whatsnew .news ul li {
list-style: none;
white-space: nowrap;
height: 35px;
line-height: 35px;
border-top: 1px dotted #cccccc;
font-size: 93%;
list-style: none;
white-space: nowrap;
height: 35px;
line-height: 35px;
border-top: 1px dotted #cccccc;
font-size: 93%;
}
#main .whatsnew .news ul li:last-child {
border-bottom: 1px dotted #cccccc;
border-bottom: 1px dotted #cccccc;
}
#main .whatsnew .news ul li .date {
display: inline-block;
width: 75px;
display: inline-block;
width: 75px;
}
#main .dbtools-top {
margin: 5px;
margin: 5px;
}
#main .dbtools-top ul {
padding-left: 0;
padding-left: 0;
}
#main .dbtools-top ul li {
list-style-type: none;
list-style-type: none;
}
#main .dbtools-top .incf-japan-node {
color: #22528d;
font-weight: normal;
color: #22528d;
font-weight: normal;
}
#main .dbtools-top h3 {
margin: 0;
padding: 0;
text-indent: 0;
background: none;
border-bottom: none;
line-height: 1.2em;
font-size: 93%;
height: auto;
margin: 0;
padding: 0;
text-indent: 0;
background: none;
border-bottom: none;
line-height: 1.2em;
font-size: 93%;
height: auto;
}
#main .dbtools-top h3 a {
text-decoration: none;
text-decoration: none;
}
#main .dbtools-top h3 span.incf-japan-node {
color: #ff0000;
font-weight: bold;
color: #ff0000;
font-weight: bold;
}
#main .dbtools-top ul {
margin: 10px 10px;
overflow: hidden;
zoom: 1;
margin: 10px 10px;
overflow: hidden;
zoom: 1;
}
#main .dbtools-top ul li {
float: left;
width: 265px;
margin: 10px 5px;
float: left;
width: 265px;
margin: 10px 5px;
}
#main .dbtools-top ul li:nth-child(3n + 1) {
clear: left;
margin-left: 0;
clear: left;
margin-left: 0;
}
#main .dbtools-top ul li:first-child,
#main .dbtools-top ul li:nth-child(2),
#main .dbtools-top ul li:nth-child(3) {
margin-top: 0;
margin-top: 0;
}
#main .dbtools-top ul li .icon {
float: left;
width: 82px;
float: left;
width: 82px;
}
#main .dbtools-top ul li .info {
float: right;
width: 170px;
float: right;
width: 170px;
}
#main .dbtools-top ul li .info .detail {
display: inline-block;
margin-top: 5px;
display: inline-block;
margin-top: 5px;
}
#main .dbtools-top ul li .info .detail a,
#main .dbtools-top ul li .info .detail span {
padding-left: 8px;
background: url(images/more-bullet.png) no-repeat left center;
font-size: 93%;
padding-left: 8px;
background: url(images/more-bullet.png) no-repeat left center;
font-size: 93%;
}
#main .dbtools-top ul li .info .detail a {
color: #22528d;
text-decoration: none;
color: #22528d;
text-decoration: none;
}
#main .dbtools-top ul li .info .detail a:hover {
color: #ff3333;
color: #ff3333;
}
#main .dbtools-top .legend {
margin: 0;
text-align: right;
margin: 0;
text-align: right;
}
#main .dbtools-top .legend::before {
content: "* ";
color: #ff0000;
font-weight: bold;
content: "* ";
color: #ff0000;
font-weight: bold;
}
#main .dbtools .types::after {
content: "";
display: block;
clear: both;
content: "";
display: block;
clear: both;
}
#main .dbtools .index .databases {
float: left;
width: 50%;
float: left;
width: 50%;
}
#main .dbtools .index .tools {
float: right;
float: right;
}
#main .dbtools .index section {
margin: 0;
padding: 0 10px;
width: 50%;
margin: 0;
padding: 0 10px;
width: 50%;
}
#main .dbtools .index ul {
padding-left: 5px;
padding-left: 5px;
}
#main .dbtools .index ul li {
list-style-type: none;
line-height: 1.2;
padding-bottom: 5px;
list-style-type: none;
line-height: 1.2;
padding-bottom: 5px;
}
#main .dbtools .legend {
margin: 0;
text-align: right;
margin: 0;
text-align: right;
}
#main .dbtools .legend::before {
content: "* ";
color: #ff0000;
font-weight: bold;
content: "* ";
color: #ff0000;
font-weight: bold;
}
#main .dbtools .incf-japan-node {
color: #ff0000;
font-weight: bold;
color: #ff0000;
font-weight: bold;
}
#main .dbtools .detail ul {
padding-left: 0;
padding-left: 0;
}
#main .dbtools .detail ul li {
list-style-type: none;
line-height: 1.2;
padding-bottom: 5px;
border-bottom: 1px dotted #cccccc;
list-style-type: none;
line-height: 1.2;
padding-bottom: 5px;
border-bottom: 1px dotted #cccccc;
}
#main .dbtools .item::after {
content: "";
display: block;
clear: both;
content: "";
display: block;
clear: both;
}
#main .dbtools .item .icon {
float: left;
width: 100px;
float: left;
width: 100px;
}
#main .dbtools .item .info {
float: right;
width: 720px;
float: right;
width: 720px;
}
#main .dbtools .item .summary {
margin: 0 0 0.5em;
margin: 0 0 0.5em;
}
#main .dbtools .contact,
#main .dbtools .url {
margin: 0.5em 0;
margin: 0.5em 0;
}
#main .news .date {
text-align: right;
margin-right: 20px;
text-align: right;
margin-right: 20px;
}
#main .about table {
border-collapse: collapse;
border-collapse: collapse;
}
#main .about td {
border: 1px solid #999999;
padding: 10px;
border: 1px solid #999999;
padding: 10px;
}
#main .about .date {
font-weight: bold;
text-align: right;
font-weight: bold;
text-align: right;
}
#main .publication h3.name {
text-indent: 30px;
font-size: 123.1%;
line-height: 30px;
height: 30px;
#main .publication .category h3 {
text-indent: 30px;
font-size: 123.1%;
line-height: 30px;
height: 30px;
}
#main .publication h3.name.cdtdb {
background: url(images/icon-cdt-db-24x17.png) no-repeat left center;
#main .publication #section-cdt-db h3 {
background: url(images/icon-cdt-db-24x17.png) no-repeat left center;
}
#main .publication h3.name.eeg {
background: url(images/icon-multichannel-eeg-data-for-bmi-and-or-he-24x17.png) no-repeat left center;
#main .publication #section-multichannel-eeg-data-for-bmi-and-or-he h3 {
background: url(images/icon-multichannel-eeg-data-for-bmi-and-or-he-24x17.png) no-repeat left center;
}
#main .publication article {
margin: 5px;
#main .publication .publication {
margin: 5px;
}
#main .publication h4.title {
padding-left: 13px;
background: url(images/h4-bullet.png) no-repeat left 5px;
font-size: 108%;
font-weight: bold;
#main .publication h4 {
padding-left: 13px;
background: url(images/h4-bullet.png) no-repeat left 5px;
font-size: 108%;
font-weight: bold;
}
#main .publication p.author,
#main .publication p.description,
#main .publication p.journal,
#main .publication p.pmid {
margin: 3px 0;
margin: 3px 0;
}
/* XOOPS 時代のページ内ナビゲーション。SPA では機能しないため隠す */
#main .publication .page-top {
display: none;
}
#main .publication p.pmid a {
display: inline-block;
padding: 0 4px;
background-color: #999999;
color: white;
text-decoration: none;
display: inline-block;
padding: 0 4px;
background-color: #999999;
color: white;
text-decoration: none;
}
#main .contact .division {
font-weight: bold;
font-weight: bold;
}
#main .contact .address {
font-style: italic;
font-style: italic;
}
#main .page .summary {
padding: 10px;
background: #cccccc;
border: 1px dotted #cccccc;
padding: 10px;
background: #cccccc;
border: 1px dotted #cccccc;
}
+62 -17
View File
@@ -1,17 +1,62 @@
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;}
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;
}
+20 -7
View File
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { Component } from 'react';
import { Link } from 'react-router';
interface Props {
url: string;
@@ -13,7 +13,6 @@ interface State {
}
class LinkImage extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
@@ -26,14 +25,14 @@ class LinkImage extends Component<Props, State> {
handleMouseOver() {
const { imageHover } = this.props;
if (typeof imageHover !== 'undefined') {
this.setState({ image: imageHover })
this.setState({ image: imageHover });
}
}
handleMouseOut() {
const { image: imageNormal, imageHover } = this.props;
if (typeof imageHover !== 'undefined') {
this.setState({ image: imageNormal })
this.setState({ image: imageNormal });
}
}
@@ -42,13 +41,27 @@ class LinkImage extends Component<Props, State> {
const image = <img style={{ verticalAlign: 'middle' }} src={this.state.image} alt={title} title={title} />;
if (url.match(/^(\/|\.)/) === null) {
return (
<a href={url} target="_blank" rel="noopener noreferrer" onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
<a
href={url}
target="_blank"
rel="noopener noreferrer"
onMouseOver={this.handleMouseOver}
onMouseOut={this.handleMouseOut}
onFocus={this.handleMouseOver}
onBlur={this.handleMouseOut}
>
{image}
</a>
);
}
return (
<Link to={url} onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
<Link
to={url}
onMouseOver={this.handleMouseOver}
onMouseOut={this.handleMouseOut}
onFocus={this.handleMouseOver}
onBlur={this.handleMouseOut}
>
{image}
</Link>
);
+27
View File
@@ -0,0 +1,27 @@
.wrapper {
display: flex;
justify-content: center;
align-content: center;
margin: 100px 0;
}
.spinner {
width: 120px;
height: 120px;
border: 8px solid #cccccc;
border-top-color: transparent;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.spinner {
animation-duration: 4s;
}
}
+5 -6
View File
@@ -1,12 +1,11 @@
import React from 'react';
import Spinner from 'react-spinner-material';
import styles from './Loading.module.css';
const Loading = () => {
return (
<div style={{ display: 'flex', justifyContent: 'center', alignContent: 'center', margin: '100px 0' }}>
<Spinner radius={60} color={'#cccccc'} stroke={8} visible={true} />
<div className={styles.wrapper}>
<div className={styles.spinner} role="progressbar" aria-label="Loading" />
</div>
);
}
};
export default Loading;
export default Loading;
+5 -5
View File
@@ -1,5 +1,4 @@
import React from 'react';
import { MultiLang } from '../../config';
import type { MultiLang } from '../../config';
import Functions from '../../functions';
interface Props {
@@ -8,8 +7,9 @@ interface Props {
const NoticeSiteHasBeenArchived = (props: Props) => {
const { lang } = props;
const notice = '[en]This site has been archived since FY2019 and is no longer updated.[/en][ja]このサイトは、2019年度よりアーカイブサイトとして運用されています。[/ja]';
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;
export default NoticeSiteHasBeenArchived;
+34 -44
View File
@@ -1,54 +1,44 @@
import React, { Component } from 'react';
import { Helmet } from 'react-helmet';
import { RouteComponentProps, withRouter } from 'react-router';
import { MultiLang } from '../../config';
import { Helmet } from '@dr.pogodin/react-helmet';
import { useEffect } from 'react';
import { useLocation, useNavigate } from 'react-router';
import type { MultiLang } from '../../config';
import Functions from '../../functions';
interface Props extends RouteComponentProps {
interface Props {
lang: MultiLang;
}
class PageNotFound extends Component<Props> {
const TOP_URL = '/';
private url = '/';
private timer: NodeJS.Timer | null = null;
const PageNotFound = (props: Props) => {
const { lang } = props;
const location = useLocation();
const navigate = useNavigate();
goToTopPage() {
if (this.props.location.pathname !== '/') {
if (this.timer) {
clearTimeout(this.timer);
}
this.timer = setTimeout(() => {
this.timer = null;
this.props.history.push(this.url);
}, 5000);
useEffect(() => {
if (!import.meta.env.PROD || location.pathname === TOP_URL) {
return;
}
}
const timer = setTimeout(() => {
void navigate(TOP_URL);
}, 5000);
return () => clearTimeout(timer);
}, [location.pathname, navigate]);
componentWillUnmount() {
if (this.timer) {
clearTimeout(this.timer);
}
}
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 go to the <a href={TOP_URL}>top page</a>.
</p>
</section>
</div>
);
};
render() {
const { lang } = this.props;
if (process.env.NODE_ENV === 'production') {
this.goToTopPage();
}
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={this.url}>here</a></p>
</section>
</div>
);
}
}
export default withRouter(PageNotFound);
export default PageNotFound;
+6 -8
View File
@@ -1,8 +1,7 @@
import React from 'react';
import { MultiLang } from '../../config';
import type { MultiLang } from '../../config';
import Functions from '../../functions';
import imageRank2 from '../assets/images/rank3dbf8e94a6f72.gif';
import imageRank3 from '../assets/images/rank3dbf8e9e7d88d.gif';
import imageRank2 from '../assets/images/rank3dbf8e94a6f72.gif';
import imageRank4 from '../assets/images/rank3dbf8ea81e642.gif';
import imageRank5 from '../assets/images/rank3dbf8eb1a72e7.gif';
import imageRank6 from '../assets/images/rank3dbf8edf15093.gif';
@@ -19,7 +18,7 @@ const userRanks = [
{ title: '[en]Just popping in[/en][ja]新米[/ja]', min: 0, max: 20, special: false, image: imageRank1 },
{ title: '[en]Not too shy to talk[/en][ja]半人前[/ja]', min: 21, max: 40, special: false, image: imageRank2 },
{ title: '[en]Quite a regular[/en][ja]常連[/ja]', min: 41, max: 70, special: false, image: imageRank3 },
{ title: '[en]Just can\'t stay away[/en][ja]一人前[/ja]', min: 71, max: 150, special: false, image: imageRank4 },
{ title: "[en]Just can't stay away[/en][ja]一人前[/ja]", min: 71, max: 150, special: false, image: imageRank4 },
{ title: '[en]Home away from home[/en][ja]長老[/ja]', min: 151, max: 10000, special: false, image: imageRank5 },
{ title: '[en]Moderator[/en][ja]モデレータ[/ja]', min: 0, max: 0, special: true, image: imageRank6 },
{ title: '[en]Webmaster[/en][ja]管理人[/ja]', min: 0, max: 0, special: true, image: imageRank7 },
@@ -35,11 +34,10 @@ const UserRankStarImage = (props: Props) => {
return false;
});
return typeof rank !== 'undefined' ? rank : userRanks[0];
}
};
const userRank = rank > 0 && rank <= 7 ? userRanks[rank - 1] : findRank(posts);
const title = Functions.mlang(userRank.title, lang);
return <img src={userRank.image} alt={title} title={title} />;
}
};
export default UserRankStarImage;
export default UserRankStarImage;
+77 -61
View File
@@ -1,7 +1,12 @@
import React, { ReactElement } from 'react';
import ReactHtmlParser, { convertNodeToElement } from 'react-html-parser';
import { HashLink } from 'react-router-hash-link';
import { MultiLang } from '../../config';
import ReactHtmlParser, {
convertNodeToElement,
type DomElement,
type DomNode,
type Transform,
} from '@orrisroot/react-html-parser';
import type { CSSProperties } from 'react';
import { Link } from 'react-router';
import Config, { type MultiLang } from '../../config';
import Functions from '../../functions';
interface Props {
@@ -16,98 +21,109 @@ interface Props {
const preConvertXCode = (text: string, doxcode: boolean): string => {
if (doxcode) {
return text.replace(/\[code\](.*)\[\/code\]/sg, (m0, m1) => {
return '[code]' + Functions.base64Encode(m1) + '[/code]';
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\]/sg, (m0, m1) => {
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 `<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>';
});
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 => {
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 />');
}
};
interface TransformParsedNode {
type: string;
next: object | null;
prev: object | null;
parent: object | null;
name: string;
attribs: any;
children: object[];
data: string;
}
const cssConvert = (text: string): object => {
const ret: any = {};
const cssConvert = (text: string): CSSProperties => {
const ret: Record<string, string> = {};
text.split(';').forEach((line) => {
const line_ = line.trim();
if (line.length === 0) {
if (line_.length === 0) {
return;
}
const kv = line_.split(':');
if (kv.length < 2) {
return;
}
const key = Functions.camelCase(kv[0].trim());
const value = kv[1].trim();
ret[key] = value;
})
return ret;
}
ret[key] = kv[1].trim();
});
return ret as CSSProperties;
};
const transform = (node: object, idx: number): ReactElement | null | void => {
const node_ = node as TransformParsedNode;
if (node_.type === 'tag' && node_.name === 'a') {
const url = (node_.attribs && 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 isElement = (node: DomNode): node is DomElement => {
return node.type === 'tag' || node.type === 'script' || node.type === 'style';
};
const transform: Transform = (node, idx) => {
if (!isElement(node)) {
return;
}
if (node.name === 'a') {
const url = node.attribs.href || '/';
const download = node.attribs.download || '';
const rel = node.attribs.rel || '';
const klass = 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 && node_.attribs['style']) || '';
const title = (node_.attribs && node_.attribs['title']) || null;
return <HashLink key={idx} to={url} style={cssConvert(style)} title={title}>
{node_.children.map((value: object, index: number) => {
return convertNodeToElement(value, index, transform);
})}
</HashLink>;
const style = node.attribs.style || '';
const title = node.attribs.title;
return (
<Link key={idx} to={url} style={cssConvert(style)} title={title}>
{node.children.map((child, index) => convertNodeToElement(child, index, transform))}
</Link>
);
}
return;
}
if (node_.type === 'tag' && node_.name === 'img') {
const src = (node_.attribs && node_.attribs['src']) || '';
node_.attribs['src'] = src.replace('`XOOPS_URL`', process.env.PUBLIC_URL);
return convertNodeToElement(node_ as object, idx, transform);
if (node.name === 'img') {
const src = node.attribs.src || '';
node.attribs.src = src.replace('`XOOPS_URL`', Config.BASE_URL);
return convertNodeToElement(node, idx, transform);
}
}
};
const XoopsCode = (props: Props) => {
const { lang } = props;
@@ -134,6 +150,6 @@ const XoopsCode = (props: Props) => {
text = postConvertXCode(text, doxcode, doimage);
text = Functions.mlang(text, lang);
return <div>{ReactHtmlParser(text, { transform })}</div>;
}
};
export default XoopsCode;
export default XoopsCode;
+8 -2
View File
@@ -1,8 +1,13 @@
const SITE_TITLE = 'BSI-Neuroinformatics';
const SITE_SLOGAN = 'RIKEN BSI Research Database Portal';
const GOOGLE_ANALYTICS_TRACKING_ID = 'UA-25489807-3';
const GOOGLE_ANALYTICS_TRACKING_ID = 'G-37HZE599Q9';
const XOONIPS_ITEMTYPES = ['paper', 'book', 'data'];
// Vite's BASE_URL always carries a trailing slash ('/' when the app is served
// from the document root). Strip it so it can be concatenated the same way
// CRA's Config.BASE_URL was.
const BASE_URL = import.meta.env.BASE_URL.replace(/\/$/, '');
export type MultiLang = 'en' | 'ja';
const Config = {
@@ -10,6 +15,7 @@ const Config = {
SITE_SLOGAN,
GOOGLE_ANALYTICS_TRACKING_ID,
XOONIPS_ITEMTYPES,
}
BASE_URL,
};
export default Config;
+68 -50
View File
@@ -1,6 +1,6 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import Config, { MultiLang } from '../config';
import { Helmet } from '@dr.pogodin/react-helmet';
import type React from 'react';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
interface Props {
@@ -9,18 +9,21 @@ interface Props {
const outlineTitle = {
en: 'Outline',
ja: '概要'
}
ja: '概要',
};
const outlineContent = {
en: 'The BSI-NI (Neuroinformatics) Project was pursued in FY2007-FY 2017 to create a database covering research achievements of RIKEN Brain Science Institute (BSI) to promote information sharing within its organization and with the public domain. Developments by BSI laboratories were supported by the BSI Director\'s Fund.Operation of the project and services were supported by BSI- NI committee and Neuroinformatics Japan Center at RIKEN BSI.Since April 2018, this website is managed by Neuroinformatics Unit, RIKEN Center for Brain Science by aiming the sustainable accessibility of the database. Some of contents are continuously updated by labs at RIKEN Center for Brain Science.',
ja: 'BSI-NI(Neuroinformatics)プロジェクトは、理化学研究所脳科学総合研究センター(1997年度-2017年度)の研究成果をデータベース化し公開するために設置されました。脳科学総合研究センター(BSI)では、BSI内外において情報共有を進め、生みだされた膨大かつ高品質なオリジナルデータをデータベースに構築・公開・運用する為に、BSIの予算(BSI-NIファンド)を活用してBSI-NIプロジェクト(2007年度-2017年度)を推進し情報公開に努めた成果です。当サイトはBSI-NI委員会とBSI-NI事務局である神経情報基盤センターによって運用されてきました。 2018年度の脳神経科学研究センターの開始に伴いBSI-NIプロジェクトは終了しましたが、本サイトは引き続き同センター内神経情報基盤開発ユニットが管理運用致します。コンテンツの一部は脳神経科学研究センターのラボにより今後も更新されます。引き続きご利用下さい。'
en: "The BSI-NI (Neuroinformatics) Project was pursued in FY2007-FY 2017 to create a database covering research achievements of RIKEN Brain Science Institute (BSI) to promote information sharing within its organization and with the public domain. Developments by BSI laboratories were supported by the BSI Director's Fund.Operation of the project and services were supported by BSI- NI committee and Neuroinformatics Japan Center at RIKEN BSI.Since April 2018, this website is managed by Neuroinformatics Unit, RIKEN Center for Brain Science by aiming the sustainable accessibility of the database. Some of contents are continuously updated by labs at RIKEN Center for Brain Science.",
ja: 'BSI-NI(Neuroinformatics)プロジェクトは、理化学研究所脳科学総合研究センター(1997年度-2017年度)の研究成果をデータベース化し公開するために設置されました。脳科学総合研究センター(BSI)では、BSI内外において情報共有を進め、生みだされた膨大かつ高品質なオリジナルデータをデータベースに構築・公開・運用する為に、BSIの予算(BSI-NIファンド)を活用してBSI-NIプロジェクト(2007年度-2017年度)を推進し情報公開に努めた成果です。当サイトはBSI-NI委員会とBSI-NI事務局である神経情報基盤センターによって運用されてきました。 2018年度の脳神経科学研究センターの開始に伴いBSI-NIプロジェクトは終了しましたが、本サイトは引き続き同センター内神経情報基盤開発ユニットが管理運用致します。コンテンツの一部は脳神経科学研究センターのラボにより今後も更新されます。引き続きご利用下さい。',
};
const projectMembers = {
en: [
{ name: 'Tomoki Fukai, Ph.D.', lab: 'Laboratory Head, Lab. for Neural Circuit Theory' },
{ name: 'Atsushi Iriki, D.D.S., Ph.D.', lab: 'Laboratory Head, Lab. for Symbolic Cognitive Development' },
{ name: 'Keiichi Kitajo, Ph.D.', lab: 'Deputy Laboratory Head, Advanced Brain Signal Processing\nUnit Leader, Rhythm-based Brain Information Processing Unit, BTCC' },
{
name: 'Keiichi Kitajo, Ph.D.',
lab: 'Deputy Laboratory Head, Advanced Brain Signal Processing\nUnit Leader, Rhythm-based Brain Information Processing Unit, BTCC',
},
{ name: 'Hajime Hirase, Ph.D.', lab: 'Laboratory Head, Neuron-Glia Circuitry' },
{ name: 'Taro Toyoizumi, Ph.D.', lab: 'Laboratory Head, Neural Computation and Adaptation' },
{ name: 'Shiro Usui, Ph.D.', lab: 'Senior Advisor, Neuroinformatics Japan Center' },
@@ -30,7 +33,10 @@ const projectMembers = {
ja: [
{ name: '深井 朋樹', lab: '脳回路機能理論研究チーム チームリーダー' },
{ name: '入來 篤史', lab: '象徴概念発達研究チーム チームリーダー' },
{ name: '北城 圭一', lab: '脳信号処理研究チーム 副チームリーダー\n脳リズム情報処理連携ユニット, BTCC ユニットリーダー' },
{
name: '北城 圭一',
lab: '脳信号処理研究チーム 副チームリーダー\n脳リズム情報処理連携ユニット, BTCC ユニットリーダー',
},
{ name: '平瀬 肇', lab: '神経グリア回路研究チーム チームリーダー' },
{ name: '豊泉 太郎', lab: '神経適応理論研究チーム チームリーダー' },
{ name: '臼井 支朗', lab: '神経情報基盤センター 特別顧問' },
@@ -54,49 +60,61 @@ const About: React.FC<Props> = (props: Props) => {
const { lang } = props;
const title = Functions.mlang('[en]About BSI-NI[/en][ja]プロジェクト概要[/ja]', lang);
const fy2017 = Functions.mlang('[en]As of FY2017[/en][ja]2017年度[/ja]', lang);
return <div className="about">
<Helmet><title>{title} - {Config.SITE_TITLE}</title></Helmet>
<section>
<h2>{Functions.mlang('[en]Project Summary[/en][ja]プロジェクト概要[/ja]', lang)}</h2>
return (
<div className="about">
<Helmet>
<title>
{title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section>
<h3>{outlineTitle[lang]}</h3>
<p>{outlineContent[lang]}</p>
</section>
</section>
<section>
<h2>{Functions.mlang('[en]Organization (until FY2017)[/en][ja]運営組織 (2017年度まで)[/ja]', lang)}</h2>
<section>
<h3>{Functions.mlang('[en]BSI-NI Committee Member List[/en][ja]BSI-NI委員会メンバー表[/ja]', lang)}</h3>
<table>
<caption className="date">{fy2017}</caption>
<tbody>
{projectMembers[lang].map(member => {
const regex = /(\n)/g;
return <tr key={member.name}><td>{member.name}</td><td>{member.lab.split(regex).map((line, idx) => {
if (line.match(regex)) {
return <br key={idx} />;
} else {
return line;
}
})}</td></tr>;
})}
</tbody>
</table>
<p>{Functions.mlang('◎ [en]acting Chairman[/en][ja]は委員長代行[/ja]', lang)}</p>
<h2>{Functions.mlang('[en]Project Summary[/en][ja]プロジェクト概要[/ja]', lang)}</h2>
<section>
<h3>{outlineTitle[lang]}</h3>
<p>{outlineContent[lang]}</p>
</section>
</section>
<section>
<h3>{Functions.mlang('[en]BSI-NI Project Secretariat[/en][ja]BSI-NIプロジェクト事務局[/ja]', lang)}</h3>
<table>
<caption className="date">{fy2017}</caption>
<tbody>
{projectOffice[lang].map(member => {
return <tr key={member.name}><td>{member.name}</td><td>{member.lab}</td></tr>;
})}
</tbody>
</table>
<h2>{Functions.mlang('[en]Organization (until FY2017)[/en][ja]運営組織 (2017年度まで)[/ja]', lang)}</h2>
<section>
<h3>
{Functions.mlang('[en]BSI-NI Committee Member List[/en][ja]BSI-NI委員会メンバー表[/ja]', lang)}
</h3>
<table>
<caption className="date">{fy2017}</caption>
<tbody>
{projectMembers[lang].map((member) => (
<tr key={member.name}>
<td>{member.name}</td>
{/* lab holds newline separated roles */}
<td style={{ whiteSpace: 'pre-line' }}>{member.lab}</td>
</tr>
))}
</tbody>
</table>
<p>{Functions.mlang('◎ [en]acting Chairman[/en][ja]は委員長代行[/ja]', lang)}</p>
</section>
<section>
<h3>
{Functions.mlang('[en]BSI-NI Project Secretariat[/en][ja]BSI-NIプロジェクト事務局[/ja]', lang)}
</h3>
<table>
<caption className="date">{fy2017}</caption>
<tbody>
{projectOffice[lang].map((member) => {
return (
<tr key={member.name}>
<td>{member.name}</td>
<td>{member.lab}</td>
</tr>
);
})}
</tbody>
</table>
</section>
</section>
</section>
</div>;
}
</div>
);
};
export default About;
export default About;
+39 -18
View File
@@ -1,6 +1,6 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import Config, { MultiLang } from '../config';
import { Helmet } from '@dr.pogodin/react-helmet';
import type React from 'react';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
interface Props {
@@ -10,19 +10,40 @@ interface Props {
const Contact: React.FC<Props> = (props: Props) => {
const { lang } = props;
const title = Functions.mlang('[en]Contact[/en][ja]お問い合わせ先[/ja]', lang);
return <div className="contact">
<Helmet><title>{title} - {Config.SITE_TITLE}</title></Helmet>
<section>
<h2>{title}</h2>
<p className="division">{Functions.mlang('[en]Neuroinformatics Unit, Integrative Computational Brain Science Collaboration Center, RIKEN Center for Brain Science[/en][ja]理化学研究所 脳神経科学研究センター 統合計算脳科学連携部門 神経情報基盤開発ユニット[/ja]', lang)}</p>
<p className="address">email: cbs-is(at)ml.riken.jp</p>
</section>
<section>
<h2>{Functions.mlang('[en]Request[/en][ja]お願い[/ja]', lang)}</h2>
<p>{Functions.mlang('[en]If you use databases or tools provided through the BSI-NI project in a paper, we ask that you cite the source in the acknowledgements for the paper, as designated by each database or tool. Please confirm the details with each person in charge of the database.[/en][ja]このサイトのDBやツールを使用して論文を発表される場合は、それぞれのDB・ツールで指定している方法で謝辞に記載下さい。詳細は個々のDB担当者にご確認下さい。[/ja]', lang)}</p>
<p>{Functions.mlang('[en]Also please let us know with the name and volume number of the publication, and the title of your paper.[/en][ja]また、記載掲載誌・掲載号・タイトルをBSI-NIプロジェクト事務局までお知らせ頂ければ幸いです。[/ja]', lang)}</p>
</section>
</div>;
}
return (
<div className="contact">
<Helmet>
<title>
{title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section>
<h2>{title}</h2>
<p className="division">
{Functions.mlang(
'[en]Neuroinformatics Unit, Integrative Computational Brain Science Collaboration Center, RIKEN Center for Brain Science[/en][ja]理化学研究所 脳神経科学研究センター 統合計算脳科学連携部門 神経情報基盤開発ユニット[/ja]',
lang
)}
</p>
<p className="address">email: cbs-is(at)ml.riken.jp</p>
</section>
<section>
<h2>{Functions.mlang('[en]Request[/en][ja]お願い[/ja]', lang)}</h2>
<p>
{Functions.mlang(
'[en]If you use databases or tools provided through the BSI-NI project in a paper, we ask that you cite the source in the acknowledgements for the paper, as designated by each database or tool. Please confirm the details with each person in charge of the database.[/en][ja]このサイトのDBやツールを使用して論文を発表される場合は、それぞれのDB・ツールで指定している方法で謝辞に記載下さい。詳細は個々のDB担当者にご確認下さい。[/ja]',
lang
)}
</p>
<p>
{Functions.mlang(
'[en]Also please let us know with the name and volume number of the publication, and the title of your paper.[/en][ja]また、記載掲載誌・掲載号・タイトルをBSI-NIプロジェクト事務局までお知らせ頂ければ幸いです。[/ja]',
lang
)}
</p>
</section>
</div>
);
};
export default Contact;
export default Contact;
+7 -1
View File
@@ -5,6 +5,12 @@ export interface NewsItem {
content: string;
}
export interface PublicationItem {
id: number;
title: string;
content: string;
}
export interface DbToolsItem {
id: number;
title: string;
@@ -23,4 +29,4 @@ export const fixDbToolsUrl = (url: string): string => {
let ret = url.replace(/^https?:\/\/bsi-ni\.brain\.riken\.jp/, '');
ret = ret.replace(/^\/modules\/page\/index\.php\?content_id=/, '/page/');
return ret;
}
};
+111 -62
View File
@@ -1,11 +1,12 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { HashLink } from 'react-router-hash-link';
import { Helmet } from '@dr.pogodin/react-helmet';
import type React from 'react';
import { Link } from 'react-router';
import XoopsCode from '../common/lib/XoopsCode';
import Config, { MultiLang } from '../config';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
import dbtoolsJson from './assets/dbtools.json';
import { DbToolsItem, fixDbToolsUrl } from './CustomUtil';
import { siteData } from '../siteData';
import { type DbToolsItem, fixDbToolsUrl } from './CustomUtil';
interface DbToolProps {
lang: MultiLang;
@@ -15,34 +16,49 @@ interface DbToolProps {
const DbTool: React.FC<DbToolProps> = (props: DbToolProps) => {
const { lang, item } = props;
const title = Functions.mlang(item.title, lang);
return <div id={`jump${item.id}`}>
<h5>{title}</h5>
<div className="item">
<div className="icon">
<img src={item.image0} alt={title} />
</div>
<div className="info">
<div className="summary">
&lt;{Functions.mlang('[en]Summary[/en][ja]概要[/ja]', lang)}&gt;
<div><XoopsCode lang={lang} text={item.summary} dohtml={true} /></div>
return (
<div id={`jump${item.id}`}>
<h5>{title}</h5>
<div className="item">
<div className="icon">
<img src={item.image0} alt={title} />
</div>
<div className="contact">
&lt;{Functions.mlang('[en]Contact Information[/en][ja]問い合わせ先[/ja]', lang)}&gt;
<div>
{Functions.mlang(item.group, lang)}
{item.person !== '' && <> ({Functions.mlang(item.person, lang)} : <em>{item.email}</em>)</>}
<div className="info">
<div className="summary">
&lt;{Functions.mlang('[en]Summary[/en][ja]概要[/ja]', lang)}&gt;
<div>
<XoopsCode lang={lang} text={item.summary} dohtml={true} />
</div>
</div>
</div>
<div className="url">
&lt;URL&gt;
<div>
{item.url !== '' ? <a href={fixDbToolsUrl(item.url)} target="_blank" rel="noopener noreferrer">{item.url}</a> : <>(unreleased)</>}
<div className="contact">
&lt;{Functions.mlang('[en]Contact Information[/en][ja]問い合わせ先[/ja]', lang)}&gt;
<div>
{Functions.mlang(item.group, lang)}
{item.person !== '' && (
<>
{' '}
({Functions.mlang(item.person, lang)} : <em>{item.email}</em>)
</>
)}
</div>
</div>
<div className="url">
&lt;URL&gt;
<div>
{item.url !== '' ? (
<a href={fixDbToolsUrl(item.url)} target="_blank" rel="noopener noreferrer">
{item.url}
</a>
) : (
<>(unreleased)</>
)}
</div>
</div>
</div>
</div>
</div>
</div>;
}
);
};
interface Props {
lang: MultiLang;
@@ -50,48 +66,81 @@ interface Props {
const DbTools: React.FC<Props> = (props: Props) => {
const { lang } = props;
const dbtools = dbtoolsJson as DbToolsItem[];
const databases = dbtools.filter((dbtool) => { return dbtool.type === 'database'; });
const tools = dbtools.filter((dbtool) => { return dbtool.type === 'tool'; });
const dbtools: DbToolsItem[] = siteData().dbtools;
const databases = dbtools.filter((dbtool) => {
return dbtool.type === 'database';
});
const tools = dbtools.filter((dbtool) => {
return dbtool.type === 'tool';
});
const title = Functions.mlang('[en]Databases & Tools[/en][ja]データベース・ツール[/ja]', lang);
const titleDatabases = Functions.mlang('[en]Databases[/en][ja]データベース[/ja]', lang);
const titleTools = Functions.mlang('[en]Tools[/en][ja]ツール[/ja]', lang);
return <div className="dbtools">
<Helmet><title>{title} - {Config.SITE_TITLE}</title></Helmet>
<section className="index">
<h2>{title}</h2>
<div className="types">
<section className="databases">
<h3>{titleDatabases}</h3>
return (
<div className="dbtools">
<Helmet>
<title>
{title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section className="index">
<h2>{title}</h2>
<div className="types">
<section className="databases">
<h3>{titleDatabases}</h3>
<ul>
{databases.map((item) => (
<li key={item.id}>
<Link to={`#jump${item.id}`}>{Functions.mlang(item.title, lang)}</Link>
{item.jnode && <span className="incf-japan-node"> *</span>}
</li>
))}
</ul>
</section>
<section className="tools">
<h3>{titleTools}</h3>
<ul>
{tools.map((item) => (
<li key={item.id}>
<Link to={`#jump${item.id}`}>{Functions.mlang(item.title, lang)}</Link>
{item.jnode && <span className="incf-japan-node"> *</span>}
</li>
))}
</ul>
</section>
</div>
<p className="legend">INCF Japan Node Platform</p>
</section>
<section className="detail">
<h3>
{Functions.mlang(
'[en]Ongoing assignment and its progress[/en][ja]各継続課題とその進捗について[/ja]',
lang
)}
</h3>
<section>
<h4>{titleDatabases}</h4>
<ul>
{databases.map(item => <li key={item.id}><HashLink to={`#jump${item.id}`}>{Functions.mlang(item.title, lang)}</HashLink>{item.jnode && <span className="incf-japan-node"> *</span>}</li>)}
{databases.map((item) => (
<li key={item.id}>
<DbTool lang={lang} item={item} />
</li>
))}
</ul>
</section>
<section className="tools">
<h3>{titleTools}</h3>
<section>
<h4>{titleTools}</h4>
<ul>
{tools.map(item => <li key={item.id}><HashLink to={`#jump${item.id}`}>{Functions.mlang(item.title, lang)}</HashLink>{item.jnode && <span className="incf-japan-node"> *</span>}</li>)}
{tools.map((item) => (
<li key={item.id}>
<DbTool lang={lang} item={item} />
</li>
))}
</ul>
</section>
</div>
<p className="legend">INCF Japan Node Platform</p>
</section>
<section className="detail">
<h3>{Functions.mlang('[en]Ongoing assignment and its progress[/en][ja]各継続課題とその進捗について[/ja]', lang)}</h3>
<section>
<h4>{titleDatabases}</h4>
<ul>
{databases.map(item => <li key={item.id}><DbTool lang={lang} item={item} /></li>)}
</ul>
</section>
<section>
<h4>{titleTools}</h4>
<ul>
{tools.map(item => <li key={item.id}><DbTool lang={lang} item={item} /></li>)}
</ul>
</section>
</section>
</div >;
}
</div>
);
};
export default DbTools;
export default DbTools;
+44 -29
View File
@@ -1,9 +1,10 @@
import React from 'react';
import { HashLink } from 'react-router-hash-link';
import { MultiLang } from '../config';
import type React from 'react';
import { Link } from 'react-router';
import type { MultiLang } from '../config';
import Functions from '../functions';
import dbtoolsJson from './assets/dbtools.json';
import { DbToolsItem, fixDbToolsUrl } from './CustomUtil';
import { siteData } from '../siteData';
import { type DbToolsItem, fixDbToolsUrl } from './CustomUtil';
interface Props {
lang: MultiLang;
@@ -11,29 +12,43 @@ interface Props {
const DbToolsTop: React.FC<Props> = (props: Props) => {
const { lang } = props;
const dbtools = dbtoolsJson as DbToolsItem[];
const dbtools: DbToolsItem[] = siteData().dbtools;
const more = Functions.mlang('[en]Detail[/en][ja]概要へ[/ja]', lang);
return <div className="dbtools-top">
<ul>
{dbtools.map(item => {
const title = Functions.mlang(item.title, lang);
const link = item.url === '' ? title : <a href={fixDbToolsUrl(item.url)} target="_blank" rel="noopener noreferrer">{title}</a>;
return <li key={item.id}>
<div className="icon">
<img src={item.image1} alt={title} />
</div>
<div className="info">
<h3>{link}{item.jnode && <span className="incf-japan-node"> *</span>}</h3>
<span className="detail">
<HashLink to={`/dbtools#jump${item.id}`}>{more}</HashLink>
</span>
{item.url === '' && <div>(unreleased)</div>}
</div>
</li>;
})}
</ul>
<p className="legend">INCF Japan Node Platform</p>
</div>;
}
return (
<div className="dbtools-top">
<ul>
{dbtools.map((item) => {
const title = Functions.mlang(item.title, lang);
const link =
item.url === '' ? (
title
) : (
<a href={fixDbToolsUrl(item.url)} target="_blank" rel="noopener noreferrer">
{title}
</a>
);
return (
<li key={item.id}>
<div className="icon">
<img src={item.image1} alt={title} />
</div>
<div className="info">
<h3>
{link}
{item.jnode && <span className="incf-japan-node"> *</span>}
</h3>
<span className="detail">
<Link to={`/dbtools#jump${item.id}`}>{more}</Link>
</span>
{item.url === '' && <div>(unreleased)</div>}
</div>
</li>
);
})}
</ul>
<p className="legend">INCF Japan Node Platform</p>
</div>
);
};
export default DbToolsTop;
export default DbToolsTop;
+32 -24
View File
@@ -1,10 +1,10 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { Helmet } from '@dr.pogodin/react-helmet';
import type React from 'react';
import XoopsCode from '../common/lib/XoopsCode';
import Config, { MultiLang } from '../config';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
import newsJson from './assets/news.json';
import { NewsItem } from './CustomUtil';
import { siteData } from '../siteData';
import type { NewsItem } from './CustomUtil';
interface Props {
lang: MultiLang;
@@ -13,23 +13,31 @@ interface Props {
const News: React.FC<Props> = (props: Props) => {
const { lang } = props;
const title = Functions.mlang('[en]News[/en][ja]ニュース[/ja]', lang);
return <div className="news">
<Helmet><title>{title} - {Config.SITE_TITLE}</title></Helmet>
<section>
<h2>{title}</h2>
{newsJson.map((item) => {
const article = item as NewsItem;
const key = `news${article.id}`;
return <section key={key}>
<h3 id={key}>{Functions.mlang(article.title, lang)}</h3>
<div className="date">{article.date}</div>
<div className="contents">
<XoopsCode lang={lang} text={article.content} dohtml={true} />
</div>
</section>;
})}
</section>
</div>;
}
return (
<div className="news">
<Helmet>
<title>
{title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section>
<h2>{title}</h2>
{siteData().news.map((item) => {
const article = item as NewsItem;
const key = `news${article.id}`;
return (
<section key={key}>
<h3 id={key}>{Functions.mlang(article.title, lang)}</h3>
<div className="date">{article.date}</div>
<div className="contents">
<XoopsCode lang={lang} text={article.content} dohtml={true} />
</div>
</section>
);
})}
</section>
</div>
);
};
export default News;
export default News;
+39 -27
View File
@@ -1,14 +1,14 @@
import { Helmet } from '@dr.pogodin/react-helmet';
import React from 'react';
import { Helmet } from 'react-helmet';
import Config, { MultiLang } from '../config';
import Config, { type MultiLang } from '../config';
import styles from '../database/Database.module.css';
import DatabaseListItem from '../database/lib/DatabaseListItem';
import ItemUtil, { SearchCallbackFunc, SortCondition } from '../database/lib/ItemUtil';
import ItemUtil, { type SearchCallbackFunc, type SortCondition } from '../database/lib/ItemUtil';
import Functions from '../functions';
interface Props {
lang: MultiLang;
id: 6 | 9
id: 6 | 9;
}
const pageDetails = {
@@ -27,14 +27,13 @@ const pageDetails = {
group: '[en]Laboratory for Mathematical Neuroscience[/en][ja]脳数理研究チーム[/ja]',
person: '',
email: '',
summary: '[en]Mathematical neuroscience searches for fundamental principles of information processing by using simples models of neural networks through mathematical analysis, although the brain has found the same principles through a long history of evolution. The current project is a historical one, integrating published and unpublished papers towards establishment of mathematical neuroscience.[/en][ja]数理脳科学は、脳が長い進化の歴史の中で見出した脳型情報処理の基本原理を、簡単なモデルを用いて数理の力で見つけようとする。このプロジェクトは、数理脳科学の確立に向けた努力を文献を中心にまとめた歴史的な資料である。[/ja]',
summary:
'[en]Mathematical neuroscience searches for fundamental principles of information processing by using simples models of neural networks through mathematical analysis, although the brain has found the same principles through a long history of evolution. The current project is a historical one, integrating published and unpublished papers towards establishment of mathematical neuroscience.[/en][ja]数理脳科学は、脳が長い進化の歴史の中で見出した脳型情報処理の基本原理を、簡単なモデルを用いて数理の力で見つけようとする。このプロジェクトは、数理脳科学の確立に向けた努力を文献を中心にまとめた歴史的な資料である。[/ja]',
indexId: 39,
}
}
},
};
class Page extends React.Component<Props> {
constructor(props: Props) {
super(props);
this.searchFunc = this.searchFunc.bind(this);
@@ -49,25 +48,38 @@ class Page extends React.Component<Props> {
render() {
const { lang, id: type } = this.props;
const detail = pageDetails[type];
return <div className="page">
<Helmet><title>{detail.title} - {Config.SITE_TITLE}</title></Helmet>
<section>
<h2>{detail.title}</h2>
<p className="logo"><img src={detail.image} alt={detail.title} /></p>
{detail.summary && <p className="summary">{Functions.mlang(detail.summary, lang)}</p>}
<div className={styles.database}>
<DatabaseListItem lang={lang} url={`/page/${type}`} search={this.searchFunc} />
</div>
<p className="contact">
&lt;{Functions.mlang('[en]Contact Information[/en][ja]問い合わせ先[/ja]', lang)}&gt;
<div>
{Functions.mlang(detail.group, lang)}
{detail.person !== '' && <> ({Functions.mlang(detail.person, lang)} : <em>{detail.email}</em>)</>}
return (
<div className="page">
<Helmet>
<title>
{detail.title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section>
<h2>{detail.title}</h2>
<p className="logo">
<img src={detail.image} alt={detail.title} />
</p>
{detail.summary && <p className="summary">{Functions.mlang(detail.summary, lang)}</p>}
<div className={styles.database}>
<DatabaseListItem lang={lang} url={`/page/${type}`} search={this.searchFunc} />
</div>
</p>
</section>
</div>;
<p className="contact">
&lt;{Functions.mlang('[en]Contact Information[/en][ja]問い合わせ先[/ja]', lang)}&gt;
<div>
{Functions.mlang(detail.group, lang)}
{detail.person !== '' && (
<>
{' '}
({Functions.mlang(detail.person, lang)} : <em>{detail.email}</em>)
</>
)}
</div>
</p>
</section>
</div>
);
}
}
export default Page;
export default Page;
+21 -86
View File
@@ -1,95 +1,30 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import Config, { MultiLang } from '../config';
import { Helmet } from '@dr.pogodin/react-helmet';
import XoopsCode from '../common/lib/XoopsCode';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
import { siteData } from '../siteData';
interface Props {
lang: MultiLang;
}
const publications = [
{
key: 'cdtdb',
name: 'BrainTx (Former CDT-DB)',
items: [
{
title: 'Cerebellar development transcriptome (CDT-DB): profiling of spatio-temporal gene expression during the postnatal development of mouse cerebellum.',
author: 'Sato, A., Sekine, Y., Saruta, C., Nishibe, H., Morita, N., Sato, Y., Sadakata, T., Shinoda, Y., Kojima, T., and Furuichi, T.',
description: 'Neural Networks 21:1056-1069. (2008)',
pmid: '18603407',
},
{
title: 'Deciphering the genetic blueprint of cerebellar development by the gene expression profiling informatics. Neural information processing.',
author: 'Sato, A., Morita, N., Sadakata, T., Yoshikawa, F., Shiraishi-Yamaguchi, Y., Huang, JH., Shoji, S., Tomomura, M., Sato, Y., Suga, E., Sekine, Y., Kitamura, A., Shibata, Y., Furuichi, T.',
description: 'Lecture Notes in Computer Science 3316:880-884. (2004) Springer-Verlag, Berlin, Heidelberger, Germany',
pmid: '',
},
{
title: 'Investigation of differentially expressed genes during the development of mouse cerebellum.',
author: 'Kagami, Y., and Furuichi, T.',
description: 'Brain Research Gene Expression Patterns 1:39-59. (2001)',
pmid: '15018818',
},
],
},
{
key: 'eeg',
name: 'Multichannel EEG data for BMI and Human Emotions',
items: [
{
title: 'Tensor Decompositions for Feature Extraction and Classification of High Dimensional Datasets.',
author: 'Phan A-H, Cichocki A.',
description: 'Nonlinear Theory and Its Applications, IEICE, 1(1), 37-68 (2010).',
pmid: '',
},
{
title: 'Generalizing the column-row matrix decomposition to multi-way arrays.',
author: 'Caiafa C, Cichocki A.',
description: 'Linear Algebra and its Applications, 433 (3), 557-573 (2010).',
pmid: '',
},
{
title: 'Extended HALS Algorithm for Nonnegative Tucker Decomposition and its Applications for Multi-Way Analysis and Classification.',
author: 'Phan A-H, Cichocki A.',
description: 'Neurocomputing 2011 (in press).',
pmid: '',
},
{
title: 'Fast Local Algorithms for Large Scale Nonnegative Matrix and Tensor Factorizations.',
author: 'Cichocki A, Phan A-H.',
description: 'IEICE Trans. Fundamentals E92-A(3), 708-721 (invited paper) (2009).',
pmid: '',
},
{
title: 'Nonnegative Matrix and Tensor Factorizations: Applications to Exploratory Multi-way Data Analysis,',
author: 'Cichock A., Zdunek R.. Phan, A.H. and Amari: S.',
description: 'John Wiley (2009), ISBN: 978-0-470-74666-0,',
pmid: '',
},
]
}
];
const Publication: React.FC<Props> = (props: Props) => {
const Publication = (props: Props) => {
const { lang } = props;
const title = Functions.mlang('[en]Related Publications[/en][ja]関連論文[/ja]', lang);
return <div className="publication">
<Helmet><title>{title} - {Config.SITE_TITLE}</title></Helmet>
<section>
<h2>{title}</h2>
{publications.map(publication => <section key={publication.key}>
<h3 className={`name ${publication.key}`}>{publication.name}</h3>
{publication.items.map(item => <article key={item.title}>
<h4 className="title">{item.title}</h4>
<p className="author">{item.author}</p>
<p className="description">{item.description}</p>
{item.pmid !== '' && <p className="pmid"><a href={`https://www.ncbi.nlm.nih.gov/pubmed/${item.pmid}`} target="_blank" rel="noopener noreferrer">PMID: {item.pmid}</a></p>}
</article>)}
</section>)}
</section>
</div>;
}
return (
<div className="publication">
<Helmet>
<title>
{title} - {Config.SITE_TITLE}
</title>
</Helmet>
<section>
{siteData().publication.map((item) => (
<XoopsCode key={item.id} lang={lang} text={item.content} dohtml={true} />
))}
</section>
</div>
);
};
export default Publication;
export default Publication;
+37 -31
View File
@@ -1,11 +1,11 @@
import React from 'react';
import { Link } from 'react-router-dom';
import { HashLink } from 'react-router-hash-link';
import type React from 'react';
import { Link } from 'react-router';
import NoticeSiteHasBeenArchived from '../common/lib/NoticeSiteHasBeenArchived';
import { MultiLang } from '../config';
import type { MultiLang } from '../config';
import Functions from '../functions';
import newsJson from './assets/news.json';
import { NewsItem } from './CustomUtil';
import { siteData } from '../siteData';
import type { NewsItem } from './CustomUtil';
interface Props {
lang: MultiLang;
@@ -13,33 +13,39 @@ interface Props {
const message = {
en: 'Databases and tools created by RIKEN BSI laboratories in BSI-NI Project(FY2007-FY2017) are available from this website. Since FY2018, this website is managed by Neuroinformatics Unit, RIKEN Center for Brain Science. We hope this site helps to promote further development of brain research.',
ja: 'このウェブサイトは、理化学研究所 脳科学総合研究センター(1997年度-2017年度)のBSI-NIプロジェクト(2007年度-2017年度)にて構築されたBSI研究室のデーターベース・ツールを公開しています。本サイトは2018年度より理化学研究所 脳神経科学研究センター 神経情報基盤開発ユニットが運用を担当し、コンテンツ公開を継続して行っています。これらのデータベース・ツールのご利用が神経科学の発展に役立つことを期待しています。'
ja: 'このウェブサイトは、理化学研究所 脳科学総合研究センター(1997年度-2017年度)のBSI-NIプロジェクト(2007年度-2017年度)にて構築されたBSI研究室のデーターベース・ツールを公開しています。本サイトは2018年度より理化学研究所 脳神経科学研究センター 神経情報基盤開発ユニットが運用を担当し、コンテンツ公開を継続して行っています。これらのデータベース・ツールのご利用が神経科学の発展に役立つことを期待しています。',
};
const WhatsNew: React.FC<Props> = (props: Props) => {
const { lang } = props;
let items: NewsItem[] = [];
for (let i = 0; i < 3; i++) {
items.push(newsJson[i] as NewsItem);
}
return <div className="block">
<section>
<NoticeSiteHasBeenArchived lang={lang} />
<p>{message[lang]}</p>
</section>
<hr />
<section className="whatsnew">
<div className="title">
<h3>{Functions.mlang('[en]What\'s new[/en][ja]最新ニュース[/ja]', lang)}</h3>
<p className="more"><Link to="/news">More ...</Link></p>
</div>
<div className="news">
<ul>
{items.map((item) => <li key={item.id}><span className="date">{item.date}</span><HashLink to={`/news#news${item.id}`} >{Functions.mlang(item.title, lang)}</HashLink></li>)}
</ul>
</div>
</section>
</div>;
}
const items: NewsItem[] = siteData().news.slice(0, 3);
return (
<div className="block">
<section>
<NoticeSiteHasBeenArchived lang={lang} />
<p>{message[lang]}</p>
</section>
<hr />
<section className="whatsnew">
<div className="title">
<h3>{Functions.mlang("[en]What's new[/en][ja]最新ニュース[/ja]", lang)}</h3>
<p className="more">
<Link to="/news">More ...</Link>
</p>
</div>
<div className="news">
<ul>
{items.map((item) => (
<li key={item.id}>
<span className="date">{item.date}</span>
<Link to={`/news#news${item.id}`}>{Functions.mlang(item.title, lang)}</Link>
</li>
))}
</ul>
</div>
</section>
</div>
);
};
export default WhatsNew;
export default WhatsNew;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+24 -20
View File
@@ -1,8 +1,7 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { Route, RouteComponentProps, Switch } from 'react-router-dom';
import { Helmet } from '@dr.pogodin/react-helmet';
import { Route, Routes } from 'react-router';
import PageNotFound from '../common/lib/PageNotFound';
import { MultiLang } from '../config';
import type { MultiLang } from '../config';
import Functions from '../functions';
import styles from './Database.module.css';
import DatabaseAdvancedSearch from './DatabaseAdvancedSearch';
@@ -22,23 +21,28 @@ const Database = (props: Props) => {
return (
<div className={styles.database}>
<Helmet>
<title>{Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)}</title>
<title>
{Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)}
</title>
</Helmet>
<Switch>
<Route exact path="/database" render={(props: RouteComponentProps) => <DatabaseTop lang={lang} {...props} />} />
<Route exact path="/database/item/:id" render={(props: RouteComponentProps<{ id: string }>) => <DatabaseDetailItem lang={lang} {...props} />} />
<Route exact path="/database/item/id/:doi" render={(props: RouteComponentProps<{ doi: string }>) => <DatabaseDetailItem lang={lang} {...props} />} />
<Route exact path="/database/advanced" render={(props: RouteComponentProps) => <DatabaseAdvancedSearch lang={lang} {...props} />} />
<Route exact path="/database/list" render={(props: RouteComponentProps) => <DatabaseSearchByIndexId lang={lang} {...props} />} />
<Route exact path="/database/list/:id" render={(props: RouteComponentProps<{ id: string }>) => <DatabaseSearchByIndexId lang={lang} {...props} />} />
<Route exact path="/database/search" render={(props: RouteComponentProps) => <DatabaseSearchByKeyword lang={lang} {...props} />} />
<Route exact path="/database/search/advanced" render={(props: RouteComponentProps) => <DatabaseSearchByAdvancedKeyword lang={lang} {...props} />} />
<Route exact path="/database/search/itemtype/:itemType" render={(props: RouteComponentProps<{ itemType: string }>) => <DatabaseSearchByItemType lang={lang} {...props} />} />
<Route exact path="/database/search/itemtype/:itemType/:subItemType" render={(props: RouteComponentProps<{ itemType: string; subItemType: string }>) => <DatabaseSearchByItemType lang={lang} {...props} />} />
<Route component={PageNotFound} />
</Switch>
<Routes>
<Route index element={<DatabaseTop lang={lang} />} />
<Route path="item/:id" element={<DatabaseDetailItem lang={lang} />} />
<Route path="item/id/:doi" element={<DatabaseDetailItem lang={lang} />} />
<Route path="advanced" element={<DatabaseAdvancedSearch lang={lang} />} />
<Route path="list" element={<DatabaseSearchByIndexId lang={lang} />} />
<Route path="list/:id" element={<DatabaseSearchByIndexId lang={lang} />} />
<Route path="search" element={<DatabaseSearchByKeyword lang={lang} />} />
<Route path="search/advanced" element={<DatabaseSearchByAdvancedKeyword lang={lang} />} />
<Route path="search/itemtype/:itemType" element={<DatabaseSearchByItemType lang={lang} />} />
<Route
path="search/itemtype/:itemType/:subItemType"
element={<DatabaseSearchByItemType lang={lang} />}
/>
<Route path="*" element={<PageNotFound lang={lang} />} />
</Routes>
</div>
);
}
};
export default Database;
export default Database;
+32 -35
View File
@@ -1,48 +1,45 @@
import React, { Component } from 'react';
import { RouteComponentProps } from 'react-router';
import Config, { MultiLang } from '../config';
import { useState } from 'react';
import { useNavigate } from 'react-router';
import Config, { type MultiLang } from '../config';
import Functions from '../functions';
import ItemType from './item-type';
import AdvancedSearchQuery from './lib/AdvancedSearchQuery';
import ItemUtil from './lib/ItemUtil';
interface Props extends RouteComponentProps {
interface Props {
lang: MultiLang;
}
class DatabaseAdvancedSearch extends Component<Props> {
const DatabaseAdvancedSearch = (props: Props) => {
const { lang } = props;
const navigate = useNavigate();
// The child fields mutate this instance directly, so it must survive re-renders.
const [query] = useState(() => new AdvancedSearchQuery());
private query: AdvancedSearchQuery = new AdvancedSearchQuery();
constructor(props: Props) {
super(props);
this.handleClickSearchButton = this.handleClickSearchButton.bind(this);
}
handleClickSearchButton() {
if (!this.query.empty()) {
const url = ItemUtil.getSearchByAdvancedKeywordsUrl(this.query);
this.props.history.push(url);
const handleClickSearchButton = () => {
if (!query.empty()) {
void navigate(ItemUtil.getSearchByAdvancedKeywordsUrl(query));
}
}
};
render() {
const { lang } = this.props;
return (
<div className="advancedSearch">
<h3>{Functions.mlang('[en]Search Items[/en][ja]アイテム検索[/ja]', lang)}</h3>
<div className="search">
<button className="formButton" onClick={this.handleClickSearchButton}>Search</button>
</div>
{Config.XOONIPS_ITEMTYPES.map((type) => {
return <ItemType.AdvancedSearch key={type} type={'xnp' + type} lang={lang} query={this.query} />;
})}
<div className="search">
<button className="formButton" onClick={this.handleClickSearchButton}>Search</button>
</div>
return (
<div className="advancedSearch">
<h3>{Functions.mlang('[en]Search Items[/en][ja]アイテム検索[/ja]', lang)}</h3>
<div className="search">
<button type="button" className="formButton" onClick={handleClickSearchButton}>
Search
</button>
</div>
);
}
}
{Config.XOONIPS_ITEMTYPES.map((type) => {
return <ItemType.AdvancedSearch key={type} type={`xnp${type}`} lang={lang} query={query} />;
})}
<div className="search">
<button type="button" className="formButton" onClick={handleClickSearchButton}>
Search
</button>
</div>
</div>
);
};
export default DatabaseAdvancedSearch;
export default DatabaseAdvancedSearch;
+49 -74
View File
@@ -1,89 +1,64 @@
import React, { Component } from 'react';
import { Helmet } from 'react-helmet';
import { RouteComponentProps } from 'react-router';
import { Helmet } from '@dr.pogodin/react-helmet';
import { useEffect, useState } from 'react';
import { useParams } from 'react-router';
import Loading from '../common/lib/Loading';
import PageNotFound from '../common/lib/PageNotFound';
import { MultiLang } from '../config';
import type { MultiLang } from '../config';
import Functions from '../functions';
import ItemType from './item-type';
import ItemUtil, { Item } from './lib/ItemUtil';
import ItemUtil, { type Item } from './lib/ItemUtil';
interface Params {
id?: string;
doi?: string;
}
interface Props extends RouteComponentProps<Params> {
interface Props {
lang: MultiLang;
}
interface State {
loading: boolean;
item: Item | null;
}
const DatabaseDetailItem = (props: Props) => {
const { lang } = props;
const params = useParams<{ id?: string; doi?: string }>();
const id = typeof params.id !== 'undefined' ? (params.id.match(/^\d+$/) !== null ? parseInt(params.id, 10) : 0) : 0;
const doi = params.doi ?? '';
const [loading, setLoading] = useState(true);
const [item, setItem] = useState<Item | null>(null);
class DatabaseDetailItem extends Component<Props, State> {
private id: number;
private doi: string;
constructor(props: Props) {
super(props);
this.state = {
loading: true,
item: null,
useEffect(() => {
let active = true;
const receive = (found: Item | null) => {
if (active) {
setItem(found);
setLoading(false);
}
};
const { params } = this.props.match;
this.id = typeof params.id !== 'undefined' ? (params.id.match(/^\d+$/) !== null ? parseInt(params.id, 10) : 0) : 0;
this.doi = typeof params.doi !== 'undefined' ? params.doi : '';
}
componentDidMount() {
this.updateItem();
}
componentDidUpdate() {
const { params } = this.props.match;
const id = typeof params.id !== 'undefined' ? (params.id.match(/^\d+$/) !== null ? parseInt(params.id, 10) : 0) : 0;
const doi = typeof params.doi !== 'undefined' ? params.doi : '';
if (this.id !== id || this.doi !== doi) {
this.id = id;
this.doi = doi;
this.updateItem();
if (doi !== '') {
ItemUtil.getByDoi(doi, receive);
} else if (id !== 0) {
ItemUtil.get(id, receive);
} else {
receive(null);
}
}
return () => {
active = false;
};
}, [id, doi]);
updateItem() {
if (this.doi !== '') {
ItemUtil.getByDoi(this.doi, (item) => {
this.setState({ loading: false, item });
});
} else if (this.id !== 0) {
ItemUtil.get(this.id, (item) => {
this.setState({ loading: false, item });
});
}
if (loading) {
return <Loading />;
}
render() {
const { lang } = this.props;
if (this.state.loading) {
return <Loading />;
}
if (this.state.item === null) {
return <PageNotFound lang={lang} />;
}
return (
<>
<Helmet>
<title>{Functions.mlang(this.state.item.title, lang)} - {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)}</title>
</Helmet>
<h3>{Functions.mlang('[en]Item Detail[/en][ja]アイテム詳細[/ja]', lang)}</h3>
<br />
<ItemType.Detail lang={lang} item={this.state.item} />
</>
);
if (item === null) {
return <PageNotFound lang={lang} />;
}
}
return (
<>
<Helmet>
<title>
{Functions.mlang(item.title, lang)} -{' '}
{Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)}
</title>
</Helmet>
<h3>{Functions.mlang('[en]Item Detail[/en][ja]アイテム詳細[/ja]', lang)}</h3>
<br />
<ItemType.Detail lang={lang} item={item} />
</>
);
};
export default DatabaseDetailItem;
export default DatabaseDetailItem;
@@ -1,56 +1,32 @@
import React, { Component } from 'react';
import { RouteComponentProps } from 'react-router';
import { MultiLang } from '../config';
import AdvancedSearchQuery from './lib/AdvancedSearchQuery';
import { useCallback, useMemo } from 'react';
import { useLocation } from 'react-router';
import type { MultiLang } from '../config';
import DatabaseListItem from './lib/DatabaseListItem';
import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil';
import ItemUtil, { type SearchCallbackFunc, type SortCondition } from './lib/ItemUtil';
interface Props extends RouteComponentProps {
lang: MultiLang
interface Props {
lang: MultiLang;
}
interface State {
search: string;
query: AdvancedSearchQuery;
}
const DatabaseSearchByAdvancedKeyword = (props: Props) => {
const { lang } = props;
const location = useLocation();
const query = useMemo(() => ItemUtil.getAdvancedSearchQueryByQuery(location.search), [location.search]);
class DatabaseSearchByAdvancedKeyword extends Component<Props, State> {
const searchFunc = useCallback(
(condition: SortCondition, func: SearchCallbackFunc) => {
ItemUtil.getListByAdvancedSearchQuery(query, condition, func);
},
[query]
);
constructor(props: Props) {
super(props);
const search = props.location.search;
const query = ItemUtil.getAdvancedSearchQueryByQuery(search);
this.state = { search, query };
this.searchFunc = this.searchFunc.bind(this);
}
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
const search = nextProps.location.search;
if (prevState.search !== search) {
const query = ItemUtil.getAdvancedSearchQueryByQuery(search);
return { search, query };
}
return null;
}
getUrl() {
return ItemUtil.getSearchByAdvancedKeywordsUrl(this.state.query);
}
searchFunc(condition: SortCondition, func: SearchCallbackFunc) {
ItemUtil.getListByAdvancedSearchQuery(this.state.query, condition, func);
}
render() {
const { lang } = this.props;
const baseUrl = this.getUrl();
return (
<div className="list">
<h3>Listing item</h3>
<DatabaseListItem lang={lang} url={baseUrl} search={this.searchFunc} />
</div>
);
}
}
const baseUrl = ItemUtil.getSearchByAdvancedKeywordsUrl(query);
return (
<div className="list">
<h3>Listing item</h3>
<DatabaseListItem lang={lang} url={baseUrl} search={searchFunc} />
</div>
);
};
export default DatabaseSearchByAdvancedKeyword;
+49 -74
View File
@@ -1,89 +1,64 @@
import React, { Component, Fragment } from 'react';
import { Helmet } from 'react-helmet';
import { RouteComponentProps } from 'react-router';
import { Link } from 'react-router-dom';
import { Helmet } from '@dr.pogodin/react-helmet';
import { Fragment, useCallback } from 'react';
import { Link, useParams } from 'react-router';
import PageNotFound from '../common/lib/PageNotFound';
import { MultiLang } from '../config';
import type { MultiLang } from '../config';
import Functions from '../functions';
import DatabaseListIndex from './lib/DatabaseListIndex';
import DatabaseListItem from './lib/DatabaseListItem';
import IndexUtil, { Index, INDEX_ID_PUBLIC } from './lib/IndexUtil';
import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil';
import IndexUtil, { INDEX_ID_PUBLIC, type Index } from './lib/IndexUtil';
import ItemUtil, { type SearchCallbackFunc, type SortCondition } from './lib/ItemUtil';
interface Params {
id?: string;
}
export interface Props extends RouteComponentProps<Params> {
export interface Props {
lang: MultiLang;
}
interface State {
indexId: number;
}
const DatabaseSearchByIndexId = (props: Props) => {
const { lang } = props;
const { id } = useParams<{ id?: string }>();
const indexId = id ? (id.match(/^\d+$/) !== null ? parseInt(id, 10) : 0) : INDEX_ID_PUBLIC;
class DatabaseSearchByIndexId extends Component<Props, State> {
const searchFunc = useCallback(
(condition: SortCondition, func: SearchCallbackFunc) => {
if (indexId === 0) {
func({ total: 0, data: [] });
} else {
ItemUtil.getListByIndexId(indexId, condition, func);
}
},
[indexId]
);
constructor(props: Props) {
super(props);
const { params } = props.match;
this.state = {
indexId: params.id ? (params.id.match(/^\d+$/) !== null ? parseInt(params.id, 10) : 0) : INDEX_ID_PUBLIC,
}
this.searchFunc = this.searchFunc.bind(this);
const index = IndexUtil.get(indexId);
if (index === null) {
return <PageNotFound lang={lang} />;
}
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
const { params } = nextProps.match;
const indexId = params.id ? (params.id.match(/^\d+$/) !== null ? parseInt(params.id, 10) : 0) : INDEX_ID_PUBLIC;
if (prevState.indexId !== indexId) {
return { indexId };
}
return null;
}
getUrl() {
if (this.state.indexId === 0) {
return '/';
}
return IndexUtil.getUrl(this.state.indexId);
}
searchFunc(condition: SortCondition, func: SearchCallbackFunc) {
if (this.state.indexId === 0) {
const res = { total: 0, data: [] };
func(res);
} else {
ItemUtil.getListByIndexId(this.state.indexId, condition, func);
}
}
render() {
const { lang } = this.props;
const index = IndexUtil.get(this.state.indexId);
if (index === null) {
return <PageNotFound lang={lang} />;
}
const baseUrl = this.getUrl();
const pIndexes = IndexUtil.getParents(this.state.indexId);
const parents = pIndexes.map((value: Index) => {
const url: string = IndexUtil.getUrl(value.id);
const title = Functions.mlang(value.title, lang);
return <Fragment key={value.id}>/ <Link to={url}>{title}</Link> </Fragment>;
});
const title = pIndexes.map((value) => { return '/' + Functions.mlang(value.title, lang); }).join('');
const baseUrl = indexId === 0 ? '/' : IndexUtil.getUrl(indexId);
const pIndexes = IndexUtil.getParents(indexId);
const parents = pIndexes.map((value: Index) => {
const url: string = IndexUtil.getUrl(value.id);
const title = Functions.mlang(value.title, lang);
return (
<div className="list">
<Helmet>
<title>{Functions.mlang(title, lang)} - {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)}</title>
</Helmet>
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<div>{parents}</div>
<DatabaseListIndex lang={lang} index={index} />
<DatabaseListItem lang={lang} url={baseUrl} search={this.searchFunc} />
</div>
<Fragment key={value.id}>
/ <Link to={url}>{title}</Link>{' '}
</Fragment>
);
}
}
});
const title = pIndexes.map((value) => `/${Functions.mlang(value.title, lang)}`).join('');
return (
<div className="list">
<Helmet>
<title>
{Functions.mlang(title, lang)} - {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} -{' '}
{Functions.siteTitle(lang)}
</title>
</Helmet>
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<div>{parents}</div>
<DatabaseListIndex lang={lang} index={index} />
<DatabaseListItem lang={lang} url={baseUrl} search={searchFunc} />
</div>
);
};
export default DatabaseSearchByIndexId;
+30 -62
View File
@@ -1,73 +1,41 @@
import React, { Component } from 'react';
import { RouteComponentProps } from 'react-router';
import { MultiLang } from '../config';
import { useCallback } from 'react';
import { useParams } from 'react-router';
import type { MultiLang } from '../config';
import Functions from '../functions';
import DatabaseListItem from './lib/DatabaseListItem';
import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil';
import ItemUtil, { type SearchCallbackFunc, type SortCondition } from './lib/ItemUtil';
interface Params {
itemType: string;
subItemType?: string;
}
interface Props extends RouteComponentProps<Params> {
interface Props {
lang: MultiLang;
}
interface State {
itemType: string;
subItemType: string;
}
const DatabaseSearchByItemType = (props: Props) => {
const { lang } = props;
const params = useParams<{ itemType?: string; subItemType?: string }>();
const itemType = params.itemType ?? '';
const subItemType = params.subItemType ?? '';
class DatabaseSearchByItemType extends Component<Props, State> {
const searchFunc = useCallback(
(condition: SortCondition, func: SearchCallbackFunc) => {
if (itemType === '') {
func({ total: 0, data: [] });
} else {
ItemUtil.getListByItemType(itemType, subItemType, condition, func);
}
},
[itemType, subItemType]
);
constructor(props: Props) {
super(props);
const { params } = this.props.match;
this.state = {
itemType: params.itemType ? params.itemType : '',
subItemType: params.subItemType ? params.subItemType : '',
};
this.searchFunc = this.searchFunc.bind(this);
let baseUrl = ItemUtil.getItemTypeSearchUrl(itemType);
if (subItemType !== '') {
baseUrl += `/${subItemType}`;
}
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
const { params } = nextProps.match;
const item_type = params.itemType ? params.itemType : '';
const sub_item_type = params.subItemType ? params.subItemType : '';
if (prevState.itemType !== item_type || prevState.subItemType !== sub_item_type) {
return { item_type, sub_item_type };
}
return null;
}
searchFunc(condition: SortCondition, func: SearchCallbackFunc) {
if (this.state.itemType === '') {
const res = { total: 0, data: [] };
func(res);
} else {
ItemUtil.getListByItemType(this.state.itemType, this.state.subItemType, condition, func);
}
}
getUrl() {
let url = ItemUtil.getItemTypeSearchUrl(this.state.itemType);
if (this.state.subItemType !== '') {
url += '/' + this.state.subItemType;
}
return url;
}
render() {
const { lang } = this.props;
const baseUrl = this.getUrl();
return (
<div className="list">
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<DatabaseListItem lang={lang} url={baseUrl} search={this.searchFunc} />
</div>
);
}
}
return (
<div className="list">
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<DatabaseListItem lang={lang} url={baseUrl} search={searchFunc} />
</div>
);
};
export default DatabaseSearchByItemType;
+30 -50
View File
@@ -1,60 +1,40 @@
import React, { Component } from 'react';
import { RouteComponentProps } from 'react-router';
import { MultiLang } from '../config';
import { useCallback } from 'react';
import { useLocation } from 'react-router';
import type { MultiLang } from '../config';
import Functions from '../functions';
import DatabaseListItem from './lib/DatabaseListItem';
import ItemUtil, { KeywordSearchType, SearchCallbackFunc, SortCondition } from './lib/ItemUtil';
import ItemUtil, { type SearchCallbackFunc, type SortCondition } from './lib/ItemUtil';
interface Props extends RouteComponentProps {
interface Props {
lang: MultiLang;
}
interface State {
type: KeywordSearchType;
keyword: string;
}
const DatabaseSearchByKeyword = (props: Props) => {
const { lang } = props;
const location = useLocation();
const { type, keyword } = ItemUtil.getSearchKeywordByQuery(location.search);
class DatabaseSearchByKeyword extends Component<Props, State> {
const searchFunc = useCallback(
(condition: SortCondition, func: SearchCallbackFunc) => {
if (keyword === '') {
func({ total: 0, data: [] });
} else {
ItemUtil.getListByKeyword(type, keyword, condition, func);
}
},
[type, keyword]
);
constructor(props: Props) {
super(props);
const { type, keyword } = ItemUtil.getSearchKeywordByQuery(this.props.location.search);
this.state = { type, keyword };
this.searchFunc = this.searchFunc.bind(this);
}
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
const { type, keyword } = ItemUtil.getSearchKeywordByQuery(nextProps.location.search);
if (prevState.type !== type || prevState.keyword !== keyword) {
return { type, keyword };
}
return null;
}
getUrl() {
return ItemUtil.getSearchByKeywordUrl(this.state.type, this.state.keyword);
}
searchFunc(condition: SortCondition, func: SearchCallbackFunc) {
if (this.state.keyword === '') {
const res = { total: 0, data: [] };
func(res);
} else {
ItemUtil.getListByKeyword(this.state.type, this.state.keyword, condition, func);
}
}
render() {
const { lang } = this.props;
const baseUrl = this.getUrl();
return (
<div className="list">
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<p>{Functions.mlang('[en]Search Keyword[/en][ja]検索キーワード[/ja]', lang)} : {this.state.keyword}</p>
<DatabaseListItem lang={lang} url={baseUrl} search={this.searchFunc} />
</div>
);
}
}
const baseUrl = ItemUtil.getSearchByKeywordUrl(type, keyword);
return (
<div className="list">
<h3>{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}</h3>
<p>
{Functions.mlang('[en]Search Keyword[/en][ja]検索キーワード[/ja]', lang)} : {keyword}
</p>
<DatabaseListItem lang={lang} url={baseUrl} search={searchFunc} />
</div>
);
};
export default DatabaseSearchByKeyword;
+1 -1
View File
@@ -10,4 +10,4 @@
.itemTypes .itemType :global(table .itemTypeName) {
vertical-align: middle;
font-size: large;
}
}
+7 -8
View File
@@ -1,5 +1,4 @@
import React from 'react';
import Config, { MultiLang } from '../config';
import Config, { type MultiLang } from '../config';
import styles from './DatabaseTop.module.css';
import ItemType from './item-type';
@@ -19,13 +18,13 @@ const DatabaseTop = (props: Props) => {
return (
<table className={styles.itemTypes}>
<tbody>
{types.map((value, idx) => {
{types.map((value) => {
return (
<tr key={idx}>
{value.map((type, idx) => {
<tr key={value.join('-')}>
{value.map((type) => {
return (
<td key={idx} className={styles.itemType}>
{type !== '' && <ItemType.Top lang={lang} type={'xnp' + type} />}
<td key={type} className={styles.itemType}>
{type !== '' && <ItemType.Top lang={lang} type={`xnp${type}`} />}
</td>
);
})}
@@ -35,6 +34,6 @@ const DatabaseTop = (props: Props) => {
</tbody>
</table>
);
}
};
export default DatabaseTop;
+34 -37
View File
@@ -1,21 +1,17 @@
import React, { Component } from 'react';
import { Redirect, RouteComponentProps, withRouter } from 'react-router';
import { Navigate, useLocation } from 'react-router';
import PageNotFound from '../common/lib/PageNotFound';
import { MultiLang } from '../config';
import type { MultiLang } from '../config';
import Functions from '../functions';
interface Props extends RouteComponentProps {
interface Props {
lang: MultiLang;
}
class DatabaseXoopsPathRedirect extends Component<Props> {
getRedirectUrl(): string {
const { location } = this.props;
const pathname = location.pathname || '';
const query = new URLSearchParams(location.search);
const search = new RegExp('^/modules/xoonips(?:/+(.*))?$');
const matches = pathname.match(search);
const getRedirectUrl = (pathname: string, search: string): string => {
const query = new URLSearchParams(search);
const pattern = /^\/modules\/xoonips(?:\/+(.*))?$/;
const matches = pathname.match(pattern);
{
if (matches === null) {
return '';
}
@@ -28,11 +24,11 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
case 'detail.php': {
const id = query.get('id');
if (id !== null) {
return '/database/item/id/' + Functions.escape(id);
return `/database/item/id/${Functions.escape(id)}`;
}
const itemId = query.get('item_id');
if (itemId !== null && itemId.match(/^\d+$/) !== null) {
return '/database/item/' + Functions.escape(itemId);
return `/database/item/${Functions.escape(itemId)}`;
}
return '';
}
@@ -40,13 +36,13 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
const indexId = query.get('index_id');
if (indexId !== null && indexId.match(/^\d+$/) !== null) {
const params = new URLSearchParams();
const map: any = {
const map: Record<string, { key: string; isNumber: boolean }> = {
orderby: { key: 'orderby', isNumber: false },
order_dir: { key: 'order_dir', isNumber: true },
itemcount: { key: 'itemcount', isNumber: true },
page: { key: 'page', isNumber: true }
page: { key: 'page', isNumber: true },
};
for (let k in map) {
for (const k in map) {
const v = query.get(k);
if (v === null || v.length === 0) {
continue;
@@ -57,7 +53,7 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
params.set(map[k].key, v);
}
const paramStr = params.toString();
return '/database/list/' + Functions.escape(indexId) + (paramStr.length > 0 ? '?' + paramStr : '');
return `/database/list/${Functions.escape(indexId)}${paramStr.length > 0 ? `?${paramStr}` : ''}`;
}
break;
}
@@ -78,13 +74,13 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
return '';
}
const params = new URLSearchParams({ type, keyword });
const map: any = {
const map: Record<string, { key: string; isNumber: boolean }> = {
orderby: { key: 'orderby', isNumber: false },
orderdir: { key: 'order_dir', isNumber: true },
item_per_page: { key: 'itemcount', isNumber: true },
page: { key: 'page', isNumber: true }
page: { key: 'page', isNumber: true },
};
for (let k in map) {
for (const k in map) {
const v = query.get(k);
if (v === null || v.length === 0) {
continue;
@@ -94,7 +90,7 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
}
params.set(map[k].key, v);
}
return '/database/search?' + params.toString();
return `/database/search?${params.toString()}`;
}
case 'itemtypesearch': {
const itemType = query.get('search_itemtype');
@@ -102,22 +98,22 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
return '';
}
const type = itemType.replace('xnp', '');
return '/database/search/itemtype/' + Functions.escape(type);
return `/database/search/itemtype/${Functions.escape(type)}`;
}
case 'itemsubtypesearch': {
let type = '';
let subtype = '';
query.forEach((v, k) => {
if (k.match(/^xnp[a-z]+$/) !== null && !!v) {
if (k.match(/^xnp[a-z]+$/) !== null && v) {
type = k.replace('xnp', '');
return;
}
})
});
if (type === '') {
return '';
}
query.forEach((v, k) => {
if (k.match(`^xnp${type}_.+$`) !== null && !!v) {
if (k.match(`^xnp${type}_.+$`) !== null && v) {
subtype = v;
return;
}
@@ -125,7 +121,7 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
if (subtype === '') {
return '';
}
return '/database/search/itemtype/' + Functions.escape(type) + '/' + Functions.escape(subtype);
return `/database/search/itemtype/${Functions.escape(type)}/${Functions.escape(subtype)}`;
}
}
return '';
@@ -134,17 +130,18 @@ class DatabaseXoopsPathRedirect extends Component<Props> {
return '/database/advanced';
}
}
return '';
}
return '';
};
render() {
const { lang } = this.props;
const url = this.getRedirectUrl();
if (url === '') {
return <PageNotFound lang={lang} />;
}
return <Redirect to={url} />;
const DatabaseXoopsPathRedirect = (props: Props) => {
const { lang } = props;
const location = useLocation();
const url = getRedirectUrl(location.pathname || '', location.search);
if (url === '') {
return <PageNotFound lang={lang} />;
}
}
return <Navigate to={url} replace />;
};
export default withRouter(DatabaseXoopsPathRedirect);
export default DatabaseXoopsPathRedirect;
@@ -1,21 +1,23 @@
import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
import AdvancedSearchBase, { type AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
class BinderAdvancedSearch extends AdvancedSearchBase {
constructor(props: AdvancedSearchBaseProps) {
super(props);
this.type = 'binder';
this.title = 'Binder';
this.state.values['title'] = '';
this.state.values['keyword'] = '';
this.state.values['description'] = '';
this.state.values['doi'] = '';
this.state.values.title = '';
this.state.values.keyword = '';
this.state.values.description = '';
this.state.values.doi = '';
}
getRows() {
const rows = [
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: this.renderFieldInputText('keyword', 50) },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: this.renderFieldInputText('keyword', 50),
},
{ label: '[en]Description[/en][ja]概要[/ja]', value: this.renderFieldInputText('description', 50) },
{ label: 'ID', value: this.renderFieldInputText('doi', 50) },
];
+37 -14
View File
@@ -1,10 +1,10 @@
import React, { Component } from 'react';
import { Component } from 'react';
import type { MultiLang } from '../../../config';
import Functions from '../../../functions';
import ItemUtil, { ItemBinder, Item } from '../../lib/ItemUtil';
import ItemUtil, { type Item, type ItemBinder } from '../../lib/ItemUtil';
import ItemType from '..';
import DetailBase from '../lib/DetailBase';
import ItemTypeField from '../lib/field';
import { MultiLang } from '../../../config';
import ItemType from '..';
interface Props {
lang: MultiLang;
@@ -27,7 +27,7 @@ class BinderLinkItems extends Component<Props, State> {
this.updateItems();
}
componentDidUpdate(prevProps: Props, prevState: State) {
componentDidUpdate(prevProps: Props) {
const prevItemIds = prevProps.item.item_link;
const nextItemIds = this.props.item.item_link;
if (prevItemIds.toString() !== nextItemIds.toString()) {
@@ -51,7 +51,13 @@ class BinderLinkItems extends Component<Props, State> {
<tbody>
{this.state.items.map((item, idx) => {
const evenodd = idx % 2 ? 'even' : 'odd';
return <tr key={item.item_id}><td className={evenodd}><ItemType.List lang={lang} item={item} /></td></tr>;
return (
<tr key={item.item_id}>
<td className={evenodd}>
<ItemType.List lang={lang} item={item} />
</td>
</tr>
);
})}
</tbody>
</table>
@@ -60,20 +66,37 @@ class BinderLinkItems extends Component<Props, State> {
}
class BinderDetail extends DetailBase {
getFields() {
const { lang } = this.props;
const item = this.props.item as ItemBinder;
return [
{ label: 'ID', value: item.doi },
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} /> },
{ label: '[en]Description[/en][ja]概要[/ja]', value: <ItemTypeField.Description lang={lang} description={item.description} /> },
{ label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} /> },
{ label: '[en]Created Date[/en][ja]作成日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} /> },
{ label: '[en]Contributor[/en][ja]登録者[/ja]', value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} /> },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} />,
},
{
label: '[en]Description[/en][ja]概要[/ja]',
value: <ItemTypeField.Description lang={lang} description={item.description} />,
},
{
label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} />,
},
{
label: '[en]Created Date[/en][ja]作成日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} />,
},
{
label: '[en]Contributor[/en][ja]登録者[/ja]',
value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} />,
},
{ label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name },
{ label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]', value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} /> },
{
label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]',
value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} />,
},
{ label: 'Index', value: <ItemTypeField.ItemIndex lang={lang} index={item.index} /> },
];
}
@@ -92,4 +115,4 @@ class BinderDetail extends DetailBase {
}
}
export default BinderDetail;
export default BinderDetail;
+5 -6
View File
@@ -1,12 +1,10 @@
import React from 'react';
import { Link } from 'react-router-dom';
import { Link } from 'react-router';
import Functions from '../../../functions';
import iconFile from '../../assets/images/icon_binder.gif';
import { ItemBinder } from '../../lib/ItemUtil';
import ListBase, { ListBaseProps } from '../lib/ListBase';
import type { ItemBinder } from '../../lib/ItemUtil';
import ListBase, { type ListBaseProps } from '../lib/ListBase';
class BinderList extends ListBase {
constructor(props: ListBaseProps) {
super(props);
this.label = 'Binder';
@@ -18,7 +16,8 @@ class BinderList extends ListBase {
const item = this.props.item as ItemBinder;
return (
<>
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link><br />
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link>
<br />
{Functions.mlang(item.description, lang)}
</>
);
+2 -3
View File
@@ -1,8 +1,7 @@
import TopBase, { TopBaseProps } from '../lib/TopBase';
import iconFile from '../../assets/images/icon_binder.gif';
import TopBase, { type TopBaseProps } from '../lib/TopBase';
class BinderTop extends TopBase {
constructor(props: TopBaseProps) {
super(props);
this.type = 'binder';
@@ -12,4 +11,4 @@ class BinderTop extends TopBase {
}
}
export default BinderTop;
export default BinderTop;
@@ -1,35 +1,43 @@
import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
import AdvancedSearchBase, { type AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
class BookAdvancedSearch extends AdvancedSearchBase {
constructor(props: AdvancedSearchBaseProps) {
super(props);
this.type = 'book';
this.title = 'Book';
this.state.values['title'] = '';
this.state.values['keyword'] = '';
this.state.values['description'] = '';
this.state.values['doi'] = '';
this.state.values['author'] = '';
this.state.values['editor'] = '';
this.state.values['publisher'] = '';
this.state.values['publication_year'] = '';
this.state.values['isbn'] = '';
this.state.values.title = '';
this.state.values.keyword = '';
this.state.values.description = '';
this.state.values.doi = '';
this.state.values.author = '';
this.state.values.editor = '';
this.state.values.publisher = '';
this.state.values.publication_year = '';
this.state.values.isbn = '';
this.state.values['file.book_pdf.original_file_name'] = '';
}
getRows() {
const rows = [
{ label: '[en]Book Title[/en][ja]著書名[/ja]', value: this.renderFieldInputText('title', 50) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: this.renderFieldInputText('keyword', 50) },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: this.renderFieldInputText('keyword', 50),
},
{ label: '[en]Description[/en][ja]概要[/ja]', value: this.renderFieldInputText('description', 50) },
{ label: 'ID', value: this.renderFieldInputText('doi', 50) },
{ label: '[en]Author[/en][ja]著者[/ja]', value: this.renderFieldInputText('author', 50) },
{ label: '[en]Editor[/en][ja]編集者[/ja]', value: this.renderFieldInputText('editor', 50) },
{ label: '[en]Publisher[/en][ja]出版社[/ja]', value: this.renderFieldInputText('publisher', 50) },
{ label: '[en]Publication Year[/en][ja]出版年[/ja]', value: this.renderFieldInputText('publication_year', 10) },
{
label: '[en]Publication Year[/en][ja]出版年[/ja]',
value: this.renderFieldInputText('publication_year', 10),
},
{ label: 'ISBN', value: this.renderFieldInputText('isbn', 50) },
{ label: '[en]PDF File[/en][ja]PDF ファイル[/ja]', value: this.renderFieldInputText('file.book_pdf.original_file_name', 50) },
{
label: '[en]PDF File[/en][ja]PDF ファイル[/ja]',
value: this.renderFieldInputText('file.book_pdf.original_file_name', 50),
},
];
return rows;
}
+52 -13
View File
@@ -1,33 +1,72 @@
import React from 'react';
import Functions from '../../../functions';
import { ItemBook } from '../../lib/ItemUtil';
import type { ItemBook } from '../../lib/ItemUtil';
import DetailBase from '../lib/DetailBase';
import ItemTypeField from '../lib/field';
class BookDetail extends DetailBase {
getFields() {
const { lang } = this.props;
const item = this.props.item as ItemBook;
return [
{ label: 'ID', value: item.doi },
{ label: '[en]Language[/en][ja]言語[/ja]', value: <ItemTypeField.Language lang={lang} itemLang={item.lang} /> },
{
label: '[en]Language[/en][ja]言語[/ja]',
value: <ItemTypeField.Language lang={lang} itemLang={item.lang} />,
},
{ label: '[en]Book Title[/en][ja]著書名[/ja]', value: Functions.mlang(item.title, lang) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} /> },
{ label: '[en]Description[/en][ja]概要[/ja]', value: <ItemTypeField.Description lang={lang} description={item.description} /> },
{ label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} /> },
{ label: '[en]Created Date[/en][ja]作成日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} /> },
{ label: '[en]Contributor[/en][ja]登録者[/ja]', value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} /> },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} />,
},
{
label: '[en]Description[/en][ja]概要[/ja]',
value: <ItemTypeField.Description lang={lang} description={item.description} />,
},
{
label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} />,
},
{
label: '[en]Created Date[/en][ja]作成日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} />,
},
{
label: '[en]Contributor[/en][ja]登録者[/ja]',
value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} />,
},
{ label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name },
{ label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]', value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} /> },
{
label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]',
value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} />,
},
{ label: '[en]Author[/en][ja]著者[/ja]', value: <ItemTypeField.Author lang={lang} author={item.author} /> },
{ label: '[en]Editor[/en][ja]編集者[/ja]', value: Functions.mlang(item.editor, lang) },
{ label: '[en]Publisher[/en][ja]出版社[/ja]', value: Functions.mlang(item.publisher, lang) },
{ label: '[en]Publication Year[/en][ja]出版年[/ja]', value: item.publication_year },
{ label: 'URL', value: <a href={item.url} target="_blank" rel="noopener noreferrer">{item.url}</a> },
{ label: '[en]PDF File[/en][ja]PDF ファイル[/ja]', value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="book_pdf" downloadLimit={item.attachment_dl_limit} /> },
{
label: 'URL',
value: (
<a href={item.url} target="_blank" rel="noopener noreferrer">
{item.url}
</a>
),
},
{
label: '[en]PDF File[/en][ja]PDF ファイル[/ja]',
value: (
<ItemTypeField.ItemFile
lang={lang}
file={item.file}
type="book_pdf"
downloadLimit={item.attachment_dl_limit}
/>
),
},
{ label: 'Index', value: <ItemTypeField.ItemIndex lang={lang} index={item.index} /> },
{ label: '[en]Related to[/en][ja]関連アイテム[/ja]', value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} /> },
{
label: '[en]Related to[/en][ja]関連アイテム[/ja]',
value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} />,
},
];
}
}
+6 -9
View File
@@ -1,12 +1,10 @@
import React, { Fragment } from 'react';
import { Link } from 'react-router-dom';
import { Link } from 'react-router';
import Functions from '../../../functions';
import iconFile from '../../assets/images/icon_book.gif';
import { ItemBook } from '../../lib/ItemUtil';
import ListBase, { ListBaseProps } from '../lib/ListBase';
import type { ItemBook } from '../../lib/ItemUtil';
import ListBase, { type ListBaseProps } from '../lib/ListBase';
class BookList extends ListBase {
constructor(props: ListBaseProps) {
super(props);
this.label = 'Book';
@@ -16,12 +14,11 @@ class BookList extends ListBase {
renderBody() {
const { lang } = this.props;
const item = this.props.item as ItemBook;
const authors = item.author.map((author, i) => {
return <Fragment key={i}>{i > 0 && ', '}{Functions.mlang(author, lang)}</Fragment>
});
const authors = item.author.map((author) => Functions.mlang(author, lang)).join(', ');
return (
<>
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link><br />
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link>
<br />
{authors}
</>
);
+2 -3
View File
@@ -1,8 +1,7 @@
import TopBase, { TopBaseProps } from '../lib/TopBase';
import iconFile from '../../assets/images/icon_book.gif';
import TopBase, { type TopBaseProps } from '../lib/TopBase';
class BookTop extends TopBase {
constructor(props: TopBaseProps) {
super(props);
this.type = 'book';
@@ -12,4 +11,4 @@ class BookTop extends TopBase {
}
}
export default BookTop;
export default BookTop;
+3 -3
View File
@@ -1,7 +1,7 @@
import BookTop from './BookTop';
import BookList from './BookList';
import BookDetail from './BookDetail';
import BookAdvancedSearch from './BookAdvancedSearch';
import BookDetail from './BookDetail';
import BookList from './BookList';
import BookTop from './BookTop';
const ItemTypeBook = {
Top: BookTop,
@@ -1,9 +1,7 @@
import React from 'react';
import { ItemConferenceSubTypes } from '../../lib/ItemUtil';
import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
import AdvancedSearchBase, { type AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
class ConferenceAdvancedSearch extends AdvancedSearchBase {
constructor(props: AdvancedSearchBaseProps) {
super(props);
this.type = 'conference';
@@ -12,15 +10,15 @@ class ConferenceAdvancedSearch extends AdvancedSearchBase {
const year = String(now.getFullYear());
const month = String(now.getMonth() + 1);
const mday = String(now.getDate());
this.state.values['title'] = '';
this.state.values['presentation_type'] = '';
this.state.values['author'] = '';
this.state.values['conference_from_year'] = year;
this.state.values['conference_from_month'] = month;
this.state.values['conference_from_mday'] = mday;
this.state.values['conference_to_year'] = year;
this.state.values['conference_to_month'] = month;
this.state.values['conference_to_mday'] = mday;
this.state.values.title = '';
this.state.values.presentation_type = '';
this.state.values.author = '';
this.state.values.conference_from_year = year;
this.state.values.conference_from_month = month;
this.state.values.conference_from_mday = mday;
this.state.values.conference_to_year = year;
this.state.values.conference_to_month = month;
this.state.values.conference_to_mday = mday;
this.setIgnoreKey('conference_from_year');
this.setIgnoreKey('conference_from_month');
this.setIgnoreKey('conference_from_mday');
@@ -33,8 +31,12 @@ class ConferenceAdvancedSearch extends AdvancedSearchBase {
return (
<>
<div>
{this.renderFieldDate('From', 'conference_from_year', 'conference_from_month', 'conference_from_mday')}
{this.renderFieldDate(
'From',
'conference_from_year',
'conference_from_month',
'conference_from_mday'
)}
</div>
<div>
{this.renderFieldDate('To', 'conference_to_year', 'conference_to_month', 'conference_to_mday')}
@@ -46,12 +48,15 @@ class ConferenceAdvancedSearch extends AdvancedSearchBase {
getRows() {
const rows = [
{ label: '[en]Presentation Title[/en][ja]発表議題[/ja]', value: this.renderFieldInputText('title', 50) },
{ label: '[en]Presentation Type[/en][ja]発表資料ファイル形式[/ja]', value: this.renderFieldSelect('presentation_type', ItemConferenceSubTypes) },
{
label: '[en]Presentation Type[/en][ja]発表資料ファイル形式[/ja]',
value: this.renderFieldSelect('presentation_type', ItemConferenceSubTypes),
},
{ label: '[en]Author[/en][ja]発表者[/ja]', value: this.renderFieldInputText('author', 50) },
{ label: '[en]Date[/en][ja]日付[/ja]', value: this.renderDate() }
{ label: '[en]Date[/en][ja]日付[/ja]', value: this.renderDate() },
];
return rows;
}
}
export default ConferenceAdvancedSearch;
export default ConferenceAdvancedSearch;
@@ -1,36 +1,67 @@
import React from 'react';
import Functions from '../../../functions';
import { ItemConference } from '../../lib/ItemUtil';
import type { ItemConference } from '../../lib/ItemUtil';
import DetailBase from '../lib/DetailBase';
import ItemTypeField from '../lib/field';
import ConferenceUtil from './ConferenceUtil';
class ConferenceDetail extends DetailBase {
getFields() {
const { lang } = this.props;
const item = this.props.item as ItemConference;
return [
{ label: 'ID', value: item.doi },
{ label: '[en]Language[/en][ja]言語[/ja]', value: <ItemTypeField.Language lang={lang} itemLang={item.lang} /> },
{
label: '[en]Language[/en][ja]言語[/ja]',
value: <ItemTypeField.Language lang={lang} itemLang={item.lang} />,
},
{ label: '[en]Conference Title[/en][ja]学会名[/ja]', value: Functions.mlang(item.conference_title, lang) },
{ label: '[en]Place[/en][ja]開催地[/ja]', value: item.place },
{ label: '[en]Date[/en][ja]日付[/ja]', value: <ConferenceUtil.ConferenceDate lang={lang} item={item} /> },
{ label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} /> },
{ label: '[en]Created Date[/en][ja]作成日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} /> },
{ label: '[en]Contributor[/en][ja]登録者[/ja]', value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} /> },
{
label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} />,
},
{
label: '[en]Created Date[/en][ja]作成日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} />,
},
{
label: '[en]Contributor[/en][ja]登録者[/ja]',
value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} />,
},
{ label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name },
{ label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]', value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} /> },
{
label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]',
value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} />,
},
{ label: '[en]Presentation Title[/en][ja]発表議題[/ja]', value: Functions.mlang(item.title, lang) },
{ label: '[en]Author[/en][ja]発表者[/ja]', value: <ItemTypeField.Author lang={lang} author={item.author} /> },
{ label: '[en]Abstract[/en][ja]要約[/ja]', value: <ItemTypeField.Description lang={lang} description={item.abstract} /> },
{ label: '[en]Presentation File[/en][ja]発表資料[/ja]', value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="conference_file" /> },
{ label: '[en]Presentation Type[/en][ja]発表資料ファイル形式[/ja]', value: <ConferenceUtil.PresentationType lang={lang} type={item.presentation_type} /> },
{ label: '[en]Conference Paper[/en][ja]学会資料[/ja]', value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="conference_paper" /> },
{
label: '[en]Author[/en][ja]発表者[/ja]',
value: <ItemTypeField.Author lang={lang} author={item.author} />,
},
{
label: '[en]Abstract[/en][ja]要約[/ja]',
value: <ItemTypeField.Description lang={lang} description={item.abstract} />,
},
{
label: '[en]Presentation File[/en][ja]発表資料[/ja]',
value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="conference_file" />,
},
{
label: '[en]Presentation Type[/en][ja]発表資料ファイル形式[/ja]',
value: <ConferenceUtil.PresentationType lang={lang} type={item.presentation_type} />,
},
{
label: '[en]Conference Paper[/en][ja]学会資料[/ja]',
value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="conference_paper" />,
},
{ label: 'Index', value: <ItemTypeField.ItemIndex lang={lang} index={item.index} /> },
{ label: '[en]Related to[/en][ja]関連アイテム[/ja]', value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} /> },
{
label: '[en]Related to[/en][ja]関連アイテム[/ja]',
value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} />,
},
];
}
}
export default ConferenceDetail;
export default ConferenceDetail;
@@ -1,13 +1,11 @@
import React, { Fragment } from 'react';
import { Link } from 'react-router-dom';
import { ItemConference } from '../../lib/ItemUtil';
import ListBase, { ListBaseProps } from '../lib/ListBase';
import ConferenceUtil from './ConferenceUtil';
import iconFile from '../../assets/images/icon_conference.gif';
import { Link } from 'react-router';
import Functions from '../../../functions';
import iconFile from '../../assets/images/icon_conference.gif';
import type { ItemConference } from '../../lib/ItemUtil';
import ListBase, { type ListBaseProps } from '../lib/ListBase';
import ConferenceUtil from './ConferenceUtil';
class ConferenceList extends ListBase {
constructor(props: ListBaseProps) {
super(props);
this.label = 'Conference';
@@ -17,17 +15,17 @@ class ConferenceList extends ListBase {
renderBody() {
const { lang } = this.props;
const item = this.props.item as ItemConference;
const authors = item.author.map((author, i) => {
return <Fragment key={i}>{i > 0 && ', '}{Functions.mlang(author, lang)}</Fragment>
});
const authors = item.author.map((author) => Functions.mlang(author, lang)).join(', ');
return (
<>
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link><br />
{Functions.mlang(item.conference_title, lang)} (<ConferenceUtil.PresentationType lang={lang} type={item.presentation_type} />)<br />
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link>
<br />
{Functions.mlang(item.conference_title, lang)} (
<ConferenceUtil.PresentationType lang={lang} type={item.presentation_type} />)<br />
{authors}
</>
);
}
}
export default ConferenceList;
export default ConferenceList;
@@ -1,9 +1,8 @@
import { ItemConferenceSubTypes } from '../../lib/ItemUtil';
import TopBase, { TopBaseProps } from '../lib/TopBase';
import iconFile from '../../assets/images/icon_conference.gif';
import { ItemConferenceSubTypes } from '../../lib/ItemUtil';
import TopBase, { type TopBaseProps } from '../lib/TopBase';
class ConferenceTop extends TopBase {
constructor(props: TopBaseProps) {
super(props);
this.type = 'conference';
@@ -14,4 +13,4 @@ class ConferenceTop extends TopBase {
}
}
export default ConferenceTop;
export default ConferenceTop;
@@ -1,6 +1,5 @@
import React from 'react';
import { MultiLang } from '../../../config';
import { ItemConference, ItemConferenceSubType, ItemConferenceSubTypes } from '../../lib/ItemUtil';
import type { MultiLang } from '../../../config';
import { type ItemConference, type ItemConferenceSubType, ItemConferenceSubTypes } from '../../lib/ItemUtil';
interface PresentationTypeProps {
lang: MultiLang;
@@ -9,12 +8,14 @@ interface PresentationTypeProps {
const PresentationType = (props: PresentationTypeProps) => {
const { type } = props;
const subtype = ItemConferenceSubTypes.find((value) => { return value.type === type; });
const subtype = ItemConferenceSubTypes.find((value) => {
return value.type === type;
});
if (typeof subtype === 'undefined') {
return null;
}
return (<span>{subtype.label}</span>);
}
return <span>{subtype.label}</span>;
};
interface ConferenceDateProps {
lang: MultiLang;
@@ -24,14 +25,30 @@ interface ConferenceDateProps {
const ConferenceDate = (props: ConferenceDateProps) => {
const { item } = props;
const monthStr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const from = 'From: ' + monthStr[item.conference_from_month - 1] + ' ' + item.conference_from_mday + ', ' + item.conference_from_year;
const to = 'To: ' + monthStr[item.conference_to_month - 1] + ' ' + item.conference_to_mday + ', ' + item.conference_to_year;
return (<span>{from} {to}</span>);
}
const from =
'From: ' +
monthStr[item.conference_from_month - 1] +
' ' +
item.conference_from_mday +
', ' +
item.conference_from_year;
const to =
'To: ' +
monthStr[item.conference_to_month - 1] +
' ' +
item.conference_to_mday +
', ' +
item.conference_to_year;
return (
<span>
{from} {to}
</span>
);
};
const ConferenceUtil = {
PresentationType,
ConferenceDate,
}
};
export default ConferenceUtil;
export default ConferenceUtil;
+4 -4
View File
@@ -1,7 +1,7 @@
import ConferenceTop from './ConferenceTop';
import ConferenceList from './ConferenceList';
import ConferenceDetail from './ConferenceDetail';
import ConferenceAdvancedSearch from './ConferenceAdvancedSearch';
import ConferenceDetail from './ConferenceDetail';
import ConferenceList from './ConferenceList';
import ConferenceTop from './ConferenceTop';
const ItemTypeConference = {
Top: ConferenceTop,
@@ -10,4 +10,4 @@ const ItemTypeConference = {
AdvancedSearch: ConferenceAdvancedSearch,
};
export default ItemTypeConference;
export default ItemTypeConference;
@@ -1,8 +1,7 @@
import { ItemDataSubTypes } from '../../lib/ItemUtil';
import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
import AdvancedSearchBase, { type AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
class DataAdvancedSearch extends AdvancedSearchBase {
constructor(props: AdvancedSearchBaseProps) {
super(props);
this.type = 'data';
@@ -11,15 +10,15 @@ class DataAdvancedSearch extends AdvancedSearchBase {
const year = String(now.getFullYear());
const month = String(now.getMonth() + 1);
const mday = String(now.getDate());
this.state.values['title'] = '';
this.state.values['keyword'] = '';
this.state.values['description'] = '';
this.state.values['doi'] = '';
this.state.values['data_type'] = '';
this.state.values['experimenter'] = '';
this.state.values['publication_year'] = year;
this.state.values['publication_month'] = month;
this.state.values['publication_mday'] = mday;
this.state.values.title = '';
this.state.values.keyword = '';
this.state.values.description = '';
this.state.values.doi = '';
this.state.values.data_type = '';
this.state.values.experimenter = '';
this.state.values.publication_year = year;
this.state.values.publication_month = month;
this.state.values.publication_mday = mday;
this.state.values['file.preview.caption'] = '';
this.state.values['file.data_file.original_file_name'] = '';
this.setIgnoreKey('publication_year');
@@ -30,17 +29,32 @@ class DataAdvancedSearch extends AdvancedSearchBase {
getRows() {
const rows = [
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: this.renderFieldInputText('keyword', 50) },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: this.renderFieldInputText('keyword', 50),
},
{ label: '[en]Description[/en][ja]概要[/ja]', value: this.renderFieldInputText('description', 50) },
{ label: 'ID', value: this.renderFieldInputText('doi', 50) },
{ label: '[en]Data Type[/en][ja]データタイプ[/ja]', value: this.renderFieldSelect('data_type', ItemDataSubTypes) },
{
label: '[en]Data Type[/en][ja]データタイプ[/ja]',
value: this.renderFieldSelect('data_type', ItemDataSubTypes),
},
{ label: '[en]Experimenter[/en][ja]実験者[/ja]', value: this.renderFieldInputText('experimenter', 50) },
{ label: '[en]Date[/en][ja]日付[/ja]', value: this.renderFieldDate('', 'publication_year', 'publication_month', 'publication_mday') },
{ label: '[en]Caption[/en][ja]キャプション[/ja]', value: this.renderFieldInputText('file.preview.caption', 50) },
{ label: '[en]Data File[/en][ja]データファイル[/ja]', value: this.renderFieldInputText('file.data_file.original_file_name', 50) },
{
label: '[en]Date[/en][ja]日付[/ja]',
value: this.renderFieldDate('', 'publication_year', 'publication_month', 'publication_mday'),
},
{
label: '[en]Caption[/en][ja]キャプション[/ja]',
value: this.renderFieldInputText('file.preview.caption', 50),
},
{
label: '[en]Data File[/en][ja]データファイル[/ja]',
value: this.renderFieldInputText('file.data_file.original_file_name', 50),
},
];
return rows;
}
}
export default DataAdvancedSearch;
export default DataAdvancedSearch;
+88 -19
View File
@@ -1,44 +1,113 @@
import React from 'react';
import Functions from '../../../functions';
import ItemUtil, { ItemData } from '../../lib/ItemUtil';
import ItemUtil, { type ItemData } from '../../lib/ItemUtil';
import DetailBase from '../lib/DetailBase';
import ItemTypeField from '../lib/field';
import SimPFLinkIcon from '../lib/field/SimPFLinkIcon';
import DataUtil from './DataUtil';
class DataDetail extends DetailBase {
getFields() {
const { lang } = this.props;
const item = this.props.item as ItemData;
const fields = [
{ label: 'ID', value: item.doi },
{ label: '[en]Language[/en][ja]言語[/ja]', value: <ItemTypeField.Language lang={lang} itemLang={item.lang} /> },
{
label: '[en]Language[/en][ja]言語[/ja]',
value: <ItemTypeField.Language lang={lang} itemLang={item.lang} />,
},
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} /> },
{ label: '[en]Description[/en][ja]概要[/ja]', value: <ItemTypeField.Description lang={lang} description={item.description} /> },
{ label: '[en]Date[/en][ja]日付[/ja]', value: <ItemTypeField.PublicationDate lang={lang} year={item.publication_year} month={item.publication_month} mday={item.publication_mday} /> },
{ label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} /> },
{ label: '[en]Created Date[/en][ja]作成日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} /> },
{ label: '[en]Contributor[/en][ja]登録者[/ja]', value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} /> },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} />,
},
{
label: '[en]Description[/en][ja]概要[/ja]',
value: <ItemTypeField.Description lang={lang} description={item.description} />,
},
{
label: '[en]Date[/en][ja]日付[/ja]',
value: (
<ItemTypeField.PublicationDate
lang={lang}
year={item.publication_year}
month={item.publication_month}
mday={item.publication_mday}
/>
),
},
{
label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} />,
},
{
label: '[en]Created Date[/en][ja]作成日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} />,
},
{
label: '[en]Contributor[/en][ja]登録者[/ja]',
value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} />,
},
{ label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name },
{ label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]', value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} /> },
{ label: '[en]Data Type[/en][ja]データタイプ[/ja]', value: <DataUtil.DataType lang={lang} type={item.data_type} /> },
{ label: '[en]Experimenter[/en][ja]実験者[/ja]', value: <ItemTypeField.Author lang={lang} author={item.experimenter} /> },
{ label: '[en]Preview[/en][ja]プレビュー[/ja]', value: <ItemTypeField.Preview lang={lang} file={item.file} /> },
{ label: '[en]Data File[/en][ja]データファイル[/ja]', value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="data_file" rights={item.rights} useCc={item.use_cc} ccCommercialUse={item.cc_commercial_use} ccModification={item.cc_modification} downloadLimit={item.attachment_dl_limit} /> },
{
label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]',
value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} />,
},
{
label: '[en]Data Type[/en][ja]データタイプ[/ja]',
value: <DataUtil.DataType lang={lang} type={item.data_type} />,
},
{
label: '[en]Experimenter[/en][ja]実験者[/ja]',
value: <ItemTypeField.Author lang={lang} author={item.experimenter} />,
},
{
label: '[en]Preview[/en][ja]プレビュー[/ja]',
value: <ItemTypeField.Preview lang={lang} file={item.file} />,
},
{
label: '[en]Data File[/en][ja]データファイル[/ja]',
value: (
<ItemTypeField.ItemFile
lang={lang}
file={item.file}
type="data_file"
rights={item.rights}
useCc={item.use_cc}
ccCommercialUse={item.cc_commercial_use}
ccModification={item.cc_modification}
downloadLimit={item.attachment_dl_limit}
/>
),
},
{ label: 'Readme', value: <ItemTypeField.Readme lang={lang} readme={item.readme} /> },
{ label: 'Rights', value: <ItemTypeField.Rights lang={lang} rights={item.rights} useCc={item.use_cc} ccCommercialUse={item.cc_commercial_use} ccModification={item.cc_modification} /> },
{
label: 'Rights',
value: (
<ItemTypeField.Rights
lang={lang}
rights={item.rights}
useCc={item.use_cc}
ccCommercialUse={item.cc_commercial_use}
ccModification={item.cc_modification}
/>
),
},
{ label: 'Index', value: <ItemTypeField.ItemIndex lang={lang} index={item.index} /> },
{ label: '[en]Related to[/en][ja]関連アイテム[/ja]', value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} /> },
{
label: '[en]Related to[/en][ja]関連アイテム[/ja]',
value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} />,
},
];
const simpfLinkUrl = ItemUtil.getSimPFLinkUrl(item.item_id);
if (simpfLinkUrl !== '') {
const field = { label: 'Online Simulation', value: <SimPFLinkIcon lang={lang} url={simpfLinkUrl} isDetail={true} /> };
const field = {
label: 'Online Simulation',
value: <SimPFLinkIcon lang={lang} url={simpfLinkUrl} isDetail={true} />,
};
fields.splice(14, 0, field);
}
return fields;
}
}
export default DataDetail;
export default DataDetail;
+7 -10
View File
@@ -1,12 +1,10 @@
import React, { Fragment } from 'react';
import { Link } from 'react-router-dom';
import { Link } from 'react-router';
import Functions from '../../../functions';
import iconFile from '../../assets/images/icon_data.gif';
import { ItemData } from '../../lib/ItemUtil';
import ListBase, { ListBaseProps } from '../lib/ListBase';
import type { ItemData } from '../../lib/ItemUtil';
import ListBase, { type ListBaseProps } from '../lib/ListBase';
class DataList extends ListBase {
constructor(props: ListBaseProps) {
super(props);
this.label = 'Data';
@@ -16,16 +14,15 @@ class DataList extends ListBase {
renderBody() {
const { lang } = this.props;
const item = this.props.item as ItemData;
const authors = item.experimenter.map((author, i) => {
return <Fragment key={i}>{i > 0 && ', '}{Functions.mlang(author, lang)}</Fragment>
});
const authors = item.experimenter.map((author) => Functions.mlang(author, lang)).join(', ');
return (
<>
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link><br />
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link>
<br />
{authors}
</>
);
}
}
export default DataList;
export default DataList;
+5 -5
View File
@@ -1,17 +1,17 @@
import { ItemDataSubTypes } from '../../lib/ItemUtil';
import TopBase, { TopBaseProps } from '../lib/TopBase';
import iconFile from '../../assets/images/icon_data.gif';
import { ItemDataSubTypes } from '../../lib/ItemUtil';
import TopBase, { type TopBaseProps } from '../lib/TopBase';
class DataTop extends TopBase {
constructor(props: TopBaseProps) {
super(props);
this.type = 'data';
this.label = 'Data';
this.icon = iconFile;
this.description = '[en]Result data in numerical text/image/movie formats.[/en][ja]実験結果の数値データ/画像/動画など[/ja]';
this.description =
'[en]Result data in numerical text/image/movie formats.[/en][ja]実験結果の数値データ/画像/動画など[/ja]';
this.subTypes = ItemDataSubTypes;
}
}
export default DataTop;
export default DataTop;
+9 -8
View File
@@ -1,6 +1,5 @@
import React from 'react';
import { MultiLang } from '../../../config';
import { ItemDataSubType, ItemDataSubTypes } from '../../lib/ItemUtil';
import type { MultiLang } from '../../../config';
import { type ItemDataSubType, ItemDataSubTypes } from '../../lib/ItemUtil';
interface DataTypeProps {
lang: MultiLang;
@@ -9,15 +8,17 @@ interface DataTypeProps {
const DataType = (props: DataTypeProps) => {
const { type } = props;
const subtype = ItemDataSubTypes.find((value) => { return value.type === type; });
const subtype = ItemDataSubTypes.find((value) => {
return value.type === type;
});
if (typeof subtype === 'undefined') {
return null;
}
return (<span>{subtype.label}</span>);
}
return <span>{subtype.label}</span>;
};
const DataUtil = {
DataType,
}
};
export default DataUtil;
export default DataUtil;
+4 -4
View File
@@ -1,7 +1,7 @@
import DataTop from './DataTop';
import DataList from './DataList';
import DataDetail from './DataDetail';
import DataAdvancedSearch from './DataAdvancedSearch';
import DataDetail from './DataDetail';
import DataList from './DataList';
import DataTop from './DataTop';
const ItemTypeData = {
Top: DataTop,
@@ -10,4 +10,4 @@ const ItemTypeData = {
AdvancedSearch: DataAdvancedSearch,
};
export default ItemTypeData;
export default ItemTypeData;
@@ -1,30 +1,41 @@
import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
import AdvancedSearchBase, { type AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase';
class FilesAdvancedSearch extends AdvancedSearchBase {
constructor(props: AdvancedSearchBaseProps) {
super(props);
this.type = 'files';
this.title = 'Files';
this.state.values['title'] = '';
this.state.values['data_file_name'] = '';
this.state.values['data_file_mimetype'] = '';
this.state.values['data_file_filetype'] = '';
this.state.values['keyword'] = '';
this.state.values['description'] = '';
this.state.values.title = '';
this.state.values.data_file_name = '';
this.state.values.data_file_mimetype = '';
this.state.values.data_file_filetype = '';
this.state.values.keyword = '';
this.state.values.description = '';
}
getRows() {
const rows = [
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) },
{ label: '- [en]File Name[/en][ja]ファイル名[/ja]', value: this.renderFieldInputText('data_file_name', 50) },
{ label: '- [en]MIME Type[/en][ja]MIMEタイプ[/ja]', value: this.renderFieldInputText('data_file_mimetype', 50) },
{ label: '- [en]File Type[/en][ja]ファイルタイプ[/ja]', value: this.renderFieldInputText('data_file_filetype', 20) },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: this.renderFieldInputText('keyword', 50) },
{
label: '- [en]File Name[/en][ja]ファイル名[/ja]',
value: this.renderFieldInputText('data_file_name', 50),
},
{
label: '- [en]MIME Type[/en][ja]MIMEタイプ[/ja]',
value: this.renderFieldInputText('data_file_mimetype', 50),
},
{
label: '- [en]File Type[/en][ja]ファイルタイプ[/ja]',
value: this.renderFieldInputText('data_file_filetype', 20),
},
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: this.renderFieldInputText('keyword', 50),
},
{ label: '[en]Description[/en][ja]概要[/ja]', value: this.renderFieldInputText('description', 50) },
];
return rows;
}
}
export default FilesAdvancedSearch;
export default FilesAdvancedSearch;
+37 -12
View File
@@ -1,31 +1,56 @@
import React from 'react';
import Functions from '../../../functions';
import { ItemFiles } from '../../lib/ItemUtil';
import type { ItemFiles } from '../../lib/ItemUtil';
import DetailBase from '../lib/DetailBase';
import ItemTypeField from '../lib/field';
class FilesDetail extends DetailBase {
getFields() {
const { lang } = this.props;
const item = this.props.item as ItemFiles;
return [
{ label: 'ID', value: item.doi },
{ label: '[en]Language[/en][ja]言語[/ja]', value: <ItemTypeField.Language lang={lang} itemLang={item.lang} /> },
{
label: '[en]Language[/en][ja]言語[/ja]',
value: <ItemTypeField.Language lang={lang} itemLang={item.lang} />,
},
{ label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) },
{ label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} /> },
{ label: '[en]Created Date[/en][ja]作成日[/ja]', value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} /> },
{ label: '[en]Contributor[/en][ja]登録者[/ja]', value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} /> },
{
label: '[en]Last Modified Date[/en][ja]最終更新日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.last_update_date} />,
},
{
label: '[en]Created Date[/en][ja]作成日[/ja]',
value: <ItemTypeField.DateTime lang={lang} date={item.creation_date} />,
},
{
label: '[en]Contributor[/en][ja]登録者[/ja]',
value: <ItemTypeField.Contributer lang={lang} uname={item.uname} name={item.name} />,
},
{ label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name },
{ label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]', value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} /> },
{ label: '[en]Data File[/en][ja]データファイル[/ja]', value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="files_file" /> },
{
label: '[en]Change Log(History)[/en][ja]変更履歴[/ja]',
value: <ItemTypeField.ChangeLog lang={lang} changelog={item.changelog} />,
},
{
label: '[en]Data File[/en][ja]データファイル[/ja]',
value: <ItemTypeField.ItemFile lang={lang} file={item.file} type="files_file" />,
},
{ label: '- [en]File Name[/en][ja]ファイル名[/ja]', value: item.data_file_name },
{ label: '- [en]MIME Type[/en][ja]MIMEタイプ[/ja]', value: item.data_file_mimetype },
{ label: '- [en]File Type[/en][ja]ファイルタイプ[/ja]', value: item.data_file_filetype },
{ label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]', value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} /> },
{ label: '[en]Description[/en][ja]概要[/ja]', value: <ItemTypeField.Description lang={lang} description={item.description} /> },
{
label: '[en]Free Keywords[/en][ja]フリーキーワード[/ja]',
value: <ItemTypeField.FreeKeyword lang={lang} keyword={item.keyword} />,
},
{
label: '[en]Description[/en][ja]概要[/ja]',
value: <ItemTypeField.Description lang={lang} description={item.description} />,
},
{ label: 'Index', value: <ItemTypeField.ItemIndex lang={lang} index={item.index} /> },
{ label: '[en]Related to[/en][ja]関連アイテム[/ja]', value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} /> },
{
label: '[en]Related to[/en][ja]関連アイテム[/ja]',
value: <ItemTypeField.RelatedTo lang={lang} relatedTo={item.related_to} />,
},
];
}
}
+8 -8
View File
@@ -1,13 +1,11 @@
import React from 'react';
import { Link } from 'react-router-dom';
import { Link } from 'react-router';
import Functions from '../../../functions';
import iconFile from '../../assets/images/icon_files.gif';
import { ItemFiles } from '../../lib/ItemUtil';
import type { ItemFiles } from '../../lib/ItemUtil';
import Contributer from '../lib/field/Contributer';
import ListBase, { ListBaseProps } from '../lib/ListBase';
import ListBase, { type ListBaseProps } from '../lib/ListBase';
class FilesList extends ListBase {
constructor(props: ListBaseProps) {
super(props);
this.label = 'Files';
@@ -19,12 +17,14 @@ class FilesList extends ListBase {
const item = this.props.item as ItemFiles;
return (
<>
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link><br />
<Contributer lang={lang} uname={item.uname} name={item.name} /><br />
<Link to={this.url}>{Functions.mlang(item.title, lang)}</Link>
<br />
<Contributer lang={lang} uname={item.uname} name={item.name} />
<br />
{item.data_file_mimetype}
</>
);
}
}
export default FilesList;
export default FilesList;
+2 -3
View File
@@ -1,9 +1,8 @@
import TopBase, { TopBaseProps } from '../lib/TopBase';
import iconFile from '../../assets/images/icon_files.gif';
import { ItemFilesSubTypes } from '../../lib/ItemUtil';
import TopBase, { type TopBaseProps } from '../lib/TopBase';
class FilesTop extends TopBase {
constructor(props: TopBaseProps) {
super(props);
this.type = 'files';
@@ -14,4 +13,4 @@ class FilesTop extends TopBase {
}
}
export default FilesTop;
export default FilesTop;
+2 -4
View File
@@ -1,5 +1,3 @@
const FilesUtil = {};
const FilesUtil = {
}
export default FilesUtil;
export default FilesUtil;
+4 -4
View File
@@ -1,7 +1,7 @@
import FilesTop from './FilesTop';
import FilesList from './FilesList';
import FilesDetail from './FilesDetail';
import FilesAdvancedSearch from './FilesAdvancedSearch';
import FilesDetail from './FilesDetail';
import FilesList from './FilesList';
import FilesTop from './FilesTop';
const ItemTypeFiles = {
Top: FilesTop,
@@ -10,4 +10,4 @@ const ItemTypeFiles = {
AdvancedSearch: FilesAdvancedSearch,
};
export default ItemTypeFiles;
export default ItemTypeFiles;
+25 -11
View File
@@ -1,7 +1,21 @@
import React from 'react';
import { MultiLang } from '../../config';
import AdvancedSearchQuery from '../lib/AdvancedSearchQuery';
import { Item, ItemBinder, ItemBook, ItemConference, ItemData, ItemFiles, ItemModel, ItemPaper, ItemPresentation, ItemSimulator, ItemStimulus, ItemTool, ItemUrl, ItemMemo } from '../lib/ItemUtil';
import type { MultiLang } from '../../config';
import type AdvancedSearchQuery from '../lib/AdvancedSearchQuery';
import type {
Item,
ItemBinder,
ItemBook,
ItemConference,
ItemData,
ItemFiles,
ItemMemo,
ItemModel,
ItemPaper,
ItemPresentation,
ItemSimulator,
ItemStimulus,
ItemTool,
ItemUrl,
} from '../lib/ItemUtil';
import ItemTypeBinder from './binder';
import ItemTypeBook from './book';
import ItemTypeConference from './conference';
@@ -52,7 +66,7 @@ const Top = (props: TopProps) => {
default:
return null;
}
}
};
interface ListProps {
lang: MultiLang;
@@ -90,7 +104,7 @@ const List = (props: ListProps) => {
default:
return null;
}
}
};
interface DetailProps {
lang: MultiLang;
@@ -128,7 +142,7 @@ const Detail = (props: DetailProps) => {
default:
return null;
}
}
};
interface AdvancedSearchProps {
lang: MultiLang;
@@ -167,13 +181,13 @@ const AdvancedSearch = (props: AdvancedSearchProps) => {
default:
return null;
}
}
};
const ItemType = {
Top,
List,
Detail,
AdvancedSearch
}
AdvancedSearch,
};
export default ItemType;
export default ItemType;
@@ -1,8 +1,8 @@
import React, { ChangeEvent, Component } from 'react';
import { MultiLang } from '../../../config';
import React, { type ChangeEvent, Component } from 'react';
import type { MultiLang } from '../../../config';
import Functions from '../../../functions';
import AdvancedSearchQuery from '../../lib/AdvancedSearchQuery';
import { ItemSubTypes } from '../../lib/ItemUtil';
import type AdvancedSearchQuery from '../../lib/AdvancedSearchQuery';
import type { ItemSubTypes } from '../../lib/ItemUtil';
export interface AdvancedSearchBaseProps {
lang: MultiLang;
@@ -11,12 +11,11 @@ export interface AdvancedSearchBaseProps {
interface State {
show: boolean;
values: any;
values: Record<string, string>;
}
class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
protected type: string = 'base'
protected type: string = 'base';
protected title: string = 'Base';
protected query: AdvancedSearchQuery;
protected ignoreKeys: string[] = [];
@@ -26,7 +25,7 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
this.state = {
show: false,
values: {},
}
};
this.query = props.query;
this.handleChangeTitleCheck = this.handleChangeTitleCheck.bind(this);
}
@@ -49,14 +48,14 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
deleteIgnoreKey(key: string) {
if (this.ignoreKeys.includes(key)) {
this.ignoreKeys = this.ignoreKeys.filter((v) => {
return (v !== key);
return v !== key;
});
}
this.query.set(this.type, key, this.state.values[key]);
}
updateField(key: string, value: string) {
let values = Object.assign({}, this.state.values);
const values = Object.assign({}, this.state.values);
values[key] = value;
this.updateQuery(key, value);
this.setState({ values });
@@ -75,7 +74,7 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
this.setState({ show });
}
getRows(): { label: string, value: JSX.Element }[] {
getRows(): { label: string; value: React.JSX.Element }[] {
return [];
}
@@ -84,20 +83,30 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
this.updateField(key, e.target.value);
};
return (
<input className="fieldInputText" type="text" value={this.state.values[key]} size={size} onChange={onChange} />
<input
className="fieldInputText"
type="text"
value={this.state.values[key]}
size={size}
onChange={onChange}
/>
);
}
renderFieldSelect(key: string, values: ItemSubTypes<any>) {
renderFieldSelect(key: string, values: ItemSubTypes<string>) {
const onChange = (e: ChangeEvent<HTMLSelectElement>) => {
this.updateField(key, e.target.value);
};
const options = values.map(({ type, label }, i) => {
return <option key={i} value={type}>{label}</option>;
const options = values.map(({ type, label }) => {
return (
<option key={type} value={type}>
{label}
</option>
);
});
return (
<select className="fieldSelect" value={this.state.values[key]} onChange={onChange}>
<option value=''>Any</option>
<option value="">Any</option>
{options}
</select>
);
@@ -117,27 +126,52 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
};
const month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const monthOptions = month.map((value, i) => {
return <option key={i} value={i + 1}>{value}</option>;
})
let mdayOptions: JSX.Element[] = [];
return (
<option key={value} value={i + 1}>
{value}
</option>
);
});
const mdayOptions: React.JSX.Element[] = [];
for (let i = 1; i <= 31; i++) {
mdayOptions.push(<option key={i} value={i}>{i}</option>)
mdayOptions.push(
<option key={i} value={i}>
{i}
</option>
);
}
return (
<div className="fieldDate">
<input type="checkbox" onChange={onChange} />
{label.length !== 0 && <label className="fieldDateLabel">{label}</label>}
{keyMonth !== '' &&
<select value={this.state.values[keyMonth]} onChange={(e) => this.updateField(keyMonth, e.target.value)}>
{label.length !== 0 ? (
<label className="fieldDateLabel">
<input type="checkbox" onChange={onChange} />
{label}
</label>
) : (
<input type="checkbox" onChange={onChange} />
)}
{keyMonth !== '' && (
<select
value={this.state.values[keyMonth]}
onChange={(e) => this.updateField(keyMonth, e.target.value)}
>
{monthOptions}
</select>
}
{keyMday !== '' &&
<select value={this.state.values[keyMday]} onChange={(e) => this.updateField(keyMday, e.target.value)}>
)}
{keyMday !== '' && (
<select
value={this.state.values[keyMday]}
onChange={(e) => this.updateField(keyMday, e.target.value)}
>
{mdayOptions}
</select>
}
<input type="text" value={this.state.values[keyYear]} size={5} onChange={(e) => this.updateField(keyYear, e.target.value)} />
)}
<input
type="text"
value={this.state.values[keyYear]}
size={5}
onChange={(e) => this.updateField(keyYear, e.target.value)}
/>
</div>
);
}
@@ -151,7 +185,7 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
const fields = rows.map((value, idx) => {
const evenodd = idx % 2 === 0 ? 'even' : 'odd';
return (
<tr key={idx}>
<tr key={value.label}>
<td className="head">{Functions.mlang(value.label, lang)}</td>
<td className={evenodd}>{value.value}</td>
</tr>
@@ -159,9 +193,7 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
});
return (
<table className="itemtypeFields outer">
<tbody>
{fields}
</tbody>
<tbody>{fields}</tbody>
</table>
);
}
@@ -173,7 +205,11 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
<tbody>
<tr>
<th align="left">
<input type="checkbox" checked={this.state.show} onChange={this.handleChangeTitleCheck} />
<input
type="checkbox"
checked={this.state.show}
onChange={this.handleChangeTitleCheck}
/>
{this.title}
</th>
</tr>
@@ -183,7 +219,6 @@ class AdvancedSearchBase extends Component<AdvancedSearchBaseProps, State> {
</div>
);
}
}
export default AdvancedSearchBase;
export default AdvancedSearchBase;
+8 -11
View File
@@ -1,7 +1,7 @@
import React, { Component, ReactNode } from 'react';
import { MultiLang } from '../../../config';
import { Component, type ReactNode } from 'react';
import type { MultiLang } from '../../../config';
import Functions from '../../../functions';
import { Item } from '../../lib/ItemUtil';
import type { Item } from '../../lib/ItemUtil';
export interface DetailBaseField {
label: string;
@@ -10,11 +10,10 @@ export interface DetailBaseField {
export interface DetailBaseProps {
lang: MultiLang;
item: Item
item: Item;
}
class DetailBase extends Component<DetailBaseProps> {
getFields(): DetailBaseField[] {
return [];
}
@@ -24,20 +23,18 @@ class DetailBase extends Component<DetailBaseProps> {
const elements = this.getFields().map((value, idx) => {
const evenodd = idx % 2 === 0 ? 'even' : 'odd';
return (
<tr key={idx}>
<tr key={value.label}>
<td className="head">{Functions.mlang(value.label, lang)}</td>
<td className={evenodd}>{value.value}</td>
</tr>
)
);
});
return (
<table className="outer itemDetail">
<tbody>
{elements}
</tbody>
<tbody>{elements}</tbody>
</table>
);
}
}
export default DetailBase;
export default DetailBase;
+9 -12
View File
@@ -1,15 +1,14 @@
import React, { Component } from 'react';
import { MultiLang } from '../../../config';
import ItemUtil, { Item } from '../../lib/ItemUtil';
import { Component } from 'react';
import type { MultiLang } from '../../../config';
import ItemUtil, { type Item } from '../../lib/ItemUtil';
import SimPFLinkIcon from './field/SimPFLinkIcon';
export interface ListBaseProps {
lang: MultiLang;
item: Item
};
item: Item;
}
class ListBase extends Component<ListBaseProps> {
protected label = '';
protected icon = '';
protected url: string;
@@ -21,8 +20,8 @@ class ListBase extends Component<ListBaseProps> {
this.simpfLinkUrl = ItemUtil.getSimPFLinkUrl(props.item.item_id);
}
renderBody() {
return <></>;
renderBody(): React.ReactNode {
return null;
}
render() {
@@ -34,9 +33,7 @@ class ListBase extends Component<ListBaseProps> {
<td className="listIcon">
<img src={this.icon} alt={this.label} />
</td>
<td>
{this.renderBody()}
</td>
<td>{this.renderBody()}</td>
<td className="listExtra">
<SimPFLinkIcon lang={lang} url={this.simpfLinkUrl} isDetail={false} />
</td>
@@ -47,4 +44,4 @@ class ListBase extends Component<ListBaseProps> {
}
}
export default ListBase;
export default ListBase;
+12 -8
View File
@@ -1,26 +1,30 @@
import React, { Component, Fragment } from 'react';
import { Link } from 'react-router-dom';
import { MultiLang } from '../../../config';
import { Component, Fragment } from 'react';
import { Link } from 'react-router';
import type { MultiLang } from '../../../config';
import Functions from '../../../functions';
import ItemUtil, { ItemSubTypes } from '../../lib/ItemUtil';
import ItemUtil, { type ItemSubTypes } from '../../lib/ItemUtil';
export interface TopBaseProps {
lang: MultiLang;
}
class TopBase extends Component<TopBaseProps> {
protected type: string = '';
protected label: string = '';
protected icon: string = '';
protected description: string = '';
protected subTypes: ItemSubTypes<any> = [];
protected subTypes: ItemSubTypes<string> = [];
render() {
const { lang } = this.props;
const url = ItemUtil.getItemTypeSearchUrl(this.type);
const links = this.subTypes.map(({ type, label }, i) => {
return <Fragment key={i}>{i > 0 && ' / '}<Link to={url + '/' + type}>{label}</Link></Fragment>;
return (
<Fragment key={type}>
{i > 0 && ' / '}
<Link to={`${url}/${type}`}>{label}</Link>
</Fragment>
);
});
return (
<div>
@@ -44,4 +48,4 @@ class TopBase extends Component<TopBaseProps> {
}
}
export default TopBase;
export default TopBase;
+13 -6
View File
@@ -1,5 +1,4 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
interface Props {
lang: MultiLang;
@@ -13,9 +12,17 @@ const Author = (props: Props) => {
}
const elements = author.map((value, idx) => {
const evenodd = idx % 2 === 0 ? 'even' : 'odd';
return <tr key={idx}><td className={evenodd}>{value}</td></tr>;
return (
<tr key={value}>
<td className={evenodd}>{value}</td>
</tr>
);
});
return <table><tbody>{elements}</tbody></table>;
}
return (
<table>
<tbody>{elements}</tbody>
</table>
);
};
export default Author;
export default Author;
+14 -9
View File
@@ -1,7 +1,6 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
import Functions from '../../../../functions';
import { ItemBasicChangeLog } from '../../../lib/ItemUtil';
import type { ItemBasicChangeLog } from '../../../lib/ItemUtil';
import DateTime from './DateTime';
interface Props {
@@ -14,15 +13,21 @@ const ChangeLog = (props: Props) => {
if (changelog.length === 0) {
return null;
}
const elements = changelog.map((value, i) => {
const elements = changelog.map((value) => {
return (
<tr key={i}>
<td><DateTime lang={lang} date={value.log_date} onlyDate={true} /></td>
<tr key={`${value.log_date}:${value.log}`}>
<td>
<DateTime lang={lang} date={value.log_date} onlyDate={true} />
</td>
<td>{Functions.mlang(value.log, lang)}</td>
</tr>
);
});
return (<table><tbody>{elements}</tbody></table>);
}
return (
<table>
<tbody>{elements}</tbody>
</table>
);
};
export default ChangeLog;
export default ChangeLog;
@@ -1,18 +1,17 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
import Functions from '../../../../functions';
interface Props {
lang: MultiLang;
uname: string;
name: string
name: string;
}
const Contributer = (props: Props) => {
const { lang, name, uname } = props;
const unsubscribed = '([en]Unsubscribed User[/en][ja]退会済みユーザ[/ja])';
const label = uname === '' ? unsubscribed : (name === '' ? uname : name + ' (' + uname + ')');
const label = uname === '' ? unsubscribed : name === '' ? uname : `${name} (${uname})`;
return <span>{Functions.mlang(label, lang)}</span>;
}
};
export default Contributer;
export default Contributer;
@@ -1,5 +1,4 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
export type CreativeCommonsType = 'by' | 'by-nc' | 'by-nc-nd' | 'by-nc-sa' | 'by-nd' | 'by-sa';
@@ -16,11 +15,10 @@ export const getCreativeCommonsType = (ccCommercialUse: number, ccModification:
return 'by-nd';
case 11:
return 'by-sa';
case 12:
default:
return 'by';
}
}
};
interface Props {
lang: MultiLang;
@@ -29,28 +27,41 @@ interface Props {
const CreativeCommons = (props: Props) => {
const { type } = props;
const url = 'http://creativecommons.org/licenses/' + type + '/4.0/';
const logoUrl = 'https://i.creativecommons.org/l/' + type + '/4.0/88x31.png';
const url = `http://creativecommons.org/licenses/${type}/4.0/`;
const logoUrl = `https://i.creativecommons.org/l/${type}/4.0/88x31.png`;
const labels = {
by: 'Attribution',
nc: 'NonCommercial',
nd: 'NoDerivatives',
sa: 'ShareAlike',
}
const label = type.split('-').map((value) => {
const prop = value as 'by' | 'nc' | 'nd' | 'sa';
return labels[prop];
}).join('-');
};
const label = type
.split('-')
.map((value) => {
const prop = value as 'by' | 'nc' | 'nd' | 'sa';
return labels[prop];
})
.join('-');
return (
<table style={{borderCollapse: 'separate', borderSpacing: '5px'}}>
<table style={{ borderCollapse: 'separate', borderSpacing: '5px' }}>
<tbody>
<tr>
<td><a href={url} target="_blank" rel="license noopener noreferrer"><img alt="Creative Commons License" src={logoUrl} /></a></td>
<td>This work is licensed under a <a href={url} target="_blank" rel="license noopener noreferrer">Criative Commons {label} 4.0 International License</a>.</td>
<td>
<a href={url} target="_blank" rel="license noopener noreferrer">
<img alt="Creative Commons License" src={logoUrl} />
</a>
</td>
<td>
This work is licensed under a{' '}
<a href={url} target="_blank" rel="license noopener noreferrer">
Criative Commons {label} 4.0 International License
</a>
.
</td>
</tr>
</tbody>
</table>
);
}
};
export default CreativeCommons;
export default CreativeCommons;
+15 -11
View File
@@ -1,21 +1,25 @@
import moment from 'moment';
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
interface Props {
lang: MultiLang;
date: number;
onlyDate?: boolean
onlyDate?: boolean;
}
// Kept on en-US so the output matches the previous moment format 'MMM D, Y HH:mm:ss'.
const dateFormat = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
const timeFormat = new Intl.DateTimeFormat('en-US', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
});
const DateTime = (props: Props) => {
const { date, onlyDate } = props;
const d = moment(new Date(date * 1000));
let format = 'MMM D, Y';
if (typeof onlyDate === 'undefined' || !onlyDate) {
format += ' HH:mm:ss';
}
return <span>{d.format(format)}</span>;
}
const d = new Date(date * 1000);
const text = onlyDate ? dateFormat.format(d) : `${dateFormat.format(d)} ${timeFormat.format(d)}`;
return <span>{text}</span>;
};
export default DateTime;
@@ -1,6 +1,5 @@
import React from 'react';
import XoopsCode from '../../../../common/lib/XoopsCode';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
interface Props {
lang: MultiLang;
@@ -12,7 +11,7 @@ const Description = (props: Props) => {
const { lang, description, className } = props;
const textarea = <XoopsCode lang={lang} text={description} dobr={true} />;
const name = typeof className === 'undefined' ? 'description' : className;
return (<div className={name}>{textarea}</div>);
}
return <div className={name}>{textarea}</div>;
};
export default Description;
export default Description;
@@ -1,21 +1,21 @@
.downloadButton {
display: inline-block;
padding: 7px 20px;
text-decoration: none !important;
font-weight: normal !important;
text-decoration: none;
font-weight: normal;
background: #f0f0f0;
color: #000 !important;
color: #000;
border: solid 1px #e0e0e0;
box-shadow: 2px 2px #bbbbbb;
border-radius: 5px;
}
.downloadButton:hover {
background: #e8e8e8 !important;
background: #e8e8e8;
border: solid 1px #cccccc;
}
.downloadButton:active {
transform: translate(2px, 2px);
box-shadow: none;
}
}
@@ -1,6 +1,7 @@
import React, { Component } from 'react';
import { MultiLang } from '../../../../config';
import ItemUtil, { ItemBasicFile } from '../../../lib/ItemUtil';
import type React from 'react';
import { Component } from 'react';
import type { MultiLang } from '../../../../config';
import ItemUtil, { type ItemBasicFile } from '../../../lib/ItemUtil';
import styles from './FileDownloadButton.module.css';
import LicenseAgreementDialog from './LicenseAgreementDialog';
@@ -18,7 +19,6 @@ interface State {
}
class FileDownloadButton extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
@@ -45,11 +45,29 @@ class FileDownloadButton extends Component<Props, State> {
const url = ItemUtil.getFileUrl(this.props.file);
return (
<>
<a className={styles.downloadButton} href={url} download={file.original_file_name} target="_blank" rel="noopener noreferrer" onClick={this.handleClickDownload}>Download</a>
<LicenseAgreementDialog lang={lang} file={file} rights={rights} useCc={useCc} ccCommercialUse={ccCommercialUse} ccModification={ccModification} show={this.state.show} unsetShow={this.unsetShow} />
<a
className={styles.downloadButton}
href={url}
download={file.original_file_name}
target="_blank"
rel="noopener noreferrer"
onClick={this.handleClickDownload}
>
Download
</a>
<LicenseAgreementDialog
lang={lang}
file={file}
rights={rights}
useCc={useCc}
ccCommercialUse={ccCommercialUse}
ccModification={ccModification}
show={this.state.show}
unsetShow={this.unsetShow}
/>
</>
);
}
}
export default FileDownloadButton;
export default FileDownloadButton;
@@ -1,5 +1,4 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
interface Props {
lang: MultiLang;
@@ -10,8 +9,8 @@ const FileSize = (props: Props) => {
const { size } = props;
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const power = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0;
const label = Math.round(size / Math.pow(1024, power) * 10) / 10 + ' ' + units[power]
const label = `${Math.round((size / 1024 ** power) * 10) / 10} ${units[power]}`;
return <span>{label}</span>;
}
};
export default FileSize;
export default FileSize;
@@ -1,5 +1,4 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
interface Props {
lang: MultiLang;
@@ -12,7 +11,7 @@ const FreeKeyword = (props: Props) => {
return null;
}
const label = keyword.join(', ');
return (<span>{label}</span>);
}
return <span>{label}</span>;
};
export default FreeKeyword;
export default FreeKeyword;
+39 -10
View File
@@ -1,7 +1,6 @@
import React from 'react';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
import Functions from '../../../../functions';
import { ItemBasicFile } from '../../../lib/ItemUtil';
import type { ItemBasicFile } from '../../../lib/ItemUtil';
import DateTime from './DateTime';
import FileDownloadButton from './FileDownloadButton';
import FileSize from './FileSize';
@@ -34,17 +33,47 @@ const ItemFile = (props: Props) => {
const timestamp = Math.floor(date.valueOf() / 1000);
return (
<div>
{data.original_file_name}<br />
{data.original_file_name}
<br />
<table>
<tbody>
<tr><td>Type</td><td>: {data.mime_type}</td><td rowSpan={4}>{downloadLimit === 0 && <FileDownloadButton lang={lang} file={data} rights={rights} useCc={useCc} ccCommercialUse={ccCommercialUse} ccModification={ccModification} />}</td></tr>
<tr><td>Size</td><td>: <FileSize lang={lang} size={data.file_size} /></td></tr>
<tr><td>Last updated</td><td>: <DateTime lang={lang} date={timestamp} onlyDate={true} /></td></tr>
<tr>
<td>Type</td>
<td>: {data.mime_type}</td>
<td rowSpan={4}>
{downloadLimit === 0 && (
<FileDownloadButton
lang={lang}
file={data}
rights={rights}
useCc={useCc}
ccCommercialUse={ccCommercialUse}
ccModification={ccModification}
/>
)}
</td>
</tr>
<tr>
<td>Size</td>
<td>
: <FileSize lang={lang} size={data.file_size} />
</td>
</tr>
<tr>
<td>Last updated</td>
<td>
: <DateTime lang={lang} date={timestamp} onlyDate={true} />
</td>
</tr>
</tbody>
</table>
{downloadLimit === 1 && <><br />({Functions.mlang('[en]File has been removed[/en][ja]ファイルは削除されました[/ja]', lang)})</>}
{downloadLimit === 1 && (
<>
<br />({Functions.mlang('[en]File has been removed[/en][ja]ファイルは削除されました[/ja]', lang)})
</>
)}
</div>
);
}
};
export default ItemFile;
export default ItemFile;
+17 -8
View File
@@ -1,9 +1,8 @@
import React from 'react';
import { Link } from 'react-router-dom';
import { MultiLang } from '../../../../config';
import { Link } from 'react-router';
import type { MultiLang } from '../../../../config';
import Functions from '../../../../functions';
import IndexUtil from '../../../lib/IndexUtil';
import { ItemBasicIndex } from '../../../lib/ItemUtil';
import type { ItemBasicIndex } from '../../../lib/ItemUtil';
interface Props {
lang: MultiLang;
@@ -18,9 +17,19 @@ const ItemIndex = (props: Props) => {
const elements = index.map((value, idx) => {
const evenodd = idx % 2 === 0 ? 'even' : 'odd';
const url = IndexUtil.getUrl(value.index_id);
return (<tr key={value.index_id}><td className={evenodd}><Link to={url}>{Functions.mlang(value.title, lang)}</Link></td></tr>);
return (
<tr key={value.index_id}>
<td className={evenodd}>
<Link to={url}>{Functions.mlang(value.title, lang)}</Link>
</td>
</tr>
);
});
return (<table><tbody>{elements}</tbody></table>);
}
return (
<table>
<tbody>{elements}</tbody>
</table>
);
};
export default ItemIndex;
export default ItemIndex;
@@ -1,7 +1,6 @@
import React from 'react';
import { ItemBasicLang } from '../../../lib/ItemUtil';
import { MultiLang } from '../../../../config';
import type { MultiLang } from '../../../../config';
import Functions from '../../../../functions';
import type { ItemBasicLang } from '../../../lib/ItemUtil';
interface Props {
lang: MultiLang;
@@ -25,11 +24,11 @@ const Language = (props: Props) => {
por: '[en]Portuguese[/en][ja]ポルトガル語[/ja]',
chi: '[en]Chinese[/en][ja]中国語[/ja]',
kor: '[en]Korean[/en][ja]韓国語[/ja]',
}
};
if (!(itemLang in langStr)) {
return null;
}
return (<span>{Functions.mlang(langStr[itemLang], lang)}</span>);
}
return <span>{Functions.mlang(langStr[itemLang], lang)}</span>;
};
export default Language;
export default Language;
@@ -35,4 +35,4 @@
.download button {
margin: 5px 5px 0;
}
}

Some files were not shown because too many files have changed in this diff Show More