Adding source viewer to individual registers
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { Col, Card, Tabs, Tab } from 'react-bootstrap';
|
import { useState } from 'react';
|
||||||
|
import { Col, Card, Tabs, Tab, Button, Modal } from 'react-bootstrap';
|
||||||
import { Register } from '@/utils/parser';
|
import { Register } from '@/utils/parser';
|
||||||
import { renderAccess } from './RegisterBrowser';
|
import { renderAccess } from './RegisterBrowser';
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
@@ -19,6 +20,8 @@ export default function RegisterDetail({
|
|||||||
register: Register;
|
register: Register;
|
||||||
defaultActiveKey?: string;
|
defaultActiveKey?: string;
|
||||||
}) {
|
}) {
|
||||||
|
const [showSource, setShowSource] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Col key={register.hex_address} xs={12} className="mb-4">
|
<Col key={register.hex_address} xs={12} className="mb-4">
|
||||||
<Card>
|
<Card>
|
||||||
@@ -28,13 +31,17 @@ export default function RegisterDetail({
|
|||||||
<strong>{register.name}</strong> {register.issue_4_only && <span className="badge bg-danger">Issue 4 Only</span>}
|
<strong>{register.name}</strong> {register.issue_4_only && <span className="badge bg-danger">Issue 4 Only</span>}
|
||||||
{/*</Link>*/}
|
{/*</Link>*/}
|
||||||
<div className="float-end small text-muted">
|
<div className="float-end small text-muted">
|
||||||
<Link href={`https://wiki.specnext.dev/${encodeURIComponent((register.name).replace(' ','_'))}_Register`} className="text-decoration-none btn btn-sm btn-primary">
|
<Link href={`https://wiki.specnext.dev/${encodeURIComponent((register.name).replace(' ','_'))}_Register`} className="text-decoration-none btn btn-sm btn-primary" title="Open wiki">
|
||||||
<Icon.Wikipedia />
|
<Icon.Wikipedia />
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<Link href={`/registers/${register.hex_address}`} className="text-decoration-none btn btn-sm btn-primary">
|
<Link href={`/registers/${register.hex_address}`} className="text-decoration-none btn btn-sm btn-primary" title="Permalink">
|
||||||
<Icon.Link45deg />
|
<Icon.Link45deg />
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
|
<Button variant="primary" size="sm" className="text-decoration-none" onClick={() => setShowSource(true)} title="View source">
|
||||||
|
<Icon.CodeSlash />
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Card.Body>
|
<Card.Body>
|
||||||
@@ -54,11 +61,26 @@ export default function RegisterDetail({
|
|||||||
)}
|
)}
|
||||||
</Card.Body>
|
</Card.Body>
|
||||||
</Card>
|
</Card>
|
||||||
<code>
|
|
||||||
{register.source.map((line, index) => (
|
<Modal show={showSource} onHide={() => setShowSource(false)} size="xl" centered scrollable>
|
||||||
<span key={index}>{line}<br /></span>
|
<Modal.Header closeButton>
|
||||||
))}
|
<Modal.Title>Source: {register.name} [{register.hex_address}]</Modal.Title>
|
||||||
</code>
|
</Modal.Header>
|
||||||
|
<Modal.Body>
|
||||||
|
<pre className="mb-0">
|
||||||
|
{register.source && register.source.length > 0 ? (
|
||||||
|
register.source.map((line, index) => (
|
||||||
|
<span key={index}>{line}<br/></span>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<em>No source available.</em>
|
||||||
|
)}
|
||||||
|
</pre>
|
||||||
|
</Modal.Body>
|
||||||
|
<Modal.Footer>
|
||||||
|
<Button variant="secondary" onClick={() => setShowSource(false)}>Close</Button>
|
||||||
|
</Modal.Footer>
|
||||||
|
</Modal>
|
||||||
</Col>
|
</Col>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export function processRegisterBlock(paragraph: string, registers: Register[]) {
|
|||||||
if(line.includes('Issue 4 Only')) reg.issue_4_only = true;
|
if(line.includes('Issue 4 Only')) reg.issue_4_only = true;
|
||||||
|
|
||||||
const trimmedLine = line.trim();
|
const trimmedLine = line.trim();
|
||||||
reg.source.push(trimmedLine);
|
reg.source.push(line);
|
||||||
|
|
||||||
if (trimmedLine.startsWith('//')) continue;
|
if (trimmedLine.startsWith('//')) continue;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user