aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-10-12 20:28:31 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-10-13 11:06:46 +0800
commit528036f50d5dac0076b479c266350812a39180b5 (patch)
tree1d22dcba033e1b265070e94b5a9b035cc5f66e50
parent124353ca30b36e69b94e50e6171ff61d7c20709e (diff)
refactor: don't re-render HTML by dragging
-rw-r--r--src/css/dumbymap.css2
-rw-r--r--src/editor.mjs22
2 files changed, 15 insertions, 9 deletions
diff --git a/src/css/dumbymap.css b/src/css/dumbymap.css
index 416c216..7ddb21a 100644
--- a/src/css/dumbymap.css
+++ b/src/css/dumbymap.css
@@ -761,7 +761,7 @@ root {
761.dragging-geolink { 761.dragging-geolink {
762 user-select: none; 762 user-select: none;
763 763
764 .dumby-block > :not(:has(.mapclay)) { 764 .dumby-block > :not(:has(.mapclay[data-render="fulfilled"])) {
765 opacity: 0.3; 765 opacity: 0.3;
766 } 766 }
767} 767}
diff --git a/src/editor.mjs b/src/editor.mjs
index c3c51ef..cdbd5cc 100644
--- a/src/editor.mjs
+++ b/src/editor.mjs
@@ -2,7 +2,7 @@
2import { markdown2HTML, generateMaps } from './dumbymap' 2import { markdown2HTML, generateMaps } from './dumbymap'
3import { defaultAliases, parseConfigsFromYaml } from 'mapclay' 3import { defaultAliases, parseConfigsFromYaml } from 'mapclay'
4import * as menuItem from './MenuItem' 4import * as menuItem from './MenuItem'
5import { addAnchorByPoint } from './dumbyUtils.mjs' 5import { addAnchorByPoint, createGeoLink } from './dumbyUtils.mjs'
6import { shiftByWindow } from './utils.mjs' 6import { shiftByWindow } from './utils.mjs'
7import LeaderLine from 'leader-line' 7import LeaderLine from 'leader-line'
8import * as tutorial from './tutorial' 8import * as tutorial from './tutorial'
@@ -1084,6 +1084,7 @@ dumbyContainer.onmousedown = (e) => {
1084 const geoLink = document.createElement('a') 1084 const geoLink = document.createElement('a')
1085 geoLink.textContent = range.toString() 1085 geoLink.textContent = range.toString()
1086 geoLink.classList.add('with-leader-line', 'geolink', 'drag') 1086 geoLink.classList.add('with-leader-line', 'geolink', 'drag')
1087 const originContent = range.cloneContents()
1087 range.deleteContents() 1088 range.deleteContents()
1088 range.insertNode(geoLink) 1089 range.insertNode(geoLink)
1089 1090
@@ -1113,15 +1114,16 @@ dumbyContainer.onmousedown = (e) => {
1113 line?.remove() 1114 line?.remove()
1114 lineEnd.remove() 1115 lineEnd.remove()
1115 dumbymap.utils.renderedMaps().forEach(map => map.style.removeProperty('cursor')) 1116 dumbymap.utils.renderedMaps().forEach(map => map.style.removeProperty('cursor'))
1116 const resumeContent = () => updateDumbyMap(newDumbymap => { 1117 const resumeContent = () => {
1117 const scrollTop = dumbymap.htmlHolder.scrollTop 1118 range.deleteContents()
1118 newDumbymap.htmlHolder.scrollBy(0, scrollTop) 1119 range.insertNode(originContent)
1119 }) 1120 }
1120 1121
1121 const map = document.elementFromPoint(e.clientX, e.clientY).closest('.mapclay') 1122 const map = document.elementFromPoint(e.clientX, e.clientY)
1123 .closest('.mapclay[data-render="fulfilled"]')
1122 const selection = cm.getSelection() 1124 const selection = cm.getSelection()
1123 if (!map || !selection) { 1125 if (!map || !selection) {
1124 resumeContent() 1126 resumeContent('map/selection')
1125 return 1127 return
1126 } 1128 }
1127 1129
@@ -1132,16 +1134,20 @@ dumbyContainer.onmousedown = (e) => {
1132 validateAnchorName, 1134 validateAnchorName,
1133 }) 1135 })
1134 if (!refLink) { 1136 if (!refLink) {
1135 resumeContent() 1137 resumeContent('reflink')
1136 return 1138 return
1137 } 1139 }
1138 1140
1141 const scrollTop = dumbymap.htmlHolder.scrollTop
1142 geoLink.href = refLink.link
1143 createGeoLink(geoLink)
1139 appendRefLink(cm, refLink) 1144 appendRefLink(cm, refLink)
1140 if (selection === refLink.ref) { 1145 if (selection === refLink.ref) {
1141 cm.replaceSelection(`[${selection}]`) 1146 cm.replaceSelection(`[${selection}]`)
1142 } else { 1147 } else {
1143 cm.replaceSelection(`[${selection}][${refLink.ref}]`) 1148 cm.replaceSelection(`[${selection}][${refLink.ref}]`)
1144 } 1149 }
1150 dumbymap.htmlHolder.scrollBy(0, scrollTop)
1145 } 1151 }
1146} 1152}
1147 1153