├── .gitattributes
├── .github
├── EmuFlight.png
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ └── configurator-bug-report.md
├── dependabot.yml
├── no-response.yml
├── screenshot.png
├── stale.yml
└── workflows
│ └── build.yml
├── .gitignore
├── .travis.sh
├── .travis.yml
├── LICENSE
├── README.md
├── assets
├── linux
│ ├── copyright
│ ├── emuflight-configurator.desktop
│ └── icon
│ │ └── emu_icon_128.png
├── osx
│ ├── app-icon.icns
│ ├── app-icon.png
│ ├── dmg-background.png
│ └── dmg-background.psd
└── windows
│ ├── UnInst.nsh
│ ├── emu_installer.ico
│ ├── emu_uninstaller.ico
│ └── installer.nsi
├── bintray-template.j2
├── changelog.html
├── codesign_osxapp.sh
├── crowdin.yml
├── gulp-macdmg.js
├── gulpfile.js
├── libraries
├── d3.min.js
├── flightindicators.css
├── jquery.ba-throttle-debounce.min.js
├── jquery.flightindicators.js
├── jquery.liblink.js
├── jquery.nouislider.all.min.js
├── jquery.nouislider.min.css
├── jquery.nouislider.pips.min.css
├── openlayers
│ ├── ol.css
│ └── ol.js
├── q.js
├── semver.js
├── switchery
│ ├── switchery.css
│ └── switchery.js
└── three
│ ├── CanvasRenderer.js
│ ├── Projector.js
│ └── three.min.js
├── locales
├── ca
│ └── messages.json
├── de
│ └── messages.json
├── en
│ └── messages.json
├── es
│ └── messages.json
├── fr
│ └── messages.json
├── gl
│ └── messages.json
├── hr
│ └── messages.json
├── id
│ └── messages.json
├── it
│ └── messages.json
├── ja
│ └── messages.json
├── ko
│ └── messages.json
├── lv
│ └── messages.json
├── pt
│ └── messages.json
├── ru
│ └── messages.json
├── sv
│ └── messages.json
└── zh_CN
│ └── messages.json
├── manifest.json
├── package.json
├── presets
├── presets-HELIO.json
└── presets-nonHELIO.json
├── resources
├── mixercalc
│ ├── cog.png
│ ├── emu-prop-ccw.png
│ └── emu-prop-cw.png
├── models
│ ├── fallback.json
│ ├── fallback.png
│ ├── hex_plus.json
│ ├── hex_x.json
│ ├── quad_atail.json
│ ├── quad_vtail.json
│ ├── quad_x.json
│ ├── tricopter.json
│ ├── y4.json
│ └── y6.json
├── motor_order
│ ├── airplane.svg
│ ├── airplane_reversed.svg
│ ├── atail_quad.svg
│ ├── atail_quad_reversed.svg
│ ├── bicopter.svg
│ ├── bicopter_reversed.svg
│ ├── custom.svg
│ ├── custom_reversed.svg
│ ├── flying_wing.svg
│ ├── flying_wing_reversed.svg
│ ├── hex_p.svg
│ ├── hex_p_reversed.svg
│ ├── hex_x.svg
│ ├── hex_x_reversed.svg
│ ├── octo_flat_p.svg
│ ├── octo_flat_p_reversed.svg
│ ├── octo_flat_x.svg
│ ├── octo_flat_x_reversed.svg
│ ├── octo_x8.svg
│ ├── octo_x8_reversed.svg
│ ├── quad_p.svg
│ ├── quad_p_reversed.svg
│ ├── quad_x.svg
│ ├── quad_x_1234.svg
│ ├── quad_x_1234_reversed.svg
│ ├── quad_x_reversed.svg
│ ├── tri.svg
│ ├── tri_reversed.svg
│ ├── vtail_quad.svg
│ ├── vtail_quad_reversed.svg
│ ├── y4.svg
│ ├── y4_reversed.svg
│ ├── y6.svg
│ └── y6_reversed.svg
└── osd
│ ├── 1
│ ├── bold.mcm
│ ├── bold.png
│ ├── default.mcm
│ ├── default.png
│ ├── digital.mcm
│ ├── digital.png
│ ├── emuflight.mcm
│ ├── emuflight.png
│ ├── extra_large.mcm
│ ├── extra_large.png
│ ├── large.mcm
│ └── large.png
│ └── 2
│ ├── bold.mcm
│ ├── bold.png
│ ├── clarity.mcm
│ ├── clarity.png
│ ├── default.mcm
│ ├── default.png
│ ├── digital.mcm
│ ├── digital.png
│ ├── extra_large.mcm
│ ├── extra_large.png
│ ├── impact.mcm
│ ├── impact.png
│ ├── impact_mini.mcm
│ ├── impact_mini.png
│ ├── kaio.mcm
│ ├── kaio.png
│ ├── large.mcm
│ ├── large.png
│ ├── vision.mcm
│ └── vision.png
├── sign
├── EmuCert.p12
└── entitlements.plist
├── src
├── css
│ ├── dropdown-lists
│ │ ├── LICENSE
│ │ └── css
│ │ │ └── style_lists.css
│ ├── font-awesome
│ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ └── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ ├── main-dark.css
│ ├── main.css
│ ├── opensans_webfontkit
│ │ ├── fonts.css
│ │ ├── generator_config.txt
│ │ ├── opensans-bold-demo.html
│ │ ├── opensans-bold-webfont.eot
│ │ ├── opensans-bold-webfont.svg
│ │ ├── opensans-bold-webfont.ttf
│ │ ├── opensans-bold-webfont.woff
│ │ ├── opensans-bold-webfont.woff2
│ │ ├── opensans-bolditalic-demo.html
│ │ ├── opensans-bolditalic-webfont.eot
│ │ ├── opensans-bolditalic-webfont.svg
│ │ ├── opensans-bolditalic-webfont.ttf
│ │ ├── opensans-bolditalic-webfont.woff
│ │ ├── opensans-bolditalic-webfont.woff2
│ │ ├── opensans-italic-demo.html
│ │ ├── opensans-italic-webfont.eot
│ │ ├── opensans-italic-webfont.svg
│ │ ├── opensans-italic-webfont.ttf
│ │ ├── opensans-italic-webfont.woff
│ │ ├── opensans-italic-webfont.woff2
│ │ ├── opensans-light-demo.html
│ │ ├── opensans-light-webfont.eot
│ │ ├── opensans-light-webfont.svg
│ │ ├── opensans-light-webfont.ttf
│ │ ├── opensans-light-webfont.woff
│ │ ├── opensans-light-webfont.woff2
│ │ ├── opensans-regular-demo.html
│ │ ├── opensans-regular-webfont.eot
│ │ ├── opensans-regular-webfont.svg
│ │ ├── opensans-regular-webfont.ttf
│ │ ├── opensans-regular-webfont.woff
│ │ ├── opensans-regular-webfont.woff2
│ │ ├── opensans-semibold-demo.html
│ │ ├── opensans-semibold-webfont.eot
│ │ ├── opensans-semibold-webfont.svg
│ │ ├── opensans-semibold-webfont.ttf
│ │ ├── opensans-semibold-webfont.woff
│ │ └── opensans-semibold-webfont.woff2
│ ├── tabs-dark
│ │ ├── adjustments-dark.css
│ │ ├── auxiliary-dark.css
│ │ ├── cli-dark.css
│ │ ├── configuration-dark.css
│ │ ├── failsafe-dark.css
│ │ ├── firmware_flasher-dark.css
│ │ ├── gps-dark.css
│ │ ├── help-dark.css
│ │ ├── landing-dark.css
│ │ ├── led_strip-dark.css
│ │ ├── logging-dark.css
│ │ ├── motors-dark.css
│ │ ├── onboard_logging-dark.css
│ │ ├── osd-dark.css
│ │ ├── pid_tuning-dark.css
│ │ ├── ports-dark.css
│ │ ├── power-dark.css
│ │ ├── receiver-dark.css
│ │ ├── sensors-dark.css
│ │ ├── servos-dark.css
│ │ ├── setup-dark.css
│ │ └── transponder-dark.css
│ └── tabs
│ │ ├── adjustments.css
│ │ ├── auxiliary.css
│ │ ├── cli.css
│ │ ├── configuration.css
│ │ ├── failsafe.css
│ │ ├── firmware_flasher.css
│ │ ├── gps.css
│ │ ├── help.css
│ │ ├── landing.css
│ │ ├── led_strip.css
│ │ ├── logging.css
│ │ ├── mixercalc.css
│ │ ├── motors.css
│ │ ├── onboard_logging.css
│ │ ├── osd.css
│ │ ├── pid_tuning.css
│ │ ├── ports.css
│ │ ├── power.css
│ │ ├── privacy_policy.css
│ │ ├── receiver.css
│ │ ├── receiver_msp.css
│ │ ├── sensors.css
│ │ ├── servos.css
│ │ ├── setup.css
│ │ ├── static_tab.css
│ │ ├── transponder.css
│ │ └── vtx.css
├── images
│ ├── CF_settings_black.svg
│ ├── CF_settings_white.svg
│ ├── Helios.png
│ ├── arrow.svg
│ ├── arrows.png
│ ├── become_a_patron_button.png
│ ├── cf_logo_white-old.svg
│ ├── discord-logo-color.svg
│ ├── emu_icon.ico
│ ├── emu_icon_128.png
│ ├── emu_logo_transparent.svg
│ ├── flightindicators
│ │ ├── altitude_pressure.svg
│ │ ├── altitude_ticks.svg
│ │ ├── fi_box.svg
│ │ ├── fi_circle.svg
│ │ ├── fi_needle.svg
│ │ ├── fi_needle_small.svg
│ │ ├── fi_tc_airplane.svg
│ │ ├── heading_mechanics.svg
│ │ ├── heading_yaw.svg
│ │ ├── horizon_back.svg
│ │ ├── horizon_ball.svg
│ │ ├── horizon_circle.svg
│ │ ├── horizon_mechanics.svg
│ │ ├── speed_mechanics.svg
│ │ ├── turn_coordinator.svg
│ │ └── vertical_mechanics.svg
│ ├── flogo_RGB_HEX-1024.svg
│ ├── icons
│ │ ├── cf_failsafe_procedure1-dark.svg
│ │ ├── cf_failsafe_procedure1.svg
│ │ ├── cf_failsafe_procedure2-dark.svg
│ │ ├── cf_failsafe_procedure2.svg
│ │ ├── cf_failsafe_procedure3.svg
│ │ ├── cf_failsafe_procedure4-dark.svg
│ │ ├── cf_failsafe_procedure4.svg
│ │ ├── cf_icon_adjust_grey.svg
│ │ ├── cf_icon_adjust_white.svg
│ │ ├── cf_icon_advanced_grey.svg
│ │ ├── cf_icon_advanced_white.svg
│ │ ├── cf_icon_armed_active.svg
│ │ ├── cf_icon_armed_grey.svg
│ │ ├── cf_icon_backup_grey.svg
│ │ ├── cf_icon_backup_white.svg
│ │ ├── cf_icon_bat_grey.svg
│ │ ├── cf_icon_cli_grey.svg
│ │ ├── cf_icon_cli_white.svg
│ │ ├── cf_icon_config_grey.svg
│ │ ├── cf_icon_config_white.svg
│ │ ├── cf_icon_data_grey.svg
│ │ ├── cf_icon_data_white.svg
│ │ ├── cf_icon_failsafe_active.svg
│ │ ├── cf_icon_failsafe_grey.svg
│ │ ├── cf_icon_failsafe_white.svg
│ │ ├── cf_icon_filter.svg
│ │ ├── cf_icon_flasher_grey.svg
│ │ ├── cf_icon_flasher_white.svg
│ │ ├── cf_icon_gps_grey.svg
│ │ ├── cf_icon_gps_white.svg
│ │ ├── cf_icon_help_grey.svg
│ │ ├── cf_icon_help_white.svg
│ │ ├── cf_icon_info_green.svg
│ │ ├── cf_icon_info_grey.svg
│ │ ├── cf_icon_info_white.svg
│ │ ├── cf_icon_led_grey.svg
│ │ ├── cf_icon_led_white.svg
│ │ ├── cf_icon_link_active.svg
│ │ ├── cf_icon_link_grey.svg
│ │ ├── cf_icon_log_grey.svg
│ │ ├── cf_icon_log_white.svg
│ │ ├── cf_icon_mission_grey.svg
│ │ ├── cf_icon_mission_white.svg
│ │ ├── cf_icon_modes_grey.svg
│ │ ├── cf_icon_modes_white.svg
│ │ ├── cf_icon_motor_grey.svg
│ │ ├── cf_icon_motor_white.svg
│ │ ├── cf_icon_pid_grey.svg
│ │ ├── cf_icon_pid_white.svg
│ │ ├── cf_icon_pitch.svg
│ │ ├── cf_icon_ports_grey.svg
│ │ ├── cf_icon_ports_white.svg
│ │ ├── cf_icon_position.png
│ │ ├── cf_icon_position_nofix.png
│ │ ├── cf_icon_power_grey.svg
│ │ ├── cf_icon_power_white.svg
│ │ ├── cf_icon_quad.svg
│ │ ├── cf_icon_roll.svg
│ │ ├── cf_icon_rx_grey.svg
│ │ ├── cf_icon_rx_white.svg
│ │ ├── cf_icon_sdcard.svg
│ │ ├── cf_icon_sensors_grey.svg
│ │ ├── cf_icon_sensors_white.svg
│ │ ├── cf_icon_servo_grey.svg
│ │ ├── cf_icon_servo_white.svg
│ │ ├── cf_icon_settings_white.svg
│ │ ├── cf_icon_setup_grey.svg
│ │ ├── cf_icon_setup_white.svg
│ │ ├── cf_icon_transponder_grey.svg
│ │ ├── cf_icon_transponder_white.svg
│ │ ├── cf_icon_usb1_white.svg
│ │ ├── cf_icon_usb2_white.svg
│ │ ├── cf_icon_vtx_grey.svg
│ │ ├── cf_icon_vtx_white.svg
│ │ ├── cf_icon_welcome_grey_beta.svg
│ │ ├── cf_icon_welcome_white_beta.svg
│ │ ├── cf_icon_wizard_grey.svg
│ │ ├── cf_icon_wizard_white.svg
│ │ ├── cf_icon_yaw.svg
│ │ ├── close1.svg
│ │ ├── cross2.svg
│ │ ├── icon_bracket.svg
│ │ ├── icon_osd.svg
│ │ ├── icon_osd_white.svg
│ │ ├── scroll.svg
│ │ ├── sensor_acc_off.png
│ │ ├── sensor_acc_on.png
│ │ ├── sensor_baro_off.png
│ │ ├── sensor_baro_on.png
│ │ ├── sensor_gyro_off.png
│ │ ├── sensor_gyro_on.png
│ │ ├── sensor_mag_off.png
│ │ ├── sensor_mag_on.png
│ │ ├── sensor_sat_off.png
│ │ ├── sensor_sat_on.png
│ │ ├── sensor_sonar_off.png
│ │ └── sensor_sonar_on.png
│ ├── light-wide-1-old.svg
│ ├── light-wide-2-old.svg
│ ├── loading-bars.svg
│ ├── loading-spin.svg
│ ├── osd-bg-1.jpg
│ ├── osd-bg-2.png
│ ├── paper-dark.jpg
│ ├── paper.jpg
│ └── pattern.png
├── js
│ ├── Beepers.js
│ ├── CliAutoComplete.js
│ ├── ConfigStorage.js
│ ├── DarkTheme.js
│ ├── Features.js
│ ├── FirmwareCache.js
│ ├── LogoManager.js
│ ├── RateCurve.js
│ ├── backup_restore.js
│ ├── boards.js
│ ├── chromeAppEventPage.js
│ ├── data_storage.js
│ ├── default_huffman_tree.js
│ ├── eventPage.js
│ ├── fc.js
│ ├── gui.js
│ ├── huffman.js
│ ├── injected_methods.js
│ ├── jenkins_loader.js
│ ├── localization.js
│ ├── main.js
│ ├── model.js
│ ├── msp.js
│ ├── msp
│ │ ├── MSPCodes.js
│ │ └── MSPHelper.js
│ ├── peripherals.js
│ ├── port_handler.js
│ ├── port_usage.js
│ ├── protocols
│ │ ├── stm32.js
│ │ └── stm32usbdfu.js
│ ├── release_checker.js
│ ├── serial.js
│ ├── serial_backend.js
│ ├── tabs
│ │ ├── adjustments.js
│ │ ├── auxiliary.js
│ │ ├── cli.js
│ │ ├── configuration.js
│ │ ├── failsafe.js
│ │ ├── firmware_flasher.js
│ │ ├── gps.js
│ │ ├── help.js
│ │ ├── landing.js
│ │ ├── led_strip.js
│ │ ├── logging.js
│ │ ├── map.js
│ │ ├── mixercalc.js
│ │ ├── motors.js
│ │ ├── onboard_logging.js
│ │ ├── osd.js
│ │ ├── pid_tuning.js
│ │ ├── ports.js
│ │ ├── power.js
│ │ ├── receiver.js
│ │ ├── receiver_msp.js
│ │ ├── sensors.js
│ │ ├── servos.js
│ │ ├── setup.js
│ │ ├── setup_osd.js
│ │ ├── static_tab.js
│ │ ├── transponder.js
│ │ └── vtx.js
│ ├── utils
│ │ └── VtxDeviceStatus
│ │ │ ├── Rtc6705DeviceStatus.js
│ │ │ ├── SmartAudioDeviceStatus.js
│ │ │ ├── TrampDeviceStatus.js
│ │ │ ├── VtxDeviceStatus.js
│ │ │ └── VtxDeviceStatusFactory.js
│ └── workers
│ │ └── hex_parser.js
├── main.html
├── support
│ └── svg_model_motors.rb
└── tabs
│ ├── adjustments.html
│ ├── auxiliary.html
│ ├── blank.html
│ ├── cli.html
│ ├── configuration.html
│ ├── failsafe.html
│ ├── firmware_flasher.html
│ ├── gps.html
│ ├── help.html
│ ├── landing.html
│ ├── led_strip.html
│ ├── logging.html
│ ├── map.html
│ ├── mixercalc.html
│ ├── motors.html
│ ├── onboard_logging.html
│ ├── options.html
│ ├── osd.html
│ ├── pid_tuning.html
│ ├── ports.html
│ ├── power.html
│ ├── privacy_policy.html
│ ├── receiver.html
│ ├── receiver_msp.html
│ ├── review.html
│ ├── sensors.html
│ ├── servos.html
│ ├── setup.html
│ ├── setup_osd.html
│ ├── transponder.html
│ └── vtx.html
├── test
├── karma.conf.js
└── tabs
│ └── cli.js
└── yarn.lock
/.gitattributes:
--------------------------------------------------------------------------------
1 | LICENSE text
2 | *.md text
3 | *.js text
4 | *.json text
5 | *.html text
6 | *.css text
7 | *.txt text
8 | *.png -crlf -diff
9 | *.svg -crlf -diff
10 |
--------------------------------------------------------------------------------
/.github/EmuFlight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/.github/EmuFlight.png
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 | patreon: EmuFlight
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/configurator-bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Configurator Bug report
3 | about: Create a report to help us fix bugs in the EmuFlight Configurator
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | ***Do not open issues regarding firmware/flightware nor flight-controller targets in EmuConfigurator issue tracker. Please open such in EmuFlight firmware: https://github.com/emuflight/EmuFlight/issues***
11 |
12 | **Describe the bug**
13 | A clear and concise description of what the bug is.
14 |
15 | **To Reproduce**
16 | Steps to reproduce the behavior:
17 |
18 | **Expected behavior**
19 | A clear and concise description of what you expected to happen.
20 |
21 | **Screenshots**
22 | If applicable, add screenshots to help explain your problem.
23 |
24 | **EmuConfigurator Version**
25 | Please report the EmuConfigurator version and include whether it is a released version or a development version (include build number).
26 |
27 | **Desktop (please complete the following information):**
28 | - OS: [e.g. Windows 10, Windows 7, OSX 11, Ubuntu 20.04 Linux]
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: npm
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 | day: "sunday"
8 | labels:
9 | - dependencies
10 |
--------------------------------------------------------------------------------
/.github/no-response.yml:
--------------------------------------------------------------------------------
1 | # Configuration for probot-no-response - https://github.com/probot/no-response
2 |
3 | # Number of days of inactivity before an Issue is closed for lack of response
4 | daysUntilClose: 1
5 | # Label requiring a response
6 | responseRequiredLabel: Missing Information
7 | # Comment to post when closing an Issue for lack of response. Set to `false` to disable
8 | closeComment: >
9 | This issue has been automatically closed because the information we asked
10 | to be provided when opening it was not supplied by the original author.
11 | With only the information that is currently in the issue, we don't have
12 | enough information to take action.
13 |
--------------------------------------------------------------------------------
/.github/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/.github/screenshot.png
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Configuration for probot-stale - https://github.com/probot/stale
2 |
3 | # Number of days of inactivity before an Issue or Pull Request becomes stale
4 | daysUntilStale: 30
5 |
6 | # Number of days of inactivity before a stale Issue or Pull Request is closed.
7 | # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
8 | daysUntilClose: 7
9 |
10 | # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
11 | exemptLabels:
12 | - BUG
13 | - Feature Request
14 | - Pinned
15 |
16 | # Set to true to ignore issues in a project (defaults to false)
17 | exemptProjects: false
18 |
19 | # Set to true to ignore issues in a milestone (defaults to false)
20 | exemptMilestones: true
21 |
22 | # Label to use when marking as stale
23 | staleLabel: Inactive
24 |
25 | # Comment to post when marking as stale. Set to `false` to disable
26 | markComment: >
27 | This issue / pull request has been automatically marked as stale because it
28 | has not had recent activity. It will be closed if no further activity occurs
29 | within a week.
30 |
31 | # Comment to post when removing the stale label.
32 | # unmarkComment: >
33 | # Your comment here.
34 |
35 | # Comment to post when closing a stale Issue or Pull Request.
36 | closeComment: >
37 | Automatically closing as inactive.
38 |
39 | # Limit the number of actions per hour, from 1-30. Default is 30
40 | limitPerRun: 30
41 |
42 | # Limit to only `issues` or `pulls`
43 | # only: issues
44 |
45 | # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
46 | # pulls:
47 | # daysUntilStale: 30
48 | # markComment: >
49 | # This pull request has been automatically marked as stale because it has not had
50 | # recent activity. It will be closed if no further activity occurs. Thank you
51 | # for your contributions.
52 |
53 | # issues:
54 | # exemptLabels:
55 | # - confirmed
56 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # node.js npm related
2 |
3 | node_modules/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Configurator Build process
9 | cache/
10 | apps/
11 | dist/
12 | debug/
13 | release/
14 |
15 | # OSX
16 | .DS_store
17 |
18 | # artefacts for Visual Studio Code
19 | /.vscode/
20 |
21 | # NetBeans
22 | nbproject/
23 |
24 | # IntelliJ
25 | .idea
26 |
27 | # Eclipse
28 | .project
29 | .settings/
30 |
--------------------------------------------------------------------------------
/.travis.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # travis continuous integration build script for
4 | # EmuConfigurator
5 |
6 | ## build
7 |
8 | # install dependencies
9 | yarn --frozen-lockfile || exit $?
10 | yarn gulp clean-release
11 |
12 | # build releases for each platform
13 | case "${TRAVIS_OS_NAME}" in
14 | linux)
15 | yarn gulp release --chromeos
16 | yarn gulp release --linux64
17 | ;;
18 | osx)
19 | yarn gulp release --osx64
20 | ;;
21 | windows)
22 | yarn gulp mrelease --win32
23 | yarn gulp mrelease --win64
24 | ;;
25 | *)
26 | echo "platform ${TRAVIS_OS_NAME} not supported for now."
27 | exit 2
28 | ;;
29 | esac
30 |
31 | ls -lsa release/
32 |
33 | ## bintray
34 |
35 | # get version string from 'package.json'
36 | export CONFIGURATOR_VERSION="$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[ ",]//g')"
37 |
38 | # compose string to reference the package
39 | export PACKAGE_VERSION="${CONFIGURATOR_VERSION}-${TRAVIS_BUILD_NUMBER}-${TRAVIS_OS_NAME}-${TRAVIS_BRANCH}"
40 |
41 | # process template for pushing to bintray ('deploy' step on travis will pick it up)
42 | j2 bintray-template.j2 -o bintray-conf.json
43 |
44 | exit 0
45 |
--------------------------------------------------------------------------------
/assets/linux/copyright:
--------------------------------------------------------------------------------
1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2 | Upstream-Name: Emuflight Configurator
3 | Source: https://github.com/emuflight/EmuConfigurator
4 |
5 | Files: *
6 | Copyright: Copyright 2018 The Emuflight open source project
7 | License: GPL-3
8 |
9 | License: GPL-3
10 | This program is free software: you can redistribute it and/or modify it under
11 | the terms of the GNU General Public License as published by the Free Software
12 | Foundation, either version 3 of the License, or (at your option) any later
13 | version.
14 | .
15 | This program is distributed in the hope that it will be useful, but WITHOUT ANY
16 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17 | PARTICULAR PURPOSE. See the GNU General Public License for more details.
18 | .
19 | You should have received a copy of the GNU General Public License along with
20 | this program. If not, see
for EmuFlight
4 | #
5 |
6 | #
7 | # variables and composition
8 | #
9 |
10 | CERTIFICATE_P12="sign/EmuCert.p12"
11 | KEYCHAIN="build.keychain"
12 | ENTITLEMENTS="sign/entitlements.plist"
13 | APP_PATH="apps/emuflight-configurator/osx64/emuflight-configurator.app"
14 |
15 | #
16 | # sanity checks
17 | #
18 |
19 | if [ -z "${APP_IDENTITY}" ]; then
20 | echo "required variable APP_IDENTITY not set"
21 | exit 2
22 | fi
23 |
24 | if [ -z "${BUNDLE_ID}" ]; then
25 | echo "required variable BUNDLE_ID not set"
26 | exit 3
27 | fi
28 |
29 | if [ ! -f "${ENTITLEMENTS}" ]; then
30 | echo "unable to find entitlement at: ${ENTITLEMENTS}"
31 | exit 4
32 | fi
33 |
34 | #
35 | # keychain
36 | #
37 |
38 | if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
39 | security create-keychain -p "${KEYC_PASS}" "${KEYCHAIN}"
40 | security default-keychain -s "${KEYCHAIN}"
41 | security unlock-keychain -p "${KEYC_PASS}" "${KEYCHAIN}"
42 | echo "import cert to keychain"
43 | security import "${CERTIFICATE_P12}" -k "${KEYCHAIN}" -P "${CERT_PASS}" -T /usr/bin/codesign || exit 3
44 | security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "${KEYC_PASS}" "${KEYCHAIN}"
45 | else
46 | echo "not running on travis and/or osx. skipping 'keychain' part"
47 | fi
48 |
49 | #
50 | # extended attributes
51 | #
52 |
53 | # TODO: check if this is any effective
54 | echo "recursively remove quarantine attribute"
55 | xattr -r -d com.apple.quarantine "${APP_PATH}"
56 |
57 | #
58 | # bundle id
59 | #
60 |
61 | /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${BUNDLE_ID}" "${APP_PATH}/Contents/Info.plist"
62 |
63 | #
64 | # signing
65 | #
66 |
67 | codesign --verbose --force --sign "${APP_IDENTITY}" --timestamp --entitlements "${ENTITLEMENTS}" --deep "${APP_PATH}"
68 | codesign --verbose --verify --strict --deep "${APP_PATH}"
69 |
70 | #
71 | # check
72 | #
73 |
74 | # should result in 'satisfies its Designated Requirement' at least
75 | spctl --assess --type execute "${APP_PATH}" || true
76 | spctl --assess --verbose=4 "${APP_PATH}" || true
77 |
78 | exit 0
79 |
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | #
2 | # Files configuration
3 | #
4 | "preserve_hierarchy": false
5 |
6 | files: [
7 | {
8 | #
9 | # Source files filter
10 | # e.g. "/resources/en/*.json"
11 | #
12 | "source" : "/locales/en/messages.json",
13 |
14 | #
15 | # where translations live
16 | # e.g. "/resources/%two_letters_code%/%original_file_name%"
17 | #
18 | "translation" : "/locales/%two_letters_code%/%original_file_name%",
19 |
20 | #
21 | # Often software projects have custom names for locale directories. crowdin-cli allows you to map your own languages to be understandable by Crowdin.
22 | #
23 | "languages_mapping" : {
24 | "two_letters_code" : {
25 | "es-ES" : "es",
26 | "pt-PT" : "pt",
27 | "sv-SE" : "sv",
28 | "zh-CN" : "zh_CN"
29 | }
30 | }
31 | }
32 | ]
33 |
--------------------------------------------------------------------------------
/gulp-macdmg.js:
--------------------------------------------------------------------------------
1 | var appdmg = require('appdmg');
2 | var through = require('through2');
3 | var PluginError = require('plugin-error');
4 | var log = require('fancy-log');
5 |
6 | var PLUGIN_NAME = 'gulp-macdmg';
7 |
8 | module.exports = function(options) {
9 | var stream = through.obj(function(file, encoding, next) {
10 | next();
11 | }, function(callback) {
12 | var self = this;
13 | var ee = appdmg(options);
14 |
15 | ee.on('progress', function(info) {
16 | log(info.current + '/' + info.total + ' ' + info.type + ' ' + (info.title || info.status));
17 | });
18 |
19 | ee.on('error', function(err) {
20 | self.emit('error', new PluginError(PLUGIN_NAME, err));
21 | callback();
22 | });
23 |
24 | ee.on('finish', callback);
25 | });
26 |
27 | // returning the file stream
28 | stream.resume();
29 | return stream;
30 | };
31 |
--------------------------------------------------------------------------------
/libraries/flightindicators.css:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery Flight Indicators plugin
3 | * By Sébastien Matton (seb_matton@hotmail.com)
4 | * Published under GPLv3 License.
5 | *
6 | * https://github.com/sebmatton/jQuery-Flight-Indicators
7 | */
8 |
9 | /* Global block of an indicator*/
10 | div.instrument {
11 | width: 250px;
12 | height: 250px;
13 | position: relative;
14 | display: inline-block;
15 | overflow: hidden;
16 | }
17 |
18 | /* The box containing any element of an indicator */
19 | div.instrument .box {
20 | position: absolute;
21 | top: 0;
22 | left: 0;
23 | width: 100%;
24 | height: 100%;
25 | }
26 |
27 | /* Default transformations */
28 |
29 | div.instrument.attitude div.roll {
30 | transform: rotate(0deg);
31 | }
32 | div.instrument.attitude div.roll div.pitch {
33 | top: 0%;
34 | }
35 | div.instrument.heading div.yaw {
36 | transform: rotate(0deg);
37 | }
38 | div.instrument.vario div.vario {
39 | transform: rotate(0deg);
40 | }
41 | div.instrument.speed div.airspeed {
42 | transform: rotate(90deg);
43 | }
44 | div.instrument.altimeter div.pressure {
45 | transform: rotate(40deg);
46 | }
47 | div.instrument.altimeter div.needle {
48 | transform: rotate(90deg);
49 | }
50 | div.instrument.altimeter div.needleSmall {
51 | transform: rotate(90deg);
52 | }
53 |
--------------------------------------------------------------------------------
/libraries/jquery.ba-throttle-debounce.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery throttle / debounce - v1.1 - 3/7/2010
3 | * http://benalman.com/projects/jquery-throttle-debounce-plugin/
4 | *
5 | * Copyright (c) 2010 "Cowboy" Ben Alman
6 | * Dual licensed under the MIT and GPL licenses.
7 | * http://benalman.com/about/license/
8 | */
9 | (function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
--------------------------------------------------------------------------------
/libraries/jquery.nouislider.min.css:
--------------------------------------------------------------------------------
1 | /*! noUiSlider - 7.0.9 - 2014-10-08 16:49:45 */
2 |
3 |
4 | .noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-base{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed}
--------------------------------------------------------------------------------
/libraries/jquery.nouislider.pips.min.css:
--------------------------------------------------------------------------------
1 | /*! noUiSlider - 7.0.9 - 2014-10-08 16:49:45 */
2 |
3 |
4 | .noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;font:400 12px Arial;color:#999}.noUi-value{width:40px;position:absolute;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-large,.noUi-marker-sub{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:50px;top:100%;left:0;width:100%}.noUi-value-horizontal{margin-left:-20px;padding-top:20px}.noUi-value-horizontal.noUi-value-sub{padding-top:15px}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{width:15px;margin-left:20px;margin-top:-5px}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}
--------------------------------------------------------------------------------
/libraries/switchery/switchery.css:
--------------------------------------------------------------------------------
1 | /*
2 | *
3 | * Main stylesheet for Switchery.
4 | * http://abpetkov.github.io/switchery/
5 | *
6 | */
7 |
8 | /* Switchery defaults. */
9 |
10 | .switchery {
11 | background-color: #fff;
12 | border: 1px solid #fff;
13 | border-radius: 20px;
14 | cursor: pointer;
15 | display: inline-block;
16 | height: 14px;
17 | position: relative;
18 | vertical-align: middle;
19 | width: 45px;
20 | z-index:1000;
21 | opacity:1 !important;
22 | -moz-user-select: none;
23 | -khtml-user-select: none;
24 | -webkit-user-select: none;
25 | -ms-user-select: none;
26 | user-select: none;
27 | box-sizing: content-box;
28 | background-clip: content-box;
29 | }
30 |
31 | .switchery > small {
32 | background: #fff;
33 | border-radius: 100%;
34 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
35 | height: 14px;
36 | position: absolute;
37 | top: 0;
38 | width: 14px;
39 | }
40 |
41 | .switcherymid {
42 | background-color: #fff;
43 | border: 1px solid #fff;
44 | border-radius: 20px;
45 | cursor: pointer;
46 | display: inline-block;
47 | height: 14px;
48 | position: relative;
49 | vertical-align: middle;
50 | width: 35px;
51 |
52 | -moz-user-select: none;
53 | -khtml-user-select: none;
54 | -webkit-user-select: none;
55 | -ms-user-select: none;
56 | user-select: none;
57 | box-sizing: content-box;
58 | background-clip: content-box;
59 | }
60 |
61 | .switcherymid > small {
62 | background: #fff;
63 | border-radius: 100%;
64 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
65 | height: 14px;
66 | position: absolute;
67 | top: 0;
68 | width: 14px;
69 | }
70 |
71 | /* Switchery sizes. */
72 |
73 | .switchery-small {
74 | border: none !important;
75 | border-radius: 20px;
76 | height: 10px;
77 | width: 20px;
78 | margin-top:-3px;
79 | margin-right:3px;
80 | }
81 |
82 | .switchery-small > small {
83 | height: 10px;
84 | width: 10px;
85 | }
86 |
87 | .switchery-large {
88 | border-radius: 40px;
89 | height: 40px;
90 | width: 66px;
91 | }
92 |
93 | .switchery-large > small {
94 | height: 40px;
95 | width: 40px;
96 | }
97 |
98 |
99 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "minimum_chrome_version": "49",
4 | "version": "0.4.3",
5 | "max_msp": "1.54.0",
6 | "COMMENT": "MAX_MSP required!!!!",
7 | "author": "Emuflight Team",
8 | "name": "Emuflight Configurator",
9 | "short_name": "EmuConfigurator",
10 | "description": "Emuflight Configurator is a crossplatform configuration tool for the Emuflight flight control system.",
11 | "offline_enabled": true,
12 | "default_locale": "en",
13 | "app": {
14 | "background": {
15 | "scripts": ["js/chromeAppEventPage.js"],
16 | "persistent": false
17 | }
18 | },
19 | "permissions": [
20 | "https://api.openstreetmap.org/",
21 | "https://*.github.com/",
22 | "https://*.githubusercontent.com/",
23 | "serial",
24 | "usb",
25 | "storage",
26 | "fileSystem",
27 | "fileSystem.write",
28 | "fileSystem.retainEntries",
29 | "notifications",
30 | "alwaysOnTopWindows",
31 | {
32 | "usbDevices": [
33 | {
34 | "vendorId": 1155,
35 | "productId": 57105
36 | },
37 | {
38 | "vendorId": 10473,
39 | "productId": 393
40 | },
41 | {
42 | "vendorId": 12619,
43 | "productId": 262
44 | }
45 | ]
46 | },
47 | "webview",
48 | "unlimitedStorage"
49 | ],
50 | "sockets": {
51 | "tcp": {
52 | "connect": "*:*"
53 | }
54 | },
55 | "webview": {
56 | "partitions": [
57 | {
58 | "name": "map",
59 | "accessible_resources": [
60 | "tabs/map.html",
61 | "js/tabs/map.js",
62 | "/js/libraries/openlayers/ol.css",
63 | "/js/libraries/openlayers/ol.js",
64 | "/images/icons/cf_icon_position.png",
65 | "/images/icons/cf_icon_position_nofix.png"
66 | ]
67 | }
68 | ]
69 | },
70 | "icons": {
71 | "128": "images/emu_icon_128.png"
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/resources/mixercalc/cog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/mixercalc/cog.png
--------------------------------------------------------------------------------
/resources/mixercalc/emu-prop-ccw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/mixercalc/emu-prop-ccw.png
--------------------------------------------------------------------------------
/resources/mixercalc/emu-prop-cw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/mixercalc/emu-prop-cw.png
--------------------------------------------------------------------------------
/resources/models/fallback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/models/fallback.png
--------------------------------------------------------------------------------
/resources/osd/1/bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/bold.png
--------------------------------------------------------------------------------
/resources/osd/1/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/default.png
--------------------------------------------------------------------------------
/resources/osd/1/digital.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/digital.png
--------------------------------------------------------------------------------
/resources/osd/1/emuflight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/emuflight.png
--------------------------------------------------------------------------------
/resources/osd/1/extra_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/extra_large.png
--------------------------------------------------------------------------------
/resources/osd/1/large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/1/large.png
--------------------------------------------------------------------------------
/resources/osd/2/bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/bold.png
--------------------------------------------------------------------------------
/resources/osd/2/clarity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/clarity.png
--------------------------------------------------------------------------------
/resources/osd/2/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/default.png
--------------------------------------------------------------------------------
/resources/osd/2/digital.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/digital.png
--------------------------------------------------------------------------------
/resources/osd/2/extra_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/extra_large.png
--------------------------------------------------------------------------------
/resources/osd/2/impact.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/impact.png
--------------------------------------------------------------------------------
/resources/osd/2/impact_mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/impact_mini.png
--------------------------------------------------------------------------------
/resources/osd/2/kaio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/kaio.png
--------------------------------------------------------------------------------
/resources/osd/2/large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/large.png
--------------------------------------------------------------------------------
/resources/osd/2/vision.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/resources/osd/2/vision.png
--------------------------------------------------------------------------------
/sign/EmuCert.p12:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/sign/EmuCert.p12
--------------------------------------------------------------------------------
/sign/entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.device.serial
8 |
9 | com.apple.security.files.user-selected.read-write
10 |
11 | com.apple.security.network.client
12 |
13 | com.apple.security.automation.apple-events
14 |
15 | com.apple.security.cs.allow-dyld-environment-variables
16 |
17 | com.apple.security.cs.allow-jit
18 |
19 | com.apple.security.cs.allow-unsigned-executable-memory
20 |
21 | com.apple.security.cs.disable-executable-page-protection
22 |
23 | com.apple.security.cs.disable-library-validation
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/css/dropdown-lists/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012-2013 Thibaut Courouble
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/src/css/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/src/css/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/src/css/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/src/css/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/src/css/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/generator_config.txt:
--------------------------------------------------------------------------------
1 | # Font Squirrel Font-face Generator Configuration File
2 | # Upload this file to the generator to recreate the settings
3 | # you used to create these fonts.
4 |
5 | {"mode":"optimal","formats":["ttf","woff","woff2","eotz"],"tt_instructor":"default","fix_vertical_metrics":"Y","fix_gasp":"xy","add_spaces":"Y","add_hyphens":"Y","fallback":"none","fallback_custom":"100","options_subset":"basic","subset_custom":"","subset_custom_range":"","subset_ot_features_list":"","css_stylesheet":"stylesheet.css","filename_suffix":"-webfont","emsquare":"2048","spacing_adjustment":"0"}
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bold-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bold-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bold-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bold-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bold-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bolditalic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bolditalic-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bolditalic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bolditalic-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bolditalic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bolditalic-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-bolditalic-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-bolditalic-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-italic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-italic-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-italic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-italic-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-italic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-italic-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-italic-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-italic-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-light-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-light-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-light-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-light-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-light-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-light-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-light-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-regular-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-regular-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-regular-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-regular-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-regular-webfont.woff2
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-semibold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-semibold-webfont.eot
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-semibold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-semibold-webfont.ttf
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-semibold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-semibold-webfont.woff
--------------------------------------------------------------------------------
/src/css/opensans_webfontkit/opensans-semibold-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/css/opensans_webfontkit/opensans-semibold-webfont.woff2
--------------------------------------------------------------------------------
/src/css/tabs-dark/adjustments-dark.css:
--------------------------------------------------------------------------------
1 | .tab-adjustments .adjustment:nth-child(odd) {
2 | background-color: #2f2f2f;
3 | }
4 |
5 | .tab-adjustments .adjustments {
6 | background-color: #393b3a;
7 | }
8 |
9 | .tab-adjustments .adjustments td {
10 | border-top: 1px solid #00000000;
11 | border-bottom: 1px solid #00000000;
12 | }
13 |
14 | .tab-adjustments .adjustment select {
15 | background-color: #3a3a3a;
16 | color: white;
17 | }
18 |
19 | .tab-adjustments .noUi-background {
20 | background-color: #858585;
21 | }
22 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/auxiliary-dark.css:
--------------------------------------------------------------------------------
1 | .tab-auxiliary .toolbox {
2 | color: white;
3 | }
4 |
5 | .tab-auxiliary .mode {
6 | background-color: #393b3a;
7 | }
8 |
9 | .tab-auxiliary .mode .info {
10 | background-color: #9e9e9e;
11 | color: white;
12 | }
13 |
14 | .tab-auxiliary .ranges {
15 | border-bottom: 5px solid #8a8a8a;
16 | background-color: #676767;
17 | }
18 |
19 | .tab-auxiliary .range {
20 | background-color: #484848;
21 | }
22 |
23 | .tab-auxiliary .link {
24 | background-color: #484848;
25 | }
26 |
27 | .tab-auxiliary .range .channel,.logic,.linkedTo {
28 | background-color: #3a3a3a;
29 | color: white;
30 | }
31 |
32 | .tab-auxiliary .buttons a {
33 | background-color: #333333;
34 | color: white;
35 | }
36 |
37 | .tab-auxiliary .buttons a:hover {
38 | background-color: #393b3a;
39 | }
40 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/cli-dark.css:
--------------------------------------------------------------------------------
1 | .tab-cli textarea[name='commands']::placeholder {
2 | color: silver;
3 | }
4 |
5 | .tab-cli textarea[name='commands'] {
6 | background: rgb(32, 31, 31);
7 | color: rgb(219, 219, 219);
8 | }
9 |
10 | /* AutoComplete */
11 | .cli-textcomplete-dropdown {
12 | background-color: #393b3a;
13 | }
14 | .cli-textcomplete-dropdown a {
15 | color: rgb(219, 219, 219);
16 | }
17 | .cli-textcomplete-dropdown .active {
18 | background-color: var(--quietHeader);
19 | }
20 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/configuration-dark.css:
--------------------------------------------------------------------------------
1 | .tab-configuration .mixerPreview {
2 | background-color: #393b3a;
3 | }
4 |
5 | .tab-configuration .gui_box span {
6 | color: rgb(230, 230, 230);
7 | }
8 |
9 | .tab-configuration input,
10 | .tab-configuration select {
11 | background-color: #3a3a3a;
12 | color: rgb(230, 230, 230);
13 | }
14 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/failsafe-dark.css:
--------------------------------------------------------------------------------
1 | .tab-failsafe .number input {
2 | background-color: #3a3a3a;
3 | color: white;
4 | }
5 |
6 | .tab-failsafe .number input:disabled {
7 | background-color: #393b3a;
8 | color: grey;
9 | }
10 |
11 | .tab-failsafe .radioarea {
12 | background-color: #393b3a;
13 | }
14 |
15 | .tab-failsafe .gui_box span {
16 | color: white;
17 | }
18 |
19 | .tab-failsafe .stage1 select {
20 | background-color: #3a3a3a;
21 | color: white;
22 | }
23 |
24 | .tab-failsafe .modename {
25 | background-color: #393b3a;
26 |
27 | }
28 |
29 | .tab-failsafe .switchMode {
30 | background-color: #3a3a3a;
31 | color: white;
32 | }
33 |
34 | .tab-failsafe .pro1 {
35 | background-image: url(../../images/icons/cf_failsafe_procedure1-dark.svg);
36 | }
37 |
38 | .tab-failsafe .pro2 {
39 | background-image: url(../../images/icons/cf_failsafe_procedure2-dark.svg);
40 | }
41 |
42 | .tab-failsafe .pro4 {
43 | background-image: url(../../images/icons/cf_failsafe_procedure4-dark.svg);
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/firmware_flasher-dark.css:
--------------------------------------------------------------------------------
1 | .btn .disabled {
2 | background-color: #393b3a;
3 | }
4 |
5 | .gui_note .gui_box_titlebar {
6 | color: black;
7 | }
8 |
9 | .tab-firmware_flasher .options select {
10 | background-color: #3a3a3a;
11 | color: white;
12 | }
13 |
14 | .tab-firmware_flasher .options .description {
15 | color: #b9b9b9;
16 | }
17 |
18 | .tab-firmware_flasher .options .manual_baud_rate select {
19 | background-color: #3a3a3a;
20 | color: white;
21 | }
22 |
23 | .tab-firmware_flasher .release_info .title {
24 | border-bottom: 1px solid #9c9c9c;
25 | }
26 |
27 | .tab-firmware_flasher .release_info .target {
28 | color: #98ddff;
29 | }
30 |
31 | .tab-firmware_flasher .cf_table td {
32 | border-bottom: solid 1px #4f4f4f;
33 | }
34 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/gps-dark.css:
--------------------------------------------------------------------------------
1 | .tab-gps .GPS_info .head, .tab-gps .GPS_signal_strength .head {
2 | background-color: #393b3a;
3 | }
4 |
5 | .tab-gps #loadmap .controls {
6 | background-color: #393b3a;
7 | }
8 |
9 | .tab-gps #loadmap .controls a {
10 | background-color: #393b3a;
11 | }
12 |
13 | .tab-gps #loadmap .controls a:hover {
14 | background-color: #393b3a;
15 | }
16 |
17 | .tab-gps #loadmap .controls a:active {
18 | background-color: #393b3a;
19 | }
20 |
21 | progress[value]::-webkit-progress-bar {
22 | background-color: #393b3a;
23 | }
--------------------------------------------------------------------------------
/src/css/tabs-dark/help-dark.css:
--------------------------------------------------------------------------------
1 | /* nothing changed for dark mode */
2 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/landing-dark.css:
--------------------------------------------------------------------------------
1 | .tab-landing .content_top {
2 | background-color: #00000000;
3 | }
4 |
5 | .tab-landing .content_mid {
6 | background-color: #3e3e3e;
7 | }
8 |
9 | .tab-landing .logowrapper img {
10 | content:url(/images/emu_logo_transparent.svg);
11 | }
12 |
13 | .tab-landing .content_mid .text3 .wrap2 {
14 | background: #5f5f5f;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/led_strip-dark.css:
--------------------------------------------------------------------------------
1 | .tab-led-strip .section {
2 | color: #c4c4c4;
3 | }
4 |
5 | .tab-led-strip .mainGrid {
6 | background-color: #4e4e4e;
7 | }
8 |
9 | .tab-led-strip button {
10 | background-color: #6b6b6b;
11 | color: white;
12 | }
13 |
14 | .tab-led-strip button:hover {
15 | border: 1px solid #ffffff;
16 | background-color: #393b3a;
17 | }
18 |
19 | .tab-led-strip .gridSections,
20 | .tab-led-strip .gridSections .block {
21 | border: none;
22 | }
23 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/logging-dark.css:
--------------------------------------------------------------------------------
1 | .tab-logging .speed {
2 | background-color: #3a3a3a;
3 | color: white;
4 | }
5 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/motors-dark.css:
--------------------------------------------------------------------------------
1 | .tab-motors .plot_control {
2 | background-color: #393b3a;
3 | }
4 |
5 | .tab-motors .plot_control select {
6 | background-color: #3a3a3a;
7 | color: white;
8 | }
9 |
10 | .tab-motors .motorblock {
11 | background-color: #393b3a;
12 | }
13 |
14 | .tab-motors .m-block {
15 | background-color: #393b3a;
16 | }
17 |
18 | .tab-motors .m-block .label {
19 | color: white;
20 | }
21 |
22 | .tab-motors .m-block .meter-bar {
23 | background-color: #393b3a;
24 | }
25 |
26 | .tab-motors .motor_testing .notice {
27 | background-color: #4e4e4e;
28 | }
29 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/onboard_logging-dark.css:
--------------------------------------------------------------------------------
1 | .tab-onboard_logging .regular-button {
2 | border: 1px solid #9c9c9c;
3 | }
4 |
5 | .tab-onboard_logging .regular-button.disabled {
6 | background-color: #393b3a;
7 | border: 1px solid #9c9c9c;
8 | }
9 |
10 | .tab-onboard_logging .dataflash-contents,
11 | .tab-onboard_logging .sdcard-contents {
12 | border: 1px solid #9c9c9c;
13 | background-color: #393b3a;
14 | }
15 |
16 | .tab-onboard_logging .dataflash-used,
17 | .tab-onboard_logging .sdcard-other {
18 | background-color: #0e7cd6;
19 | }
20 |
21 | .tab-onboard_logging progress::-webkit-progress-bar {
22 | background-color: #393b3a;
23 | }
24 |
25 | .tab-onboard_logging .blackboxRate select,
26 | .tab-onboard_logging .blackboxDebugMode select,
27 | .tab-onboard_logging .blackboxDevice select {
28 | background-color: #3a3a3a;
29 | color: white;
30 | }
31 |
32 | .tab-onboard_logging .sdcard-icon {
33 | background-color: #393b3a;
34 | border: 1px solid #9c9c9c;
35 | }
36 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/osd-dark.css:
--------------------------------------------------------------------------------
1 |
2 | .fontpresets {
3 | background-color: #3c3c3c;
4 | color: white;
5 | }
6 |
7 | /* Above two items are related to jbox, and serve as a reminder to look in src/css/tabs/osd.css */
8 |
9 | .tab-osd .display-layout input.position{
10 | border-bottom: 1px solid red;
11 | }
12 |
13 | .tab-osd .preview {
14 | background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), url(../../images/osd-bg-1.jpg);
15 | background-size: cover;
16 | }
17 |
18 | .tab-osd .preview .gui_box_titlebar select {
19 | background-color: #3a3a3a;
20 | color: white;
21 | }
22 |
23 | .tab-osd .switchable-field.mouseover {
24 | background: #3a3a3a;
25 | }
26 |
27 | .tab-osd .timer-option {
28 | margin-bottom: 2px;
29 | }
30 |
31 | .tab-osd input,
32 | .tab-osd select {
33 | background-color: #3a3a3a;
34 | color: white;
35 | }
36 |
37 | /* these two items replace the look of the checkboxes in only CSS */
38 | .tab-osd input[type='checkbox']:after{
39 | line-height: 1.5em;
40 | content: '';
41 | display: inline-block;
42 | width: 12px;
43 | height: 12px;
44 | margin-top: -1px;
45 | margin-left: -1px;
46 | border: 1px solid #404040;
47 | border-radius: 0.25em;
48 | background: #4d4d4d;
49 | }
50 |
51 | .tab-osd input[type='checkbox']:checked:after {
52 | background: #2297eb;
53 | border: 1px solid #404040;
54 | }
55 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/ports-dark.css:
--------------------------------------------------------------------------------
1 | .tab-ports select {
2 | border: 1px solid #00000000;
3 | }
4 |
5 | .tab-ports .ports select {
6 | background-color: #3a3a3a;
7 | color: white;
8 | }
9 |
10 | .tab-ports table td:first-child {
11 | border-left: none;
12 | }
13 | .tab-ports table td:last-child {
14 | border-right: none;
15 | }
16 |
17 | .tab-ports .ports tr:last-child,
18 | .tab-ports .ports tr:last-child td {
19 | border-bottom: none;
20 | }
21 |
22 | .tab-ports table td {
23 | border-bottom: 1px solid #575757;
24 | border-left: 1px solid #575757;
25 | border-right: 1px solid #575757;
26 | }
27 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/power-dark.css:
--------------------------------------------------------------------------------
1 | .tab-power .number input {
2 | background-color: #3a3a3a;
3 | color: white;
4 | }
5 |
6 | .tab-power .battery-configuration select {
7 | background-color: #3a3a3a;
8 | color: white;
9 | }
10 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/receiver-dark.css:
--------------------------------------------------------------------------------
1 | .tab-receiver select {
2 | background-color: #414443;
3 | color: white;
4 | }
5 |
6 | .tab-receiver .bars .meter-bar {
7 | background-color: #393b3a;
8 | }
9 |
10 | .tab-receiver .bars .meter-bar .label {
11 | color: white;
12 | }
13 |
14 | .tab-receiver .tunings {
15 | background-color: #393b3a;
16 | }
17 |
18 | .tab-receiver .tunings table td {
19 | background: #414443;
20 | }
21 |
22 | .tab-receiver .tunings table tr:nth-child(odd) {
23 | background-color: #393b3a;
24 | }
25 |
26 | .tab-receiver .tunings table input {
27 | background-color: #3a3a3a;
28 | color: white;
29 | }
30 |
31 | .tab-receiver .rssi_channel_wrapper {
32 | background-color: #414443;
33 | border-bottom: 1px solid #4d4d4d;
34 | }
35 |
36 | .tab-receiver .rcmap_wrapper {
37 | background-color: #414443;
38 | }
39 |
40 | .tab-receiver .hybrid_element {
41 | border-bottom: 1px solid #4d4d4d;
42 | border-left: 1px solid #4d4d4d;
43 | border-top-left-radius: 5px;
44 | border-bottom-left-radius: 5px;
45 | }
46 |
47 | .tab-receiver .hybrid_element input {
48 | background-color: #3a3a3a;
49 | color: white;
50 | }
51 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/sensors-dark.css:
--------------------------------------------------------------------------------
1 | .tab-sensors .plot_control {
2 | background-color: #2f2f2f;
3 | }
4 |
5 | .tab-sensors .plot_control select {
6 | background-color: #3a3a3a;
7 | color: white;
8 | }
9 |
10 | .tab-sensors text {
11 | fill: white;
12 | }
13 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/servos-dark.css:
--------------------------------------------------------------------------------
1 | .tab-servos table th {
2 | background: #828885;
3 | }
4 |
5 | .tab-servos table tr:nth-child(even) {
6 | background-color: #2f2f2f;
7 | }
8 |
9 | .tab-servos table .main {
10 | background-color: #393b3a;
11 | }
12 |
13 | .tab-servos table input[type="number"] {
14 | background-color: #3a3a3a;
15 | color: white;
16 | }
17 |
18 | .tab-servos .direction .rate {
19 | background-color: #3a3a3a;
20 | color: white;
21 | }
22 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/setup-dark.css:
--------------------------------------------------------------------------------
1 | .tab-setup #interactive_block {
2 | background-color: #393b3a;
3 | }
4 |
5 | .tab-setup .attitude_info {
6 | color: white;
7 | }
8 |
9 | .tab-setup #interactive_block a.reset {
10 | color: white;
11 | background-color: #575757;
12 | }
13 |
14 | .tab-setup #interactive_block a.reset:hover {
15 | background-color: #393b3a;
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/src/css/tabs-dark/transponder-dark.css:
--------------------------------------------------------------------------------
1 | .tab-transponder .text .disabled {
2 | background-color: #393b3a;
3 | }
4 |
5 | .tab-transponder .gui_box span {
6 | color: white;
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/src/css/tabs/help.css:
--------------------------------------------------------------------------------
1 | .tab-help .twothird {
2 | width: calc(67% - 15px);
3 | margin-right: 15px;
4 | }
5 |
6 | .tab-help .gui_box {
7 | min-height: 500px;
8 | margin-bottom: 0px;
9 | }
10 |
11 | .tab-help ul {
12 | margin-bottom:15px;
13 | }
14 |
15 | .tab-help li {
16 | border-top: 1px dotted var(--subtleAccent);
17 | padding-top: 5px;
18 | padding-bottom: 5px;
19 | background-image: url(../../images/arrow.svg);
20 | background-repeat: no-repeat;
21 | background-position: 0px 8px;
22 | background-size: 12px;
23 | }
24 |
25 | .tab-help li span {
26 | margin-left: 17px;
27 | display:block;
28 | }
29 |
30 | .tab-help li span a {
31 | color: var(--accent);
32 | }
33 |
34 | .tab-help .subline {
35 | margin-bottom: 5px;
36 | }
--------------------------------------------------------------------------------
/src/css/tabs/logging.css:
--------------------------------------------------------------------------------
1 | .tab-logging .properties {
2 | margin-top: 10px;
3 | }
4 |
5 | .tab-logging .properties dt {
6 | float: left;
7 | width: 120px;
8 | height: 20px;
9 | line-height: 20px;
10 | font-weight: bold;
11 | }
12 |
13 | .tab-logging .properties dt input {
14 | vertical-align: middle;
15 | }
16 |
17 | .tab-logging .properties dd {
18 | display: block;
19 | margin-left: 130px;
20 | height: 20px;
21 | line-height: 20px;
22 | color: var(--subtleText);
23 | }
24 |
25 | .tab-logging .speed {
26 | margin-top: 5px;
27 | width: 80px;
28 | border: 1px solid var(--subtleAccent);
29 | }
30 |
31 | .tab-logging .info {
32 | margin-top: 10px;
33 | }
34 |
35 | .tab-logging .info dt {
36 | float: left;
37 | width: 120px;
38 | height: 20px;
39 | line-height: 20px;
40 | font-weight: bold;
41 | }
42 |
43 | .tab-logging .info dd {
44 | display: block;
45 | margin-left: 130px;
46 | height: 20px;
47 | line-height: 20px;
48 | }
49 |
50 | .tab-logging .fixed_band {
51 | width: 100%;
52 | bottom: 0px;
53 | }
54 |
55 | .tab-logging .save_btn .back {
56 | display: none;
57 | }
58 |
59 | .tab-logging .back_btn {
60 | display: none;
61 | }
62 |
63 | @media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {
64 | .tab-logging table thead tr:first-child {
65 | font-size: 12px;
66 | height: 22px;
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/css/tabs/mixercalc.css:
--------------------------------------------------------------------------------
1 | #tab-static {
2 | background-color: inherit;
3 | background-image: none;
4 | }
5 |
6 | a {
7 | color: #00a3e0;
8 | }
9 |
10 | .button {
11 | background-color: #00a3e0;
12 | color: black;
13 | }
14 |
15 | .outputpanel {
16 | font-family: "Bitstream Vera Sans Mono", "Courier New", monospace;
17 | width: 700px;
18 | padding: 10px;
19 | background-color: #f0fff0;
20 | color: #000;
21 | border: 1px solid #bbb;
22 | }
23 |
24 | .initially-hidden {
25 | display: none;
26 | }
27 |
28 | .ajax-loading {
29 | line-height: 16px;
30 | }
31 |
32 | table,
33 | th,
34 | td {
35 | border-collapse: collapse;
36 | }
37 |
38 | th {
39 | background-color: #eee;
40 | text-align: center;
41 | padding: 2px 6px 2px 6px;
42 | }
43 |
44 | td {
45 | text-align: center;
46 | padding: 4px;
47 | }
48 |
49 | .center {
50 | text-align: center;
51 | margin: auto;
52 | }
53 |
54 | #mixerviz {
55 | width: 600px;
56 | float: left;
57 | display: block;
58 | }
59 |
60 | #mixerviz:focus {
61 | box-shadow: 0 0 3pt 2pt #00a3e0;
62 | }
63 |
64 | #mixervals {
65 | width: 360px;
66 | padding: 6px;
67 | display: inline-block;
68 | }
69 |
70 | #inputs {
71 | width: 100px;
72 | height: 250px;
73 | color: #000;
74 | border: 1px solid #000;
75 | float: left;
76 | }
77 |
78 | #inputs:focus {
79 | box-shadow: 0 0 2pt 2pt #00a3e0;
80 | }
81 |
--------------------------------------------------------------------------------
/src/css/tabs/power.css:
--------------------------------------------------------------------------------
1 | #tab-power-templates {
2 | display: none;
3 | }
4 |
5 | .tab-power .leftWrapper {
6 | float: left;
7 | width:calc(50% - 20px)
8 | }
9 |
10 | .tab-power .rightWrapper {
11 | float: left;
12 | width: calc(50% - 0px);
13 | margin: 0 0 10px 20px;
14 | }
15 |
16 | .tab-power td.configuration {
17 | padding-top: 5px;
18 | text-align: left;
19 | }
20 |
21 | .tab-power .battery-state .configuration {
22 | border-bottom: 0px;
23 | }
24 |
25 | .tab-power td.value {
26 | text-align: left;
27 | width: 20%;
28 | }
29 |
30 | .tab-power .label {
31 | width: 25%;
32 | }
33 |
34 | .tab-power .number input {
35 | width: 50px;
36 | padding-left: 3px;
37 | height: 20px;
38 | line-height: 20px;
39 | text-align: left;
40 | border: 1px solid var(--subtleAccent);
41 | border-radius: 3px;
42 | margin-right: 11px;
43 | font-size: 12px;
44 | font-weight: normal;
45 | }
46 |
47 |
48 |
49 |
50 | .tab-power .number,
51 | .tab-power .select
52 | {
53 | margin-bottom: 5px;
54 | clear: left;
55 | padding-bottom: 5px;
56 | border-bottom: 1px solid var(--subtleAccent);
57 | width: 100%;
58 | float: left;
59 | }
60 |
61 | .tab-power .battery-configuration select {
62 | border: 1px solid var(--subtleAccent);
63 | margin-right: 5px;
64 | float: left;
65 | width: 150px;
66 | }
67 |
68 | .tab-power .number:last-child,
69 | .tab-power .select:last-child {
70 | border-bottom: none;
71 | padding-bottom: 0px;
72 | margin-bottom: 0px;
73 | }
74 |
75 | .tab-power .require-support {
76 | display: none;
77 | }
78 |
79 | .tab-power.supported .require-support {
80 | display: block;
81 | }
82 |
83 | .tab-power .require-upgrade {
84 | display: block;
85 | }
86 |
87 | .tab-power.supported .require-upgrade {
88 | display: none;
89 | }
90 |
--------------------------------------------------------------------------------
/src/css/tabs/privacy_policy.css:
--------------------------------------------------------------------------------
1 | .tab-privacy_policy p,
2 | .tab-privacy_policy h1,
3 | .tab-privacy_policy h2,
4 | .tab-privacy_policy h3,
5 | .tab-privacy_policy h4 {
6 | margin-bottom: 10px;
7 | }
8 |
9 | .tab-privacy_policy li {
10 | margin-bottom: 0px !important;
11 | }
12 |
--------------------------------------------------------------------------------
/src/css/tabs/static_tab.css:
--------------------------------------------------------------------------------
1 | #tab-static {
2 | background-color: inherit;
3 | background-image: url(/images/osd-bg-1.jpg);
4 | background-attachment: fixed;
5 | background-size: cover;
6 | background-position: bottom right;
7 | }
8 |
9 | #tab-static span {
10 | display: block;
11 | font-weight: bold;
12 | padding-top: 16px;
13 | padding-bottom: 5px;
14 | border-bottom: 1px solid var(--subtleAccent);
15 | }
16 |
17 | #tab-static .title {
18 | font-size: 16px;
19 | }
20 |
21 | #tab-static ul {
22 | margin: 5px 0 20px 10px;
23 | }
24 |
25 | #tab-static li {
26 | font-weight: normal;
27 | margin-bottom: 5px;
28 | }
29 |
30 | #tab-static-contents {
31 | padding-top: 10px;
32 | padding-left: 16px;
33 | padding-right: 16px;
34 | padding-bottom: 40px;
35 | background-color: inherit;
36 | max-width: 650px;
37 | }
38 |
--------------------------------------------------------------------------------
/src/css/tabs/transponder.css:
--------------------------------------------------------------------------------
1 | #tab-transponder-templates {
2 | display: none;
3 | }
4 |
5 | .tab-transponder .spacer_box {
6 | padding-bottom: 10px;
7 | float: left;
8 | width: calc(100% - 20px);
9 | }
10 |
11 | .tab-transponder .text input {
12 | width: 100px;
13 | padding-left: 3px;
14 | height: 20px;
15 | line-height: 20px;
16 | text-align: left;
17 | border: 1px solid var(--subtleAccent);
18 | border-radius: 3px;
19 | margin-right: 11px;
20 | font-size: 12px;
21 | font-weight: normal;
22 | }
23 |
24 | .tab-transponder .text .disabled {
25 | width: 43px;
26 | padding: 0px 5px;
27 | background-color: #ececec;
28 | }
29 |
30 | .tab-transponder .text span {
31 | margin-left: 0px;
32 | }
33 |
34 | .tab-transponder input {
35 | float: left;
36 | }
37 |
38 | .tab-transponder span {
39 | margin: 0px;
40 | }
41 |
42 | .tab-transponder .text
43 | {
44 | margin-bottom: 5px;
45 | clear: left;
46 | padding-bottom: 5px;
47 | border-bottom: 1px solid var(--subtleAccent);
48 | width: 100%;
49 | float: left;
50 | }
51 |
52 | .tab-transponder .text:last-child {
53 | border-bottom: none;
54 | padding-bottom: 0px;
55 | margin-bottom: 0px;
56 | }
57 |
58 | .tab-transponder .textspacer {
59 | float: left;
60 | width: 115px;
61 | height: 21px;
62 | }
63 |
64 | .tab-transponder .gui_box span {
65 | font-style: normal;
66 | font-family: 'open_sansregular', Arial;
67 | line-height: 19px;
68 | color: #4f4f4f;
69 | font-size: 11px;
70 | }
71 |
72 | .require-transponder-supported,
73 | .tab-transponder.transponder-supported .require-transponder-unsupported {
74 | display: none;
75 | }
76 |
77 | .tab-transponder.transponder-supported .require-transponder-supported {
78 | display: block;
79 | }
80 |
81 | .textspacer-small {
82 | margin-bottom: 15px;
83 | }
84 |
85 | .tab-transponder select {
86 | min-width: 100px;
87 | border: 1px solid var(--subtleAccent);
88 | }
89 |
--------------------------------------------------------------------------------
/src/images/Helios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/Helios.png
--------------------------------------------------------------------------------
/src/images/arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/arrows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/arrows.png
--------------------------------------------------------------------------------
/src/images/become_a_patron_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/become_a_patron_button.png
--------------------------------------------------------------------------------
/src/images/discord-logo-color.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/images/emu_icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/emu_icon.ico
--------------------------------------------------------------------------------
/src/images/emu_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/emu_icon_128.png
--------------------------------------------------------------------------------
/src/images/flightindicators/fi_box.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/flightindicators/fi_circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/flightindicators/fi_needle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/flightindicators/fi_needle_small.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
--------------------------------------------------------------------------------
/src/images/flightindicators/fi_tc_airplane.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
34 |
--------------------------------------------------------------------------------
/src/images/flightindicators/horizon_back.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/images/flogo_RGB_HEX-1024.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_adjust_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_adjust_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_advanced_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_advanced_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_armed_active.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_armed_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_backup_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_backup_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_bat_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_cli_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_cli_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_config_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_config_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_data_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_data_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_failsafe_active.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_failsafe_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_failsafe_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_filter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_flasher_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_flasher_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_gps_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_gps_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_help_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_help_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_info_green.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_info_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_info_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_led_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_led_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_link_active.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_link_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_log_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_log_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_mission_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_mission_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_modes_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_modes_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_motor_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_motor_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_pid_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_pid_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_pitch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_ports_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_ports_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_position.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/cf_icon_position.png
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_position_nofix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/cf_icon_position_nofix.png
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_power_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_power_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_quad.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
27 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_roll.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_rx_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_rx_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_sensors_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_sensors_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_servo_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_servo_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_settings_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_setup_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_setup_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_transponder_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_transponder_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_usb1_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_usb2_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_vtx_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_vtx_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_welcome_grey_beta.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_welcome_white_beta.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_wizard_grey.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_wizard_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/cf_icon_yaw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/close1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/images/icons/cross2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
40 |
--------------------------------------------------------------------------------
/src/images/icons/icon_bracket.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/images/icons/icon_osd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
26 |
--------------------------------------------------------------------------------
/src/images/icons/icon_osd_white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
26 |
--------------------------------------------------------------------------------
/src/images/icons/sensor_acc_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_acc_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_acc_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_acc_on.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_baro_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_baro_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_baro_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_baro_on.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_gyro_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_gyro_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_gyro_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_gyro_on.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_mag_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_mag_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_mag_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_mag_on.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_sat_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_sat_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_sat_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_sat_on.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_sonar_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_sonar_off.png
--------------------------------------------------------------------------------
/src/images/icons/sensor_sonar_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/icons/sensor_sonar_on.png
--------------------------------------------------------------------------------
/src/images/loading-bars.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/src/images/loading-spin.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/images/osd-bg-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/osd-bg-1.jpg
--------------------------------------------------------------------------------
/src/images/osd-bg-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/osd-bg-2.png
--------------------------------------------------------------------------------
/src/images/paper-dark.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/paper-dark.jpg
--------------------------------------------------------------------------------
/src/images/paper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/paper.jpg
--------------------------------------------------------------------------------
/src/images/pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/src/images/pattern.png
--------------------------------------------------------------------------------
/src/js/ConfigStorage.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // idea here is to abstract around the use of chrome.storage.local as it functions differently from "localStorage" and IndexedDB
4 | // localStorage deals with strings, not objects, so the objects have been serialized.
5 | var ConfigStorage = {
6 | // key can be one string, or array of strings
7 | get: function(key, callback) {
8 | if (GUI.isChromeApp()) {
9 | chrome.storage.local.get(key,callback);
10 | } else {
11 | //console.log('Abstraction.get',key);
12 | if (Array.isArray(key)) {
13 | var obj = {};
14 | key.forEach(function (element) {
15 | try {
16 | obj = {...obj, ...JSON.parse(window.localStorage.getItem(element))};
17 | } catch (e) {
18 | // is okay
19 | }
20 | });
21 | callback(obj);
22 | } else {
23 | var keyValue = window.localStorage.getItem(key);
24 | if (keyValue) {
25 | var obj = {};
26 | try {
27 | obj = JSON.parse(keyValue);
28 | } catch (e) {
29 | // It's fine if we fail that parse
30 | }
31 | callback(obj);
32 | } else {
33 | callback({});
34 | }
35 | }
36 | }
37 | },
38 | // set takes an object like {'userLanguageSelect':'DEFAULT'}
39 | set: function(input) {
40 | if (GUI.isChromeApp()) {
41 | chrome.storage.local.set(input);
42 | } else {
43 | //console.log('Abstraction.set',input);
44 | Object.keys(input).forEach(function (element) {
45 | var tmpObj = {};
46 | tmpObj[element] = input[element];
47 | window.localStorage.setItem(element, JSON.stringify(tmpObj));
48 | });
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/js/DarkTheme.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var css_dark = [
4 | './css/main-dark.css',
5 | './css/tabs-dark/landing-dark.css',
6 | './css/tabs-dark/setup-dark.css',
7 | './css/tabs-dark/help-dark.css',
8 | './css/tabs-dark/ports-dark.css',
9 | './css/tabs-dark/configuration-dark.css',
10 | './css/tabs-dark/pid_tuning-dark.css',
11 | './css/tabs-dark/receiver-dark.css',
12 | './css/tabs-dark/servos-dark.css',
13 | './css/tabs-dark/gps-dark.css',
14 | './css/tabs-dark/motors-dark.css',
15 | './css/tabs-dark/led_strip-dark.css',
16 | './css/tabs-dark/sensors-dark.css',
17 | './css/tabs-dark/cli-dark.css',
18 | './css/tabs-dark/logging-dark.css',
19 | './css/tabs-dark/onboard_logging-dark.css',
20 | './css/tabs-dark/firmware_flasher-dark.css',
21 | './css/tabs-dark/adjustments-dark.css',
22 | './css/tabs-dark/auxiliary-dark.css',
23 | './css/tabs-dark/failsafe-dark.css',
24 | './css/tabs-dark/osd-dark.css',
25 | './css/tabs-dark/power-dark.css',
26 | './css/tabs-dark/transponder-dark.css',
27 | ]
28 |
29 | var DarkTheme = {
30 | configEnabled: false,
31 | };
32 |
33 | DarkTheme.setConfig = function(result) {
34 | if (this.configEnabled != result) {
35 | this.configEnabled = result;
36 |
37 | if (this.configEnabled) {
38 | this.applyDark();
39 | } else {
40 | this.applyNormal();
41 | }
42 | }
43 | };
44 |
45 | DarkTheme.applyDark = function() {
46 | for (var i = 0; i < css_dark.length; i++) {
47 | $('link[href="' + css_dark[i] + '"]').prop('disabled', false);
48 | }
49 | };
50 |
51 | DarkTheme.applyNormal = function() {
52 | for (var i = 0; i < css_dark.length; i++) {
53 | $('link[href="' + css_dark[i] + '"]').prop('disabled', true);
54 | }
55 | };
56 |
--------------------------------------------------------------------------------
/src/js/chromeAppEventPage.js:
--------------------------------------------------------------------------------
1 | /*
2 | If an id is also specified and a window with a matching id has been shown before, the remembered bounds of the window will be used instead.
3 | */
4 | 'use strict';
5 |
6 | function startApplication() {
7 | chrome.app.window.create('main.html', {
8 | id: 'main-window',
9 | frame: 'chrome',
10 | innerBounds: {
11 | minWidth: 1024,
12 | minHeight: 550,
13 | },
14 | }, function (createdWindow) {
15 | if (getChromeVersion() >= 54) {
16 | createdWindow.icon = 'images/emu_icon_128.png';
17 | }
18 | });
19 | }
20 |
21 | chrome.app.runtime.onLaunched.addListener(startApplication);
22 |
23 | function getChromeVersion () {
24 | const raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
25 |
26 | return raw ? parseInt(raw[2], 10) : false;
27 | }
28 |
--------------------------------------------------------------------------------
/src/js/data_storage.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var CONFIGURATOR = {
4 | // all versions are specified and compared using semantic versioning http://semver.org/
5 | 'apiVersionAccepted': '1.2.1',
6 | 'backupRestoreMinApiVersionAccepted': '1.5.0',
7 | 'pidControllerChangeMinApiVersion': '1.5.0',
8 | 'backupFileMinVersionAccepted': '0.55.0', // chrome.runtime.getManifest().version is stored as string, so does this one
9 |
10 | 'connectionValid': false,
11 | 'connectionValidCliOnly': false,
12 | 'cliActive': false,
13 | 'cliValid': false,
14 | 'gitChangesetId': 'unknown'
15 | };
16 |
--------------------------------------------------------------------------------
/src/js/huffman.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var HUFFMAN_EOF = -1;
4 |
5 | function huffmanDecodeBuf(inBuf, inBufCharacterCount, huffmanTree, huffmanLenIndex)
6 | {
7 | var code = 0;
8 | var codeLen = 0;
9 | var testBit = 0x80;
10 | var eof = false;
11 | var outBuf = [];
12 |
13 | while (!eof && inBuf.byteLength != 0) {
14 | if (outBuf.length == inBufCharacterCount) {
15 | // we've exhausted the input stream, discard any odd bits on the end
16 | break;
17 | }
18 |
19 | if (inBuf.byteLength == 0) {
20 | throw new Error('unexpected');
21 | }
22 |
23 | // get the next bit from the input buffer
24 | code <<= 1;
25 | ++codeLen;
26 | if (inBuf[0] & testBit) {
27 | code |= 0x01;
28 | }
29 | testBit >>= 1;
30 | if (testBit == 0) {
31 | testBit = 0x80;
32 | inBuf = inBuf.subarray(1);
33 | }
34 |
35 | // check if the code is a leaf node or an interior node
36 | if (huffmanLenIndex[codeLen] != -1) {
37 | // look for the code in the tree, only leaf nodes are stored in the tree
38 | for (var i = huffmanLenIndex[codeLen]; (i < huffmanTree.length) && (huffmanTree[i].codeLen == codeLen); ++i) {
39 | if (huffmanTree[i].code == code) {
40 | // we've found the code, so it is a leaf node
41 | var value = huffmanTree[i].value;
42 |
43 | if (value == HUFFMAN_EOF) {
44 | eof = true;
45 | } else {
46 | // output the value
47 | outBuf.push(value);
48 | }
49 |
50 | // reset the code to continue decompressing the input buffer
51 | code = 0;
52 | codeLen = 0;
53 | break;
54 | }
55 | }
56 | }
57 | }
58 |
59 | return new Uint8Array(outBuf);
60 | }
--------------------------------------------------------------------------------
/src/js/peripherals.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // return true if user has choose a special peripheral
4 | function isPeripheralSelected(peripheralName) {
5 | for (var portIndex = 0; portIndex < SERIAL_CONFIG.ports.length; portIndex++) {
6 | var serialPort = SERIAL_CONFIG.ports[portIndex];
7 | if (serialPort.functions.indexOf(peripheralName) >= 0) {
8 | return true;
9 | }
10 | }
11 |
12 | return false;
13 | }
14 |
15 | // Adjust the real name for a modeId. Useful if it belongs to a peripheral
16 | function adjustBoxNameIfPeripheralWithModeID(modeId, defaultName) {
17 | if (isPeripheralSelected("RUNCAM_DEVICE_CONTROL")) {
18 | switch (modeId) {
19 | case 32: // BOXCAMERA1
20 | return i18n.getMessage('modeCameraWifi');
21 | case 33: // BOXCAMERA2
22 | return i18n.getMessage('modeCameraPower');
23 | case 34: // BOXCAMERA3
24 | return i18n.getMessage('modeCameraChangeMode');
25 | default:
26 | return defaultName;
27 | }
28 | }
29 |
30 | return defaultName;
31 |
32 | }
--------------------------------------------------------------------------------
/src/js/port_usage.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var PortUsage = {
4 | previous_received: 0,
5 | previous_sent: 0,
6 |
7 | initialize: function() {
8 | var self = this;
9 |
10 | self.main_timer_reference = setInterval(function() {
11 | self.update();
12 | }, 1000);
13 | },
14 | update: function() {
15 | if (serial.bitrate) {
16 | var port_usage_down = parseInt(((serial.bytesReceived - this.previous_received) * 10 / serial.bitrate) * 100);
17 | var port_usage_up = parseInt(((serial.bytesSent - this.previous_sent) * 10 / serial.bitrate) * 100);
18 |
19 | this.previous_received = serial.bytesReceived;
20 | this.previous_sent = serial.bytesSent;
21 |
22 | // update UI
23 | $('span.port_usage_down').text(i18n.getMessage('statusbar_usage_download', [port_usage_down]));
24 | $('span.port_usage_up').text(i18n.getMessage('statusbar_usage_upload', [port_usage_up]));
25 | } else {
26 | $('span.port_usage_down').text(i18n.getMessage('statusbar_usage_download', [0]));
27 | $('span.port_usage_up').text(i18n.getMessage('statusbar_usage_upload', [0]));
28 | }
29 | },
30 | reset: function() {
31 | this.previous_received = 0;
32 | this.previous_sent = 0;
33 | }
34 | };
--------------------------------------------------------------------------------
/src/js/tabs/help.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | TABS.help = {};
4 | TABS.help.initialize = function (callback) {
5 | var self = this;
6 |
7 | if (GUI.active_tab != 'help') {
8 | GUI.active_tab = 'help';
9 | }
10 |
11 | $('#content').load("./tabs/help.html", function () {
12 | i18n.localizePage();
13 |
14 | GUI.content_ready(callback);
15 | });
16 | };
17 |
18 | TABS.help.cleanup = function (callback) {
19 | if (callback) callback();
20 | };
21 |
--------------------------------------------------------------------------------
/src/js/tabs/landing.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | TABS.landing = {};
4 | TABS.landing.initialize = function (callback) {
5 | var self = this;
6 |
7 | if (GUI.active_tab != 'landing') {
8 | GUI.active_tab = 'landing';
9 | }
10 |
11 | $('#content').load("./tabs/landing.html", function () {
12 | function showLang(newLang) {
13 | var bottomSection = $('.languageSwitcher');
14 | bottomSection.find('a').each(function(index) {
15 | var element = $(this);
16 | var languageSelected = element.attr('lang');
17 | if (newLang == languageSelected) {
18 | element.removeClass('selected_language');
19 | element.addClass('selected_language');
20 | } else {
21 | element.removeClass('selected_language');
22 | }
23 | });
24 | }
25 | var bottomSection = $('.languageSwitcher');
26 | bottomSection.html(' ');
27 | bottomSection.append(' ');
28 | var languagesAvailables = i18n.getLanguagesAvailables();
29 | languagesAvailables.forEach(function(element) {
30 | bottomSection.append(' ');
31 | });
32 | bottomSection.find('a').each(function(index) {
33 | var element = $(this);
34 | element.click(function(){
35 | var element = $(this);
36 | var languageSelected = element.attr('lang');
37 | if (!languageSelected) { return; }
38 | if (i18n.selectedLanguage != languageSelected) {
39 | i18n.changeLanguage(languageSelected);
40 | showLang(languageSelected);
41 | }
42 | });
43 | });
44 | showLang(i18n.selectedLanguage);
45 | // translate to user-selected language
46 | i18n.localizePage();
47 |
48 | GUI.content_ready(callback);
49 | });
50 |
51 | };
52 |
53 | TABS.landing.cleanup = function (callback) {
54 | if (callback) callback();
55 | };
56 |
--------------------------------------------------------------------------------
/src/js/tabs/setup_osd.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | TABS.setup_osd = {
4 | };
5 |
6 | TABS.setup_osd.initialize = function (callback) {
7 | var self = this;
8 |
9 | if (GUI.active_tab != 'setup_osd') {
10 | GUI.active_tab = 'setup_osd';
11 | }
12 |
13 | function load_status() {
14 | MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_html);
15 | }
16 |
17 | function load_html() {
18 | $('#content').load("./tabs/setup_osd.html", process_html);
19 | }
20 |
21 | load_status();
22 |
23 | function process_html() {
24 |
25 | $('.tab-setup-osd .info').hide(); // requires an MSP update
26 |
27 | var osdVideoModes = [
28 | 'AUTO',
29 | 'NTSC',
30 | 'PAL'
31 | ];
32 |
33 | // translate to user-selected language
34 | i18n.localizePage();
35 |
36 | $('a.resetSettings').click(function () {
37 | MSP.send_message(MSPCodes.MSP_RESET_CONF, false, false, function () {
38 | GUI.log(i18n.getMessage('initialSetupSettingsRestored'));
39 |
40 | GUI.tab_switch_cleanup(function () {
41 | TABS.setup_osd.initialize();
42 | });
43 | });
44 | });
45 |
46 | function get_slow_data() {
47 | /* FIXME requires MSP update
48 | MSP.send_message(MSPCodes.MSP_OSD_VIDEO_STATUS, false, false, function () {
49 | var element;
50 |
51 | element = $('.video-mode');
52 | var osdVideoMode = osdVideoModes[OSD_VIDEO_STATE.video_mode];
53 | element.text(osdVideoMode);
54 |
55 | element = $('.camera-connected');
56 | element.text(OSD_VIDEO_STATE.camera_connected ? i18n.getMessage('osdSetupCameraConnectedValueYes') : i18n.getMessage('osdSetupCameraConnectedValueNo'));
57 | });
58 | */
59 | }
60 |
61 | GUI.interval_add('setup_data_pull_slow', get_slow_data, 250, true); // 4 fps
62 |
63 | GUI.content_ready(callback);
64 | }
65 | };
66 |
67 | TABS.setup_osd.cleanup = function (callback) {
68 | if (callback) callback();
69 | };
70 |
--------------------------------------------------------------------------------
/src/js/tabs/static_tab.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | TABS.staticTab = {};
4 | TABS.staticTab.initialize = function (staticTabName, callback) {
5 | var self = this;
6 |
7 | if (GUI.active_tab != staticTabName) {
8 | GUI.active_tab = staticTabName;
9 | }
10 | var tabFile = "./tabs/" + staticTabName + ".html";
11 |
12 | $('#content').html('');
13 | $('#tab-static-contents').load(tabFile, function () {
14 | // translate to user-selected language
15 | i18n.localizePage();
16 |
17 | GUI.content_ready(callback);
18 | });
19 |
20 | };
21 | // Just noting that other tabs have cleanup functions.
22 |
--------------------------------------------------------------------------------
/src/js/utils/VtxDeviceStatus/Rtc6705DeviceStatus.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | class VtxDeviceStatusRtc6705 extends VtxDeviceStatus {
4 | constructor(dataView)
5 | {
6 | super(dataView);
7 |
8 | dataView.readU8(); // custom device status size
9 |
10 | // Read other Tramp VTX device parameters here
11 | }
12 |
13 | static get staticDeviceStatusType()
14 | {
15 | return VtxDeviceTypes.VTXDEV_RTC6705;
16 | }
17 | }
18 |
19 | vtxDeviceStatusFactory.registerVtxDeviceStatusClass(VtxDeviceStatusRtc6705);
20 |
--------------------------------------------------------------------------------
/src/js/utils/VtxDeviceStatus/SmartAudioDeviceStatus.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | class VtxDeviceStatusSmartAudio extends VtxDeviceStatus {
4 | constructor(dataView)
5 | {
6 | super(dataView);
7 |
8 | dataView.readU8(); // custom device status size
9 |
10 | this._version = dataView.readU8();
11 | this._mode = dataView.readU8();
12 | this._orfreq = dataView.readU16();
13 | this._willBootIntoPitMode = Boolean(dataView.readU8());
14 | }
15 |
16 | get smartAudioVersion()
17 | {
18 | const sa = this._version * 100 + this._mode;
19 | let result = "";
20 |
21 | switch (this._version) {
22 | case 1:
23 | result = "1.0";
24 | break;
25 | case 2:
26 | result = "2.0";
27 | break;
28 | case 3:
29 | result = "2.1";
30 | break;
31 | default:
32 | // unknown SA version
33 | result = i18n.getMessage("vtxType_255");
34 | }
35 |
36 | if (16 == this._mode) {
37 | result = i18n.getMessage("vtxSmartAudioUnlocked", {"version": result});
38 | }
39 |
40 | return result;
41 | }
42 |
43 | static get staticDeviceStatusType()
44 | {
45 | return VtxDeviceTypes.VTXDEV_SMARTAUDIO;
46 | }
47 | }
48 |
49 | vtxDeviceStatusFactory.registerVtxDeviceStatusClass(VtxDeviceStatusSmartAudio);
50 |
--------------------------------------------------------------------------------
/src/js/utils/VtxDeviceStatus/TrampDeviceStatus.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | class VtxDeviceStatusTramp extends VtxDeviceStatus {
4 | constructor(dataView)
5 | {
6 | super(dataView);
7 |
8 | dataView.readU8(); // custom device status size
9 |
10 | // Read other Tramp VTX device parameters here
11 | }
12 |
13 | static get staticDeviceStatusType()
14 | {
15 | return VtxDeviceTypes.VTXDEV_TRAMP;
16 | }
17 | }
18 |
19 | vtxDeviceStatusFactory.registerVtxDeviceStatusClass(VtxDeviceStatusTramp);
20 |
--------------------------------------------------------------------------------
/src/js/utils/VtxDeviceStatus/VtxDeviceStatus.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const VtxDeviceTypes = {
4 | VTXDEV_UNSUPPORTED: 0, // reserved for MSP
5 | VTXDEV_RTC6705: 1,
6 | // 2 reserved
7 | VTXDEV_SMARTAUDIO: 3,
8 | VTXDEV_TRAMP: 4,
9 | VTXDEV_BEESIGN: 5,
10 | VTXDEV_UNKNOWN: 0xFF,
11 | };
12 |
13 | class VtxDeviceStatus
14 | {
15 | constructor(dataView)
16 | {
17 | this._deviceIsReady = dataView.readU8();
18 | const bandAndChannelAvailable = Boolean(dataView.readU8());
19 | this._band = dataView.readU8();
20 | this._channel = dataView.readU8();
21 |
22 | if (!bandAndChannelAvailable) {
23 | this._band = undefined;
24 | this._channel = undefined;
25 | }
26 |
27 | const powerIndexAvailable = Boolean(dataView.readU8());
28 | this._powerIndex = dataView.readU8();
29 |
30 | if (!powerIndexAvailable) {
31 | this._powerIndex = undefined;
32 | }
33 |
34 | const frequencyAvailable = Boolean(dataView.readU8());
35 | this._frequency = dataView.readU16();
36 |
37 | if (!frequencyAvailable) {
38 | this._frequency = undefined;
39 | }
40 |
41 | const vtxStatusAvailable = Boolean(dataView.readU8());
42 | this._vtxStatus = dataView.readU32(); // pitmode and/or locked
43 |
44 | if (!vtxStatusAvailable) {
45 | this._vtxStatus = undefined;
46 | }
47 |
48 | this._readPowerLevels(dataView);
49 | }
50 |
51 | _readPowerLevels(dataView)
52 | {
53 | this._levels = [];
54 | this._powers = [];
55 | const powerLevelCount = dataView.readU8();
56 |
57 | for (let i = 0; i < powerLevelCount; i++)
58 | {
59 | this._levels.push(dataView.readU16());
60 | this._powers.push(dataView.readU16());
61 | }
62 | }
63 |
64 | get deviceIsReady()
65 | {
66 | return this._deviceIsReady;
67 | }
68 |
69 | // overload this function in subclasses
70 | static get staticDeviceStatusType()
71 | {
72 | return VtxDeviceTypes.VTXDEV_UNKNOWN;
73 | }
74 |
75 | get deviceStatusType()
76 | {
77 | // returns result of overloaded static function "staticDeviceStatusType"
78 | return this.constructor.staticDeviceStatusType;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/js/utils/VtxDeviceStatus/VtxDeviceStatusFactory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const vtxDeviceStatusFactory = {
4 | _vtxDeviceStatusClasses: [],
5 |
6 | // call this to register a new vtx type like SmartAudio, Tramp or Rtc6705
7 | registerVtxDeviceStatusClass: function(vtxDeviceStatusClass)
8 | {
9 | this._vtxDeviceStatusClasses.push(vtxDeviceStatusClass);
10 | },
11 |
12 | createVtxDeviceStatus: function(byteArray)
13 | {
14 | const dataView = new DataView(byteArray.buffer);
15 |
16 | const vtxTypeIndex = dataView.readU8();
17 | const vtxDeviceStatusClass = this._getDeviceStatusClass(vtxTypeIndex);
18 |
19 | return new vtxDeviceStatusClass(dataView);
20 | },
21 |
22 | _readVtxType: function(dataView)
23 | {
24 | return dataView.readU8();
25 | },
26 |
27 | _getDeviceStatusClass: function(vtxTypeIndex)
28 | {
29 | let result = this._vtxDeviceStatusClasses.find(
30 | (vtxClass) => {
31 | return vtxClass.staticDeviceStatusType === vtxTypeIndex;
32 | });
33 |
34 | if (typeof result === 'undefined') {
35 | result = VtxDeviceStatus;
36 | }
37 |
38 | return result;
39 | },
40 | };
41 |
--------------------------------------------------------------------------------
/src/tabs/blank.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/tabs/cli.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
24 |
25 |
26 |
37 |
--------------------------------------------------------------------------------
/src/tabs/help.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
8 |
17 |
18 |
19 | `
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
22 |
34 |
35 |
--------------------------------------------------------------------------------
/src/tabs/landing.html:
--------------------------------------------------------------------------------
1 |
2 |
51 |
52 |
--------------------------------------------------------------------------------
/src/tabs/map.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Asynchronous Loading
5 |
6 |
7 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/tabs/options.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/tabs/review.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/tabs/servos.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/src/tabs/setup_osd.html:
--------------------------------------------------------------------------------
1 |
45 |
--------------------------------------------------------------------------------
/test/karma.conf.js:
--------------------------------------------------------------------------------
1 | module.exports = function(config) {
2 | config.set({
3 | basePath: '../',
4 | frameworks: ['mocha', 'chai', 'sinon-chai'],
5 | files: [
6 | './node_modules/jquery/dist/jquery.min.js',
7 | './node_modules/bluebird/js/browser/bluebird.min.js',
8 | './src/js/serial.js',
9 | './src/js/data_storage.js',
10 | './src/js/localization.js',
11 | './src/js/gui.js',
12 | './node_modules/jquery-textcomplete/dist/jquery.textcomplete.min.js',
13 | './src/js/CliAutoComplete.js',
14 | './src/js/tabs/cli.js',
15 | './test/**/*.js'
16 | ],
17 | browsers: ['ChromeHeadlessNoSandbox'],
18 | customLaunchers: {
19 | ChromeHeadlessNoSandbox: {
20 | base: 'ChromeHeadless',
21 | flags: ['--no-sandbox']
22 | }
23 | },
24 | singleRun: true
25 | });
26 | };
27 |
--------------------------------------------------------------------------------