forked from FINAKON/HelpProject
1. Initial Commit - a boiler plate code and POC to realize the concept of context sensitive help 2. Frontend code written in ReactJS 3. Backend code written in Java, Spring Boot Framework 4. Frontend Start: pre-requisites : node, npm npm run dev ==> to start the frontend vite server 5. Backend Start: pre-requisites : java, mvn mvn spring-boot:run ==> to start the backend server 6. Visit http://localhost:5173/ for basic demo of help, press F1 in textboxes 7. Visit http://localhost:5173/editor and enter "admin123" to add/modify texts. Happy Coding !!! Thank you, Bhargava.
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
/**
|
|
* @import {Event} from 'micromark-util-types'
|
|
*/
|
|
|
|
/**
|
|
* @typedef {'center' | 'left' | 'none' | 'right'} Align
|
|
*/
|
|
|
|
import {ok as assert} from 'devlop'
|
|
|
|
/**
|
|
* Figure out the alignment of a GFM table.
|
|
*
|
|
* @param {Readonly<Array<Event>>} events
|
|
* List of events.
|
|
* @param {number} index
|
|
* Table enter event.
|
|
* @returns {Array<Align>}
|
|
* List of aligns.
|
|
*/
|
|
export function gfmTableAlign(events, index) {
|
|
assert(events[index][1].type === 'table', 'expected table')
|
|
let inDelimiterRow = false
|
|
/** @type {Array<Align>} */
|
|
const align = []
|
|
|
|
while (index < events.length) {
|
|
const event = events[index]
|
|
|
|
if (inDelimiterRow) {
|
|
if (event[0] === 'enter') {
|
|
// Start of alignment value: set a new column.
|
|
// To do: `markdown-rs` uses `tableDelimiterCellValue`.
|
|
if (event[1].type === 'tableContent') {
|
|
align.push(
|
|
events[index + 1][1].type === 'tableDelimiterMarker'
|
|
? 'left'
|
|
: 'none'
|
|
)
|
|
}
|
|
}
|
|
// Exits:
|
|
// End of alignment value: change the column.
|
|
// To do: `markdown-rs` uses `tableDelimiterCellValue`.
|
|
else if (event[1].type === 'tableContent') {
|
|
if (events[index - 1][1].type === 'tableDelimiterMarker') {
|
|
const alignIndex = align.length - 1
|
|
|
|
align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'
|
|
}
|
|
}
|
|
// Done!
|
|
else if (event[1].type === 'tableDelimiterRow') {
|
|
break
|
|
}
|
|
} else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {
|
|
inDelimiterRow = true
|
|
}
|
|
|
|
index += 1
|
|
}
|
|
|
|
return align
|
|
}
|