|
| 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 | +} |
0 commit comments