From b6065ef9012d2a6b171b12c13899f5c25738ec70 Mon Sep 17 00:00:00 2001 From: Oleg Sh Date: Sat, 7 Jan 2023 19:59:48 +0200 Subject: [PATCH] Add save edge and reuse it. --- i/css/home.css | 57 ++++++++++++++++++ lang/bg/home.php | 3 + lang/ch/home.php | 3 + lang/de/home.php | 3 + lang/el/home.php | 5 +- lang/en/home.php | 5 +- lang/es/home.php | 5 +- lang/fr/home.php | 3 + lang/nl/home.php | 3 + lang/pl/home.php | 5 +- lang/pt/home.php | 3 + lang/ru/home.php | 3 + lang/sv/home.php | 5 +- script/Application.js | 32 +++++++++- script/EventHandlers.js | 130 ++++++++++++++++++++++++---------------- script/texts.js | 6 +- tpl/home.php | 62 ++++++++++--------- 17 files changed, 247 insertions(+), 86 deletions(-) diff --git a/i/css/home.css b/i/css/home.css index 7daa9df..115798f 100755 --- a/i/css/home.css +++ b/i/css/home.css @@ -405,4 +405,61 @@ position: absolute; display: none; border: 2px solid #CCCCCC; +} + + +#switcher input[type=checkbox]{ + height: 0; + width: 0; + visibility: hidden; +} + +#switcher label { + cursor: pointer; + text-indent: 32px; + width: 28px; + height: 1.1em; + background: grey; + display: inline-block; + border-radius: 4px; + position: relative; + margin-bottom: 0; + top: 2px; +} + +#switcher label:after { + content: ''; + position: absolute; + top: 2px; + left: 2px; + width: 12px; + height: 12px; + background: #fff; + border-radius: 4px; + transition: 0.3s; +} + +#switcher input:checked + label { + background: #337ab7; +} + +input:checked + label:after { + left: calc(100% - 5px); + transform: translateX(100%); +} + +#switcher label:active:after { + width: auto; +} + +label.switcherText { + font-weight: normal; + margin-bottom: 0; + cursor: pointer; +} + +.messageSwitcher { + border-radius: 4px; + padding: 4px; + background-color: #FFFFFF; } \ No newline at end of file diff --git a/lang/bg/home.php b/lang/bg/home.php index 3f57f23..852bfa2 100644 --- a/lang/bg/home.php +++ b/lang/bg/home.php @@ -294,4 +294,7 @@ We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/ch/home.php b/lang/ch/home.php index 2e14c69..76c16cc 100644 --- a/lang/ch/home.php +++ b/lang/ch/home.php @@ -294,4 +294,7 @@ $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/de/home.php b/lang/de/home.php index 4fdc023..b904ebb 100644 --- a/lang/de/home.php +++ b/lang/de/home.php @@ -257,4 +257,7 @@ $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Schneeflocke"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/el/home.php b/lang/el/home.php index 7390d08..3f839ed 100644 --- a/lang/el/home.php +++ b/lang/el/home.php @@ -294,5 +294,8 @@ $g_lang["edge_list_wrong_format"] = "Edge list format is incorrect"; $g_lang["fix_button"] = "fix"; - $g_lang["snowflake"] = "Snowflake"; + $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/en/home.php b/lang/en/home.php index 3d27b6a..d3c82d9 100755 --- a/lang/en/home.php +++ b/lang/en/home.php @@ -293,5 +293,8 @@ We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang["edge_list_wrong_format"] = "Edge list format is incorrect"; $g_lang["fix_button"] = "fix"; - $g_lang["snowflake"] = "Snowflake"; + $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/es/home.php b/lang/es/home.php index 8a2b97a..02b9c62 100755 --- a/lang/es/home.php +++ b/lang/es/home.php @@ -293,5 +293,8 @@ Tenemos traducciones en griego 🇬🇷. diff --git a/lang/fr/home.php b/lang/fr/home.php index 9b91b6f..107fc72 100644 --- a/lang/fr/home.php +++ b/lang/fr/home.php @@ -262,4 +262,7 @@ $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/nl/home.php b/lang/nl/home.php index 410f49c..1f00e5b 100644 --- a/lang/nl/home.php +++ b/lang/nl/home.php @@ -259,4 +259,7 @@ $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/pl/home.php b/lang/pl/home.php index 7df3a5e..d62c71e 100644 --- a/lang/pl/home.php +++ b/lang/pl/home.php @@ -293,5 +293,8 @@ Dodaliśmy polskie tłumaczenie, Patryk"; $g_lang["edge_list_wrong_format"] = "Format listy krawędzi jest niepoprawny"; $g_lang["fix_button"] = "Napraw"; - $g_lang["snowflake"] = "Snowflake"; + $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/pt/home.php b/lang/pt/home.php index 2a25a3e..16c67d0 100644 --- a/lang/pt/home.php +++ b/lang/pt/home.php @@ -260,4 +260,7 @@ $g_lang["fix_button"] = "fix"; $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/lang/ru/home.php b/lang/ru/home.php index 1e936a9..eecd9dc 100755 --- a/lang/ru/home.php +++ b/lang/ru/home.php @@ -296,4 +296,7 @@ $g_lang["fix_button"] = "исправить"; $g_lang["snowflake"] = "Снежинка"; + + $g_lang["save_edge_for_future"] = "Сохранить дугу для повторного использования"; + $g_lang["reuse_saved_edge"] = "Использовать сохраненную дугу"; ?> diff --git a/lang/sv/home.php b/lang/sv/home.php index 4d832de..b1b8454 100644 --- a/lang/sv/home.php +++ b/lang/sv/home.php @@ -255,5 +255,8 @@ $g_lang["edge_list_wrong_format"] = "Edge list format is incorrect"; $g_lang["fix_button"] = "fix"; - $g_lang["snowflake"] = "Snowflake"; + $g_lang["snowflake"] = "Snowflake"; + + $g_lang["save_edge_for_future"] = "Save edge to reuse in the future"; + $g_lang["reuse_saved_edge"] = "Reuse saved edge"; ?> diff --git a/script/Application.js b/script/Application.js index 71d8a73..1bc37a3 100644 --- a/script/Application.js +++ b/script/Application.js @@ -9,7 +9,7 @@ function Application(document, window) { this.document = document; this.canvas = this.document.getElementById('canvas'); - this.handler = new AddGraphHandler(this); + this.handler = new DefaultHandler(this); this.savedGraphName = ""; this.currentEnumVerticesType = new BaseEnumVertices(this, 1);//this.enumVerticesTextList[0]; this.findPathReport = 1; @@ -54,6 +54,9 @@ function Application(document, window) this.defaultVertexSize = null; this.defaultEdgeWidth = null; this.processEmscriptenFunction = null; + + this.defaultEdge = null; + this.useDefaultEdge = false; }; // List of graph. @@ -894,7 +897,7 @@ Application.prototype.onLoad = function() { this.canvas = this.document.getElementById('canvas'); - this.handler = new AddGraphHandler(this); + this.SetDefaultHandler(); this.updateMessage(); this.redrawGraph(); @@ -2006,4 +2009,29 @@ Application.prototype.isSupportEmscripten = function () Application.prototype.processEmscripten = function (inputData) { return this.processEmscriptenFunction(inputData); +} + +Application.prototype.setDefaultEdge = function (defaultEdge) +{ + this.defaultEdge = defaultEdge; +} + +Application.prototype.hasDefaultEdge = function () +{ + return this.defaultEdge != null; +} + +Application.prototype.getDefaultEdge = function () +{ + return this.defaultEdge; +} + +Application.prototype.setUseDefaultEdge = function (value) +{ + this.useDefaultEdge = value; +} + +Application.prototype.getUseDefaultEdge = function () +{ + return this.useDefaultEdge; } \ No newline at end of file diff --git a/script/EventHandlers.js b/script/EventHandlers.js index c039d0f..08a2ac8 100644 --- a/script/EventHandlers.js +++ b/script/EventHandlers.js @@ -128,6 +128,7 @@ BaseHandler.prototype.InitControls = function() if (handler.app.graph.vertices[i].mainText == vertex1Text.value) { handler.SelectFirstVertexMenu(vertex1Text, handler.app.graph.vertices[i]); + userAction("selectVertex1_menu"); break; } } @@ -146,6 +147,7 @@ BaseHandler.prototype.InitControls = function() if (handler.app.graph.vertices[i].mainText == vertex2Text.value) { handler.SelectSecondVertexMenu(vertex2Text, handler.app.graph.vertices[i]); + userAction("selectVertex2_menu"); break; } } @@ -351,6 +353,9 @@ BaseHandler.prototype.ShowCreateEdgeDialog = function(firstVertex, secondVertex, var dialogButtons = {}; var handler = this; + $("#CheckSaveDefaultEdge").prop("checked", false); + $("#defaultEdgeDialogBlock").show(); + dialogButtons[g_orintEdge] = function() { handler.app.PushToStack("Connect"); addEdgeCallBack(firstVertex, secondVertex, true); @@ -439,6 +444,10 @@ BaseHandler.prototype.ShowEditEdgeDialog = function(edgeObject) { document.getElementById("EdgesPresets").innerHTML = presetsStr; document.getElementById('EdgeLable').value = edgeObject.upText; + $("#CheckSaveDefaultEdge").prop("checked", false); + + $("#defaultEdgeDialogBlock").hide(); + $( "#addEdge" ).dialog({ resizable: false, height: "auto", @@ -667,51 +676,7 @@ DefaultHandler.prototype.MouseUp = function(pos) var handler = this; $('#message').unbind(); $('#message').on('click', '#editEdge', function(){ - var direct = false; - var dialogButtons = {}; - - dialogButtons[g_save] = function() { - - handler.app.PushToStack("ChangeCurvelEdge"); - - handler.selectedObject.SetWeight(document.getElementById('EdgeWeight').value); - handler.selectedObject.SetUpText(document.getElementById('EdgeLable').value); - - handler.needRedraw = true; - handler.app.redrawGraph(); - - userAction("ChangeWeight"); - $( this ).dialog( "close" ); - }; - - document.getElementById('EdgeWeight').value = handler.selectedObject.useWeight ? handler.selectedObject.weight : g_noWeight; - document.getElementById('EdgeWeightSlider').value = handler.selectedObject.useWeight ? handler.selectedObject.weight : 0; - - var edgePresets = handler.app.GetEdgePresets(); - var presetsStr = "" + g_DefaultWeightPreset + ""; - - for(var i = 0; i < edgePresets.length; i ++) - { - var edgePreset = edgePresets[i]; - presetsStr += "" + edgePreset + ""; - } - document.getElementById("EdgesPresets").innerHTML = presetsStr; - document.getElementById('EdgeLable').value = handler.selectedObject.upText; - - $( "#addEdge" ).dialog({ - resizable: false, - height: "auto", - width: "auto", - modal: true, - title: g_editWeight, - buttons: dialogButtons, - dialogClass: 'EdgeDialog', - open: function () { - $(handler).off('submit').on('submit', function () { - return false; - }); - } - }); + handler.ShowEditEdgeDialog(handler.selectedObject); }); $('#message').on('click', '#incCurvel', function(){ @@ -1009,12 +974,36 @@ ConnectionGraphHandler.prototype.GetSelectedVertex = function() ConnectionGraphHandler.prototype.AddNewEdge = function(selectedObject, isDirect) { - this.app.CreateNewArc(this.firstObject, selectedObject, isDirect, document.getElementById('EdgeWeight').value, $("#RadiosReplaceEdge").prop("checked"), document.getElementById('EdgeLable').value); + let newEdge = this.app.CreateNewArc(this.firstObject, selectedObject, isDirect, + document.getElementById('EdgeWeight').value, + $("#RadiosReplaceEdge").prop("checked"), + document.getElementById('EdgeLable').value); + if ($("#CheckSaveDefaultEdge").prop("checked")) { + let defaultEdge = new BaseEdge(); + defaultEdge.copyFrom(this.app.graph.edges[newEdge]); + this.app.setDefaultEdge(defaultEdge); + } + this.SelectFirst(); this.app.NeedRedraw(); } +ConnectionGraphHandler.prototype.AddDefaultEdge = function(selectedObject) +{ + let defaultEdge = this.app.getDefaultEdge(); + let newEdge = this.app.CreateNewArc(this.firstObject, selectedObject, defaultEdge.isDirect, + defaultEdge.weight, + false, + defaultEdge.upText); + this.app.graph.edges[newEdge].useWeight = defaultEdge.useWeight; + + this.SelectFirst(); + this.app.NeedRedraw(); + + userAction("CreateDefaultEdge"); +} + ConnectionGraphHandler.prototype.SelectVertex = function(selectedObject) { if (this.firstObject) @@ -1022,9 +1011,13 @@ ConnectionGraphHandler.prototype.SelectVertex = function(selectedObject) var direct = false; var handler = this; - this.ShowCreateEdgeDialog(this.firstObject, selectedObject, function (firstVertex, secondVertex, direct) { - handler.AddNewEdge(secondVertex, direct); - }); + if (!this.app.hasDefaultEdge() || !document.getElementById('useDefaultEdge').checked) { + this.ShowCreateEdgeDialog(this.firstObject, selectedObject, function (firstVertex, secondVertex, direct) { + handler.AddNewEdge(secondVertex, direct); + }); + } else { + handler.AddDefaultEdge(selectedObject); + } } else { @@ -1058,14 +1051,16 @@ ConnectionGraphHandler.prototype.SelectFirst = function() { this.firstObject = null; - this.message = g_selectFirstVertexToConnect + this.GetSelect2VertexMenu(); + this.message = g_selectFirstVertexToConnect + this.GetUseDefaultEdgeCheckBox() + + this.GetSelect2VertexMenu(); this.message = this.AppendSpecialSctionsButton(this.message); } ConnectionGraphHandler.prototype.SelectSecond = function(selectedObject) { this.firstObject = selectedObject; - this.message = g_selectSecondVertexToConnect + this.GetSelect2VertexMenu(); + this.message = g_selectSecondVertexToConnect + this.GetUseDefaultEdgeCheckBox() + + this.GetSelect2VertexMenu(); this.message = this.AppendSpecialSctionsButton(this.message); } @@ -1144,6 +1139,39 @@ ConnectionGraphHandler.prototype.AppendSpecialSctionsButton = function(baseMessa + " " + baseMessage; } +ConnectionGraphHandler.checkUseDefaultEdge = function (elem, app) +{ + app.setUseDefaultEdge(elem.checked); + app.updateMessage(); +}; + +ConnectionGraphHandler.prototype.GetUseDefaultEdgeCheckBox = function() { + if (!this.app.hasDefaultEdge()) { + return ""; + } + + return "
" + + "" + + " " + + "
"; +} + +ConnectionGraphHandler.prototype.InitControls = function() { + BaseHandler.prototype.InitControls.call(this) + + if (!this.app.hasDefaultEdge()) { + return; + } + + let app = this.app; + + $('#useDefaultEdge').unbind(); + $('#useDefaultEdge').change(function() { + app.setUseDefaultEdge(this.checked); + }); + $("#useDefaultEdge").prop("checked", this.app.getUseDefaultEdge()); +} + /** * Delete Graph handler. diff --git a/script/texts.js b/script/texts.js index d81bfed..290e443 100644 --- a/script/texts.js +++ b/script/texts.js @@ -196,6 +196,8 @@ var g_reverseAllEdges = "Reverse all edges"; var g_makeAllUndirected = "Make all edges undirected"; var g_makeAllDirected = "Make all edges directed"; +var g_reuseSavedEdge = "Reuse saved edge"; + function loadTexts() { g_textsSelectAndMove = document.getElementById("SelectAndMoveObject").innerHTML; @@ -399,5 +401,7 @@ function loadTexts() g_makeAllDirected = document.getElementById("makeAllDirected").innerHTML; g_pairWrongFormat = document.getElementById("pairWrongFormat").innerHTML; - g_fix = document.getElementById("fixButton").innerHTML;; + g_fix = document.getElementById("fixButton").innerHTML; + + g_reuseSavedEdge = document.getElementById("reuseSavedEdge").innerHTML; } diff --git a/tpl/home.php b/tpl/home.php index 8fb6a23..897363d 100755 --- a/tpl/home.php +++ b/tpl/home.php @@ -11,7 +11,7 @@ - + @@ -292,27 +292,27 @@
-
- - - - - - - - -
- - - -
- -
-
- - 1 -
-
+
+ + + + + + + + +
+ + + +
+ +
+
+ + 1 +
+
@@ -329,10 +329,17 @@
-
-    -
-
+
+    +
+ +
+ + +
+
@@ -858,7 +865,8 @@

- +

+