From a51edb772546f9db09e78fe424e70c305b5ceb38 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:46 -0400 Subject: [PATCH 001/142] New translations create.md (Danish) --- src/pages/da/appflow/automation/create.md | 69 +++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/pages/da/appflow/automation/create.md diff --git a/src/pages/da/appflow/automation/create.md b/src/pages/da/appflow/automation/create.md new file mode 100644 index 0000000000..581295934d --- /dev/null +++ b/src/pages/da/appflow/automation/create.md @@ -0,0 +1,69 @@ +--- +previousText: 'Introduction' +previousUrl: '/docs/appflow/automation/intro' +nextText: 'Environments' +nextUrl: '/docs/appflow/automation/environments' +--- + +# Using Automations + +## Managing Automations + +Creating and customizing automations is simple. To get started, navigate to the `Automate` tab within the desired app. + +To **create a new automation**, click the `New Automation` button on the top right of the `Automate` dashboard. When clicked, the automation customization form will appear, which has several fields available to customize the automation (Read more about these [below](#customizing-automations)). + +To **edit an automation**, click the three dots next to the one you'd like to modify. + +## Customizing Automations + +There are a number of customizations available to specify the specific behavior of a given automation. They are shown on the create/edit automation form below. + +### Basic Automation Info + +All automations need a name and git branch to trigger from. Whenever code is pushed to the selected branch, the automation will run. + +![Choosing an Automation Type](/docs/assets/img/appflow/ss-automation-create-type.png) + +#### Fields + +* **Name:** A name to identify the automation task. +* **Git Branch:** The branch which will trigger the automation. This will run a build any time a `git push` is made to the specified branch. +* **Automation Type:** The type of job this automation will run. + +In addition to name and git branches, automations have a number of customizations available depending on the type of job selected. + +##### Note about Git Branch naming + +It is possible to specify one or multiple `*` wildcards character to match multiple branches within a single automation; for instance: + +* a branch simply set to `*` will match all the branches and will trigger the automation for any single git push +* a branch set to `dev*` will match any branch with a name starting with `dev` including `dev` itself +* a branch set to `dev*other` will match any branch with a name starting with `dev` and ending with `other` including `devother` + +### Package Automations + +Package automations create native builds which can be downloaded and run on devices. They have the following customizations: + +![Creating a package automation](/docs/assets/img/appflow/ss-automation-create-package.png) + +#### Fields + +* **Environment:** The [custom build environment](/docs/appflow/environments/#custom-environments) (if any) to use when this automations is triggered. +* **Native Config:** The [native config](/docs/appflow/package/intro#native-configs) (if any) to use when this automations is triggered. +* **Target Platform:** The platform being targeted, can be Android or iOS (for either Xcode 8 or 9) +* **Build Type:** The type of build to create. Options depend on the selected platform. +* **Security Profile:** Which security profile to use. Learn more about them [here](/docs/appflow/package/credentials). +* **Webhook:** (optional) If specified, a POST with information about completed builds will be sent to the entered URL. Learn more about their content [here](/docs/appflow/automation/webhooks). + +### Web Automations + +Web automations build the javascript portion of an application and interface with the [Deploy](/docs/appflow/deploy/intro) service to enable live app updates. + +![Creating a web automation](/docs/assets/img/appflow/ss-automation-create-web.png) + +#### Fields + +* **Environment:** The [custom build environment](/docs/appflow/environments/#custom-environments) (if any) to use when this automations is triggered. +* **Channel:** The [Deploy Channel](/docs/appflow/deploy/channels) where web builds from this automation will be assigned. +* **Webhook:** (optional) If specified, a POST with information about completed builds will be sent to the entered URL. Learn more about their content [here](/docs/appflow/automation/webhooks). \ No newline at end of file From 6016fbe7855598d00f23ce9518bad158e6438880 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:47 -0400 Subject: [PATCH 002/142] New translations native-core.md (Danish) --- src/pages/da/enterprise/native-core.md | 120 +++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/pages/da/enterprise/native-core.md diff --git a/src/pages/da/enterprise/native-core.md b/src/pages/da/enterprise/native-core.md new file mode 100644 index 0000000000..5cc5599f9e --- /dev/null +++ b/src/pages/da/enterprise/native-core.md @@ -0,0 +1,120 @@ +# Native Core + +Native Core is a reliable set of Native APIs & functionality that you can use in your Ionic app, available within a single plugin, that is written and maintained by the Ionic Team. + +Native Core is included in Ionic EE (Enterprise Edition): + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Features + +
+ Community Edition +
$0/mo
+
+
+
+ Enterprise Edition +
+ Contact Us
+
+
+ Maintainer + OSS CommunityIonic
+ Regular Release Cycles & Updates + No
+ Support SLA & Ticketing System + No
+ Advisory & Support + No
+ Security & Bug fixes + OSS Community
+ Implementation Guidance + No
+ Guaranteed SLA + No
+ Native Core + No
Contact Us
+
+
+ +It includes functionality for: + +- Accessibility +- App +- Background Task +- Browser +- Camera +- Clipboard +- Console +- Device +- Filesystem +- Geolocation +- Haptics +- Keyboard +- Local Notifications +- Modals +- Motion +- Network +- Share +- Splash Screen +- Status Bar +- Storage +- Toast \ No newline at end of file From 8e6849d454f20376a231c7a9a234ccbff223bbe4 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:48 -0400 Subject: [PATCH 003/142] New translations android.md (Danish) --- src/pages/da/installation/android.md | 153 +++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 src/pages/da/installation/android.md diff --git a/src/pages/da/installation/android.md b/src/pages/da/installation/android.md new file mode 100644 index 0000000000..9bb1b38fa4 --- /dev/null +++ b/src/pages/da/installation/android.md @@ -0,0 +1,153 @@ +--- +previousText: 'iOS Setup' +previousUrl: '/docs/installation/ios' +nextText: 'Starting an App' +nextUrl: '/docs/building/starting' +contributors: + - rtpHarry +--- + +# Android Setup + +To target the Android platform, some additional environment setup is required. Android apps can be created on Windows, macOS, and Linux. + +## Java + +Native Android apps are compiled with the Java programming language. Download JDK8 from the download page. + +
+

Cordova is not compatible with the latest version of Java. You must install JDK8 to build Android apps with Cordova.

+
+ +## Gradle + +Gradle is the build tool used in Android apps and must be installed separately. See the install page for details. + +## Android Studio + +Android Studio is the IDE for creating native Android apps. It includes the Android SDK, which will need to be configured for use in the command line. + +Android Studio is also used to [create Android virtual devices](/docs/installation/android#creating-an-android-virtual-device), which are required for the Android emulator. Ionic apps can also be [launched to a device](/docs/installation/android#set-up-an-android-device). + +### Installing Android Studio + +Download Android Studio from the Android website. More detailed installation instructions can be found in the User Guide. + +### Installing the Android SDK + +Once installed, open Android Studio. The IDE should detect that the Android SDK needs to be installed. In the **SDK Components Setup** screen, finish installing the SDK. Keep note of the **Android SDK Location**. + +![Android Studio SDK Setup](/docs/assets/img/installation/android-studio-sdk-setup.png) + +By default, the latest stable SDK Platform is installed, which includes a collection of packages required to target that version of Android. + +
+ 📝 Note: To install system images and other minor SDK platform packages, you may need to ensure Show Package Details is checked at the bottom of the SDK Manager. + Android Studio SDK Manager +
+ +For future reference, the Android SDK can be managed with Android Studio in the **Configure** » **SDK Manager** menu of the Android Studio welcome screen or **Tools** » **SDK Manager** inside Android projects. + +### Configuring Command Line Tools + +The Android SDK ships with useful command-line tools. Before they can be used, some environment variables must be set. The following instructions are for macOS and Linux. For Windows, check the documentation on setting and persisting environment variables in terminal sessions. + +In `~/.bashrc`, `~/.bash_profile`, or similar shell startup scripts, make the following modifications: + +1. Set the `ANDROID_SDK_ROOT` environment variable. This path should be the **Android SDK Location** used in the previous section. + +```shell + $ export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk + ``` + +1. Add the Android SDK command-line directories to `PATH`. Each directory corresponds to the category of <a href="https://developer.android.com/studio/command-line/" target="_blank">command-line tool</a>. + + <command-line nobuttons> + <command-output># avdmanager, sdkmanager</command-output> + <command-prompt>export PATH=$PATH:$ANDROID_SDK_ROOT/tools/bin</command-prompt> + <br /> + <command-output># adb, logcat</command-output> + <command-prompt>export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools</command-prompt> + <br /> + <command-output># emulator</command-output> + <command-prompt>export PATH=$PATH:$ANDROID_SDK_ROOT/emulator</command-prompt> + </command-line> + + + +
+

For apksigner and zipalign, $ANDROID_SDK_ROOT/build-tools must also be added to PATH.

+
+ + + +### Creating an Android Virtual Device + +Android Virtual Devices (AVDs) are blueprints that the Android emulator uses to run the Android OS. The following documentation is a quick way to get the Android emulator set up. For more detailed instructions and information, see <a href="https://developer.android.com/studio/run/managing-avds" target="_blank">the Android documentation</a>. + +AVDs are managed with the AVD Manager. In the Android Studio welcome screen, click **Configure** » **AVD Manager**. The AVD Manager can also be opened inside Android projects in the **Tools** » **AVD Manager** menu. + +![AVD Setup](/docs/assets/img/installation/android-studio-avd-setup.png) + +Click **Create Virtual Device** and select a suitable device definition. If unsure, choose **Pixel 2**. Then, select a suitable system image. If unsure, choose **Pie** (API 28) with Google Play services. See <a href="https://en.wikipedia.org/wiki/Android_version_history" target="_blank">Android version history</a> for information on Android versions. + +Once the AVD is created, launch the AVD into the Android emulator. Keeping the emulator running is the best way to ensure detection while developing Ionic apps for Android. + + + +
+ Android Emulator Booting +
+ + + +### Set up an Android Device + +Actual Android hardware can also be used for Ionic app development. But first, the device must be set up for development. The following documentation is a quick way to set up Android devices for development. For more detailed instructions and information, see <a href="https://developer.android.com/studio/run/device" target="_blank">the Android documentation</a>. + +1. Enable USB debugging on the device. Open **Settings**, navigate to **Developer options**, and enable **USB debugging**. The **Developer options** menu may need to be enabled first. See <a href="https://developer.android.com/studio/debug/dev-options" target="_blank">the Android documentation</a> for instructions. +1. Ensure the device has permission to connect to the computer. For macOS, no additional setup is required. For Windows, <a href="https://developer.android.com/studio/run/oem-usb" target="_blank">install the OEM USB drivers</a>. + +Verify the connection works by connecting the device to the computer with a USB cable and using the following command: + +```shell +$ adb devices +``` and zipalign, $ANDROID_SDK_ROOT/build-tools must also be added to PATH.

+ + + + +### Creating an Android Virtual Device + +Android Virtual Devices (AVDs) are blueprints that the Android emulator uses to run the Android OS. The following documentation is a quick way to get the Android emulator set up. For more detailed instructions and information, see <a href="https://developer.android.com/studio/run/managing-avds" target="_blank">the Android documentation</a>. + +AVDs are managed with the AVD Manager. In the Android Studio welcome screen, click **Configure** » **AVD Manager**. The AVD Manager can also be opened inside Android projects in the **Tools** » **AVD Manager** menu. + +![AVD Setup](/docs/assets/img/installation/android-studio-avd-setup.png) + +Click **Create Virtual Device** and select a suitable device definition. If unsure, choose **Pixel 2**. Then, select a suitable system image. If unsure, choose **Pie** (API 28) with Google Play services. See <a href="https://en.wikipedia.org/wiki/Android_version_history" target="_blank">Android version history</a> for information on Android versions. + +Once the AVD is created, launch the AVD into the Android emulator. Keeping the emulator running is the best way to ensure detection while developing Ionic apps for Android. + + + +
+ Android Emulator Booting +
+ + + +### Set up an Android Device + +Actual Android hardware can also be used for Ionic app development. But first, the device must be set up for development. The following documentation is a quick way to set up Android devices for development. For more detailed instructions and information, see <a href="https://developer.android.com/studio/run/device" target="_blank">the Android documentation</a>. + +1. Enable USB debugging on the device. Open **Settings**, navigate to **Developer options**, and enable **USB debugging**. The **Developer options** menu may need to be enabled first. See <a href="https://developer.android.com/studio/debug/dev-options" target="_blank">the Android documentation</a> for instructions. +1. Ensure the device has permission to connect to the computer. For macOS, no additional setup is required. For Windows, <a href="https://developer.android.com/studio/run/oem-usb" target="_blank">install the OEM USB drivers</a>. + +Verify the connection works by connecting the device to the computer with a USB cable and using the following command: + +```shell +$ adb devices + + +The device should be listed. See the full adb documentation for troubleshooting and detailed information. \ No newline at end of file From 3052399332a41f7e8eb99c12b3615877bc4cbc1f Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:49 -0400 Subject: [PATCH 004/142] New translations tips.md (Danish) --- src/pages/da/faq/tips.md | 89 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/pages/da/faq/tips.md diff --git a/src/pages/da/faq/tips.md b/src/pages/da/faq/tips.md new file mode 100644 index 0000000000..c0dc57ac40 --- /dev/null +++ b/src/pages/da/faq/tips.md @@ -0,0 +1,89 @@ +--- +previousText: 'Security' +previousUrl: '/docs/faq/security' +contributors: + - rtpHarry + - FdezRomero + - brandyscarney +--- + +# Developer Tips + +## Updating Dependencies + +To update a [npm](https://www.npmjs.com/) dependency, run the following, where `` is the package to update: + +```shell +$ npm install <package-name>@ However, this will not change how the browser sees which platform is currently being used. Platform is determined by device detection and inspecting the user-agent. So to change the platform, the user-agent must be changed. To do this, open up Chrome DevTools, and toggle device mode on with Ctrl+Shift+i(Cmd+Option+I on Mac). + +![app with a different mode](/docs/assets/img/faq/tips/change-device-platform.png) + +Selecting devices from the device dropdown will change the user-agent, as well as the dimensions of the viewport. + +## Using the iOS Simulator + +The iOS simulator enables testing and debugging of an app before it reaches an actual device. Before it can be used, [Xcode](https://developer.apple.com/xcode/download/), Apple's IDE, must be installed. The [Ionic CLI](/docs/cli) can then be used to run the app in the current directory on the simulator: + +```shell +$ ionic cordova emulate ios -lc +``` + +Passing in the `-lc` flag will enable livereload and log console output to an terminal. + +Xcode can also be used to launch the emulator and debug an app. Open up Xcode and open `../path-to-app/platforms/ios/myApp.xcodeproj`. After the app loads, console output and device logs will be printed inside of Xcode's output window. + +## Using the Genymotion Android Emulator + +While the Android SDK comes with a stock emulator, it can be slow and unresponsive at times. [Genymotion](https://www.genymotion.com) is an alternate emulator that is faster, and still allows accesses to native functionality like GPS and camera. + +## Remote Debugging - iOS and Safari + +Safari can be used to debug an Ionic app on a connected iOS device. First, Web Inspector needs to be enabled on the connected device. Web Inspector can be found under `Settings > Safari > Advanced`. Next, head over to the Safari on an Mac and enable **Show Develop menu in menu bar** under `Safari > Preferences > Advanced`. The connected device should now appear in the **Develop** menu. From there, Safari's developer tools can be used to inspect and debug the app. + +## Remote Debugging - Android and Chrome + +Chrome DevTools can be used to debug an app when it is running in the browser through `ionic serve`, or deployed to an emulator or physical device. To inspect a emulator or physical device, go to `chrome://inspect` in Chrome and select the target the has the running app. + +> Note: Physical Devices might need to have developer mode enabled in order to debug from Chrome. + +## Remote Debugging - VS Code Plugin + +VSCode has a dedicated plugin for debugging apps built with Cordova. [The plugin](https://marketplace.visualstudio.com/items?itemName=vsmobile.cordova-tools) creates a bridge between the device and the VSCode Devtools and allow debugging to be done right in the editor. \ No newline at end of file From f92469149ff16c9afd92e5e329057fc474ca2679 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:51 -0400 Subject: [PATCH 005/142] New translations security.md (Danish) --- src/pages/da/faq/security.md | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/pages/da/faq/security.md diff --git a/src/pages/da/faq/security.md b/src/pages/da/faq/security.md new file mode 100644 index 0000000000..f9420dd3be --- /dev/null +++ b/src/pages/da/faq/security.md @@ -0,0 +1,59 @@ +--- +previousText: 'CORS Errors' +previousUrl: '/docs/faq/cors' +nextText: 'Developer Tips' +nextUrl: '/docs/faq/tips' +disableHtmlPreviews: true +contributors: + - liamdebeasi +--- + +# Security + +## Sanitizing User Input + +For components such as `ion-alert` developers can allow for custom or user-provided content. This content can be plain text or HTML and should be considered untrusted. As with any untrusted input, it is important to sanitize it before doing anything else with it. In particular, using things like `innerHTML` without sanitization provides an attack vector for bad actors to input malicious content and potentially launch a [Cross Site Scripting attack (XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting). + +Ionic comes built in with basic sanitization methods for the components it provides, but for user-created components it is up to the developer to make sure all data is sanitized. Different frameworks have different solutions for sanitizing user input, so developers should familiarize themselves with what their specific framework offers. + +For developers who are not using a framework, or for developers whose framework does not provide the sanitization methods they need, we recommend using [sanitize-html](https://www.npmjs.com/package/sanitize-html). This package provides a simple HTML sanitizer that allows the developer to specify the exact tags and attributes that they want to allow in their application. + +### Angular + +Angular comes built in with the `DomSanitizer` class. This helps prevent XSS issues by ensuring that values are safe to be used in the DOM. By default, Angular will mark any values it deems unsafe. For example, the following link would be marked as unsafe by Angular because it would attempt to execute some JavaScript. + +```typescript +public myUrl: string = 'javascript:alert("oh no!")'; + +... + +Click Me! +``` + +To learn more about the built-in protections that Angular provides, see the [Angular Security Guide](https://angular.io/guide/security). + +### React + +React DOM escapes values embedded in JSX before rendering them by converting them to strings. For example, the following would be safe as `name` is converted to a string before being rendered: + +```jsx +const name = values.name; +const element =

Hello, {name}!

; +``` + +However, this does not stop someone from injecting JavaScript into places such as the `href` attribute of an anchor element. The following is unsafe and can potentially allow an XSS attack to occur: + +```jsx +const userInput = 'javascript:alert("Oh no!")'; +const element = Click Me! +``` + +If the developer needs to achieve more comprehensive sanitization, they can use the [sanitize-html](https://www.npmjs.com/package/sanitize-html) package. + +To learn more about the built-in protections that React and JSX provide, see the [React JSX Documentation](https://reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks). + +### Vue + +Vue does not provide any type of sanitizing methods built in. It is recommended that developers use a package such as [sanitize-html](https://www.npmjs.com/package/sanitize-html). + +To learn more about the security recommendations for binding to directives such as `v-html`, see the [Vue Syntax Guide](https://vuejs.org/v2/guide/syntax.html#Raw-HTML). \ No newline at end of file From d460a9b5c6b8474de1b77feb8f0b6e315dc03c02 Mon Sep 17 00:00:00 2001 From: Lars Mikkelsen Date: Fri, 24 May 2019 14:54:53 -0400 Subject: [PATCH 006/142] New translations runtime.md (Danish) --- src/pages/da/faq/runtime.md | 149 ++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/pages/da/faq/runtime.md diff --git a/src/pages/da/faq/runtime.md b/src/pages/da/faq/runtime.md new file mode 100644 index 0000000000..7b47761c64 --- /dev/null +++ b/src/pages/da/faq/runtime.md @@ -0,0 +1,149 @@ +--- +previousText: 'Build Errors' +previousUrl: '/docs/faq/build' +nextText: 'Native Errors' +nextUrl: '/docs/faq/native' +contributors: + - brandyscarney +--- + +# Runtime Errors + +## Blank App + +> I have no errors in my app. Why does it show a blank screen? + +There are several different reasons this can happen. If you are unable to find a solution on the [Ionic forums](https://forum.ionicframework.com), make sure: + +- Polyfills are not included for older browser/versions of android + +For projects with `@angular/cli@7.3` or above, polyfills will automatically be included. For project created before that, polyfills need to be manually enabled. + +In `src/polyfills.ts`, you must enabled all ES6 polyfills for Android 4.4 support. + +Alternatively, a project could be updated to use the latest release of the `@angular/cli` package & `@angular-devkit` packages and include the `es5BrowserSupport` option in the `angular.json`'s build options object: + +```diff + "input": "src/global.scss" + } + ], +- "scripts": [] ++ "scripts": [], ++ "es5BrowserSupport": true + }, + "configurations": { + "production": { +``` + +This will automatically include the polyfills for older browsers that need them. + +## Directive Not Working + +> Why is my custom component/directive not working? + +There are a few things you can check. Make sure: + +- Your selector doesn't have any misspellings. +- You're using the selector correctly as an attribute, element or class. +- Your selector has the proper syntax: + - `[attr]` if it's an attribute selector + - `element` if it's an element selector + - `.class` if it's a class selector + +Here's an example using an attribute selector: + +```typescript +@Directive({ + selector: '[my-dir]' // <-- [my-dir] because it is an attribute +}) // Could be my-dir, [my-dir], .my-dir +class MyDir { + constructor() { + console.log('I'm alive!'); + } +} + +@Component({ + // We add my-dir as an attribute to match the directive's selector + template: `
Hello World
`, + + // Alternatively, if you were attaching the directive to an element it would be: + // template: `Hello World` + // and if you were attaching by class the template would be: + // template: `
Hello World
` + + directives: [MyDir] // <-- Don't forget me! (only if your ionic-angular version is below RC0) +}) +class MyPage { } +``` + +## Click Delays + +> Why is there a delay on my click event? + +In general, we recommend only adding `(click)` events to elements that are normally clickable. This includes ` + + +``` + +Save the file and watch - a camera button appears! Tap on it and notice that it doesn’t do anything. Let’s fix that next. + +## Add the Camera Dependencies via the CLI + +In order to use the Camera, we need to bring in its JavaScript and native library dependencies. Back over in your Terminal window, run the following command, which adds the JavaScript library to the project, thus exposing the Camera API in TypeScript code: + +```shell +$ npm install --save @ionic-native/camera +``` + +In `package.json`, you’ll notice a new JavaScript dependency has been added: + +`"@ionic-native/camera": "^4.12.0"` + +Next, run this command to add the native iOS and Android code, effectively allowing the Camera to work on a mobile device: + +```shell +$ ionic cordova plugin add cordova-plugin-camera +``` + +In `config.xml`, a new plugin entry is created: + +```xml + +``` + +The next step is only required for iOS users. As of iOS 10, developers must provide a reason for why the app wishes to access the device camera. Add this to the bottom of `config.xml`: + +```xml + + + Used to take pictures + +``` + +## Add Camera plugin to Angular App Module + +There’s one more step we need to do since this is an Angular project: register the Camera in the App Module (`src/app/app.module.ts`). First, import the Camera module: + +```Javascript +import { Camera } from '@ionic-native/camera'; +``` + +Then, add it as a Provider: + +```Javascript +providers: [ + StatusBar, + SplashScreen, + Camera, + {provide: ErrorHandler, useClass: IonicErrorHandler} + ], +``` + +It can now be used on any of our App pages. + +## Add the Camera to the About page + +Our camera button doesn’t do anything yet. Over in `about.html`, add a click handler to the button: + +```html +