• This repository has been archived on 20/Dec/2018
  • Stars
    star
    140
  • Rank 253,221 (Top 6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

NOTICE: official repository moved to https://github.com/zonkyio/ember-web-app

ember-web-app

NOTICE: official repository moved to https://github.com/zonkyio/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

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

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']
      },
      {
        src: "/images/icons/mstile-150x150.png",
        element: "square150x150logo",
        targets: ['ms']
      }
    ],

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

    ms: {
      tileColor: '#ffffff'
    }
  }
}

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">

<meta name="msapplication-config" content="/browserconfig.xml">

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"
    }
  ]
}

and the following browserconfig.xml file

<?xml version="1.0"?>
<browserconfig>
  <msapplication>
    <tile>
      <square150x150logo src="/images/icons/mstile-150x150.png"/>
      <TileColor>#ffffff</TileColor>
    </tile>
  </msapplication>
</browserconfig>

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');
var broccoliAssetRevDefaults = require( 'broccoli-asset-rev/lib/default-options' );

module.exports = function(defaults) {
  var options = {
    fingerprint: {
      extensions: broccoliAssetRevDefaults.extensions.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";
Target Generates
manifest { "name": "dummy" }
apple <meta name="apple-mobile-web-app-title" content="dummy">
ms <meta name="application-name" content="dummy">
android does 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";
Target Generates
manifest { "short_name": "dummy" }
apple does not apply
ms does not apply
android does not apply

background_color

Defines the expected background color for the web application.

Example

manifest.background_color = "#fff";
Target Generates
manifest { "background_color": "#fff" }
apple does not apply
ms does not apply
android does not apply

description

Provides a general description of what the web application does.

Example

manifest.description = "Lorem ipsum dolor";
Target Generates
manifest { "description": "Lorem ipsum dolor" }
apple does not apply
ms does not apply
android does 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";
Target Generates
manifest { "dir": "ltr" }
apple does not apply
ms does not apply
android does 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";
Target Generates
manifest { "display": "fullscreen" }
apple <meta name="apple-mobile-web-app-capable" content="yes">
ms does not apply
android does 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.
  • element Non standard Only when the target is ms. Must be one of square70x70logo, square150x150logo, wide310x150logo or square310x310logo.
  • safariPinnedTabColor Non standard Only when the target is safari-pinned-tab. Can specify a single color with a hexadecimal value (#990000), an RGB value (rgb(153, 0, 0)), or a recognized color-keyword, such as: red, lime, or navy..

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']
  },
  {
    src: '/bar/ms.png',
    element: 'square70x70logo', // non-standard property
    targets: ['ms'] // non-standard-property
  },
  {
    src: '/foo/monochrome.svg',
    safariPinnedTabColor: '#cc6600', // non-standard property
    targets: ['safari-pinned-tab'] // non-standard-property
  }
];
Target Generates
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">
android does not apply
favicon <link rel="icon" href="/bar/fav.png" sizes="32x32">
ms icon in browserconfig.xml
safari-pinned-tab <link rel="mask-icon" href="/foo/monochrome.svg" color="#cc6600">

lang

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

Example

manifest.lang = "es-UY";
Target Generates
manifest { "lang": "es-UY" }
apple does not apply
ms does not apply
android does 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";
Target Generates
manifest { "orientation": "portrait" }
apple does not apply
ms does not apply
android does not apply

prefer_related_applications

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;
Target Generates
manifest { "prefer_related_applications": true }
apple does not apply
ms does not apply
android does not apply

related_applications

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"
  }
];
Target Generates
manifest { "prefer_related_applications": true, "related_applications": [{"platform": "itunes", "url": "https://itunes.apple.com/app/example-app1/id123456789" }] }
apple does not apply
ms does not apply
android does 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/";
Target Generates
manifest { "scope": "/myapp/" }
apple does not apply
ms does not apply
android does 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";
Target Generates
manifest { "start_url": "./?utm_source=web_app_manifest" }
apple does not apply
ms does not apply
android does 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";
Target Generates
manifest { "theme_color": "aliceblue" }
apple does not apply
ms does 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;
Target Generates
manifest { "apple": false }
apple returns an empty string
ms does not apply
android does not apply

apple.webAppCapable

Overrides manifest.display for the generation of the apple-mobile-web-app-capable meta tag.

Possible values:

  • true Turn on.
  • false Turn off.

Example

manifest = {
  display: 'standalone',
  apple: {
    webAppCapable: false
  }
};
Target Generates
manifest does not apply
apple <meta name="apple-mobile-web-app-capable" content="yes">
ms does not apply
android does 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'
};
Target Generates
manifest does not apply
apple <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
ms does not apply
android does 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'
};
Target Generates
manifest does not apply
apple <link rel="apple-touch-icon-precomposed" href="/images/icons/apple-touch-icon-192x192.png" sizes="192x192">
ms does not apply
android does 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
  }
};
Target Generates
manifest does not apply
apple <meta name="format-detection" content="telephone=no">
ms does not apply
android does not apply

ms

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

Possible values:

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

Example

manifest.ms = false;

ms.tileColor

Sets the <TileColor> property in browserconfig.xml.

See Browser configuration schema reference

Possible values:

  • A color in hex format.

Example

manifest.ms = {
  tileColor: '#ffffff'
};

Generating Icons

ember-web-app doesn't generate icons or images. If you want to automate the generation of icons starting from a master image, you can install ember-cli-image-transformer.

Managing all the various icon sizes and types can be overwhelming. One solution is to start with a base image which can be use to generate the necessary icon permutations for your environment. You can use ember-cli-image-transformer to handle this task.

If your manifest.js looks like this and needs a 192px and a 512px icon:

// config/manifest.js
export default function() {
  return {
    icons: [
      {
        src: '/assets/icons/appicon-32.png',
        sizes: `32x32`,
        targets: ['favicon']
      },
      ...[192, 280, 512].map((size) => ({
        src: `/assets/icons/appicon-${size}.png`,
        sizes: `${size}x${size}`
      }))
    ]
  };
}

You can start with a base brand-icon.svg image and automatically build the 192x192 and 512x512 versions by installing ember-cli-image-transformer and adding the necessary configuration to your ember-cli-build.js file:

// ember-cli-build.js
module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    'ember-cli-image-transformer': {
      images: [
        {
          inputFilename: 'lib/images/brand-icon.svg',
          outputFileName: 'appicon-',
          convertTo: 'png',
          destination: 'assets/icons/',
          sizes: [32, 192, 280, 512]
        }
      ]
    }
  });

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 Maintainability dependencies Status devDependencies Status

License

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

See LICENSE for the full license text.

More Repositories

1

ember-cli-page-object

This ember-cli addon eases the construction of page objects on your acceptance and integration tests
TypeScript
272
star
2

phoenix_components

This library helps you write encapsulated bits of HTML into a single unit called components to use in your server rendered Phoenix application. Similar to how react/ember/web components do.
Elixir
47
star
3

ember-preferences

Easy way of managing user preferences on the client side
JavaScript
31
star
4

one_plus_n_detector

Elixir library to help you detect 1+n queries in applications using Ecto
Elixir
24
star
5

cypress-page-object

Represent the screens of your website as a series of objects in your Cypress test suite
JavaScript
23
star
6

pretty_print_formatter

Pretty Print Formatter for Elixir Logger module -- Colorize Ecto's SQL ouput 🖌️
Elixir
23
star
7

ember-qunit-source-map

This addon provides source map support for stack traces in QUnit
JavaScript
12
star
8

ceibo

Ceibo is a JavaScript micro library to model trees that evaluate arbitrary code when accessing its nodes.
JavaScript
11
star
9

ember-confetti

Plug and play confetti rain for your Ember application!
JavaScript
8
star
10

move-the-boxes

A Sokoban like game written in Ember and HTML5
JavaScript
8
star
11

ember-test-assets

Add assets for tests easily and avoid 404 network errors
JavaScript
6
star
12

git-switch

Git utility to checkout previously used branches easily
Ruby
5
star
13

desktop_url_file

Elixir library for generating desktop url files that points to websites. These files are supported by Windows and OSX operating systems.
Elixir
5
star
14

simple-css-challenges

Simple CSS challenges for learning CSS
HTML
3
star
15

ombu

JavaScript micro library to help modelling really simple page objects
JavaScript
3
star
16

web-app-manifest-validator

Really simple web app manifest validator
JavaScript
3
star
17

bashtap

Simple tests for bash scripts. Uses Test Anything Protocol (TAP)
Shell
2
star
18

ten

Learn how to build web applications by doing
HTML
2
star
19

ember-ombu

Really simple page objects for your Ember's acceptance tests
JavaScript
2
star
20

workout

App for managing my personal workout routines
JavaScript
2
star
21

ember-humans-txt

This Ember addon helps you generate and mantain a humans.txt file for your website
JavaScript
2
star
22

tajpado

A simple touch typing learning app written in Ember
JavaScript
2
star
23

iisreset

Simulate `iisreset` in bash
Shell
1
star
24

arkanoid

Very simple Arkanoid game clone
JavaScript
1
star
25

subtitle

Elixir library to parse subtitle files (SubRip .srt files or MicroDVD .sub files)
Elixir
1
star
26

snippets.42.uy

List of useful commands and code snippets I like to have around
HTML
1
star
27

san650.com

My personal website, always a work in progress.
HTML
1
star
28

todo

Simple ToDo application written in bash
Shell
1
star
29

openspace-site

Agiles.uy web site
HTML
1
star
30

to_read

Simple app to keep track of unread links (web resources)
Ruby
1
star
31

1982

Really simple blog generator
Shell
1
star
32

html_party

Elixir DSL for building safe HTML using regular elixir functions.
Elixir
1
star
33

angular-workshop-meetup-2015-11

Workshop: Angular2 with angular-cli step by step -- done for the 11/2015 Montevideo Angular meetup
CSS
1
star
34

meetup-draw

The easiest way to hold a drawing!
1
star
35

rain

Touch typing game
JavaScript
1
star
36

nautica

Simple app to learn about sailing (work in progress)
HTML
1
star
37

workshop

Highly secret workshop
JavaScript
1
star
38

meetup-sample--glimmer-reminders

Sample application live coded for js meetup on April 2017
1
star
39

timeline.42.uy

Small website to show some events I find interesting in a timeline
JavaScript
1
star
40

sinatra-auth-examples

Authentication examples for Sinatra
Ruby
1
star
41

workshop-2018

Bug tracking system
JavaScript
1
star
42

vim650

My custom vim configuration
Vim Script
1
star
43

flatjson

Bash function to flatten json documents for easy processing
Shell
1
star
44

sfdx-cli-error

Dummy project to reproduce an error with [email protected]
Shell
1
star
45

ember-money

Money value type for Ember
JavaScript
1
star