1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | import _ from 'lodash';
|
8 |
|
9 | const RAW_ATTRIBUTES = new Set([
|
10 |
|
11 |
|
12 | 'align',
|
13 | 'valign',
|
14 | 'orientation',
|
15 | 'shrink',
|
16 | 'padding',
|
17 | 'tags',
|
18 | 'shadow',
|
19 |
|
20 |
|
21 | 'font',
|
22 | 'fontBold',
|
23 | 'fch',
|
24 | 'ch',
|
25 | 'bold',
|
26 | 'underline',
|
27 |
|
28 |
|
29 | 'clickable',
|
30 | 'input',
|
31 | 'keyable',
|
32 | 'hidden',
|
33 | 'visible',
|
34 | 'scrollable',
|
35 | 'draggable',
|
36 | 'interactive',
|
37 |
|
38 |
|
39 | 'left',
|
40 | 'right',
|
41 | 'top',
|
42 | 'bottom',
|
43 | 'aleft',
|
44 | 'aright',
|
45 | 'atop',
|
46 | 'abottom',
|
47 |
|
48 |
|
49 | 'width',
|
50 | 'height',
|
51 |
|
52 |
|
53 | 'checked',
|
54 |
|
55 |
|
56 | 'name'
|
57 | ]);
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 | export default function update(node, options) {
|
66 |
|
67 |
|
68 |
|
69 |
|
70 | const selectQue = []
|
71 |
|
72 | for (let key in options) {
|
73 | let value = options[key];
|
74 |
|
75 | if (key === 'selected' && node.select)
|
76 | selectQue.push({
|
77 | node,
|
78 | value: (typeof value === 'string' ? +value : value)
|
79 | })
|
80 |
|
81 |
|
82 | else if (key === 'label')
|
83 | node.setLabel(value);
|
84 |
|
85 |
|
86 | else if (key === 'hoverText' && !value) node.removeHover()
|
87 |
|
88 |
|
89 | else if (key === 'hoverText' && value) node.setHover(value)
|
90 |
|
91 |
|
92 | else if (key === 'content')
|
93 | node.setContent(value);
|
94 |
|
95 |
|
96 | else if (key === 'style')
|
97 | node.style = _.merge({}, node.style, value);
|
98 |
|
99 |
|
100 | else if (key === 'items')
|
101 | node.setItems(value);
|
102 |
|
103 |
|
104 | else if (key === 'border')
|
105 | node.border = _.merge({}, node.border, value);
|
106 |
|
107 |
|
108 | else if (key === 'value' && node.setValue)
|
109 | node.setValue(value);
|
110 |
|
111 |
|
112 | else if (key === 'filled' && node.filled !== value)
|
113 | node.setProgress(value);
|
114 |
|
115 |
|
116 | else if ((key === 'rows' || key === 'data') && node.setData)
|
117 | node.setData(value);
|
118 |
|
119 | else if (key === 'focused' && value && !node[key]) node.focus()
|
120 |
|
121 |
|
122 | else if (RAW_ATTRIBUTES.has(key))
|
123 | node[key] = value;
|
124 | }
|
125 |
|
126 | selectQue.forEach(({node, value}) => node.select(value))
|
127 | }
|