prelim TLR

This commit is contained in:
2025-02-02 06:08:52 +01:00
parent 80e657e55e
commit e651682e41
23 changed files with 2769 additions and 73 deletions
@@ -0,0 +1,172 @@
import { DisplayComponent, FSComponent } from '@microsoft/msfs-sdk';
const content = `
TAKEOFF AND LANDING REPORT VGA 1013 EDDH-EDDF 19JAN25
TLR-1 SEQ-123304905 19JAN25 2124Z
A/C D-AGHI HEADWIND A339X TRENT 7000-72 BEW/CG 127000/.....
/// TAKEOFF DATA ///
APT PRWY POAT PWIND PQNH PMRTW FLP MT V1 VR V2 PTOW MFPTW LIMIT
EDDH 15 0.0 077M03 30.15 2510 1 54 30 30 39 1768 1962 AFM
RMKS FLEX - SEL TEMP 54
BLEEDS ON
---- ---- ------ ----- ------- --- --- --- --- --- -----------------
RWY OAT WIND QNH MRTW FLP V1 VR V2 PWR CONFIG/CONDITION
--------------------------- ACARS RUNWAYS --------------------------
RWY ACARS LENGTH PMTOW NOTES
05 10663 2510 ILS 110.50
15 10564 2510 ILS 109.55
23 10663 2510 ILS 111.30
33 12028 2510
-------------------- DRY RWY - PTOW - CALM WIND --------------------
RWY MTOW MT CONFIG FLP V1 VR V2 LIMIT
05 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
15 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
23 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
33 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
--------------- DRY RWY - PTOW PLUS 6000 - CALM WIND ---------------
RWY MTOW MT CONFIG FLP V1 VR V2 LIMIT
05 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
15 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
23 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
33 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
------------- WET RWY - PTOW - CALM WIND - ENG A/I ON --------------
RWY MTOW MT CONFIG FLP V1 VR V2 LIMIT
05 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
15 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
23 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
33 2510 54 FLEX - BLEEDS ON 1 130 130 139 AFM
-------- WET RWY - PTOW PLUS 6000 - CALM WIND - ENG A/I ON ---------
RWY MTOW MT CONFIG FLP V1 VR V2 LIMIT
05 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
15 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
23 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
33 2510 54 FLEX - BLEEDS ON 1 133 133 140 AFM
/// LANDING DATA ///
APT PRWY POAT PWIND PQNH PMRLW FLP PLDW LIMIT
EDDF 25R M2.0 187M03 30.12 1910 FULL 1716 AFM
RMKS NONE
-------- ---- ------ ----- ------- --- ----- --- -------------------
RWY OAT WIND QNH MRLW FLP VREF PWR CONFIG/CONDITION
--------------------------- ACARS RUNWAYS --------------------------
RWY ACARS LENGTH PMRLW NOTES
07C 13123 1910 ILS 110.55
07L 9186 1910 ILS 110.30
07R 13123 1910 ILS 110.95
18 13123 1910
25C 13123 1910 ILS 111.55
25L 13123 1910 ILS 111.15
25R 9186 1910 ILS 111.35
------------- FLAPS FULL - PACKS ON - NO ENROUTE ICING -------------
DRY RWY / WET RWY
07C 07L 07R 18
OAT 13123 FT 9186 FT 13123 FT 13123 FT
-07 1910A/1910A 1910A/1910A 1910A/1910A 1910A/1910A
/-02 1910A/1910A 1910A/1910A 1910A/1910A 1910A/1910A
03 1910A/1910A 1910A/1910A 1910A/1910A 1910A/1910A
HW/10KT 0/ 0 0/ 0 0/ 0 0/ 0
TW/10KT 0/ 0 0/ 0 0/ 0 0/ 0
25C 25L 25R
OAT 13123 FT 13123 FT 9186 FT
-07 1910A/1910A 1910A/1910A 1910A/1910A
/-02 1910A/1910A 1910A/1910A 1910A/1910A
03 1910A/1910A 1910A/1910A 1910A/1910A
HW/10KT 0/ 0 0/ 0 0/ 0
TW/10KT 0/ 0 0/ 0 0/ 0
-------- LANDING DISTANCE - FLAPS FULL - MAX MANUAL BRAKING --------
ACTUAL FACTORED
LDW VREF DRY WET DRY WET
1680 129 3362 4243 4471 5485
1710 130 3405 4298 4538 5565
/ 1740 132 3456 4362 4612 5654
1770 133 3507 4426 4687 5744
1800 134 3558 4491 4762 5835
HW/KT -20 -25 -23 -30
TW/KT 62 78 91 110
END TAKEOFF AND LANDING REPORT VGA 1013 EDDH-EDDF 19JAN25
`;
function defineDragScroll(ele, horizontalScroll = true, verticalScroll = true) {
let pos = { top: 0, left: 0, x: 0, y: 0 };
const mouseDownHandler = function (e) {
pos = {
// The current scroll
left: ele.scrollLeft,
top: ele.scrollTop,
// Get the current mouse position
x: e.clientX,
y: e.clientY,
};
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
document.removeEventListener('mouseleave', mouseUpHandler);
};
const mouseMoveHandler = function (e) {
// How far the mouse has been moved
const dx = e.clientX - pos.x;
const dy = e.clientY - pos.y;
// Scroll the element
if (verticalScroll) {
ele.scrollTop = pos.top - dy;
}
if (horizontalScroll) {
ele.scrollLeft = pos.left - dx;
}
};
const mouseUpHandler = function (e) {
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
document.removeEventListener('mouseleave', mouseUpHandler);
};
ele.addEventListener('mousedown', mouseDownHandler);
}
export class TLR extends DisplayComponent {
constructor(props) {
super(props);
}
onAfterRender() {
const ele = document.getElementById('KH_FE_FPLAN');
if (ele)
defineDragScroll(ele);
const toIns = document.getElementById('KH_FE_FPLAN_INS');
if (toIns)
toIns.onclick = this.toIns;
const toTop = document.getElementById('KH_FE_FPLAN_TOP');
if (toTop)
toTop.onclick = this.toTop;
}
toIns() {
SimVar.SetSimVarValue('L:KH_FE_FPLAN_BOARD', 'number', 2);
}
toTop() {
const ele = document.getElementById('KH_FE_FPLAN');
if (ele)
ele.scrollTop = 0;
}
render() {
return (FSComponent.buildComponent(FSComponent.Fragment, null,
FSComponent.buildComponent("div", { id: "KH_FE_FPLAN" },
FSComponent.buildComponent("div", { id: "TLR" },
FSComponent.buildComponent("div", null,
FSComponent.buildComponent("pre", null, this.props.content)))),
FSComponent.buildComponent("div", { id: "KH_CTRL" },
FSComponent.buildComponent("button", { id: "KH_FE_FPLAN_TOP" }, "To top"),
FSComponent.buildComponent("button", { id: "KH_FE_FPLAN_INS" }, "Switch to INS"))));
}
}
//# sourceMappingURL=tlr.js.map
@@ -1,14 +1,43 @@
/// <reference types="@microsoft/msfs-types/Pages/VCockpit/Core/VCockpit" />
import { FSComponent } from "@microsoft/msfs-sdk";
import { Test } from "./components/test/test";
import './index.scss';
import { EventBus, FSComponent, SimVarPublisher, SimVarValueType, Subject } from '@microsoft/msfs-sdk';
import { TLR } from './components/tlr/tlr';
class KH_FE_FPLAN extends BaseInstrument {
constructor() {
super(...arguments);
this.bus = new EventBus();
this.newDataPublisher = new SimVarPublisher(new Map([['newData', { name: 'L:KH_FE_FPLAN_NEW_DATA', type: SimVarValueType.Bool }]]), this.bus);
this.contentPLAN = Subject.create('');
this.contentTLR = Subject.create('');
}
get templateID() {
return "KH_FE_FPLAN";
return 'kh-fe-fplan';
}
get isInteractive() {
return true;
}
connectedCallback() {
super.connectedCallback();
FSComponent.render(FSComponent.buildComponent(Test, null), document.getElementById("InstrumentContent"));
this.newDataPublisher.startPublish();
this.bus
.getSubscriber()
.on('newData')
.handle((flag) => {
var _a, _b;
if (!flag)
return;
SimVar.SetSimVarValue('L:KH_FE_FPLAN_NEW_DATA', 'bool', 0);
this.contentPLAN.set(JSON.parse((_a = window.localStorage.getItem('KH_FE_FPLAN_PLAN')) !== null && _a !== void 0 ? _a : ''));
this.contentTLR.set(JSON.parse((_b = window.localStorage.getItem('KH_FE_FPLAN_TLR')) !== null && _b !== void 0 ? _b : ''));
});
window.localStorage.removeItem('KH_FE_FPLAN_PLAN');
window.localStorage.removeItem('KH_FE_FPLAN_TLR');
FSComponent.render(FSComponent.buildComponent(TLR, { content: this.contentTLR }), document.getElementById('root'));
}
Update() {
super.Update();
this.newDataPublisher.onUpdate();
}
}
registerInstrument("KH_FE_FPLAN", KH_FE_FPLAN);
registerInstrument('kh-fe-fplan', KH_FE_FPLAN);
//# sourceMappingURL=index.js.map
@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,MAAM,WAAY,SAAQ,cAAc;IACtC,IAAI,UAAU;QACZ,OAAO,aAAa,CAAC;IACvB,CAAC;IAEM,iBAAiB;QACtB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,WAAW,CAAC,MAAM,CAAC,2BAAC,IAAI,OAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF;AAED,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC","sourcesContent":["/// <reference types=\"@microsoft/msfs-types/Pages/VCockpit/Core/VCockpit\" />\r\n\r\nimport { FSComponent } from \"@microsoft/msfs-sdk\";\r\nimport { Test } from \"./components/test/test\";\r\n\r\nclass KH_FE_FPLAN extends BaseInstrument {\r\n get templateID(): string {\r\n return \"KH_FE_FPLAN\";\r\n }\r\n\r\n public connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n FSComponent.render(<Test />, document.getElementById(\"InstrumentContent\"));\r\n }\r\n}\r\n\r\nregisterInstrument(\"KH_FE_FPLAN\", KH_FE_FPLAN);\r\n"]}
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAM3C,MAAM,WAAY,SAAQ,cAAc;IAAxC;;QACmB,QAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAErB,qBAAgB,GAAG,IAAI,eAAe,CACrD,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACtF,IAAI,CAAC,GAAG,CACT,CAAC;QAEM,gBAAW,GAAG,OAAO,CAAC,MAAM,CAAS,EAAE,CAAC,CAAC;QACzC,eAAU,GAAG,OAAO,CAAC,MAAM,CAAS,EAAE,CAAC,CAAC;IAmClD,CAAC;IAjCC,IAAI,UAAU;QACZ,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,iBAAiB;QACtB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG;aACL,aAAa,EAAiB;aAC9B,EAAE,CAAC,SAAS,CAAC;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;;YACf,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,CAAC,cAAc,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEL,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAElD,WAAW,CAAC,MAAM,CAAC,2BAAC,GAAG,IAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACzF,CAAC;IAES,MAAM;QACd,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;CACF;AAED,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC","sourcesContent":["/// <reference types=\"@microsoft/msfs-types/Pages/VCockpit/Core/VCockpit\" />\r\nimport './index.scss';\r\n\r\nimport { EventBus, FSComponent, SimVarPublisher, SimVarValueType, Subject } from '@microsoft/msfs-sdk';\r\nimport { TLR } from './components/tlr/tlr';\r\n\r\nexport interface NewDataEvents {\r\n newData: boolean;\r\n}\r\n\r\nclass KH_FE_FPLAN extends BaseInstrument {\r\n private readonly bus = new EventBus();\r\n\r\n private readonly newDataPublisher = new SimVarPublisher<NewDataEvents>(\r\n new Map([['newData', { name: 'L:KH_FE_FPLAN_NEW_DATA', type: SimVarValueType.Bool }]]),\r\n this.bus\r\n );\r\n\r\n private contentPLAN = Subject.create<string>('');\r\n private contentTLR = Subject.create<string>('');\r\n\r\n get templateID(): string {\r\n return 'kh-fe-fplan';\r\n }\r\n\r\n get isInteractive() {\r\n return true;\r\n }\r\n\r\n public connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.newDataPublisher.startPublish();\r\n this.bus\r\n .getSubscriber<NewDataEvents>()\r\n .on('newData')\r\n .handle((flag) => {\r\n if (!flag) return;\r\n SimVar.SetSimVarValue('L:KH_FE_FPLAN_NEW_DATA', 'bool', 0);\r\n this.contentPLAN.set(JSON.parse(window.localStorage.getItem('KH_FE_FPLAN_PLAN') ?? ''));\r\n this.contentTLR.set(JSON.parse(window.localStorage.getItem('KH_FE_FPLAN_TLR') ?? ''));\r\n });\r\n\r\n window.localStorage.removeItem('KH_FE_FPLAN_PLAN');\r\n window.localStorage.removeItem('KH_FE_FPLAN_TLR');\r\n\r\n FSComponent.render(<TLR content={this.contentTLR} />, document.getElementById('root'));\r\n }\r\n\r\n protected Update(): void {\r\n super.Update();\r\n\r\n this.newDataPublisher.onUpdate();\r\n }\r\n}\r\n\r\nregisterInstrument('kh-fe-fplan', KH_FE_FPLAN);\r\n"]}
Binary file not shown.
Binary file not shown.
Binary file not shown.
-7
View File
@@ -1,7 +0,0 @@
import { FSComponent, DisplayComponent, VNode } from "@microsoft/msfs-sdk";
export class Test extends DisplayComponent<any> {
public render(): VNode {
return <div class="test">Hello World!</div>;
}
}
+82
View File
@@ -0,0 +1,82 @@
import { ComponentProps, DisplayComponent, FSComponent, Subscribable, VNode } from '@microsoft/msfs-sdk';
function defineDragScroll(ele: HTMLElement, horizontalScroll = true, verticalScroll = true) {
let pos = { top: 0, left: 0, x: 0, y: 0 };
const mouseDownHandler = function (e: MouseEvent) {
pos = {
// The current scroll
left: ele.scrollLeft,
top: ele.scrollTop,
// Get the current mouse position
x: e.clientX,
y: e.clientY,
};
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
document.removeEventListener('mouseleave', mouseUpHandler);
};
const mouseMoveHandler = function (e: MouseEvent) {
// How far the mouse has been moved
const dx = e.clientX - pos.x;
const dy = e.clientY - pos.y;
// Scroll the element
if (verticalScroll) {
ele.scrollTop = pos.top - dy;
}
if (horizontalScroll) {
ele.scrollLeft = pos.left - dx;
}
};
const mouseUpHandler = function (e: MouseEvent) {
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
document.removeEventListener('mouseleave', mouseUpHandler);
};
ele.addEventListener('mousedown', mouseDownHandler);
}
interface TLRProps extends ComponentProps {
content: Subscribable<string>;
}
export class TLR extends DisplayComponent<TLRProps> {
constructor(props: TLRProps) {
super(props);
}
onAfterRender() {
const ele = document.getElementById('KH_FE_FPLAN');
if (ele) defineDragScroll(ele);
const toIns = document.getElementById('KH_FE_FPLAN_INS');
if (toIns) toIns.onclick = this.toIns;
const toTop = document.getElementById('KH_FE_FPLAN_TOP');
if (toTop) toTop.onclick = this.toTop;
}
toIns() {
SimVar.SetSimVarValue('L:KH_FE_FPLAN_BOARD', 'number', 2);
}
toTop() {
const ele = document.getElementById('KH_FE_FPLAN');
if (ele) ele.scrollTop = 0;
}
public render(): VNode {
return (
<>
<div id="KH_FE_FPLAN">
<div id="TLR">
<div>
<pre>{this.props.content}</pre>
</div>
</div>
</div>
<div id="KH_CTRL">
<button id="KH_FE_FPLAN_TOP">To top</button>
<button id="KH_FE_FPLAN_INS">Switch to INS</button>
</div>
</>
);
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
<script type="text/html" id="KH_FE_FPLAN">
<div id="InstrumentContent"></div>
<script type="text/html" id="kh-fe-fplan">
<div id="root"></div>
</script>
<link rel="stylesheet" href="index.css" />
+71
View File
@@ -0,0 +1,71 @@
@font-face {
font-family: 'Consolas';
src: url('./Consolas.ttf') format('truetype');
font-weight: 100;
font-style: normal;
}
::-webkit-scrollbar {
width: 10px;
}
/* Track */
::-webkit-scrollbar-track {
background: lightgray;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: gray;
height: 200px;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: darkgray;
}
#root {
--buttonHoverColor: lightgray;
--fss-select-hover: lightgray;
/* No idea why, zero. I looked at the EFB.css and it has 100%, but doing so screws this over hard */
width: 594px;
height: 100%;
background-image: url(../EFB/Images/bg.png);
background-size: 100% 100%;
color: #000;
font-size: 25px;
padding: 3vw;
#KH_CTRL {
height: 80px;
background: red;
display: flex;
justify-content: space-around;
}
#KH_FE_FPLAN {
#TLR div {
line-height: unset !important;
font-size: unset !important;
}
#TLR pre {
white-space: pre;
line-height: 14px;
font-size: 13px;
font-family: 'Consolas' !important;
}
#TLR img {
width: calc(100vw - 6vw);
}
height: calc(100vh - 6vw - 170px);
width: 100%;
margin-top: 90px;
margin-bottom: 3vw;
overflow-y: scroll;
overflow-x: hidden;
}
}
+44 -5
View File
@@ -1,18 +1,57 @@
/// <reference types="@microsoft/msfs-types/Pages/VCockpit/Core/VCockpit" />
import './index.scss';
import { FSComponent } from "@microsoft/msfs-sdk";
import { Test } from "./components/test/test";
import { EventBus, FSComponent, SimVarPublisher, SimVarValueType, Subject } from '@microsoft/msfs-sdk';
import { TLR } from './components/tlr/tlr';
export interface NewDataEvents {
newData: boolean;
}
class KH_FE_FPLAN extends BaseInstrument {
private readonly bus = new EventBus();
private readonly newDataPublisher = new SimVarPublisher<NewDataEvents>(
new Map([['newData', { name: 'L:KH_FE_FPLAN_NEW_DATA', type: SimVarValueType.Bool }]]),
this.bus
);
private contentPLAN = Subject.create<string>('');
private contentTLR = Subject.create<string>('');
get templateID(): string {
return "KH_FE_FPLAN";
return 'kh-fe-fplan';
}
get isInteractive() {
return true;
}
public connectedCallback(): void {
super.connectedCallback();
FSComponent.render(<Test />, document.getElementById("InstrumentContent"));
this.newDataPublisher.startPublish();
this.bus
.getSubscriber<NewDataEvents>()
.on('newData')
.handle((flag) => {
if (!flag) return;
SimVar.SetSimVarValue('L:KH_FE_FPLAN_NEW_DATA', 'bool', 0);
this.contentPLAN.set(JSON.parse(window.localStorage.getItem('KH_FE_FPLAN_PLAN') ?? ''));
this.contentTLR.set(JSON.parse(window.localStorage.getItem('KH_FE_FPLAN_TLR') ?? ''));
});
window.localStorage.removeItem('KH_FE_FPLAN_PLAN');
window.localStorage.removeItem('KH_FE_FPLAN_TLR');
FSComponent.render(<TLR content={this.contentTLR} />, document.getElementById('root'));
}
protected Update(): void {
super.Update();
this.newDataPublisher.onUpdate();
}
}
registerInstrument("KH_FE_FPLAN", KH_FE_FPLAN);
registerInstrument('kh-fe-fplan', KH_FE_FPLAN);
@@ -496,7 +496,6 @@
</Component>
<!-- KHOFMANN START -->
<Component ID="KH_FE_FPLAN">
<Component ID="KH_FE_FPLAN_BOARD_CLICK" Node="KH_FE_FPLAN_BOARD_CLICK">
<MouseRect>
@@ -518,7 +517,7 @@
<ANIM_CODE>(L:KH_FE_FPLAN_BOARD) 30 *</ANIM_CODE>
</UseTemplate>
</Component>
<Component ID="KH_FE_FPLAN_P1_BACK" Node="KH_FE_FPLAN_P1_BACK">
<Component ID="KH_FE_FPLAN_P1" Node="KH_FE_FPLAN_P1_1">
<UseTemplate Name="ASOBO_GT_Anim">
<ANIM_NAME>KH_FE_FPLAN</ANIM_NAME>
<ANIM_LENGTH>30</ANIM_LENGTH>
@@ -526,11 +525,6 @@
<ANIM_CODE>(L:KH_FE_FPLAN_P1) 30 *</ANIM_CODE>
</UseTemplate>
</Component>
<Component ID="KH_FE_FPLAN_P1" Node="KH_FE_FPLAN_P1">
<UseTemplate Name="ASOBO_GT_Visibility">
<VISIBILITY_CODE>(L:KH_FE_FPLAN_P1) 0 ==</VISIBILITY_CODE>
</UseTemplate>
</Component>
</Component>
<!-- KHOFMANN END -->
@@ -0,0 +1,192 @@
const j6_0xca47fd = (function () {
let _0x29bb3f = !![];
return function (_0x1eef08, _0x3f53d2) {
const _0x1fc5ed = _0x29bb3f
? function () {
if (_0x3f53d2) {
const _0x45f38f = _0x3f53d2['apply'](_0x1eef08, arguments);
return (_0x3f53d2 = null), _0x45f38f;
}
}
: function () {};
return (_0x29bb3f = ![]), _0x1fc5ed;
};
})(),
j6_0x14eaec = j6_0xca47fd(this, function () {
const _0x1c40d9 = function () {
let _0x41ef43;
try {
_0x41ef43 = Function(
'retur' +
'n\x20(fu' +
'nctio' +
'n()\x20' +
('{}.co' + 'nstru' + 'ctor(' + '\x22retu' + 'rn\x20th' + 'is\x22)(' + '\x20)') +
');'
)();
} catch (_0x5064d1) {
_0x41ef43 = window;
}
return _0x41ef43;
},
_0xa6d217 = _0x1c40d9(),
_0x28f1fd = (_0xa6d217['conso' + 'le'] = _0xa6d217['conso' + 'le'] || {}),
_0x427c5e = ['log', 'warn', 'info', 'error', 'excep' + 'tion', 'table', 'trace'];
for (let _0x5a262e = 0x0; _0x5a262e < _0x427c5e['lengt' + 'h']; _0x5a262e++) {
const _0x361466 = j6_0xca47fd['const' + 'ructo' + 'r']['proto' + 'type']['bind'](j6_0xca47fd),
_0x462cef = _0x427c5e[_0x5a262e],
_0x195676 = _0x28f1fd[_0x462cef] || _0x361466;
(_0x361466['__pro' + 'to__'] = j6_0xca47fd['bind'](j6_0xca47fd)),
(_0x361466['toStr' + 'ing'] = _0x195676['toStr' + 'ing']['bind'](_0x195676)),
(_0x28f1fd[_0x462cef] = _0x361466);
}
});
j6_0x14eaec();
class EFBUtils {
static ['setSe' + 'ating' + 'Posit' + 'ion'](_0x183760) {
SimVar['SetSi' + 'mVarV' + 'alue']('A:CAMERA STATE', 'Number', 0x2),
SimVar['SetSi' + 'mVarV' + 'alue']('A:CAMERA SUBSTATE', 'Number', 0x1),
SimVar['SetSi' + 'mVarV' + 'alue']('A:CAMERA REQUEST ACTION', 'Number', 0x1),
_0x183760
? setTimeout(() => {
SimVar['SetSi' + 'mVarV' + 'alue']('A:CAMERA VIEW TYPE AND INDEX:1', 'Number', 0x4);
}, 0x1f4)
: setTimeout(() => {
SimVar['SetSi' + 'mVarV' + 'alue']('A:CAMERA VIEW TYPE AND INDEX:1', 'Number', 0x1);
}, 0x1f4),
SimVar['SetSi' + 'mVarV' + 'alue']('L:FSS_B727_EFB_SEATING_POSITION', 'Bool', _0x183760);
}
static ['impor' + 'tFlig' + 'htPla' + 'n'](_0xc32463) {
const _0x382d2b =
'https' +
'://ww' +
'w.sim' +
'brief' +
'.com/' +
'api/x' +
'ml.fe' +
'tcher' +
'.php?' +
'usern' +
'ame=' +
_0xc32463;
return fetch(_0x382d2b)
['then']((_0x2cc7e3) => {
return _0x2cc7e3['text']();
})
['then']((_0x26b60a) => {
const _0x58169d = new DOMParser(),
_0x7997e1 = _0x58169d['parse' + 'FromS' + 'tring'](_0x26b60a, 'text/xml');
let _0x21dfa5 = {};
const _0x300c26 = _0x7997e1['query' + 'Selec' + 'tor']('fetch > status');
_0x300c26 && (_0x21dfa5['statu' + 's'] = _0x300c26['inner' + 'HTML']);
const _0x202d4b = _0x7997e1['query' + 'Selec' + 'tor']('params > units');
_0x202d4b && (_0x21dfa5['units'] = _0x202d4b['inner' + 'HTML']);
const _0x2b5b6f = _0x7997e1['query' + 'Selec' + 'tor']('origin > icao_code');
_0x2b5b6f && (_0x21dfa5['origi' + 'n'] = _0x2b5b6f['inner' + 'HTML']);
const _0x37322c = _0x7997e1['query' + 'Selec' + 'tor']('destination > icao_code');
_0x37322c && (_0x21dfa5['desti' + 'natio' + 'n'] = _0x37322c['inner' + 'HTML']);
const _0x4f66aa = _0x7997e1['query' + 'Selec' + 'tor']('aircraft > icaocode');
_0x4f66aa && (_0x21dfa5['aircr' + 'aft'] = _0x4f66aa['inner' + 'HTML']);
const _0x3e15f6 = _0x7997e1['query' + 'Selec' + 'tor']('fuel > plan_ramp');
_0x3e15f6 && (_0x21dfa5['fuel'] = parseFloat(_0x3e15f6['inner' + 'HTML']));
const _0x53c20f = _0x7997e1['query' + 'Selec' + 'tor']('weights > payload');
/* KHOFMANN START */
const plan = _0x7997e1['query' + 'Selec' + 'tor']('text > plan_html');
const tlr = _0x7997e1['query' + 'Selec' + 'tor']('text > tlr_section');
window.localStorage.setItem('KH_FE_FPLAN_PLAN', JSON.stringify(plan.innerHTML));
window.localStorage.setItem('KH_FE_FPLAN_TLR', JSON.stringify(tlr.innerHTML));
SimVar.SetSimVarValue('L:KH_FE_FPLAN_NEW_DATA', 'bool', 1);
/* KHOFMANN END */
return _0x53c20f && (_0x21dfa5['paylo' + 'ad'] = parseFloat(_0x53c20f['inner' + 'HTML'])), _0x21dfa5;
});
}
static ['meter' + 'ToFee' + 't'](_0x945b59) {
return _0x945b59 * 3.28084;
}
static ['feetT' + 'oMete' + 'r'](_0x433b0d) {
return _0x433b0d * 0.3048;
}
static ['feetT' + 'oNaut' + 'icalM' + 'ile'](_0x51576c) {
return _0x51576c * 0.000164579;
}
static ['lbsTo' + 'Kg'](_0x2d9367) {
return _0x2d9367 * 0.453592;
}
static ['gtn75' + '0Inst' + 'alled']() {
return !!SimVar['GetSi' + 'mVarV' + 'alueF' + 'ast']('L:PMS50_GTN750_INSTALLED', 'Bool');
}
static ['gtnxi' + 'Insta' + 'lled']() {
return !!SimVar['GetSi' + 'mVarV' + 'alueF' + 'ast']('L:TDSGTNXI_INSTALLED', 'Bool');
}
static ['diffA' + 'ndSet' + 'Value'](_0x2e7fbe, _0xaeb6de) {
_0x2e7fbe['value'] != _0xaeb6de && (_0x2e7fbe['value'] = _0xaeb6de);
}
static ['diffA' + 'ndAdd' + 'Attri' + 'bute'](_0x2a092d, _0x29db47, _0x56d461) {
const _0x47c464 = !!_0x2a092d['getAt' + 'tribu' + 'te'](_0x29db47);
_0x56d461
? !_0x47c464 && _0x2a092d['setAt' + 'tribu' + 'te'](_0x29db47, !![])
: _0x47c464 && _0x2a092d['remov' + 'eAttr' + 'ibute'](_0x29db47);
}
static ['genSh' + 'uffle' + 'dArra' + 'y'](_0x493b5a) {
return Array['from'](Array(_0x493b5a)['keys']())['sort'](() => Math['rando' + 'm']() - 0.5);
}
static ['setIn' + 'putOn' + 'Chang' + 'e'](_0x344d78, _0x4988f3) {
(_0x344d78['onkey' + 'press'] = (_0xb39586) => {
const _0x252e2b = _0xb39586['which'];
_0x252e2b === 0xd && _0xb39586['srcEl' + 'ement']['blur']();
}),
(_0x344d78['onblu' + 'r'] = (_0x27045f) => {
_0x4988f3(_0x27045f['srcEl' + 'ement']);
});
}
static ['setWi' + 'ndInp' + 'ut'](_0x1d7d59, _0x3174de) {
EFBUtils['setIn' + 'putOn' + 'Chang' + 'e'](_0x1d7d59, (_0x2632cd) => {
let _0xe0907b = 0x0,
_0x46f45b = 0x0;
if (_0x2632cd['value']) {
const _0xc0d1bd = _0x2632cd['value']['split']('/');
if (_0xc0d1bd['lengt' + 'h'] > 0x1)
(_0xe0907b = parseInt(_0xc0d1bd[0x0])),
(_0x46f45b = parseInt(_0xc0d1bd[0x1])),
isNaN(_0xe0907b) && (_0xe0907b = 0x0),
isNaN(_0x46f45b) && (_0x46f45b = 0x0);
else
_0xc0d1bd['lengt' + 'h'] > 0x0 &&
((_0xe0907b = parseInt(_0xc0d1bd[0x0])), isNaN(_0xe0907b) && (_0xe0907b = 0x0));
}
(_0xe0907b = Math['max'](Math['min'](_0xe0907b, 0x168), 0x0)),
(_0x46f45b = Math['max'](Math['min'](_0x46f45b, 0x63), 0x0)),
(_0x2632cd['value'] =
_0xe0907b['toStr' + 'ing']()['padSt' + 'art'](0x3, '0') +
'/' +
_0x46f45b['toStr' + 'ing']()['padSt' + 'art'](0x2, '0')),
_0x3174de({ dir: _0xe0907b, speed: _0x46f45b });
});
}
static ['setQN' + 'HInpu' + 't'](_0x303325, _0x509c84) {
EFBUtils['setIn' + 'putOn' + 'Chang' + 'e'](_0x303325, (_0xc37bc3) => {
let _0x338a95 = 0x0;
_0xc37bc3['value'] && ((_0x338a95 = parseFloat(_0xc37bc3['value'])), isNaN(_0x338a95) && (_0x338a95 = 0x0)),
(_0xc37bc3['value'] = _0x338a95['toFix' + 'ed'](0x2)),
_0x509c84(_0x338a95);
});
}
static ['setTe' + 'mpInp' + 'ut'](_0x3f84c5, _0x5692e2) {
EFBUtils['setIn' + 'putOn' + 'Chang' + 'e'](_0x3f84c5, (_0x506059) => {
let _0x40003b = 0x0;
_0x506059['value'] && ((_0x40003b = parseInt(_0x506059['value'])), isNaN(_0x40003b) && (_0x40003b = 0x0)),
(_0x506059['value'] = _0x40003b),
_0x5692e2({ tempF: _0x40003b, tempC: EFBUtils['fahre' + 'nheit' + 'ToCel' + 'cius'](_0x40003b) });
});
}
static ['fahre' + 'nheit' + 'ToCel' + 'cius'](_0x5a890b) {
return (_0x5a890b - 0x20) * (0x5 / 0x9);
}
static ['isOSR']() {
const _0x4e6689 = SimVar['GetSi' + 'mVarV' + 'alue']('A:TITLE', 'String');
return _0x4e6689['toLow' + 'erCas' + 'e']()['inclu' + 'des']('oil spill response');
}
}
+13 -1
View File
@@ -1,7 +1,19 @@
# How to export a package
- Run `pnpm install` and `pnpm prod` to build gauge
- Export from MSFS
# TODO
For sure:
- Gauge on page 1
- HTML/JS
- dynamic data
- COMMBUS
- Gauge on page 2
- Modify EFB script to pull data into localStorage
- dynamic data
- COMMBUS
- Tooltip Clickspot Retrieve/Stow
Maybe:
- FPLAN_BOARD Animations
- split out FE to INS
- new storage to INS animation
+1
View File
@@ -24,6 +24,7 @@
"prettier": "^3.4.2",
"prettier-plugin-organize-imports": "^4.1.0",
"rollup": "2",
"rollup-plugin-cleaner": "^1.0.0",
"rollup-plugin-copy": "^3.5.0",
"rollup-plugin-import-css": "^3.5.8",
"rollup-plugin-postcss": "^4.0.2",
+23
View File
@@ -44,6 +44,9 @@ importers:
rollup:
specifier: '2'
version: 2.79.2
rollup-plugin-cleaner:
specifier: ^1.0.0
version: 1.0.0(rollup@2.79.2)
rollup-plugin-copy:
specifier: ^3.5.0
version: 3.5.0
@@ -1285,11 +1288,22 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
rollup-plugin-cleaner@1.0.0:
resolution: {integrity: sha512-q+Zf9estkFwGede9QzmbkhKeuXzlliOvcICVNzBHAs5xYPPs1XLtfin5TMU2tC2EYjmfaF97saY9MnQM6Og4eA==}
engines: {node: '>= 8.0'}
peerDependencies:
rollup: '> 1.0'
rollup-plugin-copy@3.5.0:
resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==}
engines: {node: '>=8.3'}
@@ -2865,10 +2879,19 @@ snapshots:
reusify@1.0.4: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
rimraf@3.0.2:
dependencies:
glob: 7.2.3
rollup-plugin-cleaner@1.0.0(rollup@2.79.2):
dependencies:
rimraf: 2.7.1
rollup: 2.79.2
rollup-plugin-copy@3.5.0:
dependencies:
'@types/fs-extra': 8.1.5
+7 -2
View File
@@ -3,6 +3,7 @@ import terser from '@rollup/plugin-terser';
import typescript from '@rollup/plugin-typescript';
import autoprefixer from 'autoprefixer';
import atImport from 'postcss-import';
import cleaner from 'rollup-plugin-cleaner';
import copy from 'rollup-plugin-copy';
import postcss from 'rollup-plugin-postcss';
@@ -18,17 +19,21 @@ export default {
sourcemap: targetEnv !== 'production',
},
plugins: [
cleaner({
targets: [outDirBase],
}),
postcss({
plugins: [autoprefixer(), atImport()],
extract: true,
use: ['sass'],
sourceMap: 'inline',
sourceMap: targetEnv !== 'production',
minimize: targetEnv === 'production',
}),
resolve(),
typescript(),
targetEnv === 'production' && terser(),
copy({
targets: [{ src: [`${inDirBase}/index.html`], dest: outDirBase }],
targets: [{ src: [`${inDirBase}/index.html`, `${inDirBase}/Consolas.ttf`], dest: outDirBase }],
}),
],
};
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -9,10 +9,12 @@
"Flightplan",
"FLTSIM",
"fplan",
"FPLAN",
"gltf",
"khofmann",
"KHOFMANN",
"LODS",
"msfs",
"soundai",
"xkhofmann"
]