1
0
Fork 0
fgdata/Phi/main.js
Torsten Dreyer 0187820627 Phi: refactor knockprops into separate module
Get the knockoutjs to flightgear bridge into a separate module to
make it reusable. First step for providing a simple usecase.
2015-11-19 11:42:29 +01:00

293 lines
9.6 KiB
JavaScript

require.config({
baseUrl : '.',
paths : {
jquery : '3rdparty/jquery/jquery-1.11.2.min',
'jquery-ui' : '3rdparty/jquery/ui',
knockout : '3rdparty/knockout/knockout-3.2.0',
kojqui : '3rdparty/knockout-jqueryui',
sprintf : '3rdparty/sprintf/sprintf.min',
leaflet : '3rdparty/leaflet-0.7.3/leaflet',
geodesic : '3rdparty/leaflet-0.7.3/Leaflet.Geodesic.min',
text : '3rdparty/require/text',
flot : '3rdparty/flot/jquery.flot',
flotresize : '3rdparty/flot/jquery.flot.resize',
flottime : '3rdparty/flot/jquery.flot.time',
fgcommand : 'lib/fgcommand',
props : 'lib/props2',
knockprops : 'lib/knockprops',
sammy : '3rdparty/sammy-latest.min',
aircraft : '../aircraft-dir',
pagedown : '3rdparty/pagedown',
clockpicker : '3rdparty/clockpicker/jquery-clockpicker.min',
stamen: 'http://maps.stamen.com/js/tile.stamen',
},
waitSeconds: 30,
});
require([
'knockout', 'jquery', 'sammy', 'fgcommand', 'themeswitch', 'kojqui/button', 'kojqui/buttonset', 'kojqui/selectmenu',
'jquery-ui/sortable', 'flot', 'leaflet', 'knockprops'
], function(ko, jquery, Sammy, fgcommand) {
ko.utils.knockprops.setAliases([
// time
[
"gmt", "/sim/time/gmt"
], [
"timeWarp", "/sim/time/warp"
],
// flight
[
"pitch", "/orientation/pitch-deg"
], [
"roll", "/orientation/roll-deg"
], [
"heading", "/orientation/heading-magnetic-deg"
], [
"true-heading", "/orientation/heading-deg"
], [
"altitude", "/position/altitude-ft"
], [
"latitude", "/position/latitude-deg"
], [
"longitude", "/position/longitude-deg"
], [
"airspeed", "/velocities/airspeed-kt"
], [
"groundspeed", "/velocities/groundspeed-kt"
], [
"slip", "/instrumentation/slip-skid-ball/indicated-slip-skid"
], [
"cg", "/fdm/jsbsim/inertia/cg-x-in"
], [
"weight", "/fdm/jsbsim/inertia/weight-lbs"
],
// radio settings
[
"com1stn", "/instrumentation/comm/station-name"
], [
"com1use", "/instrumentation/comm/frequencies/selected-mhz"
], [
"com1sby", "/instrumentation/comm/frequencies/standby-mhz"
], [
"com1stn", "/instrumentation/comm/station-name"
], [
"com2stn", "/instrumentation/comm[1]/station-name"
], [
"com2use", "/instrumentation/comm[1]/frequencies/selected-mhz"
], [
"com2sby", "/instrumentation/comm[1]/frequencies/standby-mhz"
], [
"com2stn", "/instrumentation/comm[1]/station-name"
], [
"nav1use", "/instrumentation/nav/frequencies/selected-mhz"
], [
"nav1sby", "/instrumentation/nav/frequencies/standby-mhz"
], [
"nav1stn", "/instrumentation/nav/nav-id"
], [
"nav2use", "/instrumentation/nav[1]/frequencies/selected-mhz"
], [
"nav2sby", "/instrumentation/nav[1]/frequencies/standby-mhz"
], [
"nav2stn", "/instrumentation/nav[1]/nav-id"
], [
"adf1use", "/instrumentation/adf/frequencies/selected-khz"
], [
"adf1sby", "/instrumentation/adf/frequencies/standby-khz"
], [
"adf1stn", "/instrumentation/adf/ident"
], [
"dme1use", "/instrumentation/dme/frequencies/selected-mhz"
], [
"dme1dst", "/instrumentation/dme/indicated-distance-nm"
], [
"xpdrcod", "/instrumentation/transponder/id-code"
],
// weather
[
"ac-wdir", "/environment/wind-from-heading-deg"
], [
"ac-wspd", "/environment/wind-speed-kt"
], [
"ac-visi", "/environment/visibility-m"
], [
"ac-temp", "/environment/temperature-degc"
], [
"ac-dewp", "/environment/dewpoint-degc"
], [
"gnd-wdir", "/environment/config/boundary/entry/wind-from-heading-deg"
], [
"gnd-wspd", "/environment/config/boundary/entry/wind-speed-kt"
], [
"gnd-visi", "/environment/config/boundary/entry/visibility-m"
], [
"gnd-temp", "/environment/config/boundary/entry/temperature-degc"
], [
"gnd-dewp", "/environment/config/boundary/entry/dewpoint-degc"
], [
"metar-valid", "/environment/metar/valid"
],
]);
function PhiViewModel(props) {
var self = this;
self.props = props;
self.widgets = ko.observableArray([
"METAR", "PFD", "Radiostack", "Small Map", "Stopwatch"
]);
self.topics = [
'Aircraft', 'Environment', 'Map', 'Tools', 'Simulator', 'Help',
];
self.selectedTopic = ko.observable();
self.selectedSubtopic = ko.observable();
self.selectTopic = function(topic) {
location.hash = topic;
}
self.refresh = function() {
location.reload();
}
self.doPause = function() {
fgcommand.pause();
}
self.doUnpause = function() {
fgcommand.unpause();
}
jquery("#widgetarea").sortable({
handle : ".widget-handle",
axis : "y",
cursor : "move",
});
// jquery("#widgetarea").disableSelection();
// Client-side routes
Sammy(function() {
this.get('#:topic', function() {
self.selectedTopic(this.params.topic);
self.selectedSubtopic('');
});
this.get('#:topic/:subtopic', function() {
self.selectedTopic(this.params.topic);
self.selectedSubtopic(this.params.subtopic);
});
// empty route
this.get('', function() {
this.app.runRoute('get', '#' + self.topics[0]);
});
}).run();
}
ko.components.register('Aircraft', {
require : 'topics/Aircraft'
});
ko.components.register('Environment', {
require : 'topics/Environment'
});
ko.components.register('Map', {
require : 'topics/Map'
});
ko.components.register('Tools', {
require : 'topics/Tools'
});
ko.components.register('Simulator', {
require : 'topics/Simulator'
});
ko.components.register('Help', {
require : 'topics/Help'
});
ko.components.register('sidebarwidget', {
require : 'widgets/sidebarwidget'
});
ko.components.register('Small Map', {
require : 'widgets/map'
});
ko.components.register('Radiostack', {
require : 'widgets/radiostack'
});
ko.components.register('AircraftMarker', {
require : 'widgets/AircraftMarker'
});
ko.components.register('METAR', {
require : 'widgets/metar'
});
ko.components.register('PFD', {
require : 'widgets/efis'
});
ko.components.register('Stopwatch', {
require : 'widgets/Stopwatch'
});
ko.components.register('dualarcgauge', {
require : 'instruments/DualArcGauge'
})
ko.bindingHandlers.flotchart = {
init : function(element, valueAccessor, allBindings) {
// This will be called when the binding is first applied to an
// element
// Set up any initial state, event handlers, etc. here
var value = valueAccessor() || {};
if (value.hover && typeof (value.hover) === 'function') {
jquery(element).bind("plothover", function(event, pos, item) {
value.hover.call(jquery(this).data("flotplot"), pos, item);
});
}
if (value.click && typeof (value.click) === 'function') {
jquery(element).bind("plotclick", function(event, pos, item) {
value.click.call(jquery(this).data("flotplot"), pos, item);
});
}
},
update : function(element, valueAccessor, allBindings) {
var value = valueAccessor() || {};
var data = ko.unwrap(value.data);
var options = ko.unwrap(value.options);
var plot = jquery.plot(element, data, options);
jquery(element).data("flotplot", plot);
var postUpdate = ko.unwrap(value.postUpdate);
if (postUpdate) {
postUpdate.call(value, element);
}
},
};
ko.applyBindings(new PhiViewModel(), document.getElementById('wrapper'));
jquery("#toolbar").click(function() {
jquery("#content").animate({
top : 0
}, 1000, null, function() {
jquery(".htabs").css('background', '#427EBF url("images/FI_logo.svg") no-repeat scroll left center');
});
jquery("#widgetarea").animate({
top : 29
}, 1000);
});
});