goblin-gadgets 3.2.2 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -9
- package/.eslintrc.js +28 -28
- package/.zou-flow +2 -2
- package/builders/builders.js +5 -5
- package/builders/gadget.js +85 -85
- package/calendar-boards-gadget.js +64 -64
- package/demo-gadget.js +17 -17
- package/glyphs-dialog.js +13 -13
- package/login-dialog.js +13 -13
- package/package.json +46 -46
- package/pivot-gadget.js +18 -18
- package/stack-navigation.js +13 -13
- package/table-gadget.js +102 -102
- package/test/code-parser.spec.js +61 -61
- package/tree-gadget.js +70 -70
- package/types/types.js +455 -455
- package/widgets/accordion/styles.js +16 -16
- package/widgets/accordion/widget.js +90 -90
- package/widgets/analog-clock/props.js +102 -102
- package/widgets/analog-clock/scenarios.js +43 -43
- package/widgets/analog-clock/styles.js +754 -754
- package/widgets/analog-clock/widget.js +404 -404
- package/widgets/animated-container/animations.js +566 -566
- package/widgets/animated-container/styles.js +36 -36
- package/widgets/animated-container/widget.js +24 -24
- package/widgets/badge/styles.js +107 -107
- package/widgets/badge/widget.js +33 -33
- package/widgets/button/props.js +377 -377
- package/widgets/button/scenarios.js +54 -54
- package/widgets/button/styles.js +1082 -1082
- package/widgets/button/widget.js +426 -426
- package/widgets/button-combo/styles.js +73 -73
- package/widgets/button-combo/widget.js +297 -297
- package/widgets/calendar/props.js +207 -207
- package/widgets/calendar/scenarios.js +50 -50
- package/widgets/calendar/styles.js +198 -198
- package/widgets/calendar/widget.js +895 -895
- package/widgets/calendar-boards/styles.js +29 -29
- package/widgets/calendar-boards/widget.js +215 -215
- package/widgets/calendar-button/styles.js +273 -273
- package/widgets/calendar-button/widget.js +94 -94
- package/widgets/calendar-list/styles.js +35 -35
- package/widgets/calendar-list/widget.js +223 -223
- package/widgets/calendar-recurrence/widget.js +183 -183
- package/widgets/carousel/props.js +104 -104
- package/widgets/carousel/scenarios.js +163 -163
- package/widgets/carousel/styles.js +133 -133
- package/widgets/carousel/widget.js +491 -491
- package/widgets/carousel-bullet/styles.js +29 -29
- package/widgets/carousel-bullet/widget.js +25 -25
- package/widgets/carousel-button/styles.js +71 -71
- package/widgets/carousel-button/widget.js +33 -33
- package/widgets/carousel-item/styles.js +21 -21
- package/widgets/carousel-item/widget.js +24 -24
- package/widgets/chat-balloon/props.js +65 -65
- package/widgets/chat-balloon/scenarios.js +47 -47
- package/widgets/chat-balloon/styles.js +193 -193
- package/widgets/chat-balloon/widget.js +62 -62
- package/widgets/chat-dialog/styles.js +15 -15
- package/widgets/chat-dialog/widget.js +62 -62
- package/widgets/check-list/styles.js +66 -66
- package/widgets/check-list/widget.js +168 -168
- package/widgets/checkbox/widget.js +15 -15
- package/widgets/checkbox-nc/props.js +191 -191
- package/widgets/checkbox-nc/scenarios.js +41 -41
- package/widgets/checkbox-nc/styles.js +122 -122
- package/widgets/checkbox-nc/widget.js +116 -116
- package/widgets/clock-combo/styles.js +174 -174
- package/widgets/clock-combo/widget.js +390 -390
- package/widgets/color-picker/props.js +145 -145
- package/widgets/color-picker/scenarios.js +34 -34
- package/widgets/color-picker/styles.js +209 -209
- package/widgets/color-picker/widget.js +735 -735
- package/widgets/colored-container/props.js +34 -34
- package/widgets/colored-container/scenarios.js +54 -54
- package/widgets/colored-container/styles.js +100 -100
- package/widgets/colored-container/widget.js +27 -27
- package/widgets/combo/styles.js +69 -69
- package/widgets/combo/widget.js +224 -224
- package/widgets/combo-container/styles.js +66 -66
- package/widgets/combo-container/widget.js +188 -188
- package/widgets/command-button/widget.js +39 -39
- package/widgets/container/props.js +295 -295
- package/widgets/container/scenarios.js +47 -47
- package/widgets/container/styles.js +1439 -1439
- package/widgets/container/widget.js +279 -279
- package/widgets/demo/widget.js +24 -24
- package/widgets/dialog/styles.js +29 -29
- package/widgets/dialog/widget.js +26 -26
- package/widgets/dialog-modal/props.js +126 -126
- package/widgets/dialog-modal/styles.js +234 -234
- package/widgets/dialog-modal/widget.js +273 -273
- package/widgets/dialog-resizable/props.js +1 -1
- package/widgets/dialog-resizable/scenarios.js +18 -18
- package/widgets/dialog-resizable/widget.js +367 -367
- package/widgets/dialog-resizable-nc/props.js +150 -150
- package/widgets/dialog-resizable-nc/scenarios.js +18 -18
- package/widgets/dialog-resizable-nc/styles.js +259 -259
- package/widgets/dialog-resizable-nc/widget.js +197 -197
- package/widgets/directory-input/widget.js +18 -18
- package/widgets/directory-input-nc/widget.js +20 -20
- package/widgets/document-container/getPath.js +43 -43
- package/widgets/document-container/props.js +79 -79
- package/widgets/document-container/scenarios.js +39 -39
- package/widgets/document-container/styles.js +69 -69
- package/widgets/document-container/widget.js +53 -53
- package/widgets/drag-cab/styles.js +56 -56
- package/widgets/drag-cab/widget.js +285 -285
- package/widgets/drag-carrier/styles.js +21 -21
- package/widgets/drag-carrier/widget.js +780 -780
- package/widgets/dynamic-toolbar/styles.js +110 -110
- package/widgets/dynamic-toolbar/widget.js +128 -128
- package/widgets/field/readonly/label.js +39 -39
- package/widgets/field/widget.js +1743 -1743
- package/widgets/file-input/widget.js +18 -18
- package/widgets/file-input-nc/styles.js +38 -38
- package/widgets/file-input-nc/widget.js +88 -88
- package/widgets/flat-combo/styles.js +21 -21
- package/widgets/flat-combo/widget.js +61 -61
- package/widgets/flat-list/styles.js +30 -30
- package/widgets/flat-list/widget.js +219 -219
- package/widgets/flying-balloon/styles.js +52 -52
- package/widgets/flying-balloon/widget.js +43 -43
- package/widgets/fragment/widget.js +26 -26
- package/widgets/full-screen/props.js +27 -27
- package/widgets/full-screen/styles.js +32 -32
- package/widgets/full-screen/widget.js +40 -40
- package/widgets/gauge/props.js +71 -71
- package/widgets/gauge/scenarios.js +83 -83
- package/widgets/gauge/styles.js +183 -183
- package/widgets/gauge/widget.js +36 -36
- package/widgets/glyph-detail/service.js +9 -9
- package/widgets/glyph-detail/widget.js +109 -109
- package/widgets/glyphs-dialog/service.js +94 -94
- package/widgets/glyphs-dialog/styles.js +37 -37
- package/widgets/glyphs-dialog/widget.js +236 -236
- package/widgets/goblin-editor/widget.js +146 -146
- package/widgets/guild-entry/props.js +53 -53
- package/widgets/guild-entry/scenarios.js +26 -26
- package/widgets/guild-entry/styles.js +98 -98
- package/widgets/guild-entry/widget.js +126 -126
- package/widgets/guild-user-logo/guild-helpers.js +77 -77
- package/widgets/guild-user-logo/props.js +48 -48
- package/widgets/guild-user-logo/scenarios.js +64 -64
- package/widgets/guild-user-logo/styles.js +114 -114
- package/widgets/guild-user-logo/widget.js +81 -81
- package/widgets/guild-user-profile/props.js +73 -73
- package/widgets/guild-user-profile/scenarios.js +54 -54
- package/widgets/guild-user-profile/styles.js +162 -162
- package/widgets/guild-user-profile/widget.js +202 -202
- package/widgets/helpers/combo-helpers.js +218 -218
- package/widgets/helpers/geom-helpers.js +80 -80
- package/widgets/helpers/rect-helpers.js +10 -10
- package/widgets/helpers/shortcut-helpers.js +56 -56
- package/widgets/helpers/spacing-helpers.js +26 -26
- package/widgets/helpers/svg-helpers.js +151 -151
- package/widgets/helpers/table-helpers.js +68 -68
- package/widgets/hinter/styles.js +79 -79
- package/widgets/hinter/widget.js +205 -205
- package/widgets/hinter-column/widget.js +49 -49
- package/widgets/hinter-field/reducer.js +18 -18
- package/widgets/hinter-field/widget.js +176 -176
- package/widgets/hinter-field-nc/props.js +114 -114
- package/widgets/hinter-field-nc/scenarios.js +47 -47
- package/widgets/hinter-field-nc/widget.js +191 -191
- package/widgets/input-wrapper/widget.js +157 -157
- package/widgets/key-trap.js +96 -96
- package/widgets/label/props.js +1 -1
- package/widgets/label/scenarios.js +1 -1
- package/widgets/label/widget.js +7 -7
- package/widgets/label-nc/props.js +308 -308
- package/widgets/label-nc/scenarios.js +29 -29
- package/widgets/label-nc/styles.js +1218 -1218
- package/widgets/label-nc/widget.js +314 -314
- package/widgets/label-row/props.js +1 -1
- package/widgets/label-row/scenarios.js +1 -1
- package/widgets/label-row/widget.js +7 -7
- package/widgets/label-row-nc/props.js +94 -94
- package/widgets/label-row-nc/scenarios.js +46 -46
- package/widgets/label-row-nc/widget.js +81 -81
- package/widgets/label-text-field/styles.js +55 -55
- package/widgets/label-text-field/widget.js +178 -178
- package/widgets/launcher/props.js +177 -177
- package/widgets/launcher/scenarios.js +55 -55
- package/widgets/launcher/styles.js +46 -46
- package/widgets/launcher/widget.js +79 -79
- package/widgets/launcher-blob/props.js +25 -25
- package/widgets/launcher-blob/scenarios.js +24 -24
- package/widgets/launcher-blob/styles.js +62 -62
- package/widgets/launcher-blob/widget.js +50 -50
- package/widgets/list/widget.js +211 -211
- package/widgets/login-dialog/service.js +117 -117
- package/widgets/login-dialog/widget.js +117 -117
- package/widgets/map/reaflet.js +208 -208
- package/widgets/map/widget.js +67 -67
- package/widgets/markdown/styles.js +85 -85
- package/widgets/markdown/widget.js +31 -31
- package/widgets/notification/styles.js +97 -97
- package/widgets/notification/widget.js +207 -207
- package/widgets/pivot/custom.css +320 -320
- package/widgets/pivot/widget.js +42 -42
- package/widgets/radio-list/styles.js +48 -48
- package/widgets/radio-list/widget.js +111 -111
- package/widgets/resizable-container/styles.js +108 -108
- package/widgets/resizable-container/widget.js +225 -225
- package/widgets/retro-action-button/helpers.js +106 -106
- package/widgets/retro-action-button/styles.js +285 -285
- package/widgets/retro-action-button/widget.js +364 -364
- package/widgets/retro-badge-button/styles.js +87 -87
- package/widgets/retro-badge-button/widget.js +251 -251
- package/widgets/retro-gear/helpers.js +156 -156
- package/widgets/retro-gear/styles.js +130 -130
- package/widgets/retro-gear/widget.js +51 -51
- package/widgets/retro-illuminated-button/styles.js +274 -274
- package/widgets/retro-illuminated-button/widget.js +147 -147
- package/widgets/retro-panel/helpers.js +57 -57
- package/widgets/retro-panel/styles.js +293 -293
- package/widgets/retro-panel/widget.js +239 -239
- package/widgets/retro-screw/styles.js +80 -80
- package/widgets/retro-screw/widget.js +25 -25
- package/widgets/rocket/props.js +124 -124
- package/widgets/rocket/scenarios.js +71 -71
- package/widgets/rocket/styles.js +306 -306
- package/widgets/rocket/widget.js +225 -225
- package/widgets/samples-monitor/helpers.js +147 -147
- package/widgets/samples-monitor/styles.js +529 -529
- package/widgets/samples-monitor/widget.js +516 -516
- package/widgets/scrollable-container/styles.js +58 -58
- package/widgets/scrollable-container/widget.js +132 -132
- package/widgets/scrollable-linkable-container/reducer.js +18 -18
- package/widgets/scrollable-linkable-container/styles.js +42 -42
- package/widgets/scrollable-linkable-container/widget.js +78 -78
- package/widgets/select/styles.js +68 -68
- package/widgets/select/widget.js +119 -119
- package/widgets/separator/props.js +46 -46
- package/widgets/separator/styles.js +116 -116
- package/widgets/separator/widget.js +27 -27
- package/widgets/slider/props.js +136 -136
- package/widgets/slider/scenarios.js +74 -74
- package/widgets/slider/styles.js +246 -246
- package/widgets/slider/widget.js +404 -404
- package/widgets/slider-circle/props.js +72 -72
- package/widgets/slider-circle/scenarios.js +16 -16
- package/widgets/slider-circle/styles.js +78 -78
- package/widgets/slider-circle/widget.js +154 -154
- package/widgets/slider-xy/props.js +87 -87
- package/widgets/slider-xy/scenarios.js +19 -19
- package/widgets/slider-xy/styles.js +102 -102
- package/widgets/slider-xy/widget.js +234 -234
- package/widgets/smiley/props.js +51 -51
- package/widgets/smiley/scenarios.js +58 -58
- package/widgets/smiley/styles.js +489 -489
- package/widgets/smiley/widget.js +72 -72
- package/widgets/spinner/props.js +31 -31
- package/widgets/spinner/scenarios.js +31 -31
- package/widgets/spinner/styles.js +49 -49
- package/widgets/spinner/widget.js +23 -23
- package/widgets/splitter/props.js +71 -71
- package/widgets/splitter/scenarios.js +182 -182
- package/widgets/splitter/styles.js +41 -41
- package/widgets/splitter/widget.js +455 -455
- package/widgets/stack-navigation/service.js +324 -324
- package/widgets/stack-navigation/widget.js +296 -296
- package/widgets/state-browser/styles.js +19 -19
- package/widgets/state-browser/widget.js +135 -135
- package/widgets/state-browser-dialog/styles.js +100 -100
- package/widgets/state-browser-dialog/widget.js +253 -253
- package/widgets/state-monitor/styles.js +50 -50
- package/widgets/state-monitor/widget.js +324 -324
- package/widgets/switch-on-off/props.js +30 -30
- package/widgets/switch-on-off/scenarios.js +34 -34
- package/widgets/switch-on-off/styles.js +63 -63
- package/widgets/switch-on-off/widget.js +41 -41
- package/widgets/table/helpers.js +160 -160
- package/widgets/table/props.js +658 -658
- package/widgets/table/reducer.js +196 -196
- package/widgets/table/scenarios.js +54 -54
- package/widgets/table/widget.js +253 -253
- package/widgets/table-cell/props.js +145 -145
- package/widgets/table-cell/styles.js +160 -160
- package/widgets/table-cell/widget.js +139 -139
- package/widgets/table-header-drag-manager/styles.js +184 -184
- package/widgets/table-header-drag-manager/widget.js +392 -392
- package/widgets/table-nc/styles.js +100 -100
- package/widgets/table-nc/widget.js +409 -409
- package/widgets/table-row/props.js +73 -73
- package/widgets/table-row/styles.js +82 -82
- package/widgets/table-row/widget.js +207 -207
- package/widgets/text-field/widget.js +18 -18
- package/widgets/text-field-combo/widget.js +21 -21
- package/widgets/text-field-combo-nc/props.js +300 -300
- package/widgets/text-field-combo-nc/scenarios.js +72 -72
- package/widgets/text-field-combo-nc/widget.js +339 -339
- package/widgets/text-field-date-interval/styles.js +37 -37
- package/widgets/text-field-date-interval/widget.js +162 -162
- package/widgets/text-field-nc/props.js +40 -40
- package/widgets/text-field-nc/scenarios.js +67 -67
- package/widgets/text-field-nc/widget.js +14 -14
- package/widgets/text-field-time-interval/styles.js +37 -37
- package/widgets/text-field-time-interval/widget.js +160 -160
- package/widgets/text-field-typed/widget.js +51 -51
- package/widgets/text-field-typed-nc/props.js +81 -81
- package/widgets/text-field-typed-nc/scenarios.js +105 -105
- package/widgets/text-field-typed-nc/styles.js +20 -20
- package/widgets/text-field-typed-nc/widget.js +749 -750
- package/widgets/text-input-info-nc/props.js +62 -62
- package/widgets/text-input-info-nc/widget.js +55 -55
- package/widgets/text-input-nc/props.js +143 -143
- package/widgets/text-input-nc/scenarios.js +44 -44
- package/widgets/text-input-nc/styles.js +242 -242
- package/widgets/text-input-nc/widget.js +234 -234
- package/widgets/ticket/getPath.js +128 -128
- package/widgets/ticket/props.js +181 -181
- package/widgets/ticket/scenarios.js +39 -39
- package/widgets/ticket/styles.js +332 -332
- package/widgets/ticket/ticket-helpers.js +33 -33
- package/widgets/ticket/widget.js +348 -348
- package/widgets/ticket-hover/styles.js +207 -207
- package/widgets/ticket-hover/widget.js +53 -53
- package/widgets/time-gauge/widget.js +64 -64
- package/widgets/tips/styles.js +48 -48
- package/widgets/tips/widget.js +171 -171
- package/widgets/translatable-text-field/styles.js +202 -202
- package/widgets/translatable-text-field/text-field.js +132 -132
- package/widgets/translatable-text-field/widget.js +660 -660
- package/widgets/tree/props.js +246 -246
- package/widgets/tree/scenarios.js +14 -14
- package/widgets/tree/styles.js +142 -142
- package/widgets/tree/widget.js +383 -383
- package/widgets/tree-cell/styles.js +140 -140
- package/widgets/tree-cell/widget.js +100 -100
- package/widgets/tree-row/styles.js +77 -77
- package/widgets/tree-row/widget.js +135 -135
- package/widgets/triangle/props.js +48 -48
- package/widgets/triangle/scenarios.js +33 -33
- package/widgets/triangle/styles.js +92 -92
- package/widgets/triangle/widget.js +36 -36
- package/widgets/well-done/widget.js +170 -170
- package/widgets/widget-doc/reducer.js +68 -68
- package/widgets/widget-doc/styles.js +15 -15
- package/widgets/widget-doc/widget-list.js +25 -25
- package/widgets/widget-doc/widget.js +89 -89
- package/widgets/widget-doc-menu/styles.js +12 -12
- package/widgets/widget-doc-menu/widget.js +79 -79
- package/widgets/widget-doc-preview/parse-code.js +20 -20
- package/widgets/widget-doc-preview/styles.js +77 -77
- package/widgets/widget-doc-preview/widget.js +481 -481
- package/widgets/widget-doc-preview-container/styles.js +60 -60
- package/widgets/widget-doc-preview-container/widget.js +129 -129
- package/widgets/widget-doc-properties/styles.js +41 -41
- package/widgets/widget-doc-properties/widget.js +307 -307
- package/widgets/widget-doc-property/styles.js +75 -75
- package/widgets/widget-doc-property/widget.js +108 -108
- package/widgets/widget-doc-property-control/styles.js +14 -14
- package/widgets/widget-doc-property-control/widget.js +343 -343
- package/widgets/wizard/service.js +2132 -2132
- package/widgets/wizard/styles.js +21 -21
- package/widgets/wizard/widget.js +927 -927
- package/widgets/work-dialog/styles.js +31 -31
- package/widgets/work-dialog/widget.js +162 -162
- package/wizard.js +13 -13
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
//T:2019-02-27
|
|
2
|
-
const ReactDOM = require('react-dom');
|
|
3
|
-
const {Unit} = require('goblin-theme');
|
|
4
|
-
const px = Unit.toPx;
|
|
5
|
-
const n = Unit.toValue;
|
|
6
|
-
|
|
7
|
-
function getFlyingOffset() {
|
|
8
|
-
if (
|
|
9
|
-
window.document.flyingDialogs &&
|
|
10
|
-
window.document.flyingDialogs.length > 0
|
|
11
|
-
) {
|
|
12
|
-
const flyingDialog =
|
|
13
|
-
window.document.flyingDialogs[window.document.flyingDialogs.length - 1];
|
|
14
|
-
const node = ReactDOM.findDOMNode(flyingDialog);
|
|
15
|
-
const rect = node.getBoundingClientRect();
|
|
16
|
-
return {
|
|
17
|
-
left: px(rect.left),
|
|
18
|
-
top: px(rect.top),
|
|
19
|
-
};
|
|
20
|
-
} else {
|
|
21
|
-
return {
|
|
22
|
-
left: '0px',
|
|
23
|
-
top: '0px',
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function getComboRightLocation(
|
|
29
|
-
node,
|
|
30
|
-
triangleSize,
|
|
31
|
-
padding,
|
|
32
|
-
itemCount,
|
|
33
|
-
itemHeight
|
|
34
|
-
) {
|
|
35
|
-
const rect = node.getBoundingClientRect();
|
|
36
|
-
|
|
37
|
-
const left = Unit.add(px(rect.right), triangleSize);
|
|
38
|
-
const height = itemCount * Unit.parse(itemHeight).value;
|
|
39
|
-
const top = Unit.add(px(rect.top - height / 2), Unit.multiply(padding, 2));
|
|
40
|
-
|
|
41
|
-
const offset = getFlyingOffset();
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
left: Unit.sub(left, offset.left),
|
|
45
|
-
top: Unit.sub(top, offset.top),
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Compute the location for a combo-menu.
|
|
50
|
-
function getComboLocation(
|
|
51
|
-
node,
|
|
52
|
-
triangleSize,
|
|
53
|
-
padding,
|
|
54
|
-
itemCount,
|
|
55
|
-
itemWidth,
|
|
56
|
-
itemHeight,
|
|
57
|
-
x,
|
|
58
|
-
y,
|
|
59
|
-
distanceFromEdge
|
|
60
|
-
) {
|
|
61
|
-
const rect = node.getBoundingClientRect();
|
|
62
|
-
|
|
63
|
-
// Compute horizontal position according to component.
|
|
64
|
-
let center;
|
|
65
|
-
if (x) {
|
|
66
|
-
center = px(x);
|
|
67
|
-
} else {
|
|
68
|
-
center = px((rect.left + rect.right) / 2);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Puts the menu under the component if it's in the upper half of the window.
|
|
72
|
-
let topValue, bottomValue;
|
|
73
|
-
if (y) {
|
|
74
|
-
topValue = Unit.add(px(window.innerHeight - y), triangleSize);
|
|
75
|
-
bottomValue = Unit.add(px(y), triangleSize);
|
|
76
|
-
} else {
|
|
77
|
-
topValue = Unit.add(px(window.innerHeight - rect.top), triangleSize);
|
|
78
|
-
bottomValue = Unit.add(px(rect.bottom), triangleSize);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const tv = Unit.parse(triangleSize).value;
|
|
82
|
-
const underMax = px(window.innerHeight - rect.bottom - tv - 20);
|
|
83
|
-
const overMax = px(rect.top - tv - 20);
|
|
84
|
-
const underside = (rect.top + rect.bottom) / 2 < window.innerHeight * 0.67;
|
|
85
|
-
let maxHeight = underside ? underMax : overMax;
|
|
86
|
-
|
|
87
|
-
let width = null;
|
|
88
|
-
if (itemCount && itemHeight) {
|
|
89
|
-
if (!itemWidth) {
|
|
90
|
-
// If itemWidth is undefined, take the width of component.
|
|
91
|
-
itemWidth = Unit.sub(px(rect.width), Unit.multiply(padding, 2));
|
|
92
|
-
itemWidth = Unit.sub(itemWidth, '1px');
|
|
93
|
-
}
|
|
94
|
-
let maxRows = Math.floor(
|
|
95
|
-
Unit.parse(maxHeight).value / Unit.parse(itemHeight).value
|
|
96
|
-
);
|
|
97
|
-
const columnCount = Math.max(Math.ceil(itemCount / maxRows), 1);
|
|
98
|
-
width = px(n(itemWidth) * columnCount);
|
|
99
|
-
maxRows = Math.ceil(itemCount / columnCount);
|
|
100
|
-
maxHeight = px(maxRows * n(itemHeight));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
let triangleShift = null;
|
|
104
|
-
if (distanceFromEdge) {
|
|
105
|
-
const d = horizontalDeclipping(width, center, distanceFromEdge);
|
|
106
|
-
center = d.center;
|
|
107
|
-
triangleShift = d.triangleShift;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const offset = getFlyingOffset();
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
center: Unit.sub(center, offset.left),
|
|
114
|
-
top: underside ? Unit.sub(bottomValue, offset.top) : null,
|
|
115
|
-
bottom: underside ? null : Unit.sub(topValue, offset.top),
|
|
116
|
-
maxHeight: maxHeight,
|
|
117
|
-
width: width,
|
|
118
|
-
menuItemWidth: itemWidth,
|
|
119
|
-
triangleShift: triangleShift,
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Compute the location for a menu.
|
|
124
|
-
function getMenuLocation(triangleSize, x, y) {
|
|
125
|
-
// Compute horizontal position according to component.
|
|
126
|
-
const center = px(x);
|
|
127
|
-
|
|
128
|
-
// Puts the menu under the component if it's in the upper half of the window.
|
|
129
|
-
const topValue = Unit.add(px(window.innerHeight - y), triangleSize);
|
|
130
|
-
const bottomValue = Unit.add(px(y), triangleSize);
|
|
131
|
-
const underside = y < window.innerHeight * 0.67;
|
|
132
|
-
const offset = getFlyingOffset();
|
|
133
|
-
|
|
134
|
-
return {
|
|
135
|
-
center: Unit.sub(center, offset.left),
|
|
136
|
-
top: underside ? Unit.sub(bottomValue, offset.top) : null,
|
|
137
|
-
bottom: underside ? null : Unit.sub(topValue, offset.top),
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Compute the location for a work-dialog.
|
|
142
|
-
function getVerticalDialogLocation(node, triangleSize) {
|
|
143
|
-
const rect = node.getBoundingClientRect();
|
|
144
|
-
|
|
145
|
-
const left = Unit.add(px(rect.right), triangleSize);
|
|
146
|
-
const center = px((rect.top + rect.bottom) / 2);
|
|
147
|
-
|
|
148
|
-
return {
|
|
149
|
-
left: left,
|
|
150
|
-
center: center,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Declipping dialog-modal when it's out of window.
|
|
155
|
-
function horizontalDeclipping(width, center, distanceFromEdge) {
|
|
156
|
-
if (width && center && distanceFromEdge) {
|
|
157
|
-
// Computation is impossible if width is undefined.
|
|
158
|
-
const w = Unit.parse(width).value;
|
|
159
|
-
const c = Unit.parse(center).value;
|
|
160
|
-
const p = Unit.parse(distanceFromEdge).value; // does not touch the edge of the window
|
|
161
|
-
|
|
162
|
-
// Compute triangleShift if dialog is out of left window border.
|
|
163
|
-
const leftShift = w / 2 + p - c;
|
|
164
|
-
if (leftShift > 0) {
|
|
165
|
-
const newCenter = c + leftShift;
|
|
166
|
-
return {triangleShift: px(leftShift), center: px(newCenter)};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Compute triangleShift if dialog is out of right window border.
|
|
170
|
-
const rightShift = c + w / 2 + p - window.innerWidth;
|
|
171
|
-
if (rightShift > 0) {
|
|
172
|
-
const newCenter = c - rightShift;
|
|
173
|
-
return {triangleShift: px(-rightShift), center: px(newCenter)};
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return {triangleShift: px(0), center: center};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Declipping dialog-modal when it's out of window.
|
|
181
|
-
function verticalDeclipping(height, center, distanceFromEdge) {
|
|
182
|
-
if (height && center && distanceFromEdge) {
|
|
183
|
-
// Computation is impossible if height is undefined.
|
|
184
|
-
const h = Unit.parse(height).value;
|
|
185
|
-
const c = Unit.parse(center).value;
|
|
186
|
-
const p = Unit.parse(distanceFromEdge).value; // does not touch the edge of the window
|
|
187
|
-
|
|
188
|
-
// Compute triangleShift if dialog is out of top window border.
|
|
189
|
-
const topShift = h / 2 + p - c;
|
|
190
|
-
if (topShift > 0) {
|
|
191
|
-
const newCenter = c + topShift;
|
|
192
|
-
return {triangleShift: px(-topShift), center: px(newCenter)};
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Compute triangleShift if dialog is out of bottom window border.
|
|
196
|
-
const bottomShift = c + h / 2 + p - window.innerHeight;
|
|
197
|
-
if (bottomShift > 0) {
|
|
198
|
-
const newCenter = c - bottomShift;
|
|
199
|
-
return {
|
|
200
|
-
triangleShift: px(bottomShift),
|
|
201
|
-
center: px(newCenter),
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return {triangleShift: px(0), center: center};
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
//-----------------------------------------------------------------------------
|
|
210
|
-
|
|
211
|
-
module.exports = {
|
|
212
|
-
getComboRightLocation,
|
|
213
|
-
getComboLocation,
|
|
214
|
-
getMenuLocation,
|
|
215
|
-
getVerticalDialogLocation,
|
|
216
|
-
horizontalDeclipping,
|
|
217
|
-
verticalDeclipping,
|
|
218
|
-
};
|
|
1
|
+
//T:2019-02-27
|
|
2
|
+
const ReactDOM = require('react-dom');
|
|
3
|
+
const {Unit} = require('goblin-theme');
|
|
4
|
+
const px = Unit.toPx;
|
|
5
|
+
const n = Unit.toValue;
|
|
6
|
+
|
|
7
|
+
function getFlyingOffset() {
|
|
8
|
+
if (
|
|
9
|
+
window.document.flyingDialogs &&
|
|
10
|
+
window.document.flyingDialogs.length > 0
|
|
11
|
+
) {
|
|
12
|
+
const flyingDialog =
|
|
13
|
+
window.document.flyingDialogs[window.document.flyingDialogs.length - 1];
|
|
14
|
+
const node = ReactDOM.findDOMNode(flyingDialog);
|
|
15
|
+
const rect = node.getBoundingClientRect();
|
|
16
|
+
return {
|
|
17
|
+
left: px(rect.left),
|
|
18
|
+
top: px(rect.top),
|
|
19
|
+
};
|
|
20
|
+
} else {
|
|
21
|
+
return {
|
|
22
|
+
left: '0px',
|
|
23
|
+
top: '0px',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getComboRightLocation(
|
|
29
|
+
node,
|
|
30
|
+
triangleSize,
|
|
31
|
+
padding,
|
|
32
|
+
itemCount,
|
|
33
|
+
itemHeight
|
|
34
|
+
) {
|
|
35
|
+
const rect = node.getBoundingClientRect();
|
|
36
|
+
|
|
37
|
+
const left = Unit.add(px(rect.right), triangleSize);
|
|
38
|
+
const height = itemCount * Unit.parse(itemHeight).value;
|
|
39
|
+
const top = Unit.add(px(rect.top - height / 2), Unit.multiply(padding, 2));
|
|
40
|
+
|
|
41
|
+
const offset = getFlyingOffset();
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
left: Unit.sub(left, offset.left),
|
|
45
|
+
top: Unit.sub(top, offset.top),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Compute the location for a combo-menu.
|
|
50
|
+
function getComboLocation(
|
|
51
|
+
node,
|
|
52
|
+
triangleSize,
|
|
53
|
+
padding,
|
|
54
|
+
itemCount,
|
|
55
|
+
itemWidth,
|
|
56
|
+
itemHeight,
|
|
57
|
+
x,
|
|
58
|
+
y,
|
|
59
|
+
distanceFromEdge
|
|
60
|
+
) {
|
|
61
|
+
const rect = node.getBoundingClientRect();
|
|
62
|
+
|
|
63
|
+
// Compute horizontal position according to component.
|
|
64
|
+
let center;
|
|
65
|
+
if (x) {
|
|
66
|
+
center = px(x);
|
|
67
|
+
} else {
|
|
68
|
+
center = px((rect.left + rect.right) / 2);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Puts the menu under the component if it's in the upper half of the window.
|
|
72
|
+
let topValue, bottomValue;
|
|
73
|
+
if (y) {
|
|
74
|
+
topValue = Unit.add(px(window.innerHeight - y), triangleSize);
|
|
75
|
+
bottomValue = Unit.add(px(y), triangleSize);
|
|
76
|
+
} else {
|
|
77
|
+
topValue = Unit.add(px(window.innerHeight - rect.top), triangleSize);
|
|
78
|
+
bottomValue = Unit.add(px(rect.bottom), triangleSize);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const tv = Unit.parse(triangleSize).value;
|
|
82
|
+
const underMax = px(window.innerHeight - rect.bottom - tv - 20);
|
|
83
|
+
const overMax = px(rect.top - tv - 20);
|
|
84
|
+
const underside = (rect.top + rect.bottom) / 2 < window.innerHeight * 0.67;
|
|
85
|
+
let maxHeight = underside ? underMax : overMax;
|
|
86
|
+
|
|
87
|
+
let width = null;
|
|
88
|
+
if (itemCount && itemHeight) {
|
|
89
|
+
if (!itemWidth) {
|
|
90
|
+
// If itemWidth is undefined, take the width of component.
|
|
91
|
+
itemWidth = Unit.sub(px(rect.width), Unit.multiply(padding, 2));
|
|
92
|
+
itemWidth = Unit.sub(itemWidth, '1px');
|
|
93
|
+
}
|
|
94
|
+
let maxRows = Math.floor(
|
|
95
|
+
Unit.parse(maxHeight).value / Unit.parse(itemHeight).value
|
|
96
|
+
);
|
|
97
|
+
const columnCount = Math.max(Math.ceil(itemCount / maxRows), 1);
|
|
98
|
+
width = px(n(itemWidth) * columnCount);
|
|
99
|
+
maxRows = Math.ceil(itemCount / columnCount);
|
|
100
|
+
maxHeight = px(maxRows * n(itemHeight));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let triangleShift = null;
|
|
104
|
+
if (distanceFromEdge) {
|
|
105
|
+
const d = horizontalDeclipping(width, center, distanceFromEdge);
|
|
106
|
+
center = d.center;
|
|
107
|
+
triangleShift = d.triangleShift;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const offset = getFlyingOffset();
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
center: Unit.sub(center, offset.left),
|
|
114
|
+
top: underside ? Unit.sub(bottomValue, offset.top) : null,
|
|
115
|
+
bottom: underside ? null : Unit.sub(topValue, offset.top),
|
|
116
|
+
maxHeight: maxHeight,
|
|
117
|
+
width: width,
|
|
118
|
+
menuItemWidth: itemWidth,
|
|
119
|
+
triangleShift: triangleShift,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Compute the location for a menu.
|
|
124
|
+
function getMenuLocation(triangleSize, x, y) {
|
|
125
|
+
// Compute horizontal position according to component.
|
|
126
|
+
const center = px(x);
|
|
127
|
+
|
|
128
|
+
// Puts the menu under the component if it's in the upper half of the window.
|
|
129
|
+
const topValue = Unit.add(px(window.innerHeight - y), triangleSize);
|
|
130
|
+
const bottomValue = Unit.add(px(y), triangleSize);
|
|
131
|
+
const underside = y < window.innerHeight * 0.67;
|
|
132
|
+
const offset = getFlyingOffset();
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
center: Unit.sub(center, offset.left),
|
|
136
|
+
top: underside ? Unit.sub(bottomValue, offset.top) : null,
|
|
137
|
+
bottom: underside ? null : Unit.sub(topValue, offset.top),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Compute the location for a work-dialog.
|
|
142
|
+
function getVerticalDialogLocation(node, triangleSize) {
|
|
143
|
+
const rect = node.getBoundingClientRect();
|
|
144
|
+
|
|
145
|
+
const left = Unit.add(px(rect.right), triangleSize);
|
|
146
|
+
const center = px((rect.top + rect.bottom) / 2);
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
left: left,
|
|
150
|
+
center: center,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Declipping dialog-modal when it's out of window.
|
|
155
|
+
function horizontalDeclipping(width, center, distanceFromEdge) {
|
|
156
|
+
if (width && center && distanceFromEdge) {
|
|
157
|
+
// Computation is impossible if width is undefined.
|
|
158
|
+
const w = Unit.parse(width).value;
|
|
159
|
+
const c = Unit.parse(center).value;
|
|
160
|
+
const p = Unit.parse(distanceFromEdge).value; // does not touch the edge of the window
|
|
161
|
+
|
|
162
|
+
// Compute triangleShift if dialog is out of left window border.
|
|
163
|
+
const leftShift = w / 2 + p - c;
|
|
164
|
+
if (leftShift > 0) {
|
|
165
|
+
const newCenter = c + leftShift;
|
|
166
|
+
return {triangleShift: px(leftShift), center: px(newCenter)};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Compute triangleShift if dialog is out of right window border.
|
|
170
|
+
const rightShift = c + w / 2 + p - window.innerWidth;
|
|
171
|
+
if (rightShift > 0) {
|
|
172
|
+
const newCenter = c - rightShift;
|
|
173
|
+
return {triangleShift: px(-rightShift), center: px(newCenter)};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return {triangleShift: px(0), center: center};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Declipping dialog-modal when it's out of window.
|
|
181
|
+
function verticalDeclipping(height, center, distanceFromEdge) {
|
|
182
|
+
if (height && center && distanceFromEdge) {
|
|
183
|
+
// Computation is impossible if height is undefined.
|
|
184
|
+
const h = Unit.parse(height).value;
|
|
185
|
+
const c = Unit.parse(center).value;
|
|
186
|
+
const p = Unit.parse(distanceFromEdge).value; // does not touch the edge of the window
|
|
187
|
+
|
|
188
|
+
// Compute triangleShift if dialog is out of top window border.
|
|
189
|
+
const topShift = h / 2 + p - c;
|
|
190
|
+
if (topShift > 0) {
|
|
191
|
+
const newCenter = c + topShift;
|
|
192
|
+
return {triangleShift: px(-topShift), center: px(newCenter)};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Compute triangleShift if dialog is out of bottom window border.
|
|
196
|
+
const bottomShift = c + h / 2 + p - window.innerHeight;
|
|
197
|
+
if (bottomShift > 0) {
|
|
198
|
+
const newCenter = c - bottomShift;
|
|
199
|
+
return {
|
|
200
|
+
triangleShift: px(bottomShift),
|
|
201
|
+
center: px(newCenter),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return {triangleShift: px(0), center: center};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
//-----------------------------------------------------------------------------
|
|
210
|
+
|
|
211
|
+
module.exports = {
|
|
212
|
+
getComboRightLocation,
|
|
213
|
+
getComboLocation,
|
|
214
|
+
getMenuLocation,
|
|
215
|
+
getVerticalDialogLocation,
|
|
216
|
+
horizontalDeclipping,
|
|
217
|
+
verticalDeclipping,
|
|
218
|
+
};
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
/******************************************************************************/
|
|
2
|
-
|
|
3
|
-
function clipAngleDeg(angle) {
|
|
4
|
-
// Retourne un angle normalisé, c'est-à-dire compris entre 0 et 360°.
|
|
5
|
-
angle = angle % 360.0;
|
|
6
|
-
return angle < 0.0 ? 360.0 + angle : angle;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
function degToRad(angle) {
|
|
10
|
-
return (angle * Math.PI) / 180.0;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function radToDeg(angle) {
|
|
14
|
-
return (angle * 180.0) / Math.PI;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function rotatePointDeg(center, angle, p) {
|
|
18
|
-
return rotatePointRad(center, degToRad(angle), p);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function rotatePointRad(center, angle, p) {
|
|
22
|
-
// Fait tourner un point autour d'un centre.
|
|
23
|
-
// L'angle est exprimé en radians.
|
|
24
|
-
// Un angle positif est horaire (CW), puisque Y va de haut en bas.
|
|
25
|
-
|
|
26
|
-
const a = {x: 0, y: 0};
|
|
27
|
-
const b = {x: 0, y: 0};
|
|
28
|
-
|
|
29
|
-
a.x = p.x - center.x;
|
|
30
|
-
a.y = p.y - center.y;
|
|
31
|
-
|
|
32
|
-
const sin = Math.sin(angle);
|
|
33
|
-
const cos = Math.cos(angle);
|
|
34
|
-
|
|
35
|
-
b.x = a.x * cos - a.y * sin;
|
|
36
|
-
b.y = a.x * sin + a.y * cos;
|
|
37
|
-
|
|
38
|
-
b.x += center.x;
|
|
39
|
-
b.y += center.y;
|
|
40
|
-
|
|
41
|
-
return b;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function computeAngleDegFromPoints(c, a) {
|
|
45
|
-
return radToDeg(computeAngleRadFromXY(a.x - c.x, a.y - c.y));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function computeAngleRadFromPoints(c, a) {
|
|
49
|
-
return computeAngleRadFromXY(a.x - c.x, a.y - c.y);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Calcule l'angle d'un triangle rectangle.
|
|
53
|
-
// L'angle est anti-horaire (CCW), compris entre 0 et 2*PI.
|
|
54
|
-
// Pour obtenir un angle horaire (CW), il suffit de passer -y.
|
|
55
|
-
//
|
|
56
|
-
// ^
|
|
57
|
-
// |
|
|
58
|
-
// y o----o
|
|
59
|
-
// | / |
|
|
60
|
-
// |/)a |
|
|
61
|
-
// ----o----o-->
|
|
62
|
-
// | x
|
|
63
|
-
// |
|
|
64
|
-
function computeAngleRadFromXY(x, y) {
|
|
65
|
-
if (x === 0.0 && y === 0.0) {
|
|
66
|
-
return 0.0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return Math.atan2(y, x);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/******************************************************************************/
|
|
73
|
-
|
|
74
|
-
module.exports = {
|
|
75
|
-
clipAngleDeg,
|
|
76
|
-
degToRad,
|
|
77
|
-
radToDeg,
|
|
78
|
-
rotatePointDeg,
|
|
79
|
-
computeAngleDegFromPoints,
|
|
80
|
-
};
|
|
1
|
+
/******************************************************************************/
|
|
2
|
+
|
|
3
|
+
function clipAngleDeg(angle) {
|
|
4
|
+
// Retourne un angle normalisé, c'est-à-dire compris entre 0 et 360°.
|
|
5
|
+
angle = angle % 360.0;
|
|
6
|
+
return angle < 0.0 ? 360.0 + angle : angle;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function degToRad(angle) {
|
|
10
|
+
return (angle * Math.PI) / 180.0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function radToDeg(angle) {
|
|
14
|
+
return (angle * 180.0) / Math.PI;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function rotatePointDeg(center, angle, p) {
|
|
18
|
+
return rotatePointRad(center, degToRad(angle), p);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function rotatePointRad(center, angle, p) {
|
|
22
|
+
// Fait tourner un point autour d'un centre.
|
|
23
|
+
// L'angle est exprimé en radians.
|
|
24
|
+
// Un angle positif est horaire (CW), puisque Y va de haut en bas.
|
|
25
|
+
|
|
26
|
+
const a = {x: 0, y: 0};
|
|
27
|
+
const b = {x: 0, y: 0};
|
|
28
|
+
|
|
29
|
+
a.x = p.x - center.x;
|
|
30
|
+
a.y = p.y - center.y;
|
|
31
|
+
|
|
32
|
+
const sin = Math.sin(angle);
|
|
33
|
+
const cos = Math.cos(angle);
|
|
34
|
+
|
|
35
|
+
b.x = a.x * cos - a.y * sin;
|
|
36
|
+
b.y = a.x * sin + a.y * cos;
|
|
37
|
+
|
|
38
|
+
b.x += center.x;
|
|
39
|
+
b.y += center.y;
|
|
40
|
+
|
|
41
|
+
return b;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function computeAngleDegFromPoints(c, a) {
|
|
45
|
+
return radToDeg(computeAngleRadFromXY(a.x - c.x, a.y - c.y));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function computeAngleRadFromPoints(c, a) {
|
|
49
|
+
return computeAngleRadFromXY(a.x - c.x, a.y - c.y);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Calcule l'angle d'un triangle rectangle.
|
|
53
|
+
// L'angle est anti-horaire (CCW), compris entre 0 et 2*PI.
|
|
54
|
+
// Pour obtenir un angle horaire (CW), il suffit de passer -y.
|
|
55
|
+
//
|
|
56
|
+
// ^
|
|
57
|
+
// |
|
|
58
|
+
// y o----o
|
|
59
|
+
// | / |
|
|
60
|
+
// |/)a |
|
|
61
|
+
// ----o----o-->
|
|
62
|
+
// | x
|
|
63
|
+
// |
|
|
64
|
+
function computeAngleRadFromXY(x, y) {
|
|
65
|
+
if (x === 0.0 && y === 0.0) {
|
|
66
|
+
return 0.0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return Math.atan2(y, x);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/******************************************************************************/
|
|
73
|
+
|
|
74
|
+
module.exports = {
|
|
75
|
+
clipAngleDeg,
|
|
76
|
+
degToRad,
|
|
77
|
+
radToDeg,
|
|
78
|
+
rotatePointDeg,
|
|
79
|
+
computeAngleDegFromPoints,
|
|
80
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
//T:2019-02-27
|
|
2
|
-
export function isInside(rect, x, y) {
|
|
3
|
-
if (rect && rect.left < rect.right && rect.top < rect.bottom) {
|
|
4
|
-
return (
|
|
5
|
-
x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
|
|
6
|
-
);
|
|
7
|
-
} else {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
1
|
+
//T:2019-02-27
|
|
2
|
+
export function isInside(rect, x, y) {
|
|
3
|
+
if (rect && rect.left < rect.right && rect.top < rect.bottom) {
|
|
4
|
+
return (
|
|
5
|
+
x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
|
|
6
|
+
);
|
|
7
|
+
} else {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
}
|