@@ -64,6 +64,7 @@ function newButton() {
6464 }
6565 } ) ;
6666 document . querySelector ( '#extensions' ) . value = defaults . extensions ;
67+ document . querySelector ( '#pdf' ) . innerHTML = '' ;
6768}
6869
6970async function saveButton ( ) {
@@ -115,6 +116,7 @@ async function loadButton() {
115116 }
116117 } ) ;
117118 document . querySelector ( '#extensions' ) . value = text . extensions ;
119+ document . querySelector ( '#pdf' ) . innerHTML = '' ;
118120}
119121
120122function settingsButton ( ) {
@@ -172,15 +174,6 @@ function bodyButton() {
172174 } ) ;
173175}
174176
175- function textarea ( ) {
176- const mainText = editor . state . doc . text . reduce ( ( str , line ) => `${ str } \n${ line } ` , '' ) . replace ( / \n / , '' ) ;
177- if ( document . querySelector ( '#body-button' ) . classList . contains ( 'secondary' ) ) {
178- text . preamble = mainText ;
179- } else {
180- text . body = mainText ;
181- }
182- }
183-
184177async function extensionsLink ( ) {
185178 await openUrl ( 'https://pandoc.org/MANUAL.html#extensions' ) ;
186179}
@@ -218,12 +211,12 @@ async function compile() {
218211 const pdfFile = await resolve ( path , `${ fileName } .pdf` ) ;
219212 const pandoc = Command . create ( 'pandoc' , [ '--from' , `markdown${ text . extensions } ` , '--to' , document . querySelector ( '#export' ) . value , '--output' , pdfFile , yamlFile , markdownPath ] ) ;
220213 const result = await pandoc . execute ( ) ;
214+ document . querySelector ( '#pdf' ) . innerHTML = '' ;
221215 if ( result . stderr !== '' ) {
222216 console . error ( result . stderr ) ;
223217 document . querySelector ( '#error-text' ) . innerHTML = result . stderr ;
224218 document . querySelector ( '#error' ) . setAttribute ( 'open' , '' ) ;
225219 } else {
226- document . querySelector ( '#pdf' ) . innerHTML = '' ;
227220 const pdfArr = await readFile ( pdfFile ) ;
228221 const el = document . createElement ( 'embed' ) ;
229222 el . src = URL . createObjectURL ( new Blob ( [ pdfArr ] , { type : 'application/pdf' } ) ) ;
@@ -260,7 +253,22 @@ window.addEventListener('DOMContentLoaded', async () => {
260253 ...closeBracketsKeymap ,
261254 ...defaultKeymap ,
262255 ...historyKeymap
263- ] )
256+ ] ) ,
257+ EditorView . updateListener . of ( v => {
258+ let newText ;
259+ if ( v . state . doc . hasOwnProperty ( 'text' ) && ( ! v . startState . doc . hasOwnProperty ( 'text' ) || v . state . doc . text . toString ( ) !== v . startState . doc . text . toString ( ) ) ) {
260+ newText = v . state . doc . text . join ( `\n` ) ;
261+ }
262+ if ( v . state . doc . hasOwnProperty ( 'children' ) && ( ! v . startState . doc . hasOwnProperty ( 'children' ) || v . state . doc . children . reduce ( ( str , child ) => str + child . text . toString ( ) , '' ) !== v . startState . doc . children . reduce ( ( str , child ) => str + child . text . toString ( ) , '' ) ) ) {
263+ newText = v . state . doc . children . map ( child => child . text ) . flat ( ) . join ( `\n` ) ;
264+ }
265+ if ( newText === undefined ) return ;
266+ if ( document . querySelector ( '#body-button' ) . classList . contains ( 'secondary' ) ) {
267+ text . preamble = newText ;
268+ } else {
269+ text . body = newText ;
270+ }
271+ } )
264272 ]
265273 } ) ;
266274 editor = new EditorView ( {
@@ -280,7 +288,6 @@ window.addEventListener('DOMContentLoaded', async () => {
280288 document . querySelector ( '#source-code-button' ) . addEventListener ( 'click' , sourceCodeButton ) ;
281289 document . querySelector ( '#preamble-button' ) . addEventListener ( 'click' , preambleButton ) ;
282290 document . querySelector ( '#body-button' ) . addEventListener ( 'click' , bodyButton ) ;
283- document . querySelector ( '.cm-content' ) . addEventListener ( 'input' , textarea ) ;
284291 document . querySelector ( '#extensions-link' ) . addEventListener ( 'click' , extensionsLink ) ;
285292 document . querySelector ( '#extensions' ) . addEventListener ( 'input' , extensions ) ;
286293 document . querySelector ( '#compile-button' ) . addEventListener ( 'click' , compile ) ;
0 commit comments