├── .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 . 21 | . 22 | On Debian systems, the complete text of the GNU General Public License 23 | can be found in `/usr/share/common-licenses/GPL-3'. 24 | -------------------------------------------------------------------------------- /assets/linux/emuflight-configurator.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Emuflight Configurator 3 | Comment=Crossplatform configuration tool for the Emuflight flight control system 4 | Exec=/opt/emuflight/emuflight-configurator/emuflight-configurator 5 | Icon=/opt/emuflight/emuflight-configurator/icon/emu_icon_128.png 6 | Terminal=false 7 | Type=Application 8 | Categories=Utility 9 | -------------------------------------------------------------------------------- /assets/linux/icon/emu_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/linux/icon/emu_icon_128.png -------------------------------------------------------------------------------- /assets/osx/app-icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/osx/app-icon.icns -------------------------------------------------------------------------------- /assets/osx/app-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/osx/app-icon.png -------------------------------------------------------------------------------- /assets/osx/dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/osx/dmg-background.png -------------------------------------------------------------------------------- /assets/osx/dmg-background.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/osx/dmg-background.psd -------------------------------------------------------------------------------- /assets/windows/emu_installer.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/windows/emu_installer.ico -------------------------------------------------------------------------------- /assets/windows/emu_uninstaller.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emuflight/EmuConfigurator/4ef2498be8cb1553a97acf8932a0b35c0dbb678a/assets/windows/emu_uninstaller.ico -------------------------------------------------------------------------------- /bintray-template.j2: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | { 4 | "includePattern": "release/(.*)", 5 | "uploadPattern": "{{ env("PACKAGE_VERSION") }}/$1", 6 | "matrixParams": { "override": 1 } 7 | }, 8 | { 9 | "includePattern": "CHANGELOG.md", 10 | "uploadPattern": "{{ env("PACKAGE_VERSION") }}/CHANGELOG.md.txt", 11 | "matrixParams": { "override": 1 } 12 | } 13 | ], 14 | "package": { 15 | "subject": "emuflight-dev", 16 | "repo": "dev_cfg", 17 | "desc": "Emuflight Configurator is a crossplatform configuration tool for the Emuflight flight control system.", 18 | "issue_tracker_url": "https://github.com/emuflight/EmuConfigurator/issues", 19 | "website_url": "https://github.com/emuflight/EmuConfigurator", 20 | "public_download_numbers": false, 21 | "public_stats": false, 22 | "licenses": [ 23 | "GPL-3.0" 24 | ], 25 | "labels": [ 26 | "emuflight", "configurator" 27 | ], 28 | "name": "{{ env("TRAVIS_BRANCH") }}", 29 | "vcs_url": "{{ env("TRAVIS_BUILD_WEB_URL") }}" 30 | }, 31 | "publish": true, 32 | "version": { 33 | "gpgSign": false, 34 | "name": "{{ env("PACKAGE_VERSION") }}", 35 | "desc": "Emuflight Configurator" 36 | } 37 | } -------------------------------------------------------------------------------- /changelog.html: -------------------------------------------------------------------------------- 1 |
2 | Emuflight Configurator 3 | 7 | -------------------------------------------------------------------------------- /codesign_osxapp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # tom hensel 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 | 5 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 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 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 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 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/images/flightindicators/fi_circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/images/flightindicators/fi_needle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/images/flightindicators/fi_needle_small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 20 | 21 | 22 | 24 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/images/flightindicators/fi_tc_airplane.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 19 | 20 | 24 | 28 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/images/flightindicators/horizon_back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/images/flogo_RGB_HEX-1024.svg: -------------------------------------------------------------------------------- 1 | flogo_RGB_HEX-1024 -------------------------------------------------------------------------------- /src/images/icons/cf_icon_adjust_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_adjust_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_advanced_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_advanced_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_armed_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_armed_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_backup_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_backup_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_bat_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_cli_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_cli_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_config_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_config_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_data_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_data_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_failsafe_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_failsafe_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_failsafe_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_flasher_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_flasher_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_gps_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 10 | 12 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_gps_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 10 | 12 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_help_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_help_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_info_green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_info_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_info_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_led_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_led_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_link_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_link_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_log_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 12 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_log_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 12 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_mission_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_mission_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_modes_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 10 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_modes_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 10 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_motor_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_motor_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_pid_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_pid_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_pitch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_ports_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 12 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_ports_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 12 | 14 | 15 | 16 | 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 | 5 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_power_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_quad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 12 | 15 | 18 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_roll.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_rx_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_rx_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_sensors_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_sensors_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_servo_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_servo_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_settings_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 12 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_setup_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_setup_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_transponder_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 12 | 16 | 17 | 18 | 21 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_transponder_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 12 | 16 | 17 | 18 | 21 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_usb1_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_usb2_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_vtx_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 15 | 17 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_vtx_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 15 | 17 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_welcome_grey_beta.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 16 | 17 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_welcome_white_beta.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 16 | 17 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_wizard_grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_wizard_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/cf_icon_yaw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/images/icons/close1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/images/icons/cross2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/images/icons/icon_bracket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /src/images/icons/icon_osd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 13 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/images/icons/icon_osd_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 13 | 24 | 25 | 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 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/images/loading-spin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 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 |
17 |
18 | 19 | 20 | 21 | 22 |
23 |
24 | 25 | 26 | 37 |
-------------------------------------------------------------------------------- /src/tabs/help.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |

10 |
    11 |
  • 12 |
  • 13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
` 23 |

24 |
25 |
    26 |
  • 27 |
  • 28 |
29 | 30 | 31 |
32 |
33 |
34 |
35 |
-------------------------------------------------------------------------------- /src/tabs/landing.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |
8 |
9 |
10 |
11 |
12 |

13 |
14 |
15 |
16 |
17 |
18 |

19 |
20 |
21 |
22 |
23 |
24 |

25 |
26 | 29 |
30 |
31 |
32 | 33 |
34 |
35 | 38 |
39 |
40 | 43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
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 |
7 |
8 |
9 |
10 |
11 |
-------------------------------------------------------------------------------- /src/tabs/servos.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Servos
4 |
5 | 6 |
7 |
8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
CH1CH2CH3CH4
21 |
22 | 23 |
24 |
25 |
26 |
27 |

28 |
29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 |
-------------------------------------------------------------------------------- /src/tabs/setup_osd.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
OSD
6 |
7 | 8 |
9 |
10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 | 23 |
24 |
25 |
26 |
27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 |
41 |
42 | 43 |
44 |
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 | --------------------------------------------------------------------------------