author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Sun, 12 Apr 2020 21:43:42 +0200 | |
branch | svghmi |
changeset 2923 | 5ec1c07ce582 |
parent 2922 | ddce4ebdf010 |
child 2924 | 69bb58eb0eac |
permissions | -rw-r--r-- |
2922
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
1 |
// widget_dropdown.ysl2 |
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
2 |
|
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
3 |
template "widget[@type='DropDown']", mode="widget_defs" { |
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
4 |
param "hmi_element"; |
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
5 |
labels("text box"); |
2923
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
6 |
|| |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
7 |
dispatch: function(value) { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
8 |
let span = this.text_elt.firstElementChild; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
9 |
span.textContent = (value >= 0 && value < this.content.length) ? |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
10 |
this.content[value] : String(value); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
11 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
12 |
init: function() { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
13 |
this.element.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_click()"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
14 |
this.text_bbox = this.text_elt.getBBox() |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
15 |
this.box_bbox = this.box_elt.getBBox() |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
16 |
lmargin = this.text_bbox.x - this.box_bbox.x; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
17 |
tmargin = this.text_bbox.y - this.box_bbox.y; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
18 |
rmargin = this.box_bbox.width - this.text_bbox.width - lmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
19 |
bmargin = this.box_bbox.height - this.text_bbox.height - tmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
20 |
this.margins = [lmargin, tmargin, rmargin, bmargin].map(x => Math.max(x,0)); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
21 |
this.content = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
22 |
//this.content = ["one", "two", "three", "four", "5", "6"]; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
23 |
this.offset = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
24 |
this.lift = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
25 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
26 |
on_click: function() { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
27 |
this.open(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
28 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
29 |
try_grow_one: function() { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
30 |
let txt = this.text_elt; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
31 |
let first = txt.firstElementChild; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
32 |
let bounds = svg_root.getBoundingClientRect(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
33 |
let next = first.cloneNode(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
34 |
//next.removeAttribute("x"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
35 |
next.removeAttribute("y"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
36 |
next.setAttribute("dy", "1.1em"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
37 |
next.textContent = "..."; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
38 |
txt.appendChild(next); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
39 |
let rect = txt.getBoundingClientRect(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
40 |
console.log("bounds", bounds); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
41 |
console.log("rect", rect); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
42 |
if(rect.bottom > bounds.bottom){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
43 |
let backup = first.getAttribute("dy"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
44 |
first.setAttribute("dy", "-"+String((this.lift+1)*1.1)+"em"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
45 |
rect = txt.getBoundingClientRect(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
46 |
if(rect.top > bounds.top){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
47 |
console.log("rect2ok", rect); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
48 |
this.lift += 1; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
49 |
} else { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
50 |
console.log("rect2Nok", rect); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
51 |
if(backup) |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
52 |
first.setAttribute("dy", backup); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
53 |
else |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
54 |
first.removeAttribute("dy"); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
55 |
txt.removeChild(next); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
56 |
return false; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
57 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
58 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
59 |
return true; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
60 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
61 |
open: function(){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
62 |
let l = this.content.length; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
63 |
let c = 1; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
64 |
this.lift = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
65 |
this.purge(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
66 |
while(c < l && this.try_grow_one()) c++; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
67 |
let spans = Array.from(this.text_elt.children); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
68 |
if(c == l) { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
69 |
c = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
70 |
while(c < l){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
71 |
spans[c].textContent = this.content[c]; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
72 |
c++; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
73 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
74 |
} else { |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
75 |
let slots = c; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
76 |
let elipses = []; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
77 |
if(this.offset != 0) |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
78 |
elipses.push(0); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
79 |
if(this.offset + slots - elipses.length < l) |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
80 |
elipses.push(spans.length-1); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
81 |
let i = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
82 |
c = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
83 |
while(c < spans.length){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
84 |
if(elipses.indexOf(c) != -1) |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
85 |
spans[c].textContent = "..."; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
86 |
else{ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
87 |
spans[c].textContent = this.content[this.offset + i]; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
88 |
i++; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
89 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
90 |
c++; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
91 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
92 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
93 |
this.adjust_to_text(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
94 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
95 |
purge: function(){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
96 |
let txt = this.text_elt; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
97 |
for(let span of Array.from(txt.children).slice(1)){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
98 |
txt.removeChild(span) |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
99 |
} |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
100 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
101 |
adjust_to_text: function(){ |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
102 |
let [lmargin, tmargin, rmargin, bmargin] = this.margins; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
103 |
let m = this.text_elt.getBBox(); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
104 |
this.box_elt.x.baseVal.value = m.x - lmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
105 |
this.box_elt.y.baseVal.value = m.y - tmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
106 |
this.box_elt.width.baseVal.value = lmargin + m.width + rmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
107 |
this.box_elt.height.baseVal.value = tmargin + m.height + bmargin; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
108 |
}, |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
109 |
|| |
2922
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
110 |
} |
ddce4ebdf010
SVGHMI: intermediate commit while working on dropdown widget.
Edouard Tisserant
parents:
diff
changeset
|
111 |
|
2923
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
112 |
// | let p = new DOMPoint(this.box_elt.x.baseVal.value, this.box_elt.y.baseVal.value); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
113 |
// | let k = DOMMatrix.fromMatrix(this.box_elt.getCTM()); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
114 |
// | let new_corner = k.transformPoint(p); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
115 |
// | new_corner.y = 0; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
116 |
// | let nc = k.inverse().transformPoint(new_corner); |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
117 |
// | this.box_elt.x.baseVal.value = nc.x; |
5ec1c07ce582
SVGHMI: HMI:DropDown work in progress, intermediate commit. Now menu's rectangle grows up to viewport borders.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2922
diff
changeset
|
118 |
// | this.box_elt.y.baseVal.value = nc.y; |