Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ember-web-app

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ember-web-app

This Ember addon helps you configure and manage the web app manifest and related meta tags needed to create a Progressive Web Application

  • 2.1.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.2K
decreased by-55.11%
Maintainers
1
Weekly downloads
 
Created
Source

ember-web-app

Build Status Ember Observer Score

This Ember addon helps you configure and manage the web app manifest and related meta tags needed to create a Progressive Web Application

From MDN

The web app manifest provides information about an application (such as name, author, icon, and description) in a text file. The purpose of the manifest is to install web applications to the homescreen of a device, providing users with quicker access and a richer experience.

Addon features:

  • Generates a manifest.ember-web-app.json file using a JavaScript template
  • Uses fingerprint for images
  • Generates equivalent meta tags for supporting other devices (e.g. iPhone)
  • Validates the configuration

Here's a brief list of the main missing features that we intend to add in the future.

  • Generate image variants for different devices
  • Generate Microsoft's browserconfig.xml manifest for Win8/Win10 integration

See the documentation section below for more information.

Table of content

Installation

$ ember install ember-web-app

This generates a config/manifest.js configuration file.

Example

Having the following configuration file config/manifest.js

module.exports = function() {
  return {
    name: "Let's Cook",
    short_name: "Let's Cook",
    description: "An app for organizing your weekly menu and groceries list.",
    start_url: "/",
    display: "standalone",
    background_color: "#ffa105",
    theme_color: "#ffa105",

    icons: [
      {
        src: "/images/icons/android-chrome-192x192.png",
        sizes: "192x192",
        type: "image/png"
      },
      {
        src: "/images/icons/android-chrome-512x512.png",
        sizes: "512x512",
        type: "image/png"
      },
      {
        src: "/images/icons/apple-touch-icon.png",
        sizes: "180x180",
        type: "image/png",
        targets: ['apple']
      }
    ],

    apple: {
      statusBarStyle: 'black-translucent'
    }
  }
}

It will generate the following meta tags

index.html

<link rel="manifest" href="/manifest.webmanifest">
<link rel="apple-touch-icon" href="/images/icons/android-chrome-192x192-883114367f2d72fc9a509409454a1e73.png" sizes="192x192">
<link rel="apple-touch-icon" href="/images/icons/android-chrome-512x512-af3d768ff652dc2be589a3c22c6dc827.png" sizes="512x512">
<link rel="apple-touch-icon" href="/images/icons/apple-touch-icon-36cba25bc155e8ba414265f9d85861ca.png" sizes="180x180">
<meta name="theme-color" content="#ffa105">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="Let's Cook">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

and the following manifest.webmanifest file

{
  "name": "Let's Cook",
  "short_name": "Let's Cook",
  "description": "An app for organizing your weekly menu and groceries list.",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffa105",
  "theme_color": "#ffa105",
  "icons": [
    {
      "src": "/images/icons/android-chrome-192x192-883114367f2d72fc9a509409454a1e73.png",
      "sizes": "192x192",
      "type":"image/png"
    },
    {
      "src": "/images/icons/android-chrome-512x512-af3d768ff652dc2be589a3c22c6dc827.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

Configuration

Disable

You can disable the addon by adding a configuration option to ember-cli-build.js build file.

var EmberApp = require('ember-cli/lib/broccoli/ember-app');

module.exports = function(defaults) {
  var options = {
    'ember-web-app': {
      enabled: false
    }
  };

  var app = new EmberApp(defaults, options);

  return app.toTree();
};

Fingerprint

You can add fingerprint checksum to your manifest.webmanifest file by configuring broccoli-asset-rev.

The following example prepends with a custom domain and adds fingerprint checksum to the manifest.webmanifest file.

ember-cli-build.js

var EmberApp = require('ember-cli/lib/broccoli/ember-app');

module.exports = function(defaults) {
  var defaultExtensions = ['js', 'css', 'png', 'jpg', 'gif', 'map'];
  var options = {
    fingerprint: {
      extensions: defaultExtensions.concat(['webmanifest']),
      prepend: 'https://www.example.com/'
    }
  };

  var app = new EmberApp(defaults, options);

  return app.toTree();
};

Note that the replaceExtensions configuration from broccoli-asset-rev is updated internally by ember-web-app so you don't have to configure yourself on your project.

API documentation

This Ember addon generates a Web Application Manifest at build time using the config/manifest.js configuration file.

It also generates some compatibility meta tags for supporting vendor specific web application features like Apple's Web Content For Safari and Microsoft's Browser configuration schema that don't yet support the Web Application Manifest standard.

Internally, this addon takes into account four different types of targets for generating the web app manifest taking care of including some backward compatibility meta tags in order to support as many devices and browsers as possible. These targets are:

  • manifest (default target)
  • apple (to target iOS devices)
  • ms (to target Win8/Win10 devices)
  • android (to target options specific for android devices)

Not all targets are used for all properties (actually, most properties are not affected by the targets).

List of supported properties.

name

Provides a human-readable name for the application as it is intended to be displayed to the user, for example among a list of other applications or as a label for an icon.

Example

manifest.name = "dummy";
TargetGenerates
manifest{ "name": "dummy" }
apple<meta name="apple-mobile-web-app-title" content="dummy">
ms<meta name="application-name" content="dummy">
androiddoes not apply
short_name

Provides a short human-readable name for the application. This is intended for use where there is insufficient space to display the full name of the web application.

Example

manifest.short_name = "dummy";
TargetGenerates
manifest{ "short_name": "dummy" }
appledoes not apply
msdoes not apply
androiddoes not apply
background_color

Defines the expected background color for the web application.

Example

manifest.background_color = "#fff";
TargetGenerates
manifest{ "background_color": "#fff" }
appledoes not apply
msdoes not apply
androiddoes not apply
description

Provides a general description of what the web application does.

Example

manifest.description = "Lorem ipsum dolor";
TargetGenerates
manifest{ "description": "Lorem ipsum dolor" }
appledoes not apply
msdoes not apply
androiddoes not apply
dir

Specifies the primary text direction for the name, short_name, and description members.

Possible values:

  • ltr (left-to-right)
  • rtl (right-to-left)
  • auto

Example

manifest.dir = "ltr";
TargetGenerates
manifest{ "dir": "ltr" }
appledoes not apply
msdoes not apply
androiddoes not apply
display

Defines the developer's preferred display mode for the web application.

Possible values:

  • fullscreen
  • standalone
  • minimal-ui
  • browser

The default value for display is browser when is not defined.

Example

manifest.display = "fullscreen";
TargetGenerates
manifest{ "display": "fullscreen" }
apple<meta name="apple-mobile-web-app-capable" content="yes">
msdoes not apply
androiddoes not apply

Note that for iOS the meta tag will be render with value yes only when display is fullscreen or standalone.

icons

Specifies an array of image objects that can serve as application icons in various contexts. For example, they can be used to represent the web application amongst a list of other applications, or to integrate the web application with an OS's task switcher and/or system preferences.

Image object members:

  • src The path to the image file.
  • sizes A string containing space-separated image dimensions.
  • type A hint as to the media type of the image.
  • targets Non standard Targets for the images. ['manifest', 'apple'] by default.

Example

icons: [
  {
    src: '/foo/bar.png',
    sizes: '180x180'
  },
  {
    src: '/bar/baz.png',
    sizes: '280x280',
    targets: ['apple']  // non-standard property
  },
  {
    src: '/bar/fav.png',
    sizes: '32x32',
    targets: ['favicon']
  }
];
TargetGenerates
manifest{ "icons": [ { "src": "/foo/bar.png", "sizes": "180x180" } ] }
apple<link rel="apple-touch-icon" href="/foo/bar.png" sizes="180x180"> <link rel="apple-touch-icon" href="/foo/bar.png" sizes="280x280">
msdoes not apply (for now)
androiddoes not apply
favicon<link rel="icon" href="/bar/fav.png" sizes="32x32">
lang

Specifies the primary language for the values in the name and short_name members.

Example

manifest.lang = "es-UY";
TargetGenerates
manifest{ "lang": "es-UY" }
appledoes not apply
msdoes not apply
androiddoes not apply
orientation

Defines the default orientation for all the web application's top level browsing contexts.

Possible values:

  • any
  • natural
  • landscape
  • landscape-primary
  • landscape-secondary
  • portrait
  • portrait-primary
  • portrait-secondary

Example

manifest.orientation = "portrait";
TargetGenerates
manifest{ "orientation": "portrait" }
appledoes not apply
msdoes not apply
androiddoes not apply

Specifies a boolean value that hints for the user agent to indicate to the user that the specified related applications are available, and recommended over the web application.

Possible values:

  • true
  • false

Example

manifest.prefer_related_applications = true;
TargetGenerates
manifest{ "prefer_related_applications": true }
appledoes not apply
msdoes not apply
androiddoes not apply

Specifies an array of "application objects" representing native applications that are installable by, or accessible to, the underlying platform.

Application object members:

  • platform The platform on which the application can be found.
  • url The URL at which the application can be found.
  • id The ID used to represent the application on the specified platform.

Example

manifest.prefer_related_applications = true;
manifest.related_applications = [
  {
    "platform": "itunes",
    "url": "https://itunes.apple.com/app/example-app1/id123456789"
  }
];
TargetGenerates
manifest{ "prefer_related_applications": true, "related_applications": [{"platform": "itunes", "url": "https://itunes.apple.com/app/example-app1/id123456789" }] }
appledoes not apply
msdoes not apply
androiddoes not apply
scope

Defines the navigation scope of this web application's application context. This basically restricts what web pages can be viewed while the manifest is applied.

Example

manifest.scope = "/myapp/";
TargetGenerates
manifest{ "scope": "/myapp/" }
appledoes not apply
msdoes not apply
androiddoes not apply
start_url

Specifies the URL that loads when a user launches the application from a device.

Example

manifest.start_url = "./?utm_source=web_app_manifest";
TargetGenerates
manifest{ "start_url": "./?utm_source=web_app_manifest" }
appledoes not apply
msdoes not apply
androiddoes not apply
theme_color

Defines the default theme color for an application. This sometimes affects how the application is displayed by the OS.

Example

manifest.theme_color = "aliceblue";
TargetGenerates
manifest{ "theme_color": "aliceblue" }
appledoes not apply
msdoes not apply
android<meta name="theme-color" content="aliceblue">

Vendor specific properties (non-standard)

apple

Turns on/off the generation of apple specific meta and link tags.

Possible values:

  • true Turn on. This is the default value.
  • false Turn off.
  • An object with custom settings (see the settings below)

Example

manifest.apple = false;
TargetGenerates
manifest{ "apple": false }
applereturns an empty string
msdoes not apply
androiddoes not apply
apple.statusBarStyle

Sets the style of the status bar for a web application in iOS

See Changing the Status Bar Appearance

Possible values:

  • default The status bar appears normal.
  • black The status bar has a black background.
  • black-translucent The status bar is black and translucent.

Note that if set to default or black, the web content is displayed below the status bar. If set to black-translucent, the web content is displayed on the entire screen, partially obscured by the status bar.

Example

manifest.apple = {
 statusBarStyle: 'black-translucent'
};
TargetGenerates
manifestdoes not apply
apple<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
msdoes not apply
androiddoes not apply
apple.precomposed

Adds precomposed suffix to apple touch icons

See Precomposed Keyword for apple touch icons

Possible values:

  • true Adds precomposed suffix.
  • false (default) Does not add precomposed suffix.

Example

manifest.apple = {
 precomposed: 'true'
};
TargetGenerates
manifestdoes not apply
apple<link rel="apple-touch-icon-precomposed" href="/images/icons/apple-touch-icon-192x192.png" sizes="192x192">
msdoes not apply
androiddoes not apply
apple.formatDetection

Adds format-detection meta tag if needed

See Safari HTML Reference

Possible values:

  • An object with following settings
    • telephone: false Disables automatic phone number detection.

Example

manifest.apple = {
 formatDetection: {
   telephone: false
 }
};
TargetGenerates
manifestdoes not apply
apple<meta name="format-detection" content="telephone=no">
msdoes not apply
androiddoes not apply

Development

$ git clone https://github.com/san650/ember-web-app.git
$ cd $_
$ yarn          # (or npm install)

Running tests

$ npm test

Project's health

Build Status Ember Observer Score

License

ember-web-app is licensed under the MIT license.

See LICENSE for the full license text.

Keywords

FAQs

Package last updated on 01 Oct 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc