<p align="right">
<a href="./README-zh.md">中文</a>
</p>

<div markdown="1">
  <sup>Using <a href="https://wangchujiang.com/#/app" target="_blank">my app</a> is also a way to <a href="https://wangchujiang.com/#/sponsor" target="_blank">support</a> me:</sup>
  <br>
  <a target="_blank" href="https://github.com/jaywcjlove/vidwall-hub" title="Vidwall Hub for macOS"><img alt="Vidwall Hub" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall-hub.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/VidCrop/6752624705" title="VidCrop for macOS"><img alt="VidCrop" height="52" width="52" src="https://wangchujiang.com/appicon/vidcrop.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/Vidwall/6747587746" title="Vidwall for macOS"><img alt="Vidwall" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall.png"></a>
  <a target="_blank" href="https://wangchujiang.com/mousio-hint/" title="Mousio Hint for macOS"><img alt="Mousio Hint" height="52" width="52" src="https://wangchujiang.com/appicon/mousio-hint.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6746747327" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/mousio.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6745227444" title="Musicer for macOS"><img alt="Musicer" height="52" width="52" src="https://wangchujiang.com/appicon/musicer.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6743841447" title="Audioer for macOS"><img alt="Audioer" height="52" width="52" src="https://wangchujiang.com/appicon/audioer.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6744690194" title="FileSentinel for macOS"><img alt="FileSentinel" height="52" width="52" src="https://wangchujiang.com/appicon/file-sentinel.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6743495172" title="FocusCursor for macOS"><img alt="FocusCursor" height="52" width="52" src="https://wangchujiang.com/appicon/focus-cursor.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6742680573" title="Videoer for macOS"><img alt="Videoer" height="52" width="52" src="https://wangchujiang.com/appicon/videoer.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6740425504" title="KeyClicker for macOS"><img alt="KeyClicker" height="52" width="52" src="https://wangchujiang.com/appicon/key-clicker.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6739052447" title="DayBar for macOS"><img alt="DayBar" height="52" width="52" src="https://wangchujiang.com/appicon/daybar.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6739444407" title="Iconed for macOS"><img alt="Iconed" height="52" width="52" src="https://wangchujiang.com/appicon/iconed.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6737160756" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/rightmenu-master.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6723903021" title="Paste Quick for macOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/paste-quick.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6670696072" title="Quick RSS for macOS/iOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/quick-rss.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6670167443" title="Web Serve for macOS"><img alt="Web Serve" height="52" width="52" src="https://wangchujiang.com/appicon/web-serve.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6503953628" title="Copybook Generator for macOS/iOS"><img alt="Copybook Generator" height="52" width="52" src="https://wangchujiang.com/appicon/copybook-generator.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6471227008" title="DevTutor for macOS/iOS"><img alt="DevTutor for SwiftUI" height="52" width="52" src="https://wangchujiang.com/appicon/devtutor.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6479819388" title="RegexMate for macOS/iOS"><img alt="RegexMate" height="52" width="52" src="https://wangchujiang.com/appicon/regex-mate.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6479194014" title="Time Passage for macOS/iOS"><img alt="Time Passage" height="52" width="52" src="https://wangchujiang.com/appicon/time-passage.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6478772538" title="IconizeFolder for macOS"><img alt="Iconize Folder" height="52" width="52" src="https://wangchujiang.com/appicon/iconize-folder.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6478511402" title="Textsound Saver for macOS/iOS"><img alt="Textsound Saver" height="52" width="52" src="https://wangchujiang.com/appicon/textsound-saver.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6476924627" title="Create Custom Symbols for macOS"><img alt="Create Custom Symbols" height="52" width="52" src="https://wangchujiang.com/appicon/create-custom-symbols.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6476452351" title="DevHub for macOS"><img alt="DevHub" height="52" width="52" src="https://wangchujiang.com/appicon/devhub.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6476400184" title="Resume Revise for macOS"><img alt="Resume Revise" height="52" width="52" src="https://wangchujiang.com/appicon/resume-revise.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6472593276" title="Palette Genius for macOS"><img alt="Palette Genius" height="52" width="52" src="https://wangchujiang.com/appicon/palette-genius.png"></a>
  <a target="_blank" href="https://apps.apple.com/app/6470879005" title="Symbol Scribe for macOS"><img alt="Symbol Scribe" height="52" width="52" src="https://wangchujiang.com/appicon/symbol-scribe.png"></a>
</div>
<hr>

<p align="center">
  <a href="https://jaywcjlove.github.io/iNotify">
    <img alt="iNotify demo preview" src="https://github.com/jaywcjlove/iNotify/blob/master/website/assets/iNotify.png?raw=true">
  </a>
</p>

<p align="center">
  <a href="https://jaywcjlove.github.io/#/sponsor">
    <img src="https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee">
  </a>
  <a href="https://github.com/jaywcjlove/iNotify/issues">
    <img src="https://img.shields.io/github/issues/jaywcjlove/iNotify.svg">
  </a>
  <a href="https://github.com/jaywcjlove/iNotify/network">
    <img src="https://img.shields.io/github/forks/jaywcjlove/iNotify.svg">
  </a>
  <a href="https://github.com/jaywcjlove/iNotify/stargazers">
    <img src="https://img.shields.io/github/stars/jaywcjlove/iNotify.svg">
  </a>
  <a href="https://github.com/jaywcjlove/iNotify/releases">
    <img src="https://img.shields.io/github/release/jaywcjlove/iNotify.svg">
  </a>
  <a href="https://www.npmjs.com/package/@wcjiang/notify">
    <img src="https://img.shields.io/npm/v/@wcjiang/notify.svg">
  </a>
  <a href="./README-zh.md">
    <img src="https://jaywcjlove.github.io/sb/lang/chinese.svg">
  </a>
</p>

<!--dividing-->

JS achieve the browser title flashing, scrolling, voice prompts, Chrome/Safari/FireFox/IE notice. has no dependencies. It not interfere with any JavaScript libraries or frameworks. has a reasonable footprint 5.05kb (gzipped: 1.75kb)，Official document [demo preview](https://jaywcjlove.github.io/iNotify)。

## Installation

You will need Node.js installed on your system.

```bash
# v2.x
$ npm install @wcjiang/notify --save
# v1.x
$ npm install title-notify --save
```

> ⚠️: open in server. You can use [ssr](https://github.com/jaywcjlove/ssr) to quickly create a service..

## Using

```js
import Notify from "@wcjiang/notify";

const notify = new Notify({
  message: "There is message.", // page title.
  effect: "flash", // flash | scroll, Flashing or scrolling
  openurl: "https://github.com/jaywcjlove/iNotify", // Click on the pop-up window to open the connection address
  onclick: () => {
    // Click on the pop-up window trip event
    // Programmatically closes a notification.
    notify.close();
    console.log("---");
  },
  // Optional playback sound
  audio: {
    // You can use arrays to pass sound files in multiple formats.
    file: ["msg.mp4", "msg.mp3", "msg.wav"],
    // The following is also work.
    // file: 'msg.mp4'
  },
  // Title flashing, or scrolling speed
  interval: 1000,
  disableFavicon: false, // Optional, default false, if true, No longer overwrites the original favicon
  // Optional, default green background white text. Favicon
  updateFavicon: {
    // favicon font color
    textColor: "#fff",
    // Background color, set the background color to be transparent, set the value to "transparent"
    backgroundColor: "#2F9A00",
  },
  // Optional chrome browser notifications，
  // The default is not to fill in the following content
  notification: {
    title: "Notification!", // Set notification title
    icon: "", // Set notification icon, The default is Favicon
    body: "You have a new message!", // Set message content
  },
});

notify.player();
```

Or manually download and link **notify.js** in your HTML, It can also be downloaded via [UNPKG](https://unpkg.com/@wcjiang/notify/dist/)：

```html
<script src="https://unpkg.com/@wcjiang/notify/dist/notify.min.js"></script>
<script type="text/javascript">
  var notify = new Notify({
    effect: "flash",
    interval: 500,
  });
  notify.setFavicon("1");
</script>
```

## option

- **message**: String, page title
- **effect**: String, flash | scroll | favicon, Flashing or scrolling
- **audio**: Optional playback sound
  - **file**: String/Array, You can use arrays to pass sound files in multiple formats.
- **interval**: Number, Title flashing, or scrolling speed.
- **openurl**: String, Click on the pop-up window to open the connection address
- **onclick**: Function, Click on the pop-up window trip event
- **updateFavicon**: Optional, default green background white text. Favicon
  - **textColor**: String, favicon font color.
  - **backgroundColor**: Background color, set the background color to be transparent, set the value to "transparent"
- **notification**: Optional chrome browser notifications, The default is not to fill in the following content
  - **title**: Set notification title `iNotify`
  - **icon**: Set notification icon, The default is Favicon
  - **body**: Set message content

## isPermission

Determine if the browser bulletin notification is blocked.

```js
notify.isPermission();
```

## Sound Settings

### player

Play sound.

```js
notify.player();
```

### loopPlay

Loop the sound.

```js
notify.loopPlay();
```

### stopPlay

Stop playing sound.

```js
notify.stopPlay();
```

### setURL

Set the playback sound URL.

```js
notify.setURL("msg.mp3"); // Set one
notify.setURL(["msg.mp3", "msg.ogg", "msg.mp4"]); // Set multiple
```

## title

The latest version does not play the title blinking animation by default. After initialization, you need to call the `setTitle(true)` method to play the title animation.

### setTitle

Set the title.

```js
notify.setTitle(true); // Play animation
notify.setTitle("New title"); // Flashing new title
notify.setTitle(); // Clear Blinking Show original title
```

### setInterval

Set time interval.

```js
notify.setInterval(2000);
```

### close

Programmatically closes a notification.

```js
notify.close();
```

### addTimer

Add counter

```js
notify.addTimer();
```

### clearTimer

Clear counter.

```js
notify.clearTimer();
```

## Favicon Notice

### setFavicon

Set `icon` to display numbers or text

```js
notify.setFavicon(10);
```

### setFaviconColor

Set `icon` display text color

```js
notify.setFaviconColor("#0043ff");
```

### setFaviconBackgroundColor

Set `icon` to display text color

```js
notify.setFaviconBackgroundColor("#0043ff");
// Set font and background color
notify.setFaviconColor("#f5ff00").setFaviconBackgroundColor("red");
```

### faviconClear

Clear digital display original `icon`.

```js
notify.faviconClear();
```

## Chrome Notice

### notify

The chrome notification pops up, and the parameters are not passed as default values...

```js
notify.notify();
notify.notify({
  title: "New notice",
  body: "Thunder, it’s raining...",
  openurl: "https://jaywcjlove.github.io",
  onclick: function () {
    console.log("on click");
  },
  onshow: function () {
    console.log("on show");
  },
});
```

- `title` The notification title that will be displayed.
- `dir` The direction of the text; its value can be auto (auto), ltr (left to right), or rtl (right to left).
- `icon` The URL of a picture that will be used to display the icon for the notification.
- `body` A string that is additionally displayed in the notification.
- `openurl` Click to open the specified URL.
- `onclick` Triggered whenever the user clicks on the notification.
- `onshow` Triggered when the notification is displayed.
- `onerror` Triggered whenever a notification encounters an error.
- `onclose` Triggered when the user closes the notification.

## Other

`notify.init().title;` Get the title.

## Example

### Example 1

```js
function iconNotify(num) {
  if (!notify) {
    var notify = new Notify({
      effect: "flash",
      interval: 500,
    });
  }
  if (num === 0) {
    notify.faviconClear();
    notify.setTitle();
  } else if (num < 100) {
    notify.setFavicon(num);
    notify.setTitle("There is new message!");
  } else if (num > 99) {
    notify.setFavicon("..");
    notify.setTitle("There is new message!");
  }
}
```

### Example 2

```js
var notify = new Notify({
  effect: "flash",
  interval: 500,
});
notify.setFavicon("1");
```

### Example 3

```js
var iN = new Notify({
  effect: "flash",
  interval: 500,
  message: "There is new message!",
  updateFavicon: {
    // Optional, default green background white
    textColor: "#fff", // favicon font color
    backgroundColor: "#2F9A00", // favicon background color
  },
}).setFavicon(10);
```

### Example 4

```js
var iN = new Notify().setFavicon(5);
```

### Example 5

```js
var iN = new Notify({
  effect: "flash",
  interval: 500,
  message: "There is new message!",
  audio: {
    file: "msg.mp4",
  },
})
  .setFavicon(10)
  .player();
```

### Example 6

```js
var iN = new Notify({
  effect: "flash",
  interval: 500,
  message: "There is new message!",
  audio: {
    file: "msg.mp4", // You can use arrays to pass sound files in multiple formats.
  },
  notification: {
    title: "Notification!", // Set notification title
    icon: "", // Set notification icon, The default is Favicon
    body: "You have a new message!", // Set message content
  },
})
  .setFavicon(10)
  .player();

// The chrome notification pops up, and the parameters are not passed as default values...
iN.notify();

iN.notify({
  title: "Notification!", // Set notification title
  body: "You have a new message!", // Set message content
});
```

### Example 7

```js
var iN = new Notify({
  effect: "flash",
  interval: 500,
  message: "There is new message!",
  audio: {
    file: ["msg.mp4", "msg.mp3", "msg.wav"],
  },
  notification: {
    title: "Notification!", // Set notification title
    body: "You have a new message!", // Set message content
  },
});

iN.setFavicon(10).player();

var n = new Notify();
n.init({
  effect: "flash",
  interval: 500,
  message: "There is new message!",
  audio: {
    file: ["openSub.mp4", "openSub.mp3", "openSub.wav"],
  },
  notification: {
    title: "Notification!",
    icon: "",
    body: "You have a new message!",
  },
});

n.setFavicon(10).player();
```

## Contributors

As always, thanks to our amazing contributors!

<a href="https://github.com/jaywcjlove/iNotify/graphs/contributors">
  <img src="https://jaywcjlove.github.io/iNotify/CONTRIBUTORS.svg" />
</a>

Made with [contributors](https://github.com/jaywcjlove/github-action-contributors).

## License

[MIT © Kenny Wong](https://github.com/jaywcjlove/iNotify/blob/master/MIT-LICENSE)
