From b6b5bd7af81b76edf8da9534ee682991b8c9ca5d Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 22 Dec 2023 13:39:58 -0300 Subject: [PATCH] [KiRi] Refactorized the JS code - Avoid scaning the DOM all the time - Rely on status in JS vars - Remove the jQuery dependency --- kibot/resources/kiri/index.html | 61 +- kibot/resources/kiri/kiri.css | 30 +- kibot/resources/kiri/kiri.js | 1151 +++++++++++-------------------- 3 files changed, 433 insertions(+), 809 deletions(-) diff --git a/kibot/resources/kiri/index.html b/kibot/resources/kiri/index.html index ae09c883..7c7b6d37 100644 --- a/kibot/resources/kiri/index.html +++ b/kibot/resources/kiri/index.html @@ -3,7 +3,6 @@ - @@ -19,7 +18,7 @@ -
+
@@ -101,33 +100,39 @@
- - - Newer - -
- - - ([COMMIT_1_HASH]) -
-
-
+
+ + + Newer + +
+ + + ([COMMIT_1_HASH]) +
+
+
+
- - - Older - -
- - - ([COMMIT_2_HASH]) -
-
-
- - - Unchanged - +
+ + + Older + +
+ + + ([COMMIT_2_HASH]) +
+
+
+
+
+ + + Unchanged + +
diff --git a/kibot/resources/kiri/kiri.css b/kibot/resources/kiri/kiri.css index 2cd315ae..462130e9 100644 --- a/kibot/resources/kiri/kiri.css +++ b/kibot/resources/kiri/kiri.css @@ -270,23 +270,26 @@ hr { height: 20px; } -.icon-commit1 { - margin-left: 0.5em; + +.icon-commit1, .icon-commit1-fs { margin-right: 0.2em; - color: #00FF00; width: 10px; height: 10px; } +.icon-commit1 { + margin-left: 0.5em; +} + .icon-commit1-fs { margin-left: 0em; - margin-right: 0.2em; - color: #00FF00; - width: 10px; - height: 10px; } -.icon-commit2 { +.icon-commit1-color { + color: #00FF00; +} + +.icon-commit2, .icon-commit2-fs { display: inline; margin-left: 1em; margin-right:0.2em; @@ -295,13 +298,8 @@ hr { height: 10px; } -.icon-commit2-fs { - display: inline; - margin-left:1em; - margin-right:0.2em; +.icon-commit2-color { color: #FF0000; - width: 10px; - height: 10px; } .commit-standalone-color { @@ -539,3 +537,7 @@ hr { overflow-y: scroll; max-height: 90vh; } + +.commit1, .commit2, .commit3 { + display: inline; +} diff --git a/kibot/resources/kiri/kiri.js b/kibot/resources/kiri/kiri.js index 92cf4825..e64d8dab 100644 --- a/kibot/resources/kiri/kiri.js +++ b/kibot/resources/kiri/kiri.js @@ -1,11 +1,15 @@ - // jshint esversion:6 +// Hashes for the two selected commits var commit1; var commit2; +// Commits objects list +var commits_form; +// How may commits +var num_commits; var old_view; -var current_view; +var current_view = "show_sch"; current_diff_filter = "diff" // diff or normal @@ -13,9 +17,6 @@ var panZoom_instance = null; var lastEventListener = null; var lastEmbed = null; -var current_selected_page = 0; -var previous_selected_page = -1; - sch_current_zoom = null; sch_old_zoom = null; sch_current_pan = null; @@ -29,224 +30,188 @@ var selected_view = "schematic"; var is_fullscreen = false; +// Schematic sheets for the commit1 var sheet_pages_commit1 = new Set(); +// Schematic sheets for the commit1 var sheet_pages_commit2 = new Set(); +// Displayed schematic sheets var current_sheets_list = []; +// PCB layers for commit1 var layers_commit1 = new Set(); +// PCB layers for commit2 var layers_commit2 = new Set(); +// Displayed PCB layers var current_layers_list = []; - +// Icon to indicate the schematic was changed in a commit const SCH_IMG = ''; +// Icon to indicate the PCB was changed in a commit const PCB_IMG = ''; - +// Color for the commit1 var commit1_legend_color; +// Color for the commit2 var commit2_legend_color; +// Color when only one commit is displayed var commit_standalone_color; +// Image 1 element +var diff_xlink_1; +// Image 2 element +var diff_xlink_2; + +// List of pages (objects) +var pages; +// Which one is selected +var selected_page = -1; +// List of layers (objects) +var layers; +// Which one is selected +var selected_layer = -1; + // ======================================= // HANDLE SHORTCUTS // ======================================= +// Move 2nd commit downwards function select_next_2_commits() { - commits = $("#commits_form input:checkbox[name='commit']"); - - selected_commits = []; - next_selected_commits = []; - - for (i = 0; i < commits.length; i++) { - if ($("#commits_form input:checkbox[name='commit']")[i].checked) { - selected_commits.push(i); - next_selected_commits.push(i + 1); - } + var commit2_order = order_of(commit2); + if (commit2_order == num_commits) { + console.log('Already at the bottom'); + return; } - - // When second commit reaches the end, moves the first commit forward (if possible) - if (next_selected_commits[1] >= commits.length) { - next_selected_commits[1] = commits.length - 1; - if (next_selected_commits[0] <= commits.length - 2) { - next_selected_commits[0] = selected_commits[0] + 1; - } - } - else { - // By default does not change the first commit - next_selected_commits[0] = selected_commits[0]; - } - - // Fix bottom boundary - if (next_selected_commits[0] >= next_selected_commits[1]) { - next_selected_commits[0] = next_selected_commits[1] - 1; - } - - // Fix bottom boundary - if (next_selected_commits[0] >= commits.length - 2) { - next_selected_commits[0] = commits.length - 2; - } - - // Update selected commits - for (i = 0; i < selected_commits.length; i++) { - commits[selected_commits[i]].checked = false; - } - for (i = 0; i < selected_commits.length; i++) { - commits[next_selected_commits[i]].checked = true; - } - + // Move the lower 1 place down + commit2.checked = false; + commit2 = commits_form[commit2_order]; + commit2.checked = true; update_commits(); } +function order_of(commit) { + return parseInt(commit.getAttribute('order')); +} + +// Move commits par downwards function select_next_commit() { - commits = $("#commits_form input:checkbox[name='commit']"); - - selected_commits = []; - next_selected_commits = []; - - for (i = 0; i < commits.length; i++) { - if ($("#commits_form input:checkbox[name='commit']")[i].checked) { - selected_commits.push(i); - next_selected_commits.push(i + 1); - } + var commit1_order = order_of(commit1); + var commit2_order = order_of(commit2); + var changed = false; + if (commit2_order < num_commits) { + // Move the lower 1 place down + commit2.checked = false; + commit2 = commits_form[commit2_order]; + commit2.checked = true; + changed = true; + commit2_order = commit2_order + 1; } - - // Fix bottom boundary - if (next_selected_commits[1] >= commits.length - 1) { - next_selected_commits[1] = commits.length - 1; + if ((commit1_order + 1) < commit2_order) { + // Move the upper 1 place down + commit1.checked = false; + commit1 = commits_form[commit1_order]; + commit1.checked = true; + changed = true; } - - // Fix bottom boundary - if (next_selected_commits[0] >= commits.length - 2) { - next_selected_commits[0] = commits.length - 2; + if (! changed) { + console.log('Already at the bottom'); + return; } - - for (i = 0; i < selected_commits.length; i++) { - commits[selected_commits[i]].checked = false; - } - for (i = 0; i < selected_commits.length; i++) { - commits[next_selected_commits[i]].checked = true; - } - update_commits(); } -function select_previows_2_commits() { - commits = $("#commits_form input:checkbox[name='commit']"); - - selected_commits = []; - next_selected_commits = []; - - for (i = 0; i < commits.length; i++) { - if ($("#commits_form input:checkbox[name='commit']")[i].checked) { - selected_commits.push(i); - next_selected_commits.push(i - 1); - } +// Move 2nd commit upwards +function select_previous_2_commits() { + var commit1_order = order_of(commit1); + var commit2_order = order_of(commit2); + if ((commit2_order - 1) <= commit1_order) { + console.log('Already next to the first'); + return; } - - // By default does not change the first commit - next_selected_commits[0] = selected_commits[0]; - - // When commits are touching, move first backwards (if possible) - if (next_selected_commits[1] == next_selected_commits[0]) { - if (next_selected_commits[0] > 0) { - next_selected_commits[0] = next_selected_commits[0] -1; - } - } - - // Fix top boundary - if (next_selected_commits[0] < 0) { - next_selected_commits[0] = 0; - } - - // Fix top boundary - if (next_selected_commits[1] <= 1) { - next_selected_commits[1] = 1; - } - - // Update selected commits - for (i = 0; i < selected_commits.length; i++) { - commits[selected_commits[i]].checked = false; - } - for (i = 0; i < selected_commits.length; i++) { - commits[next_selected_commits[i]].checked = true; - } - + // Move the lower 1 place up + commit2.checked = false; + commit2 = commits_form[commit2_order - 2]; + commit2.checked = true; update_commits(); } -function select_previows_commit() +// Move commits par upwards +function select_previous_commit() { - commits = $("#commits_form input:checkbox[name='commit']"); - - selected_commits = []; - next_selected_commits = []; - - for (i = 0; i < commits.length; i++) { - if ($("#commits_form input:checkbox[name='commit']")[i].checked) { - selected_commits.push(i); - next_selected_commits.push(i - 1); - } + var commit1_order = order_of(commit1); + var commit2_order = order_of(commit2); + var changed = false; + if (commit1_order > 1) { + // Move the upper 1 place up + commit1.checked = false; + commit1 = commits_form[commit1_order - 2]; + commit1.checked = true; + changed = true; + commit1_order = commit1_order - 1; } - - // Fix top boundary - if (next_selected_commits[0] <= 0) { - next_selected_commits[0] = 0; + if ((commit2_order - 1) > commit1_order) { + // Move the lower 1 place up + commit2.checked = false; + commit2 = commits_form[commit2_order - 2]; + commit2.checked = true; + changed = true; } - - // Fix top boundary - if (next_selected_commits[1] <= 1) { - next_selected_commits[1] = 1; + if (! changed) { + console.log('Already at the top'); + return; } - - // Update selected commits - for (i = 0; i < selected_commits.length; i++) { - commits[selected_commits[i]].checked = false; - } - for (i = 0; i < selected_commits.length; i++) { - commits[next_selected_commits[i]].checked = true; - } - update_commits(); } +function update_commit_legend_visibility(id, status) +{ // Make all elements of the commitN class visible/hidden + for (const e of document.getElementsByClassName("commit"+id)) { + e.style.visibility = status; + } +} + +function update_commit_legend_color(id, color) +{ // Adjust the color for all the elements of the commitN class + if (! color) { + color = (id == 1 ? commit1_legend_color : commit2_legend_color); + } + for (const e of document.getElementsByClassName("icon-commit"+id+"-color")) { + e.style.color = color; + } +} + +function set_image_filters(img1=true, img2=true) { + if (img1 && img2) { + diff_xlink_1.style.filter = 'url(#filter-1)'; /// FILTER_DEFAULT + diff_xlink_2.style.filter = 'url(#filter-2)'; /// FILTER_DEFAULT + } else if (img1) { + diff_xlink_1.style.filter = 'url(#filter-12)'; /// FILTER_WHITE + } else if (img2) { + diff_xlink_2.style.filter = 'url(#filter-22)'; /// FILTER_WHITE + } +} + function reset_commits_selection() { - commits = $("#commits_form input:checkbox[name='commit']"); - selected_commits = []; - for (i = 0; i < commits.length; i++) { - $("#commits_form input:checkbox[name='commit']")[i].checked = false; - } - for (i = 0; i < 2; i++) { - $("#commits_form input:checkbox[name='commit']")[i].checked = true; - } + commit1.checked = false; + commit2.checked = false; + commit1 = commits_form[0]; + commit2 = commits_form[1]; + commit1.checked = true; + commit2.checked = true; // reset visibility of the diff images - $("#diff-xlink-1").css('visibility', 'visible') - $("#commit1_legend").css('visibility', 'visible'); - $("#commit1_legend_text").css('visibility', 'visible'); - $("#commit1_legend_fs").css('visibility', 'visible'); - $("#commit1_legend_text_fs").css('visibility', 'visible'); - $("#commit1_legend").css('color', commit1_legend_color); - $("#commit1_legend_fs").css('color', commit1_legend_color); + update_commit_legend_visibility(1, 'visible'); + update_commit_legend_color(1); - $("#diff-xlink-2").css('visibility', 'visible') - $("#commit2_legend").css('visibility', 'visible'); - $("#commit2_legend_text").css('visibility', 'visible'); - $("#commit2_legend_fs").css('visibility', 'visible'); - $("#commit2_legend_text_fs").css('visibility', 'visible'); - $("#commit2_legend").css('color', commit2_legend_color); - $("#commit2_legend_fs").css('color', commit2_legend_color); + update_commit_legend_visibility(2, 'visible'); + update_commit_legend_color(2); - $("#commit3_legend").css('visibility', 'visible'); - $("#commit3_legend_text").css('visibility', 'visible'); - $("#commit3_legend_fs").css('visibility', 'visible'); - $("#commit3_legend_text_fs").css('visibility', 'visible'); + update_commit_legend_visibility(3, 'visible'); - $("#diff-xlink-1").css('filter', 'url(#filter-1)') /// FILTER_DEFAULT - $("#diff-xlink-2").css('filter', 'url(#filter-2)') /// FILTER_DEFAULT + set_image_filters(); update_commits(); } function toggle_sch_pcb_view() { old_view = current_view; - current_view = $('#view_mode input[name="view_mode"]:checked').val(); if (current_view == "show_sch") { show_pcb(); } else { @@ -257,193 +222,83 @@ function toggle_sch_pcb_view() { function toggle_old_commit_visibility() { - if ($("#diff-xlink-1").css('visibility') === "hidden") + if (diff_xlink_1.style.visibility === "hidden") { current_diff_filter = "diff"; - $("#diff-xlink-1").css('visibility', 'visible') - $("#commit1_legend").css('visibility', 'visible'); - $("#commit1_legend_text").css('visibility', 'visible'); - $("#commit1_legend_fs").css('visibility', 'visible'); - $("#commit1_legend_text_fs").css('visibility', 'visible'); - - $("#commit3_legend").css('visibility', 'visible'); - $("#commit3_legend_text").css('visibility', 'visible'); - $("#commit3_legend_fs").css('visibility', 'visible'); - $("#commit3_legend_text_fs").css('visibility', 'visible'); + set_image_filters(); + update_commit_legend_visibility(1, 'visible'); + update_commit_legend_visibility(3, 'visible'); + update_commit_legend_color(1); + update_commit_legend_color(2); } else { current_diff_filter = "single"; - $("#diff-xlink-1").css('visibility', 'hidden') - $("#commit1_legend").css('visibility', 'hidden'); - $("#commit1_legend_text").css('visibility', 'hidden'); - $("#commit1_legend_fs").css('visibility', 'hidden'); - $("#commit1_legend_text_fs").css('visibility', 'hidden'); - - $("#commit3_legend").css('visibility', 'hidden'); - $("#commit3_legend_text").css('visibility', 'hidden'); - $("#commit3_legend_fs").css('visibility', 'hidden'); - $("#commit3_legend_text_fs").css('visibility', 'hidden'); - } - - // enable the other image back - if ($("#diff-xlink-1").css('visibility') === "hidden") - { - $("#diff-xlink-2").css('visibility', 'visible') - $("#diff-xlink-2").css('filter', 'url(#filter-22)') /// FILTER_WHITE - $("#commit2_legend").css('visibility', 'visible'); - $("#commit2_legend_text").css('visibility', 'visible'); - $("#commit2_legend_fs").css('visibility', 'visible'); - $("#commit2_legend_text_fs").css('visibility', 'visible'); - - $("#commit2_legend").css('color', commit_standalone_color); - $("#commit2_legend_fs").css('color', commit_standalone_color); - } - else - { - $("#diff-xlink-1").css('filter', 'url(#filter-1)') /// FILTER_DEFAULT - $("#diff-xlink-2").css('filter', 'url(#filter-2)') /// FILTER_DEFAULT - - $("#commit1_legend").css('color', commit1_legend_color); - $("#commit1_legend_fs").css('color', commit1_legend_color); - $("#commit2_legend").css('color', commit2_legend_color); - $("#commit2_legend_fs").css('color', commit2_legend_color); + set_image_filters(false, true); + update_commit_legend_visibility(1, 'hidden'); + update_commit_legend_visibility(2, 'visible'); + update_commit_legend_visibility(3, 'hidden'); + update_commit_legend_color(2, commit_standalone_color); } } function toggle_new_commit_visibility() { - if ($("#diff-xlink-2").css('visibility') === "hidden") + if (diff_xlink_2.style.visibility === "hidden") { current_diff_filter = "diff"; - $("#diff-xlink-2").css('visibility', 'visible') - $("#commit2_legend").css('visibility', 'visible'); - $("#commit2_legend_text").css('visibility', 'visible'); - $("#commit2_legend_fs").css('visibility', 'visible'); - $("#commit2_legend_text_fs").css('visibility', 'visible'); - - $("#commit3_legend").css('visibility', 'visible'); - $("#commit3_legend_text").css('visibility', 'visible'); - $("#commit3_legend_fs").css('visibility', 'visible'); - $("#commit3_legend_text_fs").css('visibility', 'visible'); + set_image_filters(); + update_commit_legend_visibility(2, 'visible'); + update_commit_legend_visibility(3, 'visible'); + update_commit_legend_color(1); + update_commit_legend_color(2); } else { current_diff_filter = "single"; - $("#diff-xlink-2").css('visibility', 'hidden') - $("#commit2_legend").css('visibility', 'hidden'); - $("#commit2_legend_text").css('visibility', 'hidden'); - $("#commit2_legend_fs").css('visibility', 'hidden'); - $("#commit2_legend_text_fs").css('visibility', 'hidden'); - - $("#commit3_legend").css('visibility', 'hidden'); - $("#commit3_legend_text").css('visibility', 'hidden'); - $("#commit3_legend_fs").css('visibility', 'hidden'); - $("#commit3_legend_text_fs").css('visibility', 'hidden'); - } - - // enable the other image back - if ($("#diff-xlink-2").css('visibility') === "hidden") - { - $("#diff-xlink-1").css('visibility', 'visible') - $("#diff-xlink-1").css('filter', 'url(#filter-12)') /// FILTER_WHITE - $("#commit1_legend").css('visibility', 'visible'); - $("#commit1_legend_text").css('visibility', 'visible'); - $("#commit1_legend_fs").css('visibility', 'visible'); - $("#commit1_legend_text_fs").css('visibility', 'visible'); - - $("#commit1_legend").css('color', commit_standalone_color); - $("#commit1_legend_text_fs").css('color', commit_standalone_color); - } - else - { - $("#diff-xlink-1").css('filter', 'url(#filter-1)') /// FILTER_DEFAULT - $("#diff-xlink-2").css('filter', 'url(#filter-2)') /// FILTER_DEFAULT - - $("#commit1_legend").css('color', commit1_legend_color); - $("#commit1_legend_fs").css('color', commit1_legend_color); - $("#commit2_legend").css('color', commit2_legend_color); - $("#commit2_legend_fs").css('color', commit2_legend_color); + set_image_filters(true, false); + update_commit_legend_visibility(1, 'visible'); + update_commit_legend_visibility(2, 'hidden'); + update_commit_legend_visibility(3, 'hidden'); + update_commit_legend_color(1, commit_standalone_color); } } function select_next_sch_or_pcb(cycle = false) { - if (document.getElementById("show_sch").checked) { - pages = $("#pages_list input:radio[name='pages']"); - selected_page = pages.index(pages.filter(':checked')); - - new_index = selected_page + 1; - if (new_index >= pages.length) { - if (cycle) { - new_index = 0; - } - else { - new_index = pages.length - 1; - } + if (current_view == "show_sch") { + selected_page = selected_page + 1; + if (selected_page >= pages.length) { + selected_page = (cycle ? 0 : pages.length - 1); } - - pages[new_index].checked = true; - - update_page(); + pages[selected_page].checked = true; + update_selected_page(); } else { - layers = $("#layers_list input:radio[name='layers']"); - selected_layer = layers.index(layers.filter(':checked')); - - new_index = selected_layer + 1; - if (new_index >= layers.length) { - if (cycle) { - new_index = 0; - } - else { - new_index = layers.length - 1; - } + selected_layer = selected_layer + 1; + if (selected_layer >= layers.length) { + selected_layer = (cycle ? 0 : layers.length - 1); } - - layers[new_index].checked = true; - - update_layer(); + layers[selected_layer].checked = true; + update_selected_layer(); } } function select_preview_sch_or_pcb(cycle = false) { - if (document.getElementById("show_sch").checked) { - pages = $("#pages_list input:radio[name='pages']"); - selected_page = pages.index(pages.filter(':checked')); - - new_index = selected_page - 1; - if (new_index < 0) { - if (cycle) { - new_index = pages.length - 1; - } - else { - new_index = 0; - } + if (current_view == "show_sch") { + selected_page = selected_page - 1; + if (selected_page < 0) { + selected_page = (cycle ? pages.length - 1 : 0); } - - pages[new_index].checked = true; - - update_page(); - update_sheets_list(commit1, commit2); - + pages[selected_page].checked = true; + update_selected_page(); } else { - layers = $("#layers_list input:radio[name='layers']"); - selected_layer = layers.index(layers.filter(':checked')); - - new_index = selected_layer - 1; - if (new_index < 0) { - if (cycle) { - new_index = layers.length - 1; - } - else { - new_index = 0; - } + selected_layer = selected_layer - 1; + if (selected_layer < 0) { + selected_layer = (cycle ? layers.length - 1 : 0); } - - layers[new_index].checked = true; - - update_layer(); + layers[selected_layer].checked = true; + update_selected_layer(); } } @@ -487,8 +342,8 @@ function manual_pan(direction) Mousetrap.bind(['ctrl+down', 'ctrl+]','command+down', 'command+]'], function(){select_next_2_commits()}); Mousetrap.bind(['down', ']'], function(){select_next_commit()}); -Mousetrap.bind(['ctrl+up', 'ctrl+[', 'command+up', 'command+['], function(){select_previows_2_commits()}); -Mousetrap.bind(['up', '['], function(){select_previows_commit()}); +Mousetrap.bind(['ctrl+up', 'ctrl+[', 'command+up', 'command+['], function(){select_previous_2_commits()}); +Mousetrap.bind(['up', '['], function(){select_previous_commit()}); Mousetrap.bind(['r', 'R'], function(){reset_commits_selection()}); @@ -556,65 +411,59 @@ function if_url_exists(url, callback) { request.send(''); } +// Called on commit checkbox change +function update_selected_commits(commit, order) { + console.log('Changing '+commit.value+' to '+commit.checked); + if (! commit.checked) { + // Keep 2 selected + commit.checked = true; + console.log('- Not allowed, we need 2 selected'); + return; + } + // A new selection, keep only 2 selected + if (order < parseInt(commit1.getAttribute('order'))) { + commit1.checked = false; + commit1 = commit; + console.log('- Moving commit1'); + } else { + commit2.checked = false; + commit2 = commit; + console.log('- Moving commit2'); + } + update_commits(); +} + function update_commits() { // Remove tooltips so they dont get stuck - $('[data-toggle="tooltip"]').tooltip("hide"); + //$('[data-toggle="tooltip"]').tooltip("hide"); console.log("================================================================================"); - - var commits = $("#commits_form input:checkbox[name='commit']"); - var hashes = []; - - for (var i = 0; i < commits.length; i++) { - if (commits[i].checked) { - var value = commits[i].value; - hashes.push(value); - } - } - - // It needs 2 items selected to do something - if (hashes.length < 2) { - return; - } - - // Update selected commits - commit1 = hashes[0].replace(/\s+/g, ''); - commit2 = hashes[1].replace(/\s+/g, ''); - - console.log("commit1:", commit1); - console.log("commit2:", commit2); - + console.log("commit1:", commit1.value); + console.log("commit2:", commit2.value); // 1. Update commit_legend_links // 2. Update commit_legend // 3. Update current_diff_view - + var commit1_hash = document.getElementById("commit1_hash"); + var commit2_hash = document.getElementById("commit2_hash"); + // Not yet synced, so this is the old + var old_commit1 = commit1_hash.value; + var old_commit2 = commit2_hash.value; // Update commit_legend_links - - var old_commit1 = document.getElementById("commit1_hash").value; - var old_commit2 = document.getElementById("commit2_hash").value; - var kicad_pro_path_1 = document.getElementById("commit1_kicad_pro_path").value; var kicad_pro_path_2 = document.getElementById("commit2_kicad_pro_path").value; - - document.getElementById("commit1_kicad_pro_path").value = kicad_pro_path_1.replace(old_commit1, commit1); - document.getElementById("commit2_kicad_pro_path").value = kicad_pro_path_2.replace(old_commit2, commit2); + document.getElementById("commit1_kicad_pro_path").value = kicad_pro_path_1.replace(old_commit1, commit1.value); + document.getElementById("commit2_kicad_pro_path").value = kicad_pro_path_2.replace(old_commit2, commit2.value); // Update commit_legend - - document.getElementById("commit1_hash").value = commit1; - document.getElementById("commit2_hash").value = commit2; - - document.getElementById("commit1_legend_hash").innerHTML = commit1; - document.getElementById("commit2_legend_hash").innerHTML = commit2; + commit1_hash.value = commit1.value; + commit2_hash.value = commit2.value; + document.getElementById("commit1_legend_hash").innerHTML = commit1.value; + document.getElementById("commit2_legend_hash").innerHTML = commit2.value; // Update current_diff_view - - old_view = current_view; - current_view = $('#view_mode input[name="view_mode"]:checked').val(); - if (current_view == "show_sch") { update_page(); } else { @@ -633,58 +482,28 @@ function loadFile(filePath) { if (xmlhttp.status==200) { result = xmlhttp.responseText; } - return result; + return result.split("\n").filter((a) => a); +} + +function change_selected_page(index) { + selected_page = index; + update_selected_page(); } function update_selected_page() { - var pages = $("#pages_list input:radio[name='pages']"); - var selected_page; - var page_name; - - // if a different page was in use before, revert the selection to it - // TODO: maybe I have to use a list instead... - if (previous_selected_page > -1) { - pages[previous_selected_page].checked = true; - previous_selected_page = -1; - } - - // try to get the first page - try { - selected_page = pages.index(pages.filter(':checked')); - page_name = pages[selected_page].id; - current_selected_page = selected_page; - - // if there is no page selected, select the first one - // TODO: instead of the first item by default, a better solution would change to the next inferior index - // and keep decrementing until reaching a valid index - } catch (error) { - previous_selected_page = 0; // current_selected_page; - pages[0].checked = true; - selected_page = pages.index(pages.filter(':checked')); - page_name = pages[selected_page].id; - } - var page_filename = pages[selected_page].value.replace(".kicad_sch", "").replace(".sch", ""); - - if (commit1 == ""){ - commit1 = document.getElementById("diff-xlink-1-sch").href.baseVal.split("/")[1]; - } - if (commit2 == ""){ - commit2 = document.getElementById("diff-xlink-2-sch").href.baseVal.split("/")[1]; - } - var image_path_1; var image_path_2; if (sheet_pages_commit1.has(page_filename)) { - image_path_1 = "../" + commit1 + "/_KIRI_/sch/" + page_filename + ".svg"; + image_path_1 = "../" + commit1.value + "/_KIRI_/sch/" + page_filename + ".svg"; } else { image_path_1 = "blank.svg"; } if (sheet_pages_commit2.has(page_filename)) { - image_path_2 = "../" + commit2 + "/_KIRI_/sch/" + page_filename + ".svg"; + image_path_2 = "../" + commit2.value + "/_KIRI_/sch/" + page_filename + ".svg"; } else { image_path_2 = "blank.svg"; } @@ -693,8 +512,8 @@ function update_selected_page() console.log("[SCH] image_path_1 =", image_path_1); console.log("[SCH] image_path_2 =", image_path_2); - var image_path_timestamp_1 = image_path_1 + url_timestamp(commit1); - var image_path_timestamp_2 = image_path_2 + url_timestamp(commit2); + var image_path_timestamp_1 = image_path_1 + url_timestamp(commit1.value); + var image_path_timestamp_2 = image_path_2 + url_timestamp(commit2.value); if (current_view != old_view) { @@ -704,34 +523,13 @@ function update_selected_page() } else { - document.getElementById("diff-xlink-1").href.baseVal = image_path_timestamp_1; - document.getElementById("diff-xlink-2").href.baseVal = image_path_timestamp_2; + diff_xlink_1.href.baseVal = image_path_timestamp_1; + diff_xlink_2.href.baseVal = image_path_timestamp_2; - document.getElementById("diff-xlink-1").setAttributeNS('http://www.w3.org/1999/xlink', 'href', image_path_timestamp_1); - document.getElementById("diff-xlink-2").setAttributeNS('http://www.w3.org/1999/xlink', 'href', image_path_timestamp_2); - - if_url_exists(image_path_timestamp_1, function(exists) { - if (exists == true) { - document.getElementById("diff-xlink-1").parentElement.style.display = 'inline' } - else { - document.getElementById("diff-xlink-1").parentElement.style.display = "none"; - } - }); - - if_url_exists(image_path_timestamp_2, function(exists) { - if (exists == true) { - document.getElementById("diff-xlink-2").parentElement.style.display = 'inline'; - } - else { - document.getElementById("diff-xlink-2").parentElement.style.display = "none"; - } - }); + diff_xlink_1.setAttributeNS('http://www.w3.org/1999/xlink', 'href', image_path_timestamp_1); + diff_xlink_2.setAttributeNS('http://www.w3.org/1999/xlink', 'href', image_path_timestamp_2); } - // keep images visibility the same as the legend - $("#diff-xlink-1").css('visibility', $("#commit1_legend").css('visibility')) - $("#diff-xlink-2").css('visibility', $("#commit2_legend").css('visibility')) - update_fullscreen_label(); } @@ -740,30 +538,17 @@ function update_page() console.log("-----------------------------------------"); // Runs only when updating commits - update_sheets_list(commit1, commit2); + update_sheets_list(); update_selected_page(); } -function update_sheets_list(commit1, commit2) { - - // Get current selected page name - var pages = $("#pages_list input:radio[name='pages']"); - var selected_page = pages.index(pages.filter(':checked')); - - // Save the current selected page, if any - try { - selected_sheet = pages[selected_page].id; - } - catch(err) { - selected_sheet = ""; - console.log("There isn't a sheet selected"); - } +function update_sheets_list() { // File = ../[COMMIT]/_KIRI_/sch_sheets // Data format: Name_without_extension|Relative_file_name|UUID|Instance_name|Sheet_Path_Name - data1 = loadFile("../" + commit1 + "/_KIRI_/sch_sheets" + url_timestamp(commit1)).split("\n").filter((a) => a); - data2 = loadFile("../" + commit2 + "/_KIRI_/sch_sheets" + url_timestamp(commit2)).split("\n").filter((a) => a); + data1 = loadFile("../" + commit1.value + "/_KIRI_/sch_sheets" + url_timestamp(commit1)); + data2 = loadFile("../" + commit2.value + "/_KIRI_/sch_sheets" + url_timestamp(commit2)); var sheets = []; var new_sheets_list = []; @@ -795,6 +580,7 @@ function update_sheets_list(commit1, commit2) { console.log("sheets", sheets); var form_inputs_html; + var index = 0; for (const d of sheets) { @@ -813,7 +599,7 @@ function update_sheets_list(commit1, commit2) { } var input_html = ` - +