+
+
diff --git a/src/lib/act-frame/css/index.css b/src/lib/act-frame/css/index.css
new file mode 100644
index 0000000..3726603
--- /dev/null
+++ b/src/lib/act-frame/css/index.css
@@ -0,0 +1,219 @@
+/* GENERIC ELEMENTS */
+
+body {
+ font-family: "Courier New";
+ background-color: rgb(8,8,8);
+}
+
+textarea {
+ border: 0;
+ resize: none;
+ background-color: transparent;
+ font-family: "Courier New";
+ font-size: 22px;
+}
+
+#svgPartTextarea {
+ color: rgb(80,80,80);
+}
+
+#svgFullTextarea {
+ color: white;/*rgb(80,80,80);*/
+}
+
+textarea:focus {
+ outline-color: #FFA500;
+}
+
+svg {
+ pointer-events: none;
+}
+
+/* RIGHT-PANE DISPLAY ELEMENTS */
+
+#pageDisplayFrame {
+ position:absolute;
+ width:748px;
+ height:750px;
+ left:750px;
+ top:88px;
+ border:1px solid black;
+ box-shadow: 1px 2px 3px black;
+ background-color: white;
+}
+
+
+/* LEFT-PANE EDITING ELEMENTS */
+
+#pageCodeFrame {
+ position:absolute;
+ top:88px;
+ left:0px;
+ width:750px;
+ height:750px;
+ border:1px solid black;
+ background-color: rgb(1,1,1);/*see xml-edit.js, toggles black and red*/ /*rgb(255,255,240);*/
+}
+
+/*.disabled {
+ background-color: lightgrey !important;
+}*/
+
+#svgFullTextarea {
+ position: relative;
+ left: 0px;
+ top: 0px;
+ width:743px;
+ height:744px;
+}
+
+#editModalBG {
+ /*position: absolute;
+ left: 0px;
+ top: 0px;*/
+ position: relative;
+ left: 0px;
+ top: -750px;
+ width: 750px;
+ height: 750px;
+ visibility: hidden;
+ background-color: black;
+ z-index: 10000;
+}
+
+#editModal {
+ position: relative;
+ top: 160px;/*-650px;*/
+ left: 100px;
+ width: 500px;
+ height: 250px;
+ background-color: rgb(255,255,240);
+}
+
+textarea.inptrue {}
+textarea.inpfalse {
+ visibility: hidden !important;
+ height: 0px !important;
+}
+button.subm.inpfalse {
+ visibility: hidden !important;
+ height: 0px !important;
+}
+.tabtrue {
+ background-color: rgb(255,255,240) !important;
+}
+.tabfalse {
+ background-color: white !important;
+}
+.tabfalse, .tabtrue {
+ margin-top:0;
+ border: 0;
+ padding-top:6px;
+ font-size: 20px;
+ position: relative;
+ top: -30px;
+ margin-right: 0px;
+ margin-left: 0px;
+ height: 30px;
+}
+
+#svgPartTextarea {
+ width: 500px;
+ height: 250px;
+}
+
+#commandTextarea {
+ width:480px;
+ height:200px; /*height:35px;*/
+ background-color: rgb(255,255,240);
+ position: relative;
+ top: -45px;
+ padding-top: 30px;
+}
+
+#run {
+ margin-top:0;
+ border: 0;
+ padding-top:6px;
+ font-size: 20px;
+ color: black;/*white;*/
+ background-color: rgb(100,150,100);/*green;*/
+}
+
+#btnModal {
+ margin-top:0;
+ border: 0;
+ padding-top:6px;
+ font-size: 20px;
+ color: black;/*white;*/
+ background-color: rgb(100,150,100);/*green;*/
+ position:relative;
+ left: -49px;
+ top: -41px;
+}
+
+/* TOP-PANE TOOLBAR ELEMENTS */
+
+#pageToolbar {
+ position:absolute;
+ top:0px;
+ left:0px;
+ width: 1500px;
+ height:88px;
+ background-color: white; /*it actually appears black, see buttonbar.html*/
+ /*background-color: rgba(0,0,0,0.88);*/
+}
+
+#buttonStart {
+ border: 0;
+ padding-top:6px;
+ background-color: rgba(255,255,255,0.08);
+ color: black;
+}
+
+#tools1 {
+ margin-left: 400px;
+ margin-top: 18px;
+ color: green;
+}
+
+.tool {
+ font-size: 40px;
+ color: white;
+ font-family: "Courier New";
+}
+
+#tools2 {
+ position: absolute;
+ left: 0px;
+ top:0px;
+ font-size: 80px;
+}
+
+.active {
+ background-color: rgba(255,255,255,0.08);
+}
+
+/* FOOTER ELEMENTS */
+#footer {
+ position:fixed;
+ bottom:0px;
+ left:0px;
+ width: 1500px;
+ height:90px;/*130px;*/
+ line-height:8pt;
+ padding-top:10px;
+ padding-left:10px;
+ background-color: black;/*#CE3C05;*/ /*lightblue;*/
+ color: white;
+}
+/* MOVE MARKER */
+#moveMarker {
+ position: absolute;
+ visibility: hidden;
+}
+#moveMarker pre {
+ font-size: 32px;
+ font-weight: lighter;
+ color: #4169E1; /*Royal Blue*/
+}
diff --git a/src/lib/act-frame/css/node-manage.css b/src/lib/act-frame/css/node-manage.css
new file mode 100644
index 0000000..9cddd6c
--- /dev/null
+++ b/src/lib/act-frame/css/node-manage.css
@@ -0,0 +1,7 @@
+/* SEL MARKER */
+#selMarker {
+ position: absolute;
+ visibility: hidden;
+ border: 4px dotted #4169E1; /*Royal Blue*/
+}
+
diff --git a/src/lib/act-frame/css/xml-buttons.css b/src/lib/act-frame/css/xml-buttons.css
new file mode 100644
index 0000000..524cf46
--- /dev/null
+++ b/src/lib/act-frame/css/xml-buttons.css
@@ -0,0 +1,20 @@
+#xmlButtonFrame {
+ position:absolute;
+ z-index:100000;
+ top:760px;
+ left:10px;
+ width:710px;
+ height:40px;
+ background-color: black;
+ padding: 10px;
+}
+
+#xmlButtonFrame button {
+ margin-top:0;
+ border: 0;
+ padding-top:6px;
+ padding-bottom:6px;
+ font-size: 20px;
+ color: black;/*white;*/
+ background-color: rgb(100,150,100);/*green;*/
+}
diff --git a/src/lib/act-frame/doc/changeboard/CT b/src/lib/act-frame/doc/changeboard/CT
new file mode 100644
index 0000000..5ea8b37
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/CT
@@ -0,0 +1 @@
+../changetask
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.1 b/src/lib/act-frame/doc/changeboard/changeboard--v0.1
new file mode 100644
index 0000000..0fdc665
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.1
@@ -0,0 +1,27 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.1 -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| | | ct/34 |
+| | | ct/35 |
+| | | ct/36 |
+| | | ct/37 |
+| | | ct/38 |
+| | | ct/39 |
+| | | ct/40 |
+| | | ct/41 |
+| | | ct/42 |
+| | | ct/43 |
+| | | ct/44 |
+| | | ct/45 |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.2 b/src/lib/act-frame/doc/changeboard/changeboard--v0.2
new file mode 100644
index 0000000..247bc56
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.2
@@ -0,0 +1,17 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.2 -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| | ct/46 | |
+| | | ct/54 |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-command b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-command
new file mode 100644
index 0000000..afca00e
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-command
@@ -0,0 +1,16 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.2 -- NODE-COMMAND -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| | | ct/49 |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-drawing b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-drawing
new file mode 100644
index 0000000..296f498
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-drawing
@@ -0,0 +1,17 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.2 -- NODE-DRAWING -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| | | ct/50 |
+| | | ct/51 |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-snapping b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-snapping
new file mode 100644
index 0000000..33414bc
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--node-snapping
@@ -0,0 +1,16 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.2 -- NODE-SNAPPING -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| ct/51 | | |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changeboard--v0.2--xml-editing b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--xml-editing
new file mode 100644
index 0000000..4d784c4
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changeboard--v0.2--xml-editing
@@ -0,0 +1,17 @@
+#+STARTUP: showeverything
+* CHANGEBOARD -- v0.2 -- XML-EDITING -- KANBAN
+
+M-x wik-mode
+M-S-DOWN (wik-open-file-at-point)
+
+M-x org-mode (org-mode)
+S-RIGHT (org-table-move-cell-right)
+
+|---------------------+---------------------+---------------------|
+| Todo | In-Progress | Done |
+| (change identified) | (tests are failing) | (tests are passing) |
+|---------------------+---------------------+---------------------|
+| | | ct/52 |
+| | | ct/53 |
+|---------------------+---------------------+---------------------|
+
diff --git a/src/lib/act-frame/doc/changeboard/changelist--v0.2 b/src/lib/act-frame/doc/changeboard/changelist--v0.2
new file mode 100644
index 0000000..b2b9508
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changelist--v0.2
@@ -0,0 +1,9 @@
+CT/#### V#.#.# BRANCH/CATEGORY TASK NAME TYPE
+------- ------ ---------------------- ---------------------- -------
+CT/46 V0.2 V0.2 BRANCH NEW VERS. UX EPIC
+CT/49 V0.2 NODE-COMMAND SETX/Y/W/H INCX/Y/W/H FTR
+CT/50 V0.2 NODE-DRAWING ABLE TO RESIZE EACH NODE FTR
+CT/52 V0.2 XML-EDITING MACRO-LEVEL XML EDITOR FTR
+CT/53 V0.2 XML-EDITING VALIDATE XML EDITOR FTR
+CT/54 V0.2 BUTTON-BAR UPDATE BUTTONS (SVG) FTR
+CT/51 V0.2 NODE-SNAPPNG LINE SNAP TO SELF FTR
diff --git a/src/lib/act-frame/doc/changeboard/changelist--v0.3 b/src/lib/act-frame/doc/changeboard/changelist--v0.3
new file mode 100644
index 0000000..1575194
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/changelist--v0.3
@@ -0,0 +1,5 @@
+CT/#### V#.#.# BRANCH/CATEGORY TASK NAME TYPE
+------- ------ ---------------------- ---------------------- -------
+CT/?? V0.3 V0.3 BRANCH ???????????? EPIC
+CT/47 V0.3 NODE-DRAWING DRAG 2 RESHAPE DEC. ND FTR
+CT/48 V0.3 NODE-DRAWING RESIZE DECISION NODE FTR
diff --git a/src/lib/act-frame/doc/changeboard/ct b/src/lib/act-frame/doc/changeboard/ct
new file mode 100644
index 0000000..5ea8b37
--- /dev/null
+++ b/src/lib/act-frame/doc/changeboard/ct
@@ -0,0 +1 @@
+../changetask
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1 b/src/lib/act-frame/doc/changelog/changelog--v0.1
new file mode 100644
index 0000000..887c39b
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1
@@ -0,0 +1,53 @@
+CHANGELOG 2022-11-19 -- V0.1
+
+gh-1 :: remove invalid script reference
+gh-1 :: don't include emacs autosave files in test run
+
+CHANGELOG 2022-11-27 -- V0.1
+
+gh-1 :: test that mode 9 click should highlight question mark
+
+CHANGELOG 2022-12-23 -- V0.1
+
+gh-1 :: fixed display issue on the mode-select notification message
+
+CHANGELOG 2022-12-26 -- V0.1
+
+gh-1 :: separate node movement code away from other node management code
+
+CHANGELOG 2022-12-27 -- V0.1
+
+gh-1 :: separate node mapping code away from the index.js code
+
+CHANGELOG 2023-01-01 -- V0.1
+
+gh-1 :: fixed bug where rect is initially too large in x and y dimensions
+
+CHANGELOG 2023-01-02 -- V0.1
+
+gh-1 :: fixed bug where select rect only displayed forward not backwards
+
+CHANGELOG 2023-01-03 -- V0.1
+
+gh-1 :: removed extraneous logging
+
+CHANGELOG 2023-01-04 -- V0.1
+
+gh-1 :: move node snapping logic to its own file
+
+CHANGELOG 2023-02-05 -- V0.1
+
+ct/36 :: automate user interactions conversion to unit test
+
+CHANGELOG 2023-02-11 -- V0.1
+
+ct/38 :: make text bounds detection more exact
+
+CHANGELOG 2023-02-18 -- V0.1
+
+ct/43 :: select immed. after start creates a node selection, not page selection
+
+CHANGELOG 2023-02-26 -- V0.1
+
+gh-1 :: remove logging in preparation for v0.1 release
+
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--addon-palettes b/src/lib/act-frame/doc/changelog/changelog--v0.1--addon-palettes
new file mode 100644
index 0000000..c93d488
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--addon-palettes
@@ -0,0 +1,12 @@
+CHANGELOG 2022-12-17 -- V0.1 -- ADDON PALETTES
+
+gh-21 :: fix drawing and selection rectangle position when scrolled
+gh-24 :: addon-palettes
+
+CHANGELOG 2022-12-23 -- V0.1 -- ADDON PALETTES
+
+gh-24 :: addon-palettes - collapse other frams rather than scrolling
+
+CHANGELOG 2023-02-26 -- V0.1 -- ADDON PALETTES
+
+ct/45 :: extension to have larger decision nodes (that can hold text)
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--ci-testing b/src/lib/act-frame/doc/changelog/changelog--v0.1--ci-testing
new file mode 100644
index 0000000..b3dbf2e
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--ci-testing
@@ -0,0 +1,4 @@
+CHANGELOG 2022-11-17 -- V0.1 -- CI TESTING
+
+gh-9 :: implement 'enable command line / node testing running, e.g., via jsdom'
+gh-9 :: implement 'ci workflow'
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--cleanup-ui b/src/lib/act-frame/doc/changelog/changelog--v0.1--cleanup-ui
new file mode 100644
index 0000000..a6d38c5
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--cleanup-ui
@@ -0,0 +1,3 @@
+CHANGELOG 2022-12-16 -- V0.1 -- CLEANUP UI
+
+git-23 :: improve toolbar buttons and mode-change notification UI
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--fix-draw-tests b/src/lib/act-frame/doc/changelog/changelog--v0.1--fix-draw-tests
new file mode 100644
index 0000000..5faffe0
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--fix-draw-tests
@@ -0,0 +1,4 @@
+CHANGELOG 2022-12-26 -- V0.1 -- FIX DRAW TESTS
+
+gh-20 :: fix drawing tdd tests
+
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--node-management b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-management
new file mode 100644
index 0000000..ca0ccbb
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-management
@@ -0,0 +1,53 @@
+CHANGELOG 2022-11-24 -- V0.1 -- NODE MANAGEMENT
+
+gh-10 :: rectangular selection
+gh-16 :: click-drag rectangular selection
+gh-15 :: won't implement dropdown (with 16,10 you can select anything)
+gh-3 :: won't implement click to place selection(conflicts w/ click to deselect)
+
+CHANGELOG 2022-11-25 -- V0.1 -- NODE MANAGEMENT
+
+gh-2 :: allow nodes to overlap
+
+CHANGELOG 2022-11-26 -- V0.1 -- NODE MANAGEMENT
+
+gh-6 :: copy between app instances
+gh-7 :: copy paste selection
+
+CHANGELOG 2022-11-27 -- V0.1 -- NODE MANAGEMENT
+
+gh-8 :: delete a node feature via Cut (Ctrl-x)
+
+CHANGELOG 2022-11-29 -- V0.1 -- NODE MANAGEMENT
+
+gh-18 :: click-drag to draw rectangle, line, polyline
+
+CHANGELOG 2023-01-05 -- V0.1 -- NODE MANAGEMENT
+
+gh-33 :: clicking outside drawing bounds should not add elements to the xml
+
+CHANGELOG 2023-01-15 -- V0.1 -- NODE MANAGEMENT
+
+gh-1 :: fixed inner rectangle not being selected bug
+
+CHANGELOG 2023-01-16 -- V0.1 -- NODE MANAGEMENT
+
+gh-1 :: add permutation test for selecting elements inside rect
+
+CHANGELOG 2023-02-11 -- V0.1 -- NODE MANAGEMENT
+
+ct/37 :: drag from outside selected rect should cancel rect selection
+
+CHANGELOG 2023-02-12 -- V0.1 -- NODE MANAGEMENT
+
+ct/39 :: selection rectangle to work around two almost aligned rects
+
+CHANGELOG 2023-02-18 -- V0.1 -- NODE MANAGEMENT
+
+ct/40 :: paste xml text before onstart does not paste as nodes
+ct/41 :: click to place text opens text in editor not neighboring polyline
+ct/42 :: paste text into element editor doest not paste as nodes
+
+CHANGELOG 2023-02-19 -- V0.1 -- NODE MANAGEMENT
+
+ct/44 :: right-click interrupt does not prevent normal rect draw and select
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--node-mappings-test b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-mappings-test
new file mode 100644
index 0000000..5eb9351
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-mappings-test
@@ -0,0 +1,8 @@
+CHANGELOG 2022-12-29 -- V0.1 -- NODE MAPPINGS TEST
+
+gh-22 :: drawing order permutations test
+gh-21 :: fix drawing and selection rectangle position when scrolled
+
+CHANGELOG 2022-12-31 -- V0.1 -- NODE MAPPINGS TEST
+
+gh-1 :: fixed line not selecting bug
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1--node-movement b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-movement
new file mode 100644
index 0000000..a24f67a
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1--node-movement
@@ -0,0 +1,17 @@
+CHANGELOG 2023-01-07 -- V0.1 -- NODE MOVEMENT
+
+gh-19 :: change arrow-keys move selection behavior
+gh-17 :: click-drag to move nodes
+
+CHANGELOG 2023-01-08 -- V0.1 -- NODE MOVEMENT
+
+gh-19 :: fix losing select color on keypresses when single-click selected
+
+CHANGELOG 2023-01-28 -- V0.1 -- NODE MOVEMENT
+
+ct/34 :: move subselection uniformly
+
+CHANGELOG 2023-02-05 -- V0.1 -- NODE MOVEMENT
+
+ct/35 :: move inner selected rect
+
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.1-xml-buttons b/src/lib/act-frame/doc/changelog/changelog--v0.1-xml-buttons
new file mode 100644
index 0000000..af4bfc4
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.1-xml-buttons
@@ -0,0 +1,5 @@
+CHANGELOG 2022-11-19 -- V0.1 -- XML BUTTONS
+
+gh-4 :: download svg button
+gh-5 :: copy svg button
+gh-11 :: upload svg button
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.2 b/src/lib/act-frame/doc/changelog/changelog--v0.2
new file mode 100644
index 0000000..21c04f8
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.2
@@ -0,0 +1,37 @@
+CHANGELOG 2023-03-04 -- V0.2
+
+ct/46 :: tasks/branching planned
+
+CHANGELOG 2023-03-18 -- V0.2
+
+ct/47 :: separated out node drawing logic; draggable decis. nd placeholder code
+
+CHANGELOG 2023-03-19 -- V0.2
+
+ct/49 :: added run stub and html for commands
+
+CHANGELOG 2023-03-25 -- V0.2
+
+ct/47 :: added decision node resize ftr code stubs
+ct/50 :: added resize ftr code stubs
+ct/52 :: added xml editor code stubs
+ct/53 :: added xml validate code stubs
+
+CHANGELOG 2023-06-03 -- V0.2
+
+ct/46 :: fix breaking tests
+
+CHANGELOG 2023-06-10 -- V0.2
+
+ct/46 :: fix bug where new arrow draws backwards
+ct/46 :: fix bug where resize hover icon appears too far outside rect bounds
+
+CHANGELOG 2023-06-18 -- V0.2
+
+ct/46 :: fix SVG upload bug that was unexpectedly adding an extra svg element
+
+CHANGELOG 2023-06-24 -- V0.2
+
+ct/46 :: fix bug that prevented add-on templates to load (w/ test)
+ct/46 :: fix bug that locked out full xml editing after copying xml (w/ test)
+ct/46 :: ui updates (dark themed) and remove logging for v0.2 release
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.2--button-bar b/src/lib/act-frame/doc/changelog/changelog--v0.2--button-bar
new file mode 100644
index 0000000..e1b58c2
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.2--button-bar
@@ -0,0 +1,3 @@
+CHANGELOG 2023-06-03 -- V0.2 -- BUTTON BAR
+
+ct/54 :: update button bar to use node (svg) images
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.2--node-command b/src/lib/act-frame/doc/changelog/changelog--v0.2--node-command
new file mode 100644
index 0000000..9b5deea
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.2--node-command
@@ -0,0 +1,16 @@
+CHANGELOG 2023-03-26 -- V0.2 -- NODE COMMAND
+
+ct/49 :: added setx functionality, and incx/y updates on move
+
+CHANGELOG 2023-04-09 -- V0.2 -- NODE COMMAND
+
+ct/49 :: add (failing) command tests
+
+CHANGELOG 2023-04-16 -- V0.2 -- NODE COMMAND
+
+ct/49 :: add set x,y,w,h impl and add (failing) inc tests
+
+CHANGELOG 2023-04-23 -- V0.2 -- NODE COMMAND
+
+ct/49 :: add incx, incy, incw, inch impl. w/ tests
+
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.2--node-drawing b/src/lib/act-frame/doc/changelog/changelog--v0.2--node-drawing
new file mode 100644
index 0000000..8444944
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.2--node-drawing
@@ -0,0 +1,36 @@
+CHANGELOG 2023-04-02 -- V0.2 -- NODE DRAWING
+
+ct/50 :: rect resizing
+
+CHANGELOG 2023-04-08 -- V0.2 -- NODE DRAWING
+
+ct/50 :: rect resizing with tests
+
+CHANGELOG 2023-04-09 -- V0.2 -- NODE DRAWING
+
+ct/50 :: line/arrow (failing) resize tests
+
+CHANGELOG 2023-05-20 -- V0.2 -- NODE DRAWING
+
+ct/50 :: bug fix (with test) to enable resize on non-id rects
+ct/50 :: bug fix (with test) prevents resize during an element move-drag action
+
+CHANGELOG 2023-05-21 -- V0.2 -- NODE DRAWING
+
+ct/50 :: fixed a move test that was failing because it was dragging to move from
+ a line vertex point (now a line vertex drag should resize the shape)
+ct/50 :: implement line resize (test passes)
+ct/46 :: started implementing toggled () code block invocations, to assure a
+ particular code fix/feature really maps 1:1 code<-->test
+
+CHANGELOG 2023-05-27 -- V0.2 -- NODE DRAWING
+
+ct/50 :: implement arrow connector resize (test passes)
+
+CHANGELOG 2023-05-28 -- V0.2 -- NODE DRAWING
+
+ct/50 :: implement circle resize (test passes)
+
+CHANGELOG 2023-06-03 -- V0.2 -- NODE DRAWING
+
+ct/51 :: line/arrow self-snap point2 to point1 x/y (with tests)
diff --git a/src/lib/act-frame/doc/changelog/changelog--v0.2--xml-editing b/src/lib/act-frame/doc/changelog/changelog--v0.2--xml-editing
new file mode 100644
index 0000000..362952e
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/changelog--v0.2--xml-editing
@@ -0,0 +1,18 @@
+CHANGELOG 2023-04-01 -- V0.2 -- XML EDITING
+
+ct/52 :: auto-start svg display for immediate edit updates
+ct/53 :: add svg text (xml) attribute validation
+
+CHANGELOG 2023-04-22 -- V0.2 -- XML EDITING
+
+ct/52 :: fixed bug where xml element order changed after dragging to select
+ct/53 :: build package.json for xml validation libraries
+ct/53 :: visual indication that xml edit fails validation
+ct/53 :: added rect, line, polyline, circle attribute validation
+
+CHANGELOG 2023-04-29 -- V0.2 -- XML EDITING
+
+ct/52 :: relate automatic onStart with ct/52 task in comment
+ct/53 :: restructured xml editor (xeEditor) class to be testable
+ct/53 :: unit tests ensure sax parse and fast xml validator are called correctly
+ct/53 :: integration tests for x,y,width,height attributes textarea edits
diff --git a/src/lib/act-frame/doc/changelog/ct b/src/lib/act-frame/doc/changelog/ct
new file mode 100644
index 0000000..5ea8b37
--- /dev/null
+++ b/src/lib/act-frame/doc/changelog/ct
@@ -0,0 +1 @@
+../changetask
diff --git a/src/lib/act-frame/doc/changetask/34 b/src/lib/act-frame/doc/changetask/34
new file mode 100644
index 0000000..8db268e
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/34
@@ -0,0 +1,41 @@
+CHANGETASK 34 --
+DRAG-TO-MOVE SELECTED NODE SHOULD MOVE SUBSELECTED NODES UNIFORMLY
+type = bug
+
+
+1. Select fork (line) and 2 arrows (polylines)
+---------------
+ ====== (before the move)
+ | |
+ v v
+
+---------------
+
+2. Drag downward to attempt moving all 3 nodes downward and
+ notice that 1 polyline shifted upward
+---------------
+
+ |
+ =v==== (after the move)
+ |
+ v
+---------------
+
+
+Test that assures the fix
+* test #45 [test/node_movement_tdd.js]
+
+Generalized test that assures for all permuted cases
+* test #46 [test/node_movement_tdd.js]
+
+Fix mapping "case polyline -> polyline" [js/node-map.js]
+- addscalarr(dest, "points", "odd", diffscalarr(cacheNd,src,"points","even"));
++ addscalarr(dest, "points", "odd", diffscalarr(cacheNd,src,"points","odd"));
+
+2. when bug fix is implemented
+---------------
+
+ ====== (after the move all nodes moved together)
+ | |
+ v v
+---------------
diff --git a/src/lib/act-frame/doc/changetask/35 b/src/lib/act-frame/doc/changetask/35
new file mode 100644
index 0000000..6c07260
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/35
@@ -0,0 +1,61 @@
+CHANGETASK 35 --
+DRAGGING ON A SELECTED EMPTY RECT INSIDE ANOTHER RECT SHOULD MOVE THE RECT
+type = bug
+
+1. click on inner rect and now it is selected (*):
+ ___________
+| |
+| |
+| |
+| ****** |
+| * * |
+| * * |
+| ****** |
+| |
+| |
+| |
+| |
+|___________|
+
+2. drag somewhere inside inner-rect to try and move and now it starts a new
+ selection rectangle and after mouseup and it shows at the same spot unmoved
+ (and as expected no longer selected):
+ ___________
+| |
+| |
+| |
+| |||||| |
+| | | |
+| | | |
+| |||||| |
+| |
+| |
+| |
+| |
+|___________|
+
+
+After bug fix #2 it should instead be moved in whatever direction,
+e.g.y direction move (and selection cancels after move is completed by mouseup):
+
+ ___________
+| |
+| |
+| |
+| |
+| |
+| |
+| |||||| |
+| | | |
+| | | |
+| |||||| |
+| |
+|___________|
+
+
+Test that assures the fix
+* test #47 [test/node_movement_tdd.js]
+
+Fix [js/node-move.js] in mvIsMove function
+- var clickedNd = xy2nd(x,y);
++ var clickedNd = xy2nd(x,y,/*withNearestEdge=*/true);
diff --git a/src/lib/act-frame/doc/changetask/36 b/src/lib/act-frame/doc/changetask/36
new file mode 100644
index 0000000..f9a7d39
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/36
@@ -0,0 +1,17 @@
+CHANGETASK 36 --
+BUILD UP A CALL LOG WITH PARAMETER VALUES FOR KEY AND MOUSE EVENTS
+TO EASILY CONVERT USER ACTIONS INTO A UNIT TEST
+type = automate testing feature
+
+Implementation in [js/user-log.js]
+* lgUserCache function for mousemove repeated logging (only last gets saved)
+* lgUserCacheFlush function for mouseup (after mousemove repeated is finished)
+* lgUser function for normal/non-repititious logging
+* lgUserFlush function to be ran manually in console after a bug occurs
+
+Execute this function in the console to display the call log (it also resets the
+log)
+
+> window.lgUserFlush()
+ window.onStart({});
+ ..etc
diff --git a/src/lib/act-frame/doc/changetask/37 b/src/lib/act-frame/doc/changetask/37
new file mode 100644
index 0000000..6aa492d
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/37
@@ -0,0 +1,50 @@
+CHANGETASK 37 --
+DRAG FROM OUTSIDE SELECTED RECT SHOULD CANCEL RECT SELECTION
+type = bug
+
+
+1. Start new selection to select inner text elements outside the selected rect:
+ ******* ....
+ * text1 * . .
+ * text2 * ^...
+ * * |
+ ******* new selection cursor
+
+2. drag to surround the inner text elements results in moving
+ the selected rect (bug):
+
+ ......
+ text1 . .
+ text2 . .
+ . .
+ ||||||| ^.....
+ | |
+ | |
+ | |
+ |||||||
+
+
+After the bug is fixed, #2 should instead keep the rect in-place and the inner
+text will actually not be selected since the drag is cancelling a current
+selection, and the rect is now de-selected.
+
+ ...|||||||.......
+ . | text1 | .
+ . | text2 | .
+ ^.|.......|......
+ |||||||
+
+Test that assures the fix
+* test #48 [test/node_management_tdd.js]
+
+Fix:
+
+window.mvShouldCancel = function(x,y) {
+ return Math.abs(window.gRectSelectState.firstX-x)>18 ||
+ Math.abs(window.gRectSelectState.firstY-y)>18;
+}
+In window.mvIsMove:
+ In NotMoving-CanMove Condition
+ if (window.mvShouldCancel(x,y)) {
+ return false;
+ }
diff --git a/src/lib/act-frame/doc/changetask/38 b/src/lib/act-frame/doc/changetask/38
new file mode 100644
index 0000000..122147b
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/38
@@ -0,0 +1,38 @@
+CHANGETASK 38 --
+NEED TO MAKE TEXT BOUNDS DETECTION MORE EXACT
+type = bug
+
+Before fix: bounding rect used for detecting text bounds does not fit around
+ text letters (e.g. 'b') nicely.
+
+--|---
+- |) -
+- -
+------
+
+(Also, long text results in excessive trailing whitespace in its bounds:
+ | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
+)
+
+After Fix: b does not overextend top of rect and has no extra bottom space.
+
+
+------
+- | -
+- |) -
+------
+
+(Now, long text results in non-excessive trailing whitespace in its bounds:
+ | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
+)
+
+
+Fix:
+Test draws rectangles around a few text elements and test that
+the rect is exactly bounding the text element
+* test #49 [test/tdd.js]
+
+
+
+
+
diff --git a/src/lib/act-frame/doc/changetask/39 b/src/lib/act-frame/doc/changetask/39
new file mode 100644
index 0000000..a034879
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/39
@@ -0,0 +1,41 @@
+CHANGETASK 39 --
+SELECTION RECTANGLE AROUND TWO ALMOST ALIGNED RECTS, ONE LARGE, ONE SMALL NEEDS
+TO SELECT BOTH RECTS
+type = bug
+
+
+ -----------
+ - -
+ - -
+ - -----------------------
+ ----------- -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ - -
+ ---------------------------------
+
+ ^
+ \
+ selecting around these 2 rects does not actually select the rects
+
+
+Fix:
+
+Assured by test #50 [test/node_management_tdd.js]
+
+Implementation In [js/node-manage.js] window.issueRectSelectClick2
+ In selected list loop
+ svgNodes = [
+ selLst[i],
+ ...svgNodes.filter(nd => nd != selLst[i])
+ ];
diff --git a/src/lib/act-frame/doc/changetask/40 b/src/lib/act-frame/doc/changetask/40
new file mode 100644
index 0000000..851c52a
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/40
@@ -0,0 +1,23 @@
+CHANGETASK 40 --
+PASTING XML TEXT BEFORE ONSTART SHOULD NOT ATTEMPT NODE PASTE
+type = bug
+
+Before Start is clicked, the text editing mode editing should
+not result in a node paste (it should just be a normal textarea paste)
+
+Error:
+
+[js/node-manage.js]
+ window.issuePaste
+ window.gDispatch
+ document.getElementById("svgId").innerHTML=''; // causes console
+ // error:
+Uncaught TypeError: Cannot set properties of null (setting 'innerHTML')
+
+Fix:
+
+[js/node-manage.js]
+ In window.addEventListener("paste"
+ - window.issuePaste();
+ + if (window.gStarted) {
+ + window.issuePaste();
diff --git a/src/lib/act-frame/doc/changetask/41 b/src/lib/act-frame/doc/changetask/41
new file mode 100644
index 0000000..e5f78a2
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/41
@@ -0,0 +1,38 @@
+CHANGETASK 41 --
+CLICK TO PLACE TEXT SHOULD OPEN TEXT WINDOW NOT POLYLINE
+
+
+
+/ \
+\ /
+ |
+ |
+ | ? ---last action: mode 9 click to add '?' text close by the arrow (polyline)
+ v
+
+What's supposed to happen is the text editor brings up the edit screen for the
+text element (so you can place your own text in place of the '?', however
+instead it gets the polyline:
+
+
+After fix it should have brought up this text in the textarea instead:
+ ?
+
+Assured by test:
+ [test/tdd.js] #51
+
+Fix:
+
+Instead of clicking at the point of the left-most edge of a newly created text
+element, instead click at the original click point.
+
+In [../../index.js]
+ In window.issueClick
+ In if (numMode == 9) {
+ - issueClick(adjX, adjY); updateFrames();
+ + /*step1*/issueClick(x, y);
+ + /*step2*/updateFrames();
+
+Assured by:
+ [test/node_management_tdd.js] #52
+
diff --git a/src/lib/act-frame/doc/changetask/42 b/src/lib/act-frame/doc/changetask/42
new file mode 100644
index 0000000..a27782b
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/42
@@ -0,0 +1,33 @@
+CHANGETASK 42 --
+PASTING XML TEXT (E.G. HEX COLOR) IN NODE TEXT EDIT
+SHOULD NOT ATTEMPT TO PASTE NODES, JUST DO THE NORMAL TEXT IN EDITOR PASTE
+type = bug
+
+Bring up the editor for a particular node, and then paste in a fill color and
+it will try to to do the node paste callbacks in addition to the normal text
+paste.
+
+The error says testCb is not a function, which is true because the test didn't
+directly test the test callback way for testing node paste, but rather
+unintentionally went down this path from a normal text edit paste.
+
+Error:
+
+[js/node-manage.js]
+ In window.issuePaste
+ if (window.gTest) { testCb(); } // causes console error:
+Uncaught TypeError: testCb is not a function
+
+Fix:
+
+[js/node-manage.js]
+ In window.addEventListener("paste"
+ - if (window.gStarted) {
+ + if (window.gStarted &&
+ + window.getComputedStyle(document.getElementById("editModalBG"))
+ + .visibility != "visible"
+ + ) {
+ ..
+ window.issuePaste();
+Assured by Test:
+ [test/node_management_tdd.js] #53
diff --git a/src/lib/act-frame/doc/changetask/43 b/src/lib/act-frame/doc/changetask/43
new file mode 100644
index 0000000..6b6e9c5
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/43
@@ -0,0 +1,34 @@
+CHANGETASK 43 --
+QUICKLY SELECTING TO REMOVE START ELEMENTS SHOULD BE ABLE TO SELECT ELEMENTS
+IMMEDIATELY WITHOUT WAITING FIRST
+
+OnStart
+ \
+ click then immediately go to select elements in the svg area
+
+
+ ...
+ . .
+ ...
+ \
+ should have started the selection rectangle but instead it did the normal
+ select html page behavior.
+
+Fix:
+ In [../../index.js]
+ In window.onStart
+ - window.gDispatch(function(){document.onmousedown = mousedown; document.onmousemove = mousemove; document.onmouseup = mouseup; }, 800);// skip first click
+ + window.gDispatch(
+ + function(){
+ + document.onmousedown = mousedown;
+ + document.onmousemove = mousemove;
+ + document.onmouseup = mouseup;
+ + }, // end dispatch callback
+ + 8
+ + );// skip first click
+
+No Test Assurance:
+
+Since the gDispatch function does not wait in test mode (test mode skips the
+setTimeouts), this fix wouldn't be very testable. Ideally this should be
+remediated to see if this dispatch call can be removed altogether.
diff --git a/src/lib/act-frame/doc/changetask/44 b/src/lib/act-frame/doc/changetask/44
new file mode 100644
index 0000000..0955791
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/44
@@ -0,0 +1,86 @@
+CHANGETASK 44 --
+RIGHT-CLICKING IN MIDDLE OF RECT BEING DRAW RESULTS IN A NEW RECT DRAWN
+AND ULTIMATELY RESULTS IN AN EXTRA NEGATIVE WIDTH RECTANGLE THAT WILL
+PREVENT SELECTING THE ORIGINAL RECTANGLE
+type = bug
+
+ _____ _______________
+ ) | Back |
+ (_____ | Forward |
+ ^ | Reload |
+ \ | .rght-clckmenu|
+ / |_______________|
+ \
+ cursor in mid-draw
+ and right-click interrupts
+
+
+Results in a new rect drawn:
+ _____
+ . )
+ (_____ _
+ (_)
+
+. => left-click position to close menu
+
+And then when closing the menu by left clicking to the left of the menu
+(e.g. click in the center of the 1st rectangle),
+and the 2nd rect goes invisible and causes errors due to having a negative width:
+
+
+ _____
+ )
+ (_____
+ => second rect is here but now invisible
+
+
+Console error in Log:
+
+ index.js:522 Error: attribute width: A negative value is not valid. ("-112")
+ window.updateFrames @ index.js:522
+ window.manageDrawUpdate @ node-manage.js:321
+ window.mousemove @ index.js:952
+
+Line 522 reference:
+ In [../../index.js]
+ In window.updateFrames
+ svg.innerHTML = xml; // causes error message
+
+
+Now new issues will show up, one being that this rect can no longer be selected with click-drag
+selection rectangle:
+
+............
+. _____ .
+. ) .
+. (_____ .
+...........^ mode 0, click drag to select
+
+results in no selection on mouse up:
+
+ _____
+ )
+ (_____
+
+
+
+Fix:
+
+In [../../index.js]
+ In window.mousedown
+ e = e || window.event;
+ + if (e.button > 0) return; // only handle mouse down for left-click events (0 button)
+
+
+Assured by tests:
+
+Test that right-clicking and then left-clicking off doesn't add a second rect and that no rect
+is there having -width nor -height:
+ [test/node_management_tdd.js] #54
+
+Test same workflow as above mentioned test, except add on an extra step ensuring that the original
+rect can be selected:
+ [test/node_management_tdd.js] #55
+
+
+
diff --git a/src/lib/act-frame/doc/changetask/45 b/src/lib/act-frame/doc/changetask/45
new file mode 100644
index 0000000..9aeaf61
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/45
@@ -0,0 +1,23 @@
+CHANGETASK 45 --
+DECISION NODES EXTENDED IN SIZE TO HOLD TEXT
+type = extension
+
+In the bottom URL bar, add a Decision link with a variety of sizes; currently
+there will be no way for the user to resize the ones given by the extension.
+
+
+The usual way of doing decision nodes:
+
+ |
+ v
+ reg. user___ / \___ super user
+ | \ / |
+ v v
+
+Now there could be text within the Decision node:
+
+ |
+ ______v_________
+no ___ / is super user? \___ yes
+ | \________________/ |
+ v v
diff --git a/src/lib/act-frame/doc/changetask/46 b/src/lib/act-frame/doc/changetask/46
new file mode 100644
index 0000000..7cde8ce
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/46
@@ -0,0 +1,2 @@
+CT/46 V0.2 V0.2 BRANCH NEW VERS. UX EPIC
+Extended and Improved User Experience
diff --git a/src/lib/act-frame/doc/changetask/47 b/src/lib/act-frame/doc/changetask/47
new file mode 100644
index 0000000..49ca804
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/47
@@ -0,0 +1,38 @@
+CT/47 V0.2 NODE-DRAWING DRAG 2 RESHAPE DEC. ND FTR
+Dragging the decision node right or left draws changes the drawn width.
+Dragging it up or down changes the drawn height.
+
+This allows drawing it large enough to hold text
+
+See plantuml activity diagram documentation. 'Graphviz installed?' diamond
+
+ *
+ ___/
+ / ____larger decision node created by dragging
+ \/ /
+ ____________
+ no __ / safe mode? \__ yes
+ | \____________/ |
+ | | __normal decision node created by click (no dragging)
+ | | /
+ |__\ .. .. /__ /\__\ ..
+ / \ \/ /
+
+Update: originally I thought the click-drag flexible sizing feature would
+also handle drawing normal (4-line) decision nodes but larger in size.
+However, the drag logic would have to determine if its a 4-line or 6-line.
+
+Backlog: a configuration item of 'default decision node size' can be configured.
+This task: A single click creates a 4-line decision node whereas a click-drag
+(of noticeable sized movement) creates a flexible 6-line polyline.
+
+Click (4-line):
+ /\
+ \/
+
+Click-Drag (6-line):
+ __
+ / \
+ \__/
+
+Update 2: this task will focus on the reshaping between 4-sided and 6-sided
diff --git a/src/lib/act-frame/doc/changetask/48 b/src/lib/act-frame/doc/changetask/48
new file mode 100644
index 0000000..2890485
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/48
@@ -0,0 +1,16 @@
+CT/48 V0.2 NODE-DRAWING RESIZE DECISION NODE FTR
+
+ _
+/ \
+\_/
+ \
+ dragging from bottom-right corner area will start resizing the polyline shape
+ ______
+ / \
+ \______/
+ \
+ resized
+
+depends on shared code to-be-created as part of ct/47
+
+Update: this task will focus on resizing a 6-sided decision node.
diff --git a/src/lib/act-frame/doc/changetask/49 b/src/lib/act-frame/doc/changetask/49
new file mode 100644
index 0000000..ebf3148
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/49
@@ -0,0 +1,35 @@
+CT/49 V0.2 NODE-COMMAND SETX/Y/W/H INCX/Y/W/H FTR
+
+as a tab in the single node editor
+ _______________________________
+| _________________ |
+| |> setx 100 ______| |
+| |
+| ( Edit ) ( *Cmd* ) |
+|_______________________________|
+
+
+setx 100 # set all x to be 100
+incx 100 # increment all x be 100
+setw 120 # set all width to be 120
+incw 120 # increment all selected width to be 120
+
+Update: to keep things a consistent UI, use multiline and allow multiple command
+entries. Since multiline is enabled, it might as well autofill the relevant
+commands with their current values, e.g.:
+ setx 103
+ incx 0
+
+Update 2: incx, incy should get updated values as you drag nodes, so the user
+can see to place it back where it started
+
+Update 3: can be ; delimited. setx 3; sety 4
+Update 4: broke out parse and node attr logic so they can be unit tested
+independently from what else is going on globally/DOM
+ Impl. JS/node-cmd.js
+ * window.cmParser (command parser class)
+ * window.cmNd (command node function)
+ Unit Test TEST/node_command_unit_tdd.js
+ * test 59+
+ (Non-unit) Integration Test TEST/node_command_tdd.js
+ * test 56
diff --git a/src/lib/act-frame/doc/changetask/50 b/src/lib/act-frame/doc/changetask/50
new file mode 100644
index 0000000..be75595
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/50
@@ -0,0 +1,22 @@
+CT/50 V0.2 NODE-DRAWING ABLE TO RESIZE EACH NODE FTR
+same as ct/48 except for all the other types that already have resize behavior
+on the initial draw action.
+
+By clicking on an end part of a node and start dragging in select mode it will
+start resizing.
+
+ \
+ \
+ \/
+ \__ e.g. click arrow point
+ and drag starts resizing it in mode=0
+
+Update:
+It will activate re-size behavior even if the node is not already selected.
+
+Hovering corners will display the resize icon according to the vertex being
+hovered (e.g., img/00.svg x=0,y=0).
+
+Future changetask:
+ Also, should be able to resize multiple at once (e.g., select 3 rects in a
+ line and resize all 3 to be a larger width).
diff --git a/src/lib/act-frame/doc/changetask/51 b/src/lib/act-frame/doc/changetask/51
new file mode 100644
index 0000000..79ce2ca
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/51
@@ -0,0 +1,20 @@
+CT/51 V0.2 NODE-SNAPPNG LINE SNAP TO SELF FTR
+Snap using snapX and snapY for line types just as is done already for polyline*
+It should snap to right angles
+
+ |
+ |
+ |
+ | ___ slightly
+ offset while drawing gets corrected
+ /
+ | ______________________________/
+ |
+ |
+ |
+
+handles gh-30
+depends on ct/50 (resizing nodes)
+
+Update: * polyline (arrow) didn't have a test, so adding polyline as part of
+ this task in addition to line/test
diff --git a/src/lib/act-frame/doc/changetask/52 b/src/lib/act-frame/doc/changetask/52
new file mode 100644
index 0000000..e23777f
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/52
@@ -0,0 +1,20 @@
+CT/52 V0.2 XML-EDITING MACRO-LEVEL XML EDITOR FTR
+Before clicking 'Start', there is a chance to edit the full raw XML and deal
+with it on a text-based basis (e.g. paste in to integrate elements from multiple
+svg docs, etc). A lot of editing can then happen at the micro level by selecting
+a particular element and a smaller text editor appears just for that 1 element,
+while the fuller text editor is read-only. In order to edit the full xml text
+you have to copy it and then refresh the page to paste in and use the full
+editor again.
+
+There are a lot of reasons why someone might want to edit the full xml text
+in the middle of an editing session, here's a few:
+ 1) make sure a new element has a certain ordering (before/after certain
+ other nodes)
+ 2) when the attributes are trivial in text mode, ie: place node at (0,0),
+ then editing the text is easier than trying to get corret x,y with mouse
+ 3) Give a fill to all elements, ie: search and replace all instances of
+ fill="transparent" with fill="#FFF"
+ 4) uniformity of elements, e.g. quickly scan and find all elements with
+ x approx equal to 100 and edit one after the other until all have x
+ equal to 100.
diff --git a/src/lib/act-frame/doc/changetask/53 b/src/lib/act-frame/doc/changetask/53
new file mode 100644
index 0000000..e5a7db7
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/53
@@ -0,0 +1,3 @@
+CT/53 V0.2 XML-EDITING VALIDATE XML EDITOR FTR
+require xml validation for free-text edits before updates and saving it
+signal in some way that it didn't save
diff --git a/src/lib/act-frame/doc/changetask/54 b/src/lib/act-frame/doc/changetask/54
new file mode 100644
index 0000000..8cd3775
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/54
@@ -0,0 +1,4 @@
+CT/54 V0.2 BUTTON-BAR UPDATE BUTTONS (SVG) FTR
+
+Top 0-9 buttons should have icons that look just like what that (0-9) mode will
+draw.
diff --git a/src/lib/act-frame/doc/changetask/CT b/src/lib/act-frame/doc/changetask/CT
new file mode 100644
index 0000000..6a04314
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/CT
@@ -0,0 +1 @@
+./
\ No newline at end of file
diff --git a/src/lib/act-frame/doc/changetask/JS b/src/lib/act-frame/doc/changetask/JS
new file mode 100644
index 0000000..6adaced
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/JS
@@ -0,0 +1 @@
+../../js
diff --git a/src/lib/act-frame/doc/changetask/TEST b/src/lib/act-frame/doc/changetask/TEST
new file mode 100644
index 0000000..69f92f7
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/TEST
@@ -0,0 +1 @@
+../../test
diff --git a/src/lib/act-frame/doc/changetask/ct b/src/lib/act-frame/doc/changetask/ct
new file mode 100644
index 0000000..6a04314
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/ct
@@ -0,0 +1 @@
+./
\ No newline at end of file
diff --git a/src/lib/act-frame/doc/changetask/js b/src/lib/act-frame/doc/changetask/js
new file mode 100644
index 0000000..6adaced
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/js
@@ -0,0 +1 @@
+../../js
diff --git a/src/lib/act-frame/doc/changetask/test b/src/lib/act-frame/doc/changetask/test
new file mode 100644
index 0000000..69f92f7
--- /dev/null
+++ b/src/lib/act-frame/doc/changetask/test
@@ -0,0 +1 @@
+../../test
diff --git a/src/lib/act-frame/doc/testing/0.0/README b/src/lib/act-frame/doc/testing/0.0/README
new file mode 100644
index 0000000..41da1e0
--- /dev/null
+++ b/src/lib/act-frame/doc/testing/0.0/README
@@ -0,0 +1,77 @@
+PATCH FIXES 0.0 VERSION
+
+# create local folder for 0.0 repo
+git clone git@github.com:koreyhinton/act.svg.git act.svg0.0
+cd act.svg0.0
+
+# create 0.0 branch
+git checkout v0.0.0 # original 0.0.0 version tag
+git switch -c mainb/v0.0
+
+# bring down latest test code in another branch
+git fetch origin mainb/v0.2b/node-drawing
+git checkout mainb/v0.2b/node-drawing
+git pull origin mainb/v0.2b/node-drawing
+
+# bring in latest test code into 0.0 branch
+git checkout mainb/v0.0
+git checkout mainb/v0.2b/node-drawing -- test/
+git checkout mainb/v0.2b/node-drawing -- package.json
+
+# install jsdom test dependency
+npm install
+
+# satisfy missing code part 1, run this once and whenever js/index.js is updated
+cp js/index.js index.js
+globalrefs=$({
+ echo onStart
+ echo issueClick
+ echo updateFrames
+ echo onApplyEdits
+ echo issueKeyNum
+ echo mousedown
+ echo keydown
+ echo forceMap
+ echo smartMap
+ echo issueKeyName
+} | cat)
+for r in `echo "$globalrefs"`
+do
+ sed -iindex.bak "s/function ${r}/window.${r} = function/" index.js
+done
+
+# satisfy missing code part 2, run this just once
+touch js/node-snap.js
+touch js/svg-mouse.js
+sed -icirun.bak 's/gRect/gRect=null;\/\//' test/tdd_cirun.js
+sed -icirun.bak 's/ res/ res=false;try{res/' test/tdd_cirun.js
+sed -icirun.bak 's/]();/]();}catch(e){console.warn(e);}/' test/tdd_cirun.js
+sed -icirun.bak 's/dow;/dow;window.gSvgFrame={getStart:()=>{ return {x: 750, y: 88}}};/' test/tdd_cirun.js
+sed -icirun.bak 's/dow;/dow;window.mousemove=()=>{};/' test/tdd_cirun.js
+sed -icirun.bak 's/dow;/dow;window.mouseup=()=>{};/' test/tdd_cirun.js
+sed -icirun.bak 's/ter;/ter;issueDrag=function(x1,y1,x2,y2){issueClick(x1,y1);updateFrames();issueClick(x2,y2);updateFrames();}/' test/tdd_cirun.js
+sed -icirun.bak 's/dow;/dow;window.lgLogNode=()=>{};/' test/tdd_cirun.js
+sed -iindex.bak 's/tdd.js/tdd.js"><\/script>
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+