Jelajahi Sumber

fixed bug with DomParser and named entities (e.g.  )

Bachir Soussi Chiadmi 3 tahun lalu
induk
melakukan
09793d56f8
1 mengubah file dengan 28 tambahan dan 13 penghapusan
  1. 28 13
      src/components/Content/EdText.vue

+ 28 - 13
src/components/Content/EdText.vue

@@ -42,30 +42,45 @@ export default {
       // console.log('EdText: builded html', this.html)
     },
     parseLinks () {
-      const regx = /<a[^<]+<\/a>/g
-      let links = this.html.match(regx)
+      let links = this.html.match(/<a[^<]+<\/a>/g)
       console.log('links', links)
       if (links) {
-        let domlink, newlink, uuid
+        // let domparser = new DOMParser()
+        // let domlink
+        let linkparts, newlink, uuid
         let index = null
         for (var i = 0; i < links.length; i++) {
-          domlink = new DOMParser().parseFromString(links[i], 'text/xml').firstChild
-          console.log('domlink', domlink.classList)
-          if (domlink.classList.contains('placeName')) { index = 'locorum' }
-          if (domlink.classList.contains('persName')) { index = 'nominum' }
-          if (domlink.classList.contains('objectName')) { index = 'operum' }
-          console.log('index:', index)
+          // console.log(`link ${i}:`, links[i])
+          // domlink = domparser.parseFromString(links[i], 'text/xml').firstChild
+          // console.log('domlink', domlink.classList)
+          // if (domlink.classList.contains('placeName')) { index = 'locorum' }
+          // if (domlink.classList.contains('persName')) { index = 'nominum' }
+          // if (domlink.classList.contains('objectName')) { index = 'operum' }
+          // console.log('index:', index)
+          linkparts = RegExp(/<a class="(.+)" href="(.+)">(.+)<\/a>/g).exec(links[i], 'g')
+          // console.log('linkparts', linkparts)
+          switch (linkparts[1]) {
+            case 'persName':
+              index = 'nominum'
+              break
+            case 'placeName':
+              index = 'locorum'
+              break
+            case 'objectName':
+              index = 'operum'
+              break
+          }
           if (index) {
-            uuid = domlink.getAttribute('href').replace('#', '')
+            uuid = linkparts[2].replace('#', '')
             newlink = `<a` +
-              ` class="${domlink.getAttribute('class')} active-link"` +
+              ` class="${linkparts[1]} active-link"` +
               ` data-index="${index}"` +
               ` uuid="${uuid}"` +
               ` href="/${index}/${uuid}"` +
               ` @click.prevent="onClickRef"` +
               ` @keyup.enter="onClickRef"` +
-              `>${domlink.innerHTML}</a>`
-            console.log('newlink', newlink)
+              `>${linkparts[3]}</a>`
+            // console.log('newlink', newlink)
             this.html = this.html.replace(links[i], newlink)
           }
         }