Skip to content

Commit b142c02

Browse files
authored
Merge pull request #1471 from birdca/feature/fretboard_finishView
Feature/fretboard finish view
2 parents 7b14845 + b5b0b8b commit b142c02

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+740
-3
lines changed

public/js/extra.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ import { stripTags } from '../../utils/string'
1515

1616
import getUIElements from './lib/editor/ui-elements'
1717
import { emojifyImageDir } from './lib/editor/constants'
18-
import { parseFenceCodeParams, serializeParamToAttribute } from './lib/markdown/utils'
18+
import {
19+
parseFenceCodeParams,
20+
serializeParamToAttribute,
21+
deserializeParamAttributeFromElement
22+
} from './lib/markdown/utils'
23+
import { renderFretBoard } from './lib/renderer/fretboard/fretboard'
1924

2025
import markdownit from 'markdown-it'
2126
import markdownitContainer from 'markdown-it-container'
@@ -483,6 +488,21 @@ export function finishView (view) {
483488
console.warn(err)
484489
}
485490
})
491+
// fretboard
492+
const fretboard = view.find('div.fretboard_instance.raw').removeClass('raw')
493+
fretboard.each((key, value) => {
494+
const params = deserializeParamAttributeFromElement(value)
495+
const $value = $(value)
496+
497+
try {
498+
const $ele = $(value).parent().parent()
499+
$ele.html(renderFretBoard($value.text(), params))
500+
} catch (err) {
501+
$value.unwrap()
502+
$value.parent().append(`<div class="alert alert-warning">${escapeHTML(err)}</div>`)
503+
console.warn(err)
504+
}
505+
})
486506

487507
// image href new window(emoji not included)
488508
const images = view.find('img.raw[src]').removeClass('raw')
@@ -1036,7 +1056,8 @@ const fenceCodeAlias = {
10361056
mermaid: 'mermaid',
10371057
abc: 'abc',
10381058
vega: 'vega',
1039-
geo: 'geo'
1059+
geo: 'geo',
1060+
fretboard: 'fretboard_instance'
10401061
}
10411062

10421063
function highlightRender (code, lang) {

public/js/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ var cursorActivityDebounce = 50
102102
var cursorAnimatePeriod = 100
103103
var supportContainers = ['success', 'info', 'warning', 'danger', 'spoiler']
104104
var supportCodeModes = ['javascript', 'typescript', 'jsx', 'htmlmixed', 'htmlembedded', 'css', 'xml', 'clike', 'clojure', 'ruby', 'python', 'shell', 'php', 'sql', 'haskell', 'coffeescript', 'yaml', 'pug', 'lua', 'cmake', 'nginx', 'perl', 'sass', 'r', 'dockerfile', 'tiddlywiki', 'mediawiki', 'go', 'gherkin'].concat(hljs.listLanguages())
105-
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid', 'abc', 'plantuml', 'vega', 'geo']
105+
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid', 'abc', 'plantuml', 'vega', 'geo', 'fretboard']
106106
var supportHeaders = [
107107
{
108108
text: '# h1',

public/js/lib/renderer/fretboard/css/i.css

Lines changed: 183 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/* global $ */
2+
3+
import './css/i.css'
4+
import dotEmpty from './svg/dotEmpty.svg'
5+
import dotEmptyH from './svg/dotEmpty_h.svg'
6+
import dot from './svg/dot.svg'
7+
import dotH from './svg/dot_h.svg'
8+
import dotWideLeft from './svg/dotWideLeft.svg'
9+
import dotWideRight from './svg/dotWideRight.svg'
10+
import dotWideMiddle from './svg/dotWideMiddle.svg'
11+
import stringO from './svg/string_o.svg'
12+
import stringX from './svg/string_x.svg'
13+
14+
const switchListV = {
15+
o: `<div class='cell dot'>${dot}</div>`,
16+
'*': `<div class='cell dot faded'>${dot}</div>`,
17+
'(': `<div class='cell'>${dotWideLeft}</div>`,
18+
')': `<div class='cell'>${dotWideRight}</div>`,
19+
'=': `<div class='cell'>${dotWideMiddle}</div>`,
20+
'^': `<div class='cell'>${stringO}</div>`,
21+
x: `<div class='cell'>${stringX}</div>`,
22+
'|': `<div class='cell empty'>${dotEmpty}</div>`,
23+
' ': `<div class='cell empty'>${dotEmpty}</div>`,
24+
'\n': `<div class='cell empty'>${dotEmpty}</div>`
25+
}
26+
const switchListH = {
27+
o: `<div class='cell dot'>${dotH}</div>`,
28+
'*': `<div class='cell dot faded'>${dotH}</div>`,
29+
O: `<div class='cell dot root'>${dotH}</div>`,
30+
'-': `<div class='cell empty'>${dotEmptyH}</div>`,
31+
' ': `<div class='cell empty'>${dotEmptyH}</div>`,
32+
'\n': `<div class='cell empty'>${dotEmptyH}</div><div class='cell empty'>${dotEmptyH}</div>`
33+
}
34+
35+
export const renderFretBoard = (content, { title: fretTitle, type }) => {
36+
const fretType = type.split(' ')
37+
const containerClass = fretType && fretType[0].startsWith('h') ? 'fretContainer_h' : 'fretContainer'
38+
const fretboardHTML = $(`<div class="${containerClass}"></div>`)
39+
40+
$(fretboardHTML).append($(`<div class="fretTitle">${fretTitle}</div>`))
41+
42+
// create fretboard background HTML
43+
const fretbOrientation = fretType && fretType[0].startsWith('v') ? 'vert' : 'horiz'
44+
const fretbLen = fretType && fretType[0].substring(1)
45+
const fretbClass = fretType && fretType[0][0] + ' ' + fretType[0]
46+
const nut = (fretType[1] && fretType[1] === 'noNut') ? 'noNut' : ''
47+
const svgHTML = $(`<div class="svg_wrapper ${fretbClass} ${nut}"></div>`)
48+
const fretbBg = require(`./svg/fretb_${fretbOrientation}_${fretbLen}.svg`)
49+
$(svgHTML).append($(fretbBg))
50+
51+
// create cells HTML
52+
const cellsHTML = $('<div class="cells"></div>')
53+
let switchList = ''
54+
if (fretbOrientation && fretbOrientation === 'vert') {
55+
switchList = switchListV
56+
} else {
57+
// calculate position
58+
const emptyFill = new Array(Number(fretbLen) + 3).fill(' ').join('')
59+
content = `${emptyFill}${content}`
60+
61+
switchList = switchListH
62+
}
63+
64+
const contentCell = content && content.split('')
65+
// Go through each ASCII character...
66+
const numArray = [...Array(10).keys()].slice(1)
67+
contentCell && contentCell.forEach(char => {
68+
if (numArray.toString().indexOf(char) !== -1) {
69+
const numType = fretType && fretType[0].startsWith('h') ? '_h' : ''
70+
const numSvg = require(`./svg/number${char}${numType}.svg`)
71+
cellsHTML.append($(`<div class='cell empty'>${numSvg}</div>`))
72+
} else if (switchList[char] !== undefined) {
73+
cellsHTML.append($(switchList[char]))
74+
}
75+
})
76+
77+
$(svgHTML).append($(cellsHTML))
78+
$(fretboardHTML).append($(svgHTML))
79+
80+
return fretboardHTML[0].outerHTML
81+
}
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)