增加一个筛选器

This commit is contained in:
2025-03-02 17:39:58 +08:00
parent 809a64d2a5
commit 80a7ad6748

View File

@@ -1,57 +1,88 @@
<?php require_once("./include/db_info.inc.php");?> <?php require_once("./include/db_info.inc.php"); ?>
<?php $show_title = "$MSG_PROBLEMS - $OJ_NAME"; ?> <?php $show_title = "$MSG_PROBLEMS - $OJ_NAME"; ?>
<?php include("template/$OJ_TEMPLATE/header.php"); ?> <?php include("template/$OJ_TEMPLATE/header.php"); ?>
<div class="padding"> <div class="padding">
<script type="text/javascript" src="include/react/react.min.js"></script> <script type="text/javascript" src="include/react/react.min.js"></script>
<script type="text/javascript" src="include/react/react-dom.min.js"></script> <script type="text/javascript" src="include/react/react-dom.min.js"></script>
<?php <?php
// 遍历demos文件夹下的所有php文件 // 遍历demos文件夹下的所有php文件
$directory = new DirectoryIterator(dirname(__FILE__) . '/demos'); $directory = new DirectoryIterator(dirname(__FILE__) . '/demos');
$files = []; $files = [];
foreach ($directory as $fileinfo) { foreach ($directory as $fileinfo) {
if ($fileinfo->isFile() && $fileinfo->getExtension() == 'html') { if ($fileinfo->isFile() && $fileinfo->getExtension() == 'html') {
$files[] = $fileinfo->getFilename(); $files[] = $fileinfo->getFilename();
}
} }
} sort($files);
?> ?>
<div class="container"></div> <div class="container"></div>
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-2">
<ul class="list-group"> <div id="search-container"></div>
<ul class="list-group" id="file-list">
<?php foreach ($files as $file): ?> <?php foreach ($files as $file): ?>
<li class="list-group-item"> <li class="list-group-item">
<a href="demoset.php?demo=<?php echo $file; ?>"><?php echo $file; ?></a> <a href="demoset.php?demo=<?php echo $file; ?>"><?php echo pathinfo($file, PATHINFO_FILENAME); ?></a>
</li> </li>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
</div> <script type="text/javascript">
<div class="col-md-9"> class Search extends React.Component {
<div id="content"> constructor(props) {
<?php super(props);
if (isset($_GET['demo']) && in_array($_GET['demo'], $files)) { this.state = { query: '' };
$demoFile = $_GET['demo']; }
$demoContent = file_get_contents(dirname(__FILE__) . '/demos/' . $demoFile);
echo $demoContent; handleChange = (event) => {
this.setState({ query: event.target.value }, () => {
this.filterList();
});
};
filterList = () => {
const query = this.state.query.toLowerCase();
const items = document.querySelectorAll('#file-list .list-group-item');
items.forEach((item) => {
const text = item.textContent.toLowerCase();
item.style.display = text.includes(query) ? '' : 'none';
});
};
render() {
return (
<input
type="text"
className="form-control"
placeholder="Search..."
value={this.state.query}
onChange={this.handleChange}
/>
);
}
} }
?>
ReactDOM.render(<Search />, document.getElementById('search-container'));
</script>
</div>
<div class="col-md-10">
<div id="content">
<div style="border: 1px solid #ccc; padding: 10px;">
<?php
if (isset($_GET['demo']) && in_array($_GET['demo'], $files)) {
$demoFile = $_GET['demo'];
$demoContent = file_get_contents(dirname(__FILE__) . '/demos/' . $demoFile);
echo $demoContent;
}
?>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script> </div>
function loadContent(file) { <?php include("template/$OJ_TEMPLATE/footer.php"); ?>
fetch('demos/' + file)
.then(response => response.text())
.then(data => {
document.getElementById('content').innerHTML = data;
});
}
</script>
</div>
<?php include("template/$OJ_TEMPLATE/footer.php"); ?>