Skip to content

Commit 74d112a

Browse files
committed
fix: remove redundant code
1 parent 079d51d commit 74d112a

File tree

1 file changed

+69
-81
lines changed

1 file changed

+69
-81
lines changed

src/plugins/jsmind.multiline-text.js

Lines changed: 69 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,8 @@ export class MultilineText {
280280
init() {
281281
this.override_view_methods();
282282
this.setup_event_listeners();
283-
// Re-render all existing nodes to apply multiline formatting
284-
this.rerender_existing_nodes();
283+
this.initialized = true;
284+
console.log('Multiline text plugin initialized - ready for first render');
285285
}
286286

287287
/**
@@ -323,31 +323,19 @@ export class MultilineText {
323323
*/
324324
restore_original_methods() {
325325
const view = this.jm.view;
326-
if (this.original_methods.edit_node_begin) {
327-
view.edit_node_begin = this.original_methods.edit_node_begin;
328-
}
329-
if (this.original_methods.edit_node_end) {
330-
view.edit_node_end = this.original_methods.edit_node_end;
331-
}
332-
if (this.original_methods.render_node) {
333-
view.render_node = this.original_methods.render_node;
334-
}
335-
if (this.original_methods.show) {
336-
view.show = this.original_methods.show;
337-
}
338-
if (this.original_methods._custom_node_render) {
339-
view._custom_node_render = this.original_methods._custom_node_render;
340-
}
341-
if (this.original_methods._default_node_render) {
342-
view._default_node_render = this.original_methods._default_node_render;
343-
}
326+
const methods = ['edit_node_begin', 'edit_node_end', 'render_node', 'show', '_custom_node_render', '_default_node_render'];
327+
328+
methods.forEach(method => {
329+
if (this.original_methods[method]) {
330+
view[method] = this.original_methods[method];
331+
}
332+
});
344333
}
345334

346335
/**
347336
* Set up event listeners for the plugin.
348337
*/
349338
setup_event_listeners() {
350-
// Listen for jsMind events if needed
351339
this.jm.add_event_listener((type, data) => {
352340
this.jm_event_handle(type, data);
353341
});
@@ -397,8 +385,8 @@ export class MultilineText {
397385
return;
398386
}
399387

400-
// Store original dimensions for layout recalculation
401-
const originalHeight = element.clientHeight;
388+
const hasMultilineText = node.topic.includes('\n');
389+
const originalHeight = hasMultilineText ? element.clientHeight : 0;
402390

403391
// Check if we have custom node render function
404392
const hasCustomRender =
@@ -408,7 +396,6 @@ export class MultilineText {
408396
let customRendered = false;
409397

410398
if (hasCustomRender) {
411-
// Try custom render first
412399
try {
413400
customRendered = this.jm.view.opts.custom_node_render(this.jm, element, node);
414401
} catch (error) {
@@ -417,23 +404,36 @@ export class MultilineText {
417404
}
418405
}
419406

420-
// If custom render didn't handle it, use our multiline logic
407+
// If custom render didn't handle it, use appropriate rendering strategy
421408
if (!customRendered) {
422-
// Use the new static rendering function with plugin configuration
423-
renderTextToElement(element, node.topic, {
424-
clearElement: true,
425-
applyStyles: true,
426-
supportHtml: this.jm.view.opts.support_html || false,
427-
});
409+
if (hasMultilineText) {
410+
renderTextToElement(element, node.topic, {
411+
clearElement: true,
412+
applyStyles: true,
413+
supportHtml: this.jm.view.opts.support_html || false,
414+
});
415+
} else {
416+
if (this.original_methods.render_node) {
417+
this.original_methods.render_node(element, node);
418+
return;
419+
} else {
420+
renderTextToElement(element, node.topic, {
421+
clearElement: true,
422+
applyStyles: false,
423+
supportHtml: this.jm.view.opts.support_html || false,
424+
});
425+
}
426+
}
428427
}
429428

430-
// Check if height changed and trigger layout update if needed
431-
const newHeight = element.clientHeight;
432-
if (originalHeight !== newHeight && originalHeight > 0) {
433-
// Use setTimeout to ensure DOM has updated before recalculating
434-
setTimeout(() => {
435-
this.recalculate_layout(node);
436-
}, 0);
429+
// Recalculate layout only if multiline text height changed
430+
if (hasMultilineText && originalHeight > 0) {
431+
const newHeight = element.clientHeight;
432+
if (originalHeight !== newHeight) {
433+
setTimeout(() => {
434+
this.recalculate_layout(node);
435+
}, 0);
436+
}
437437
}
438438
}
439439

@@ -544,15 +544,9 @@ export class MultilineText {
544544
}
545545

546546
this.editing_node = node;
547-
548547
this.jm.view.editing_node = node;
549548

550-
const view_data = node._data.view;
551-
const element = view_data.element;
552-
const topic = node.topic;
553-
554-
// Create multiline editor
555-
this.create_multiline_editor(element, topic);
549+
this.create_multiline_editor(node._data.view.element, node.topic);
556550
}
557551

558552
/**
@@ -702,6 +696,16 @@ export class MultilineText {
702696
selection.addRange(range);
703697
}
704698

699+
/**
700+
* Reset editing state and return focus to panel.
701+
*/
702+
_reset_editing_state() {
703+
this.editing_node = null;
704+
this.jm.view.editing_node = null;
705+
this.multiline_editor = null;
706+
this.jm.view.e_panel.focus();
707+
}
708+
705709
/**
706710
* End editing and save changes.
707711
*/
@@ -711,36 +715,21 @@ export class MultilineText {
711715
}
712716

713717
const node = this.editing_node;
714-
const view_data = node._data.view;
715-
const element = view_data.element;
718+
const element = node._data.view.element;
716719
const topic = this.multiline_editor.textContent || '';
717720

718-
// Clean up editor
719721
this.cleanup_editor(element);
720722

721-
// Process and validate text
722723
const processed_topic = this.process_multiline_text(topic);
723724

724-
// Update node if text changed
725725
if (jsMind.util.text.is_empty(processed_topic) || node.topic === processed_topic) {
726-
// No change or empty text, just re-render
727726
this._render_multiline_node(element, node);
728727
} else {
729-
// Text changed, update node
730728
this.jm.update_node(node.id, processed_topic);
731729
}
732730

733-
// Trigger layout recalculation
734731
this.recalculate_layout(node);
735-
736-
// Reset editing state
737-
this.editing_node = null;
738-
739-
this.jm.view.editing_node = null;
740-
this.multiline_editor = null;
741-
742-
// Return focus to panel
743-
this.jm.view.e_panel.focus();
732+
this._reset_editing_state();
744733
}
745734

746735
/**
@@ -752,23 +741,11 @@ export class MultilineText {
752741
}
753742

754743
const node = this.editing_node;
755-
const view_data = node._data.view;
756-
const element = view_data.element;
744+
const element = node._data.view.element;
757745

758-
// Clean up editor
759746
this.cleanup_editor(element);
760-
761-
// Restore original content
762747
this._render_multiline_node(element, node);
763-
764-
// Reset editing state
765-
this.editing_node = null;
766-
767-
this.jm.view.editing_node = null;
768-
this.multiline_editor = null;
769-
770-
// Return focus to panel
771-
this.jm.view.e_panel.focus();
748+
this._reset_editing_state();
772749
}
773750

774751
/**
@@ -803,24 +780,35 @@ export class MultilineText {
803780
}
804781

805782
/**
806-
* Re-render all existing nodes to apply multiline formatting.
783+
* Re-render only nodes that contain multiline text for better performance.
807784
*/
808-
rerender_existing_nodes() {
785+
rerender_multiline_nodes_only() {
809786
if (!this.jm.mind || !this.jm.mind.nodes) {
810787
return;
811788
}
812789

813-
// Re-render all nodes that have multiline text
790+
let rerendered_count = 0;
814791
const nodes = this.jm.mind.nodes;
792+
815793
for (const node_id in nodes) {
816794
const node = nodes[node_id];
817795
if (node.topic && node.topic.includes('\n')) {
818796
const view_data = node._data.view;
819797
if (view_data && view_data.element) {
820798
this._render_multiline_node(view_data.element, node);
799+
rerendered_count++;
821800
}
822801
}
823802
}
803+
804+
console.log(`Multiline text plugin: Re-rendered ${rerendered_count} multiline nodes`);
805+
}
806+
807+
/**
808+
* @deprecated Use rerender_multiline_nodes_only() for better performance
809+
*/
810+
rerender_existing_nodes() {
811+
this.rerender_multiline_nodes_only();
824812
}
825813

826814
/**
@@ -857,10 +845,10 @@ export class MultilineText {
857845
* @param {object} [data] - Event data
858846
*/
859847
jm_event_handle(type, data) {
860-
// Handle events if needed
861848
if (type === jsMind.event_type.resize) {
862-
// Handle resize events
849+
// Handle resize events if needed
863850
}
851+
void data; // Suppress unused parameter warning
864852
}
865853
}
866854

0 commit comments

Comments
 (0)