Mobile, desktop and website Apps with the same code

Overview

Mobile, desktop and website Apps with the same code

Build Status Dependency Status devDependency Status

This project shows how the source code can be architectured to run on multiple devices. As of now, it is able to run as:

  • iOS & Android Apps (based on react-native)
  • a Desktop App based on NW or based on Electron
  • a Website App in any browser (based on react)

A demo for the Website App is available here.

Screenshots

Mobile Apps (iOS & Android)

Mobile Apps

Desktop Apps (NW & Electron)

Desktop App

Website App

Website App

Libraries/tools

This project uses libraries and tools like:

  • es6 syntax and babel
  • react for the Website App and Desktop App,
  • react-native for the iOS & Android Apps
  • NW to package the Desktop App
  • Electron to package the Desktop App
  • flux to organize the data flow management
  • css-loader to integrate the styles in the builds
  • grunt to create the builds
  • webpack to help during the development phase with hot reloading

Basic philosophy

All the code is contained in the src directory, especially the 3 main entry files that are used for the builds:

  • index.ios.js & index.android.js are the ones used to build the iOS & Android Apps
  • index.js is the one used to build the Website App and Desktop App as the code is strictly the same.

Flux architecture actions/stores

All the flux architecture is share to 100% to all the different builds. This means that all the logic and data management code is done only once and reuse everywhere. This allows us to have an easy tests suite as well and to ensure that our code is working properly on all the devices.

Components

The real interest of the project is in how the components have been structured to shared most of their logic and only redefined what is specific to every device.

Basically, every component has a main Class which inherits a base Class containing all the logic. Then, the main component import a different Render function which has been selected during the build. The file extension .ios.js, .android.js or .js is used by the build tool to import only the right file.

The .native.js files contain code that is shared between both mobile platforms (iOS & Android). Currently, the .ios.js and .android.js files compose this .native.js file since all code is shared right now. However, if a component needed to be different for platform specific reasons, that code would be included in the corresponding platform specific files.

At the end, every component is defined by 6 files. If we look at the screen component, here is its structure.

Screen.js
├── ScreenBase.js
├── ScreenRender.ios.js (specific to iOS build
├── ScreenRender.android.js (specific to Android build)
├── ScreenRender.native.js (shared mobile app code - iOS & Android)
└── ScreenRender.js (used during Website and Desktop build)

And here is the main Class file which composes the files.

'use strict';

import Base from './ScreenBase';
import Render from './ScreenRender';

export default class Screen extends Base {
  constructor (props) {
    super(props);
  }

  render () {
    return Render.call(this, this.props, this.state);
  }
}

What's next

Here are some thoughts about what can come next:

  • Make the Website App Isomorphic/Universal

Thank you Robert for your awesome design

I want to thank Robert O'Dowd who kindly authorized me the reuse his very beautiful design. The original design made by Robert was part of his project called "Simplifycation" visible here.

How to build/run the projects

General requirements before running any specific project

  • npm install to install all the dependencies, React and React Native among others.

With some versions of npm (>=v3.3.10 <=v3.6.0)

Some builds from npm included bugs while npm install. So if you are using a npm version within the range form 3.3.10 to 3.6.0 included, you must run npm install twice. Those versions including npm v3.3.12 are the ones bundled by default with node from version v5.1.0 to v5.5.0.

  • npm install npm
  • npm install npm run it twice, because of the packages won't be installed after the first run #10985

The Mobile Apps (iOS & Android)

Requirements for React Native

iOS

  • OS X
  • Xcode 6.3 or higher is recommended (Xcode only runs on Mac).
  • Homebrew is the recommended way to install node, watchman, and flow.
  • brew install node
  • brew install watchman. We recommend installing watchman, otherwise you might hit a node file watching bug.
  • brew install flow. If you want to use flow.

Android

Running the Mobile Apps

iOS

  • Open iosApp.xcodeproj and hit run in Xcode.
  • Hit cmd+R in your iOS simulator to reload the app and see your change!

Android

Congratulations! You've just successfully run the project as an iOS or Android App.

The Website App

Requirements for React

There isn't any additional requirements since you already installed the deps with npm install.

Quick start

Congratulations! You've just successfully run the project as a Website App.

The Desktop App

You can either run the project with NW or electron.

Requirements for NW

To run the project, you are supposed to run something like:

/path/to/nw .

On OSX, the executable binary is in a hidden directory within the .app file. The easier solution to install it is to download the app on http://nwjs.io/ then copying it to your application folder. You will now be able to run:

/Applications/nwjs.app/Contents/MacOS/nwjs .

You can also setup an alias to call the binary.

alias nw="/Applications/nwjs.app/Contents/MacOS/nwjs"

Quick start with NW

  • npm run build to build the project (at least the first time)
  • npm run serve-nw to launch the desktop app and enable livereload

Congratulations! You've just successfully run the project as a Desktop App.

Quick start with Electron

  • npm run build to build the project (at least the first time)
  • npm run serve-electron to launch the desktop app and enable livereload

Congratulations! You've just successfully run the project as a Desktop App.

Run the tests

To run the tests, simply run:

npm test

Tests

Comments
  • Android App

    Android App

    I only need to add 2 small Android specific things, the keyAction button border radius wouldn't show on the TouchableHighlight and the text inside of the "Screen" wasn't lining up properly. That's really good as everything else was left untouched and just worked out of the box! :+1:

    In order to share the same code without needing to just straight copy/paste everything in the *.ios.js files, I created *.native.js files and import them via the individual *.ios/android.js files.

    This feels a little messy since it adds so many extra files.

    Another way we can do it is to let the plain AppRender.js files be the "native" ones (both for iOS & Android) and rename the Web & NW.js files to something like AppRender.web.js. Doing it this way, we'd have less files but we'd probably have to change the Webpack config & gruntfile to account for the change.

    Any thoughts?

    If you like this and we come to an agreement on the file structure, then I can fill in the blanks on the README as well. :smiley:

    android-app

    opened by dsibiski 10
  • Trying the demo

    Trying the demo

    Hi, I managed to successfully run the demo using electron but not with react-native on Android. Here's what I get when trying with react-native run-android

    ╭─reis@Asakura ~/Documents/Testcode/react-native-nw-react-calculator  ‹master› 
    ╰─➤  react-native run-android                                            
    Starting JS server...
    Building and installing the app on the device (cd android && ./gradlew installDebug)...
    :app:preBuild UP-TO-DATE
    :app:preDebugBuild UP-TO-DATE
    :app:checkDebugManifest
    :app:preReleaseBuild UP-TO-DATE
    :app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE
    :app:prepareComFacebookFrescoDrawee081Library UP-TO-DATE
    :app:prepareComFacebookFrescoFbcore081Library UP-TO-DATE
    :app:prepareComFacebookFrescoFresco081Library UP-TO-DATE
    :app:prepareComFacebookFrescoImagepipeline081Library UP-TO-DATE
    :app:prepareComFacebookFrescoImagepipelineOkhttp081Library UP-TO-DATE
    :app:prepareComFacebookReactReactNative0210Library UP-TO-DATE
    :app:prepareOrgWebkitAndroidJscR174650Library UP-TO-DATE
    :app:prepareDebugDependencies
    :app:compileDebugAidl UP-TO-DATE
    :app:compileDebugRenderscript UP-TO-DATE
    :app:generateDebugBuildConfig UP-TO-DATE
    :app:generateDebugAssets UP-TO-DATE
    :app:mergeDebugAssets UP-TO-DATE
    :app:generateDebugResValues UP-TO-DATE
    :app:generateDebugResources UP-TO-DATE
    :app:mergeDebugResources UP-TO-DATE
    :app:bundleDebugJsAndAssets SKIPPED
    :app:processDebugManifest UP-TO-DATE
    :app:processDebugResources UP-TO-DATE
    :app:generateDebugSources UP-TO-DATE
    :app:processDebugJavaRes UP-TO-DATE
    :app:compileDebugJavaWithJavac UP-TO-DATE
    :app:compileDebugNdk UP-TO-DATE
    :app:compileDebugSources UP-TO-DATE
    :app:preDexDebug UP-TO-DATE
    :app:dexDebug UP-TO-DATE
    :app:validateDebugSigning
    :app:packageDebug UP-TO-DATE
    :app:zipalignDebug UP-TO-DATE
    :app:assembleDebug UP-TO-DATE
    :app:installDebug
    Installing APK 'app-debug.apk' on 'Nexus_5X_API_25_x86(AVD) - 7.1.1'
    Installed on 1 device.
    
    BUILD SUCCESSFUL
    
    Total time: 9.438 secs
    
    This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html
    Starting the app (adb shell am start -n com.reactnativenwreactcalculator/.MainActivity)...
    ╭─reis@Asakura ~/Documents/Testcode/react-native-nw-react-calculator  ‹master› 
    ╰─➤ 
    

    nothing shows on my emulator. I've turned it on via

    ./emulator -avd Nexus_5X_API_25_x86
    
    opened by yuzrieSiddiq 6
  • `npm test` fails with naming collision

    `npm test` fails with naming collision

    Repro steps:

    1. git clone https://github.com/benoitvallon/react-native-nw-react-calculator
    2. cd react-native-nw-react-calculator
    3. npm install
    4. npm install (again, per discussion in #3)
    5. npm test

    Actual results:

    koi:✓:react-native-nw-react-calculator>> npm test
    
    > [email protected] test /Users/whitley/src/3p/react-native-nw-react-calculator
    > jest
    
    Using Jest CLI v0.9.0, jasmine2
    
    Error: Failed to build DependencyGraph: @providesModule naming collision:
      Duplicate module name: xhrSimpleDataSerializer
      Paths: /Users/whitley/src/3p/react-native-nw-react-calculator/node_modules/react-native/node_modules/fbjs/lib/xhrSimpleDataSerializer.js collides with /Users/whitley/src/3p/react-native-nw-react-calculator/node_modules/flux/node_modules/fbjs/flow/include/xhrSimpleDataSerializer.js
    
    This error is caused by a @providesModule declaration with the same name accross two different files.
    
    This is most likely a setup or configuration issue. To resolve a module name collision, change or blacklist one of the offending modules. See http://facebook.github.io/jest/docs/api.html#config-modulepathignorepatterns-array-string
    npm ERR! Test failed.  See above for more details.
    

    I've tried to repro with both node v5.5.0 (npm v3.3.12) and node v5.7.0 (npm v3.6.0), with the same error each time.

    FWIW, I ended up here after having similar naming collision errors plaguing my attempts to bring up jest-based tests in a new RN project I'm working on. (BTW, thanks a LOT for including tests here. Very few public RN projects seem to bother.) I'm at a loss as to what could be causing this, aside from it being at least superficially related to facebook/react-native#3625 and facebook/react-native#3618. But those have been hanging around for some time, meanwhile the discussion on issues and PRs here suggest that the tests have been running well for you and others.

    Any ideas?

    opened by jwhitley 3
  • Handle keyboard input in web version.

    Handle keyboard input in web version.

    Problem:

    Not possible to use keyboard in web version.

    Solution:

    I added hidden component KeyboardHandler which handle keyboard input. This component rendered in AppRender component. KeyboardHandler uses data from keyCodes.json in constants folder.

    Result:

    Now it is possible to interact with calculator by keyboard.

    opened by morsko1 1
  • Multiple platforms - build configuration question

    Multiple platforms - build configuration question

    Hi, Could you explain how build tools 'knows' which files to import? For example when you use import Render from './KeyRender'; how it knows if choose KeyRender.js, KeyRender.android.js or KeyRender.ios.js? I can't find place where it's configured. For example when I want to change suffixes from .android.js to .myandroid.js which config should I edit?

    EDIT: Ok, I think I found it: https://facebook.github.io/react-native/docs/platform-specific-code.html#platform-specific-extensions So react-native uses .android.js or .ios.js files (if exists - if not rn uses .js files) Webpack (used for desktop and web) uses .js files

    opened by dstudzinski 1
  • Adds demo

    Adds demo

    Please, add demo to show the running application.

    After https://github.com/benoitvallon/react-native-nw-react-calculator/pull/15 's merge,

    npm run build
    cd dist
    git init && git add . && git commit -m "Pages"
    git remote add github [email protected]:benoitvallon/react-native-nw-react-calculator.git
    git push -f github master:gh-pages
    

    I tried it on my side. my demo my branch

    opened by godu 1
  • Update README.md

    Update README.md

    I have just updated the end of the readme file and I believe that sky color is not suitable for the background color in-app have to update that soon. Thanks

    opened by kaxiif 0
  • default export set

    default export set

    previous method does not allow flexible import of "CalculatorActions" in other components we strictly had to import "CalculatorActions" with the same name but the changes made allow us to import CalculatorActions with any name in any component

    opened by anishagg17 0
  • migrate .eslintrc file to ESLint v2

    migrate .eslintrc file to ESLint v2

    ESLInt has updated to v2 and there're some significant changes (http://eslint.org/docs/user-guide/migrating-to-2.0.0#language-options). There're some ESLint warning with the current .eslintrc and update the option will solve those warnings.

    opened by lessmost 0
  • Cannot find module 'postcss-filter-plugins'

    Cannot find module 'postcss-filter-plugins'

    when i execute npm run build: throw the error: `WARNING in main.js from UglifyJs Condition always true [./~/react/lib/ReactMount.js:764,0] Dropping side-effect-free statement [./~/react-router/lib/deprecateObjectProperties.js:65,0] Side effects in initialization of unused variable _ret [./~/react-router/lib/deprecateObjectProperties.js:63,0] Condition always true [./~/react/lib/findDOMNode.js:46,0] Condition always true [./~/react/lib/instantiateReactComponent.js:80,0] Dropping unreachable code [./~/react/lib/shouldUpdateReactComponent.js:40,0] Condition always true [./~/react/lib/traverseAllChildren.js:158,0] Condition always true [./~/react-router/lib/Redirect.js:97,0] Condition always false [./~/style-loader/addStyles.js:24,0] Dropping unreachable code [./~/style-loader/addStyles.js:25,0] Dropping unused variable r [./~/es6-promise/dist/es6-promise.js:130,0] Condition left of && always true [./~/es6-promise/dist/es6-promise.js:944,0] Dropping unused function lib$es6$promise$utils$$isMaybeThenable [./~/es6-promise/dist/es6-promise.js:19,0] Condition always true [./~/history/lib/createMemoryHistory.js:67,0] Condition always true [./~/react-router/lib/IndexRedirect.js:58,0] Condition always true [./~/react-router/lib/IndexRoute.js:55,0] Condition always true [./~/react-router/lib/Route.js:50,0] Dropping side-effect-free statement [./~/react-router/lib/getComponents.js:56,0] Side effects in initialization of unused variable _ret [./~/react-router/lib/getComponents.js:54,0] Condition always true [./~/react/lib/ReactDOMComponent.js:907,0] Dropping side-effect-free statement [./~/react/lib/ReactEventListener.js:72,0] Dropping unused function handleTopLevelWithPath [./~/react/lib/ReactEventListener.js:98,0] Dropping unused variable DOCUMENT_FRAGMENT_NODE_TYPE [./~/react/lib/ReactEventListener.js:26,0] Condition always false [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:10,0] Dropping unreachable code [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:12,0] Side effects in initialization of unused variable update [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:7,0] Condition always false [./~/style-loader!./~/css-loader!./src/styles/main.css:10,0] Dropping unreachable code [./~/style-loader!./~/css-loader!./src/styles/main.css:12,0] Side effects in initialization of unused variable update [./~/style-loader!./~/css-loader!./src/styles/main.css:7,0]

    ERROR in Cannot find module 'postcss-filter-plugins' @ ./src/styles/main.css 4:14-78

    ERROR in Cannot find module 'postcss-filter-plugins' @ ./~/normalize.css/normalize.css 4:14-67 Warning: Task "webpack:dist" failed. Use --force to continue.

    Aborted due to warnings.

    npm ERR! Darwin 15.0.0 npm ERR! argv "/Users/admin/.nvm/versions/node/v5.6.0/bin/node" "/Users/admin/.nvm/versions/node/v5.6.0/lib/node_modules/cnpm/node_modules/.bin/npm" "--userconfig=/Users/admin/.cnpmrc" "--disturl=https://npm.taobao.org/mirrors/node" "--registry=https://registry.npm.taobao.org" "run" "build" npm ERR! node v5.6.0 npm ERR! npm v3.8.6 npm ERR! code ELIFECYCLE npm ERR! [email protected] build: grunt build npm ERR! Exit status 3 npm ERR! npm ERR! Failed at the [email protected] build script 'grunt build'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the ReactNativeNWReactCalculator package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! grunt build npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs ReactNativeNWReactCalculator npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls ReactNativeNWReactCalculator npm ERR! There is likely additional logging output above.

    npm ERR! Please include the following file with any support request: npm ERR! /Users/admin/Desktop/react-native-nw-react-calculator-master/npm-debug.log `

    opened by recwert 0
  • Bump eslint from 2.13.1 to 6.6.0

    Bump eslint from 2.13.1 to 6.6.0

    Bumps eslint from 2.13.1 to 6.6.0.

    Release notes

    Sourced from eslint's releases.

    v6.6.0

    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12280) (Scott O'Hara)
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477) (Milos Djermanovic)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12480) (Milos Djermanovic)
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12347) (Milos Djermanovic)
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379) (Milos Djermanovic)
    • 364877b Update: measure plugin loading time and output in debug message (#12395) (Victor Homyakov)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485) (Milos Djermanovic)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483) (Milos Djermanovic)
    • 0f6d0dc Fix: CLIEngine#addPlugin reset lastConfigArrays (fixes #12425) (#12468) (Toru Nagashima)
    • 923a8cb Chore: Fix lint failure in JSDoc comment (#12489) (Brandon Mills)
    • aac3be4 Update: Add ignored prop regex no-param-reassign (#11275) (Luke Bennett)
    • e5382d6 Chore: Remove unused parameter in dot-location (#12464) (Milos Djermanovic)
    • 49faefb Fix: no-obj-calls false positive (fixes #12437) (#12467) (Toru Nagashima)
    • b3dbd96 Fix: problematic installation issue (fixes #11018) (#12309) (Toru Nagashima)
    • cd7c29b Sponsors: Sync README with website (ESLint Jenkins)
    • 8233873 Docs: Add note about Node.js requiring SSL support (fixes #11413) (#12475) (Nicholas C. Zakas)
    • 89e8aaf Fix: improve report location for no-tabs (#12471) (Milos Djermanovic)
    • 7dffe48 Update: Enable function string option in comma-dangle (fixes #12058) (#12462) (YeonJuan)
    • e15e1f9 Docs: fix doc for no-unneeded-ternary rule (fixes #12098) (#12410) (Sam Rae)
    • b1dc58f Sponsors: Sync README with website (ESLint Jenkins)
    • 61749c9 Chore: Provide debug log for parser errors (#12474) (Brad Zacher)
    • 7c8bbe0 Update: enforceForOrderingRelations no-unsafe-negation (fixes #12163) (#12414) (Sam Rae)
    • 349ed67 Update: improve report location for no-mixed-operators (#12328) (Chiawen Chen)
    • a102eaa Fix: prefer-numeric-literals invalid autofix with adjacent tokens (#12387) (Milos Djermanovic)
    • 6e7c18d Update: enforceForNewInMemberExpressions no-extra-parens (fixes #12428) (#12436) (Milos Djermanovic)
    • 51fbbd7 Fix: array-bracket-newline consistent error with comments (fixes #12416) (#12441) (Milos Djermanovic)
    • e657d4c Fix: report full dot location in dot-location (#12452) (Milos Djermanovic)
    • 2d6e345 Update: make isSpaceBetweenTokens() ignore newline in comments (#12407) (YeonJuan)
    • 84f71de Update: remove default overrides in keyword-spacing (fixes #12369) (#12411) (YeonJuan)
    • 18a0b0e Update: improve report location for no-space-in-parens (#12364) (Chiawen Chen)
    • d61c8a5 Update: improve report location for no-multi-spaces (#12329) (Chiawen Chen)
    • 561093f Upgrade: bump inquirer to ^7.0.0 (#12440) (Joe Graham)
    • fb633b2 Chore: Add a script for testing with more control (#12444) (Eric Wang)
    • 012ec51 Sponsors: Sync README with website (ESLint Jenkins)
    • 874fe16 New: pass cwd from cli engine (#12389) (Eric Wang)
    • b962775 Update: no-self-assign should detect member expression with this (#12279) (Tibor Blenessy)
    • 02977f2 Docs: Clarify eslint:recommended semver policy (#12429) (Kevin Partington)
    • 97045ae Docs: Fixes object type for rules in "Use a Plugin" (#12409) (Daisy Develops)
    • 24ca088 Docs: Fix typo in v6 migration guide (#12412) (Benjamim Sonntag)
    • b094008 Chore: update version parameter name (#12402) (Toru Nagashima)
    • e5637ba Chore: enable jsdoc/require-description (#12365) (Kai Cataldo)
    • d31f337 Sponsors: Sync README with website (ESLint Jenkins)
    • 7ffb22f Chore: Clean up inline directive parsing (#12375) (Jordan Eldredge)
    • 84467c0 Docs: fix wrong max-depth example (fixes #11991) (#12358) (Gabriel R Sezefredo)
    • 3642342 Docs: Fix minor formatting/grammar errors (#12371) (cherryblossom000)
    • c47fa0d Docs: Fix missing word in sentence (#12361) (Dan Boulet)
    • 8108f49 Chore: enable additional eslint-plugin-jsdoc rules (#12336) (Kai Cataldo)
    • b718d2e Chore: update issue template with --eslint-fix flag (#12352) (James George)
    • 20ba14d Sponsors: Sync README with website (ESLint Jenkins)
    ... (truncated)
    Changelog

    Sourced from eslint's changelog.

    v6.6.0 - October 25, 2019

    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12280) (Scott O'Hara)
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477) (Milos Djermanovic)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12480) (Milos Djermanovic)
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12347) (Milos Djermanovic)
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379) (Milos Djermanovic)
    • 364877b Update: measure plugin loading time and output in debug message (#12395) (Victor Homyakov)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485) (Milos Djermanovic)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483) (Milos Djermanovic)
    • 0f6d0dc Fix: CLIEngine#addPlugin reset lastConfigArrays (fixes #12425) (#12468) (Toru Nagashima)
    • 923a8cb Chore: Fix lint failure in JSDoc comment (#12489) (Brandon Mills)
    • aac3be4 Update: Add ignored prop regex no-param-reassign (#11275) (Luke Bennett)
    • e5382d6 Chore: Remove unused parameter in dot-location (#12464) (Milos Djermanovic)
    • 49faefb Fix: no-obj-calls false positive (fixes #12437) (#12467) (Toru Nagashima)
    • b3dbd96 Fix: problematic installation issue (fixes #11018) (#12309) (Toru Nagashima)
    • cd7c29b Sponsors: Sync README with website (ESLint Jenkins)
    • 8233873 Docs: Add note about Node.js requiring SSL support (fixes #11413) (#12475) (Nicholas C. Zakas)
    • 89e8aaf Fix: improve report location for no-tabs (#12471) (Milos Djermanovic)
    • 7dffe48 Update: Enable function string option in comma-dangle (fixes #12058) (#12462) (YeonJuan)
    • e15e1f9 Docs: fix doc for no-unneeded-ternary rule (fixes #12098) (#12410) (Sam Rae)
    • b1dc58f Sponsors: Sync README with website (ESLint Jenkins)
    • 61749c9 Chore: Provide debug log for parser errors (#12474) (Brad Zacher)
    • 7c8bbe0 Update: enforceForOrderingRelations no-unsafe-negation (fixes #12163) (#12414) (Sam Rae)
    • 349ed67 Update: improve report location for no-mixed-operators (#12328) (Chiawen Chen)
    • a102eaa Fix: prefer-numeric-literals invalid autofix with adjacent tokens (#12387) (Milos Djermanovic)
    • 6e7c18d Update: enforceForNewInMemberExpressions no-extra-parens (fixes #12428) (#12436) (Milos Djermanovic)
    • 51fbbd7 Fix: array-bracket-newline consistent error with comments (fixes #12416) (#12441) (Milos Djermanovic)
    • e657d4c Fix: report full dot location in dot-location (#12452) (Milos Djermanovic)
    • 2d6e345 Update: make isSpaceBetweenTokens() ignore newline in comments (#12407) (YeonJuan)
    • 84f71de Update: remove default overrides in keyword-spacing (fixes #12369) (#12411) (YeonJuan)
    • 18a0b0e Update: improve report location for no-space-in-parens (#12364) (Chiawen Chen)
    • d61c8a5 Update: improve report location for no-multi-spaces (#12329) (Chiawen Chen)
    • 561093f Upgrade: bump inquirer to ^7.0.0 (#12440) (Joe Graham)
    • fb633b2 Chore: Add a script for testing with more control (#12444) (Eric Wang)
    • 012ec51 Sponsors: Sync README with website (ESLint Jenkins)
    • 874fe16 New: pass cwd from cli engine (#12389) (Eric Wang)
    • b962775 Update: no-self-assign should detect member expression with this (#12279) (Tibor Blenessy)
    • 02977f2 Docs: Clarify eslint:recommended semver policy (#12429) (Kevin Partington)
    • 97045ae Docs: Fixes object type for rules in "Use a Plugin" (#12409) (Daisy Develops)
    • 24ca088 Docs: Fix typo in v6 migration guide (#12412) (Benjamim Sonntag)
    • b094008 Chore: update version parameter name (#12402) (Toru Nagashima)
    • e5637ba Chore: enable jsdoc/require-description (#12365) (Kai Cataldo)
    • d31f337 Sponsors: Sync README with website (ESLint Jenkins)
    • 7ffb22f Chore: Clean up inline directive parsing (#12375) (Jordan Eldredge)
    • 84467c0 Docs: fix wrong max-depth example (fixes #11991) (#12358) (Gabriel R Sezefredo)
    • 3642342 Docs: Fix minor formatting/grammar errors (#12371) (cherryblossom000)
    • c47fa0d Docs: Fix missing word in sentence (#12361) (Dan Boulet)
    • 8108f49 Chore: enable additional eslint-plugin-jsdoc rules (#12336) (Kai Cataldo)
    • b718d2e Chore: update issue template with --eslint-fix flag (#12352) (James George)
    ... (truncated)
    Commits
    • 879c373 6.6.0
    • c8ba30a Build: changelog update for 6.6.0
    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12...
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12...
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12...
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379)
    • 364877b Update: measure plugin loading time and output in debug message (#12395)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by eslintbot, a new releaser for eslint since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Calculator can’t do BIDMAS

    Calculator can’t do BIDMAS

    I am unable to create an equation which involves more than one operator. When I type 3+3, then click * to try to do 3+3*3, it just replaces the + with a . Making the equation 33 and giving me the answer 9.

    opened by TheDynamical 1
Owner
Benoit VALLON
Benoit VALLON
Learn to Code While Building Apps - The Complete iOS Development Bootcamp

BMI Calculator Our Goal The goal of this tutorial is to learn more about Optionals, solidify your understanding of the MVC design pattern and to intro

The App Brewery 52 Oct 6, 2022
Currency Converter - Free and Quick Converter calculates money quick and easy way to see live foreign exchange rates.

Currency Converter - Free and Quick Converter calculates money quick and easy way to see live foreign exchange rates. This app is available in the App

Tirupati Balan 212 Dec 30, 2022
Bill splitting and tip calculating app, build with UIKit and MVC pattern.

Split Check Bill splitting and tip calculating app, build with UIKit and MVC pattern. Features Enter bill total with number pad. Select tip % and betw

Anibal Ventura 0 Jan 7, 2022
Splito - Nice and easy-to-use billing and tip calculator with swift

Splito! Nice and easy-to-use billing and tip calculator

Aleksandr Morozov 9 Dec 30, 2022
IBCalculator is an example app to demonstrate how to use @IBDesignable and @IBInspectable

IBCalculator IBCalculator is an example app to demonstrate how to use @IBDesignable and @IBInspectable. The origin code is from IBInspectable / IBDesi

Jake Lin 62 Nov 12, 2022
A tip calculator for iOS (in Swift) and Android

Round & Split I needed a tip calculator, so I wrote one. I always round my tips, and when I dine out with a friend, I email them reminders that I owe

Lukhnos Liu 48 Jun 25, 2022
Tip-Calculation- - A program for calculate the tip. You can easily calculate it and you can split money easily

Tip-Calculation- It is a program for calculate the tip. You can easily calculate

Burak Pala 0 Jan 13, 2022
BMI-Calculator - An app which calculates the BMI and gives suggestion

BMI-Calculator An app which calculates the BMI and gives suggestion with MVC pat

null 0 Jan 19, 2022
Add opacity to any SwiftUI View and decrease it every day until their app completely fades away

NotPaid - SwiftUI Client did not pay? Add opacity to any SwiftUI View and decrease it every day until their app completely fades away. Set a due date

Vincent Frascello 6 Oct 15, 2022
A hobby project using Swift protocol and Swift 5.7's new generics to build an iOS Calculator-like calculator.

Calculator A hobby project using Swift protocol and Swift 5.7's new generics to build an iOS Calculator-like calculator. Highlights: You can use Calcu

Kyle 4 Oct 24, 2022
Mullvad VPN desktop and mobile app

Mullvad VPN desktop and mobile app Welcome to the Mullvad VPN client app. This repository contains all the source code for the desktop and mobile vers

Mullvad VPN 3k Jan 3, 2023
Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…)

Perfect: Server-Side Swift 简体中文 Perfect: Server-Side Swift Perfect is a complete and powerful toolbox, framework, and application server for Linux, iO

PerfectlySoft Inc. 13.9k Dec 29, 2022
Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…)

Perfect: Server-Side Swift 简体中文 Perfect: Server-Side Swift Perfect is a complete and powerful toolbox, framework, and application server for Linux, iO

PerfectlySoft Inc. 13.9k Jan 6, 2023
Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…)

Perfect: Server-Side Swift 简体中文 Perfect: Server-Side Swift Perfect is a complete and powerful toolbox, framework, and application server for Linux, iO

PerfectlySoft Inc. 13.9k Dec 29, 2022
Switchboard - easy and super light weight A/B testing for your mobile iPhone or android app. This mobile A/B testing framework allows you with minimal servers to run large amounts of mobile users.

Switchboard - easy A/B testing for your mobile app What it does Switchboard is a simple way to remote control your mobile application even after you'v

Keepsafe 287 Nov 19, 2022
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Sparrow Code 31 Jan 3, 2023
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Страницы доступны на sparrowcode.io/en & sparrowcode.io/ru Как добавить свое приложение Добавьте элемент в json /ru/apps/apps.json. Если ваше приложен

Sparrow Code 30 Nov 25, 2022
A general purpose embedded hierarchical lock manager used to build highly concurrent applications of all types. Same type of locker used in many of the large and small DBMSs in existence today.

StickyLocking StickyLocking is a general purpose embedded lock manager which allows for locking any resource hierarchy. Installable Lock modes allow f

Sticky Tools 2 Jun 15, 2021
This is an open source app made to help home brewers brew their coffee by calculating the grams of water needed, and run a timer all in the same screen.

Ratios This is an open source app made to help home brewers brew their coffee by calculating the grams of water needed, and run a timer all in the sam

John Peden 64 Jan 1, 2023
Useful for showing text or custom view tags in a vertical or horizontal scrollable view and support Autolayout at the same time

Useful for showing text or custom view tags in a vertical or horizontal scrollable view and support Autolayout at the same time. It is highly customizable that most features of the text tag can be configured.

zekunyan 1.8k Dec 30, 2022