Commit 5b7238a2 by Sebastián Katzer

Update to latest dev

parent e62fff29
{
"_args": [
[
{
"raw": "cordova-windows@~5.0.0",
"scope": null,
"escapedName": "cordova-windows",
"name": "cordova-windows",
"rawSpec": "~5.0.0",
"spec": ">=5.0.0 <5.1.0",
"type": "range"
},
"/Users/sebastian/Documents/github/cordova-example-local-notifications/node_modules"
]
],
"_from": "cordova-windows@>=5.0.0 <5.1.0",
"_from": "cordova-windows@^5.0.0",
"_id": "cordova-windows@5.0.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-fWRTk+byEstL0XFWcZlFSEzudf4=",
"_location": "/cordova-windows",
"_nodeVersion": "7.2.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/cordova-windows-5.0.0.tgz_1486749384153_0.040384991792961955"
},
"_npmUser": {
"name": "kotikov.vladimir",
"email": "kotikov.vladimir@gmail.com"
},
"_npmVersion": "3.10.9",
"_phantomChildren": {},
"_requested": {
"raw": "cordova-windows@~5.0.0",
"scope": null,
"escapedName": "cordova-windows",
"type": "range",
"registry": true,
"raw": "cordova-windows@^5.0.0",
"name": "cordova-windows",
"rawSpec": "~5.0.0",
"spec": ">=5.0.0 <5.1.0",
"type": "range"
"escapedName": "cordova-windows",
"rawSpec": "^5.0.0",
"saveSpec": null,
"fetchSpec": "^5.0.0"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz",
"_shasum": "7d645393e6f212cb4bd17156719945484cee75fe",
"_shrinkwrap": null,
"_spec": "cordova-windows@~5.0.0",
"_where": "/Users/sebastian/Documents/github/cordova-example-local-notifications/node_modules",
"_spec": "cordova-windows@^5.0.0",
"_where": "/Users/sebastian/Documents/github/cordova-example-local-notifications",
"author": {
"name": "Apache Software Foundation"
},
......@@ -75,6 +51,7 @@
"shelljs": "^0.5.3",
"winjs": "^4.4.0"
},
"deprecated": false,
"description": "cordova-windows release",
"devDependencies": {
"istanbul": "^0.4.0",
......@@ -82,11 +59,6 @@
"jshint": "^2.8.0",
"rewire": "^2.5.1"
},
"directories": {},
"dist": {
"shasum": "7d645393e6f212cb4bd17156719945484cee75fe",
"tarball": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz"
},
"homepage": "https://github.com/apache/cordova-windows#readme",
"keywords": [
"windows",
......@@ -95,60 +67,7 @@
],
"license": "Apache-2.0",
"main": "template/cordova/Api.js",
"maintainers": [
{
"name": "apachebuilds",
"email": "root@apache.org"
},
{
"name": "bowserj",
"email": "bowserj@apache.org"
},
{
"name": "cmarcelk",
"email": "cmarcelk@gmail.com"
},
{
"name": "filmaj",
"email": "maj.fil@gmail.com"
},
{
"name": "kamrik",
"email": "kamrik@gmail.com"
},
{
"name": "kotikov.vladimir",
"email": "kotikov.vladimir@gmail.com"
},
{
"name": "nikhilkh",
"email": "nikhil.khandelwal@gmail.com"
},
{
"name": "purplecabbage",
"email": "purplecabbage@gmail.com"
},
{
"name": "sgrebnov",
"email": "sergei.grebnov@gmail.com"
},
{
"name": "shazron",
"email": "shazron@gmail.com"
},
{
"name": "stevegill",
"email": "stevengill97@gmail.com"
},
{
"name": "timbarham",
"email": "npmjs@barhams.info"
}
],
"name": "cordova-windows",
"optionalDependencies": {},
"readme": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied. See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n-->\n\n#Apache Cordova for Windows\n\n[![Build status](https://ci.appveyor.com/api/projects/status/19h1fq0lyvwtei05/branch/master)](https://ci.appveyor.com/project/Humbedooh/cordova-windows/branch/master)\n[![Build Status](https://travis-ci.org/apache/cordova-windows.svg?branch=master)](https://travis-ci.org/apache/cordova-windows)\n[![codecov.io](https://codecov.io/github/apache/cordova-windows/coverage.svg?branch=master)](https://codecov.io/github/apache/cordova-windows?branch=master)\n\nThis repo contains the code for an [Apache Cordova](http://cordova.apache.org) platform that allows you to build applications that target Windows 10, and Windows 8.1, as well as Windows Phone 8.1. An Apache Cordova based applications is written in HTML, CSS and JavaScript.\n\n(Warning: Windows 8 has been deprecated, please update your applications to target Windows 8.1 or above)\n\n[Apache Cordova](http://cordova.apache.org) is a project of [The Apache Software Foundation (ASF)](http://apache.org)\n\n#Requirements\n### Windows 10, Windows 8.1, Windows Phone 8.1\n\nHost OS: Windows 8.1 or Windows 10\n\nInstall the tools: [Visual Studio 2015](http://www.visualstudio.com/downloads)\n\n### Windows 8.1,Windows Phone 8.1\n\nHost OS: Windows 8.1\n\nInstall the tools: [Visual Studio 2013 Express](http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-8).\n\n#Getting started\nThe best way to use this is to install the [Cordova CLI](https://www.npmjs.com/package/cordova), create a project, add the windows platform, and run the app:\n\n\tnpm install -g cordova\n\tcordova create test\n\tcordova platform add windows\n\tcordova run windows\n\n#Getting logs from Windows Store applications\nYou can get your JavaScript logs as well as Windows logs related to your Windows Store application by running the following command from your app directory:\n\n\tplatforms\\windows\\cordova\\log\n\nIn most cases, this command requires administrator privileges. However, if you want to gather logs without admin privileges, you may need to manually enable logging channel via Event Viewer:\n\n\tStart -> Run -> eventvwr\n\tView -> Show Analytic and Debug Logs\n\tApplications and Services Logs -> Microsoft -> Windows -> AppHost -> AppTracing -> Enable Log\n\nPlease note that the log command is supported only for Windows Store applications and cannot get logs from Windows Phone application.\n\n#Report Issues\nReport them at the [Apache Cordova Issue Tracker](https://issues.apache.org/jira/browse/CB). Create a user account, use `windows` as the component.\n\n#Further Reading\n- [Windows Platform Guide](http://cordova.apache.org/docs/en/edge/guide_platforms_win8_index.md.html#Windows%208%20Platform%20Guide)\n- [Apache Cordova Documentation](http://docs.cordova.io)\n",
"readmeFilename": "README.md",
"repository": {
"type": "git",
"url": "git+https://github.com/apache/cordova-windows.git"
......
......@@ -2,10 +2,21 @@
"name": "de.appplant.localnotification.example",
"version": "0.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"cordova-ios": {
"version": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.4.0.tgz",
"integrity": "sha1-XNbvciRQXbVYRG5GN62X0IeMdO8=",
"requires": {
"cordova-common": "2.0.2",
"ios-sim": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.12.tgz",
"nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"xcode": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
"xml-escape": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz"
},
"dependencies": {
"abbrev": {
"version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
......@@ -29,15 +40,25 @@
},
"bplist-creator": {
"version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz",
"integrity": "sha1-SsBJZ4LhJ6hcHSAmpPXrIqev+ZE="
"integrity": "sha1-SsBJZ4LhJ6hcHSAmpPXrIqev+ZE=",
"requires": {
"stream-buffers": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-0.2.6.tgz"
}
},
"bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY="
"integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
"requires": {
"big-integer": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.17.tgz"
}
},
"brace-expansion": {
"version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
"integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk="
"integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
"requires": {
"balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
"concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
},
"concat-map": {
"version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
......@@ -46,7 +67,22 @@
"cordova-common": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.0.2.tgz",
"integrity": "sha1-V0Z5driv1eC9ChMRG2akIEQWAcs="
"integrity": "sha1-V0Z5driv1eC9ChMRG2akIEQWAcs=",
"requires": {
"ansi": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"cordova-registry-mapper": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
"elementtree": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
"glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
"semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"underscore": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"unorm": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz"
}
},
"cordova-registry-mapper": {
"version": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
......@@ -54,15 +90,29 @@
},
"elementtree": {
"version": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
"integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw="
"integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=",
"requires": {
"sax": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
}
},
"glob": {
"version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E="
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"requires": {
"inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
}
},
"inflight": {
"version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
},
"inherits": {
"version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
......@@ -71,6 +121,12 @@
"ios-sim": {
"version": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.12.tgz",
"integrity": "sha1-CwdDbOG/Zjvamj+3VBL0Gh3sRls=",
"requires": {
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
"nopt": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"simctl": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz"
},
"dependencies": {
"bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
......@@ -78,7 +134,10 @@
},
"nopt": {
"version": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
"integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4="
"integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=",
"requires": {
"abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
}
}
}
},
......@@ -88,7 +147,10 @@
},
"minimatch": {
"version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q="
"integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
"requires": {
"brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
}
},
"node-uuid": {
"version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
......@@ -96,11 +158,17 @@
},
"nopt": {
"version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k="
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
"abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
}
},
"once": {
"version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
},
"os-homedir": {
"version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
......@@ -112,7 +180,11 @@
},
"osenv": {
"version": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
"integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc="
"integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc=",
"requires": {
"os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
}
},
"path-is-absolute": {
"version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
......@@ -124,7 +196,13 @@
},
"plist": {
"version": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM="
"integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
"requires": {
"base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
"util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
"xmldom": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz"
}
},
"q": {
"version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
......@@ -145,6 +223,10 @@
"simctl": {
"version": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz",
"integrity": "sha1-reEzthbid/6ly8m6Q4qAUpuqaW0=",
"requires": {
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
"tail": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz"
},
"dependencies": {
"shelljs": {
"version": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
......@@ -155,6 +237,11 @@
"simple-plist": {
"version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.1.4.tgz",
"integrity": "sha1-EOtRtH4zxVbrjsRtXuZNZOcX210=",
"requires": {
"bplist-creator": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz"
},
"dependencies": {
"bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
......@@ -189,6 +276,11 @@
"xcode": {
"version": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
"integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=",
"requires": {
"pegjs": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
"simple-plist": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
"uuid": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz"
},
"dependencies": {
"base64-js": {
"version": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
......@@ -196,7 +288,10 @@
},
"bplist-creator": {
"version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
"integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU="
"integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=",
"requires": {
"stream-buffers": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz"
}
},
"pegjs": {
"version": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
......@@ -204,11 +299,21 @@
},
"plist": {
"version": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
"integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os="
"integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=",
"requires": {
"base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
"xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"xmldom": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz"
}
},
"simple-plist": {
"version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
"integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM="
"integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=",
"requires": {
"bplist-creator": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz"
}
},
"stream-buffers": {
"version": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
......@@ -230,7 +335,10 @@
},
"xmlbuilder": {
"version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
"integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M="
"integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
"requires": {
"lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"
}
},
"xmldom": {
"version": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
......@@ -245,6 +353,221 @@
"cordova-plugin-x-toast": {
"version": "https://registry.npmjs.org/cordova-plugin-x-toast/-/cordova-plugin-x-toast-2.6.0.tgz",
"integrity": "sha1-R3i+y2HjbIlRCRoHWFDCje2PVqU="
},
"cordova-windows": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz",
"integrity": "sha1-fWRTk+byEstL0XFWcZlFSEzudf4=",
"requires": {
"cordova-common": "2.0.0",
"elementtree": "0.1.6",
"node-uuid": "1.4.7",
"nopt": "3.0.6",
"q": "1.4.1",
"semver": "5.3.0",
"shelljs": "0.5.3",
"winjs": "4.4.0"
},
"dependencies": {
"abbrev": {
"version": "1.0.9",
"bundled": true
},
"ansi": {
"version": "0.3.1",
"bundled": true
},
"balanced-match": {
"version": "0.4.2",
"bundled": true
},
"base64-js": {
"version": "0.0.8",
"bundled": true
},
"big-integer": {
"version": "1.6.17",
"bundled": true
},
"bplist-parser": {
"version": "0.1.1",
"bundled": true,
"requires": {
"big-integer": "1.6.17"
}
},
"brace-expansion": {
"version": "1.1.6",
"bundled": true,
"requires": {
"balanced-match": "0.4.2",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"bundled": true
},
"cordova-common": {
"version": "2.0.0",
"bundled": true,
"requires": {
"ansi": "0.3.1",
"bplist-parser": "0.1.1",
"cordova-registry-mapper": "1.1.15",
"elementtree": "0.1.6",
"glob": "5.0.15",
"minimatch": "3.0.3",
"osenv": "0.1.4",
"plist": "1.2.0",
"q": "1.4.1",
"semver": "5.3.0",
"shelljs": "0.5.3",
"underscore": "1.8.3",
"unorm": "1.4.1"
}
},
"cordova-registry-mapper": {
"version": "1.1.15",
"bundled": true
},
"elementtree": {
"version": "0.1.6",
"bundled": true,
"requires": {
"sax": "0.3.5"
}
},
"glob": {
"version": "5.0.15",
"bundled": true,
"requires": {
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.3",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true
},
"lodash": {
"version": "3.10.1",
"bundled": true
},
"minimatch": {
"version": "3.0.3",
"bundled": true,
"requires": {
"brace-expansion": "1.1.6"
}
},
"node-uuid": {
"version": "1.4.7",
"bundled": true
},
"nopt": {
"version": "3.0.6",
"bundled": true,
"requires": {
"abbrev": "1.0.9"
}
},
"once": {
"version": "1.4.0",
"bundled": true,
"requires": {
"wrappy": "1.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true
},
"osenv": {
"version": "0.1.4",
"bundled": true,
"requires": {
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true
},
"plist": {
"version": "1.2.0",
"bundled": true,
"requires": {
"base64-js": "0.0.8",
"util-deprecate": "1.0.2",
"xmlbuilder": "4.0.0",
"xmldom": "0.1.27"
}
},
"q": {
"version": "1.4.1",
"bundled": true
},
"sax": {
"version": "0.3.5",
"bundled": true
},
"semver": {
"version": "5.3.0",
"bundled": true
},
"shelljs": {
"version": "0.5.3",
"bundled": true
},
"underscore": {
"version": "1.8.3",
"bundled": true
},
"unorm": {
"version": "1.4.1",
"bundled": true
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true
},
"winjs": {
"version": "4.4.0",
"bundled": true
},
"wrappy": {
"version": "1.0.2",
"bundled": true
},
"xmlbuilder": {
"version": "4.0.0",
"bundled": true,
"requires": {
"lodash": "3.10.1"
}
},
"xmldom": {
"version": "0.1.27",
"bundled": true
}
}
}
}
}
......@@ -18,13 +18,13 @@
D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4042BD923824AEB9E9079DC /* QuartzCore.framework */; };
E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B49413F707024AE39907B73F /* libz.tbd */; };
E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A150CBE2B3E47C5A4319096 /* CDVDevice.m */; };
520715FC8CC24074B2996DFE /* APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 223C01213A344BA3A5F850BA /* APPLocalNotification.m */; };
BA4228D76F524318A690F7DC /* APPNotificationContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */; };
6D81AA9C83F9414193740A4A /* APPNotificationOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */; };
763EAA7E1C1E469999D41344 /* UNUserNotificationCenter+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */; };
BBDEF81684CF4D96B610BDF4 /* UNNotificationRequest+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */; };
A9BE8C9D094A42A295BE7C4E /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174DCD6CDC864B05935C3844 /* UserNotifications.framework */; };
5FE7FCB9F9164B11945BB2E3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */; };
108C9D43229F4E2EBE2DECA0 /* APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */; };
9AACB8F837894AF7B9B06BC4 /* APPNotificationContent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */; };
37F34D7EC0124D339A3E4245 /* APPNotificationOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */; };
2AED393561D94BDE93435CFE /* UNUserNotificationCenter+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */; };
F0C3627890224CEE84A78FEA /* UNNotificationRequest+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */; };
FD60B7C086C44B04A83A51C0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A16EEDD76F364E7B960FB55A /* UserNotifications.framework */; };
FFEBA818A0644C1188BD90BF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4A3499808544C7EB82C4B61 /* CoreLocation.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
......@@ -80,18 +80,18 @@
EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = "<group>"; };
ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = NotificationExample/config.xml; sourceTree = "<group>"; };
223C01213A344BA3A5F850BA /* APPLocalNotification.m */ = {isa = PBXFileReference; name = "APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */ = {isa = PBXFileReference; name = "APPNotificationContent.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */ = {isa = PBXFileReference; name = "APPNotificationOptions.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationOptions.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNUserNotificationCenter+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNNotificationRequest+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
9E975B15F82242159DF20877 /* APPLocalNotification.h */ = {isa = PBXFileReference; name = "APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
211B4E56A6204223BD842378 /* APPNotificationContent.h */ = {isa = PBXFileReference; name = "APPNotificationContent.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
03C67BDE81EB4D458B248416 /* APPNotificationOptions.h */ = {isa = PBXFileReference; name = "APPNotificationOptions.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationOptions.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
E07DC1B943BE47EBAED89D1D /* UNUserNotificationCenter+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNUserNotificationCenter+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
97D08C9901D54B0893172FAF /* UNNotificationRequest+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNNotificationRequest+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
174DCD6CDC864B05935C3844 /* UserNotifications.framework */ = {isa = PBXFileReference; name = "UserNotifications.framework"; path = "System/Library/Frameworks/UserNotifications.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */ = {isa = PBXFileReference; name = "CoreLocation.framework"; path = "System/Library/Frameworks/CoreLocation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */ = {isa = PBXFileReference; name = "APPLocalNotification.m"; path = "cordova-plugin-local-notifications/APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */ = {isa = PBXFileReference; name = "APPNotificationContent.m"; path = "cordova-plugin-local-notifications/APPNotificationContent.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */ = {isa = PBXFileReference; name = "APPNotificationOptions.m"; path = "cordova-plugin-local-notifications/APPNotificationOptions.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.m"; path = "cordova-plugin-local-notifications/UNUserNotificationCenter+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.m"; path = "cordova-plugin-local-notifications/UNNotificationRequest+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
31679441BE5D476D889EB37E /* APPLocalNotification.h */ = {isa = PBXFileReference; name = "APPLocalNotification.h"; path = "cordova-plugin-local-notifications/APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
271840E47E454737868156B8 /* APPNotificationContent.h */ = {isa = PBXFileReference; name = "APPNotificationContent.h"; path = "cordova-plugin-local-notifications/APPNotificationContent.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
ED2B089C8384493692652830 /* APPNotificationOptions.h */ = {isa = PBXFileReference; name = "APPNotificationOptions.h"; path = "cordova-plugin-local-notifications/APPNotificationOptions.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
7A2078E2751C469CB92D931A /* UNUserNotificationCenter+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.h"; path = "cordova-plugin-local-notifications/UNUserNotificationCenter+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
D64710F014A04CF8860A7E99 /* UNNotificationRequest+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.h"; path = "cordova-plugin-local-notifications/UNNotificationRequest+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
A16EEDD76F364E7B960FB55A /* UserNotifications.framework */ = {isa = PBXFileReference; name = "UserNotifications.framework"; path = "System/Library/Frameworks/UserNotifications.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
A4A3499808544C7EB82C4B61 /* CoreLocation.framework */ = {isa = PBXFileReference; name = "CoreLocation.framework"; path = "System/Library/Frameworks/CoreLocation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -102,8 +102,8 @@
301BF552109A68D80062928A /* libCordova.a in Frameworks */,
E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */,
D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */,
A9BE8C9D094A42A295BE7C4E /* UserNotifications.framework in Frameworks */,
5FE7FCB9F9164B11945BB2E3 /* CoreLocation.framework in Frameworks */,
FD60B7C086C44B04A83A51C0 /* UserNotifications.framework in Frameworks */,
FFEBA818A0644C1188BD90BF /* CoreLocation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -176,8 +176,8 @@
children = (
B49413F707024AE39907B73F /* libz.tbd */,
E4042BD923824AEB9E9079DC /* QuartzCore.framework */,
174DCD6CDC864B05935C3844 /* UserNotifications.framework */,
064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */,
A16EEDD76F364E7B960FB55A /* UserNotifications.framework */,
A4A3499808544C7EB82C4B61 /* CoreLocation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
......@@ -210,16 +210,16 @@
816F86ACE6CD4C8E8FA7A84A /* Toast.m */,
A380129C71E248EDBC5BE744 /* Toast+UIView.h */,
84764C161F33453AB5FD1235 /* Toast.h */,
223C01213A344BA3A5F850BA /* APPLocalNotification.m */,
6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */,
F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */,
C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */,
C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */,
9E975B15F82242159DF20877 /* APPLocalNotification.h */,
211B4E56A6204223BD842378 /* APPNotificationContent.h */,
03C67BDE81EB4D458B248416 /* APPNotificationOptions.h */,
E07DC1B943BE47EBAED89D1D /* UNUserNotificationCenter+APPLocalNotification.h */,
97D08C9901D54B0893172FAF /* UNNotificationRequest+APPLocalNotification.h */,
E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */,
F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */,
595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */,
CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */,
F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */,
31679441BE5D476D889EB37E /* APPLocalNotification.h */,
271840E47E454737868156B8 /* APPNotificationContent.h */,
ED2B089C8384493692652830 /* APPNotificationOptions.h */,
7A2078E2751C469CB92D931A /* UNUserNotificationCenter+APPLocalNotification.h */,
D64710F014A04CF8860A7E99 /* UNNotificationRequest+APPLocalNotification.h */,
);
name = Plugins;
path = NotificationExample/Plugins;
......@@ -350,11 +350,11 @@
E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */,
CA605C2FE84D46FC94CE18B1 /* Toast+UIView.m in Sources */,
91E68846231A433A8F26E364 /* Toast.m in Sources */,
520715FC8CC24074B2996DFE /* APPLocalNotification.m in Sources */,
BA4228D76F524318A690F7DC /* APPNotificationContent.m in Sources */,
6D81AA9C83F9414193740A4A /* APPNotificationOptions.m in Sources */,
763EAA7E1C1E469999D41344 /* UNUserNotificationCenter+APPLocalNotification.m in Sources */,
BBDEF81684CF4D96B610BDF4 /* UNNotificationRequest+APPLocalNotification.m in Sources */,
108C9D43229F4E2EBE2DECA0 /* APPLocalNotification.m in Sources */,
9AACB8F837894AF7B9B06BC4 /* APPNotificationContent.m in Sources */,
37F34D7EC0124D339A3E4245 /* APPNotificationOptions.m in Sources */,
2AED393561D94BDE93435CFE /* UNUserNotificationCenter+APPLocalNotification.m in Sources */,
F0C3627890224CEE84A78FEA /* UNNotificationRequest+APPLocalNotification.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......
......@@ -2,4 +2,22 @@
<Bucket
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.m"
timestampString = "526314552.870829"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "102"
endingLineNumber = "102"
landmarkName = "-request"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>
......@@ -26,9 +26,9 @@
@interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate>
// Set launchDetails object
- (void) launchDetails:(CDVInvokedUrlCommand*)command;
- (void) launch:(CDVInvokedUrlCommand*)command;
// Execute all queued events
- (void) deviceready:(CDVInvokedUrlCommand*)command;
- (void) ready:(CDVInvokedUrlCommand*)command;
// Check permission to show notifications
- (void) check:(CDVInvokedUrlCommand*)command;
......@@ -40,8 +40,8 @@
// Schedule notifications
- (void) schedule:(CDVInvokedUrlCommand*)command;
//// Update set of notifications
//- (void) update:(CDVInvokedUrlCommand*)command;
// Update set of notifications
- (void) update:(CDVInvokedUrlCommand*)command;
// Clear notifications by id
- (void) clear:(CDVInvokedUrlCommand*)command;
// Clear all notifications
......
......@@ -47,13 +47,12 @@
*
* @return [ Void ]
*/
- (void) launchDetails:(CDVInvokedUrlCommand*)command
- (void) launch:(CDVInvokedUrlCommand*)command
{
if (!_launchDetails)
return;
NSString* js;
js = [NSString stringWithFormat:
@"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}",
_launchDetails[0], _launchDetails[1]];
......@@ -68,7 +67,7 @@
*
* @return [ Void ]
*/
- (void) deviceready:(CDVInvokedUrlCommand*)command
- (void) ready:(CDVInvokedUrlCommand*)command
{
deviceready = YES;
......@@ -104,60 +103,36 @@
}];
}
///**
// * Update a set of notifications.
// *
// * @param properties
// * A dict of properties for each notification
// */
//- (void) update:(CDVInvokedUrlCommand*)command
//{
// NSArray* notifications = command.arguments;
//
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UNNotificationRequest* notification;
//
// notification = [_center getNotificationWithId:id];
//
// if (!notification)
// continue;
//
// // [self updateNotification:[notification copy]
// // withOptions:options];
// //
// // [self fireEvent:@"update" notification:notification];
// //
// // if (notifications.count > 1) {
// // [NSThread sleepForTimeInterval:0.01];
// // }
// }
// } else {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UILocalNotification* notification;
//
// notification = [_app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self updateLocalNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
/**
* Update notifications.
*
* @param [Array<Hash>] properties A list of key-value properties.
*
* @return [ Void ]
*/
- (void) update:(CDVInvokedUrlCommand*)command
{
NSArray* notifications = command.arguments;
[self.commandDelegate runInBackground:^{
for (NSDictionary* options in notifications) {
NSNumber* id = [options objectForKey:@"id"];
UNNotificationRequest* notification;
notification = [_center getNotificationWithId:id];
if (!notification)
continue;
[self updateNotification:[notification copy]
withOptions:options];
[self fireEvent:@"update" notification:notification];
}
[self execCallback:command];
}];
}
/**
* Clear notifications by id.
......@@ -242,58 +217,32 @@
}
/**
* If a notification by ID is present.
*
* @param [ Number ]id The ID of the notification.
*
* @return [ Void ]
*/
- (void) isPresent:(CDVInvokedUrlCommand *)command
{
[self exist:command byType:NotifcationTypeAll];
}
/**
* If a notification by ID is scheduled.
* Get type of notification.
*
* @param [ Number ]id The ID of the notification.
* @param [ Int ] id The ID of the notification.
*
* @return [ Void ]
*/
- (void) isScheduled:(CDVInvokedUrlCommand*)command
{
[self exist:command byType:NotifcationTypeScheduled];
}
/**
* Check if a notification with an ID is triggered.
*
* @param [ Number ]id The ID of the notification.
*
* @return [ Void ]
*/
- (void) isTriggered:(CDVInvokedUrlCommand*)command
{
[self exist:command byType:NotifcationTypeTriggered];
}
/**
* Check if a notification exists by ID and type.
*
* @param [ APPNotificationType ] type The type of notifications to look for.
*
* @return [ Void ]
*/
- (void) exist:(CDVInvokedUrlCommand*)command
byType:(APPNotificationType)type;
- (void) type:(CDVInvokedUrlCommand*)command
{
[self.commandDelegate runInBackground:^{
NSNumber* id = [command argumentAtIndex:0];
BOOL exist = [_center notificationExist:id type:type];
NSString* type;
switch ([_center getTypeOfNotificationWithId:id]) {
case NotifcationTypeScheduled:
type = @"scheduled";
break;
case NotifcationTypeTriggered:
type = @"triggered";
break;
default:
type = @"unknown";
}
CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsBool:exist];
messageAsString:type];
[self.commandDelegate sendPluginResult:result
callbackId:command.callbackId];
......@@ -361,24 +310,11 @@
*/
- (void) notification:(CDVInvokedUrlCommand*)command
{
[self notification:command byType:NotifcationTypeAll];
}
/**
* Notification by type and id.
*
* @param [ APPNotificationType ] type The type of notifications to look for.
*
* @return [ Void ]
*/
- (void) notification:(CDVInvokedUrlCommand*)command
byType:(APPNotificationType)type;
{
[self.commandDelegate runInBackground:^{
NSArray* ids = command.arguments;
NSArray* notifications;
notifications = [_center getNotificationOptionsByType:type andId:ids];
notifications = [_center getNotificationOptionsById:ids];
CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
......@@ -426,7 +362,7 @@
}
/**
* List of notifications by type and id.
* List of notifications by type or id.
*
* @param [ APPNotificationType ] type The type of notifications to look for.
*
......@@ -439,18 +375,11 @@
NSArray* ids = command.arguments;
NSArray* notifications;
if (type == NotifcationTypeAll && ids.count == 0) {
notifications = [_center getNotificationOptions];
}
else if (type == NotifcationTypeAll) {
if (ids.count > 0) {
notifications = [_center getNotificationOptionsById:ids];
}
else if (ids.count == 0) {
notifications = [_center getNotificationOptionsByType:type];
}
else {
notifications = [_center getNotificationOptionsByType:type
andId:ids];
notifications = [_center getNotificationOptionsByType:type];
}
CDVPluginResult* result;
......@@ -522,36 +451,46 @@
/**
* Schedule the local notification.
*
* @param [ APPNotificationContent* ] notification The notification to schedule.
*
* @return [ Void ]
*/
- (void) scheduleNotification:(APPNotificationContent*)notification
{
__weak APPLocalNotification* weakSelf = self;
UNNotificationRequest* request = notification.request;
NSString* event = [notification.request wasUpdated] ? @"update" : @"add";
[_center addNotificationCategory:notification.category];
[_center addNotificationRequest:request withCompletionHandler:^(NSError* e) {
__strong APPLocalNotification* strongSelf = weakSelf;
[strongSelf fireEvent:@"add" notification:request];
[strongSelf fireEvent:event notification:request];
}];
}
///**
// * Update the local notification.
// */
//- (void) updateNotification:(UILocalNotification*)notification
// withOptions:(NSDictionary*)newOptions
//{APPNotificationRequest*
// NSMutableDictionary* options = [notification.userInfo mutableCopy];
//
// [options addEntriesFromDictionary:newOptions];
// [options setObject:[NSDate date] forKey:@"updatedAt"];
//
//// notification = [[UILocalNotification alloc]
//// initWithOptions:options];
////
//// [self scheduleLocalNotification:notification];
//}
/**
* Update the local notification.
*
* @param [ UNNotificationRequest* ] notification The notification to update.
* @param [ NSDictionary* ] options The options to update.
*
* @return [ Void ]
*/
- (void) updateNotification:(UNNotificationRequest*)notification
withOptions:(NSDictionary*)newOptions
{
NSMutableDictionary* options = [notification.content.userInfo mutableCopy];
[options addEntriesFromDictionary:newOptions];
[options setObject:[NSDate date] forKey:@"updatedAt"];
APPNotificationContent*
newNotification = [[APPNotificationContent alloc] initWithOptions:options];
[self scheduleNotification:newNotification];
}
#pragma mark -
#pragma mark UNUserNotificationCenterDelegate
......@@ -563,8 +502,15 @@
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
if (![notification.request wasUpdated]) {
[self fireEvent:@"trigger" notification:notification.request];
}
if (notification.request.options.silent) {
completionHandler(UNNotificationPresentationOptionNone);
} else {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
}
/**
......
......@@ -30,6 +30,7 @@
@property (readonly, getter=subtitle) NSString* subtitle;
@property (readonly, getter=badge) NSNumber* badge;
@property (readonly, getter=text) NSString* text;
@property (readonly, getter=silent) BOOL silent;
@property (readonly, getter=sound) UNNotificationSound* sound;
@property (readonly, getter=userInfo) NSDictionary* userInfo;
@property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions;
......
......@@ -61,18 +61,6 @@
#pragma mark Properties
/**
* The type for the notification.
*
* @return [ NSString* ]
*/
- (NSString*) triggerType
{
NSString* type = [dict objectForKey:@"trigger"];
return type.length ? type : @"normal";
}
/**
* The ID for the notification.
*
* @return [ NSNumber* ]
......@@ -127,6 +115,16 @@
}
/**
* Show notification in foreground.
*
* @return [ BOOL ]
*/
- (BOOL) silent
{
return [[dict objectForKey:@"silent"] boolValue];
}
/**
* The badge number for the notification.
*
* @return [ NSNumber* ]
......@@ -280,12 +278,12 @@
*/
- (UNNotificationTrigger*) trigger
{
NSString* type = [self triggerType];
NSString* type = [self valueForTriggerOption:@"type"];
if ([type isEqualToString:@"location"])
return [self triggerWithRegion];
if (![type isEqualToString:@"date"])
if (![type isEqualToString:@"calendar"])
NSLog(@"Unknown type: %@", type);
if ([self isRepeating])
......@@ -315,6 +313,11 @@
#pragma mark -
#pragma mark Private
- (id) valueForTriggerOption:(NSString*)key
{
return [[dict objectForKey:@"trigger"] objectForKey:key];
}
/**
* The date when to fire the notification.
*
......@@ -322,8 +325,7 @@
*/
- (NSDate*) triggerDate
{
double timestamp = [[dict objectForKey:@"at"]
doubleValue];
double timestamp = [[self valueForTriggerOption:@"at"] doubleValue];
return [NSDate dateWithTimeIntervalSince1970:timestamp];
}
......@@ -335,7 +337,7 @@
*/
- (BOOL) isRepeating
{
id every = [dict objectForKey:@"every"];
id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class])
return ((NSString*) every).length > 0;
......@@ -364,7 +366,7 @@
*/
- (UNNotificationTrigger*) repeatingTrigger
{
id every = [dict objectForKey:@"every"];
id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class])
return [self triggerWithDateMatchingComponents];
......@@ -382,7 +384,7 @@
*/
- (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval
{
long interval = [[dict objectForKey:@"every"] longValue];
long interval = [[self valueForTriggerOption:@"every"] longValue];
if (interval < 60) {
NSLog(@"time interval must be at least 60 if repeating");
......@@ -438,8 +440,8 @@
*/
- (UNLocationNotificationTrigger*) triggerWithRegion
{
NSArray* center = [dict objectForKey:@"center"];
double radius = [[dict objectForKey:@"radius"] doubleValue];
NSArray* center = [self valueForTriggerOption:@"center"];
double radius = [[self valueForTriggerOption:@"radius"] doubleValue];
CLLocationCoordinate2D coord =
CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]);
......@@ -449,8 +451,8 @@
radius:radius
identifier:self.identifier];
region.notifyOnEntry = [[dict objectForKey:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[dict objectForKey:@"notifyOnExit"] boolValue];
region.notifyOnEntry = [[self valueForTriggerOption:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[self valueForTriggerOption:@"notifyOnExit"] boolValue];
return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];
}
......@@ -472,7 +474,7 @@
*/
- (NSCalendarUnit) repeatInterval
{
NSString* interval = [dict objectForKey:@"every"];
NSString* interval = [self valueForTriggerOption:@"every"];
NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
if ([interval isEqualToString:@"minute"])
......@@ -504,7 +506,7 @@
- (NSDateComponents*) customDateComponents
{
NSDateComponents* date = [[NSDateComponents alloc] init];
NSDictionary* every = [dict objectForKey:@"every"];
NSDictionary* every = [self valueForTriggerOption:@"every"];
for (NSString* key in every) {
long value = [[every valueForKey:key] longValue];
......
......@@ -27,6 +27,8 @@
// The options provided by the plug-in
- (APPNotificationOptions*) options;
// If the notification was updated
- (BOOL) wasUpdated;
// Encode the user info dict to JSON
- (NSString*) encodeToJSON;
......
......@@ -65,6 +65,16 @@ static char optionsKey;
}
/**
* If the notification was updated.
*
* @return [ BOOL ]
*/
- (BOOL) wasUpdated
{
return [self.content userInfo][@"updatedAt"] != NULL;
}
/**
* Encode the user info dict to JSON.
*/
- (NSString*) encodeToJSON
......
......@@ -28,7 +28,8 @@ extern NSString * const kAPPGeneralCategory;
typedef NS_ENUM(NSUInteger, APPNotificationType) {
NotifcationTypeAll = 0,
NotifcationTypeScheduled = 1,
NotifcationTypeTriggered = 2
NotifcationTypeTriggered = 2,
NotifcationTypeUnknown = 3
};
#define APPNotificationType_DEFINED
......@@ -44,15 +45,10 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) {
// List of all notification IDs from given type
- (NSArray*) getNotificationIdsByType:(APPNotificationType)type;
// Find out if notification with ID exists
- (BOOL) notificationExist:(NSNumber*)id;
// Find out if notification with ID and type exists
- (BOOL) notificationExist:(NSNumber*)id type:(APPNotificationType)type;
// Find notification by ID
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id;
// Find notification by ID and type
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id andType:(APPNotificationType)type;
// Find notification type by ID
- (APPNotificationType) getTypeOfNotificationWithId:(NSNumber*)id;
// Property list from all local notifications
- (NSArray*) getNotificationOptions;
......@@ -60,8 +56,6 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) {
- (NSArray*) getNotificationOptionsById:(NSArray*)ids;
// Property list from all local notifications with type constraint
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type;
// Property list from given local notifications with type constraint
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type andId:(NSArray*)ids;
// Clear specified notfication
- (void) clearNotification:(UNNotificationRequest*)notification;
......
......@@ -185,29 +185,6 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
return ids;
}
/*
* If the notification with the specified ID does exists.
*
* @param id
* Notification ID
*/
- (BOOL) notificationExist:(NSNumber*)id
{
return [self getNotificationWithId:id] != NULL;
}
/* If the notification with specified ID and type exists.
*
* @param id
* Notification ID
* @param type
* Notification life cycle type
*/
- (BOOL) notificationExist:(NSNumber*)id type:(APPNotificationType)type
{
return [self getNotificationWithId:id andType:type] != NULL;
}
/**
* Find notification by ID.
*
......@@ -216,20 +193,7 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
*/
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id
{
return [self getNotificationWithId:id andType:NotifcationTypeAll];
}
/*
* Find notification by ID and type.
*
* @param id
* Notification ID
* @param type
* Notification life cycle type
*/
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id andType:(APPNotificationType)type
{
NSArray* notifications = [self getNotificationsByType:type];
NSArray* notifications = [self getNotifications];
for (UNNotificationRequest* notification in notifications)
{
......@@ -244,6 +208,24 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
}
/**
* Find notification type by ID
*/
- (APPNotificationType) getTypeOfNotificationWithId:(NSNumber*)id
{
NSArray* ids = [self getNotificationIdsByType:NotifcationTypeTriggered];
if ([ids containsObject:id])
return NotifcationTypeTriggered;
ids = [self getNotificationIdsByType:NotifcationTypeScheduled];
if ([ids containsObject:id])
return NotifcationTypeScheduled;
return NotifcationTypeUnknown;
}
/**
* List of properties from all notifications.
*/
- (NSArray*) getNotificationOptions
......@@ -278,20 +260,7 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
*/
- (NSArray*) getNotificationOptionsById:(NSArray*)ids
{
return [self getNotificationOptionsByType:NotifcationTypeAll andId:ids];
}
/**
* List of properties from given local notifications.
*
* @param type
* Notification life cycle type
* @param ids
* Notification IDs
*/
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type andId:(NSArray*)ids
{
NSArray* notifications = [self getNotificationsByType:type];
NSArray* notifications = [self getNotifications];
NSMutableArray* options = [[NSMutableArray alloc] init];
for (UNNotificationRequest* notification in notifications)
......
......@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
}
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
/**
* Schedule notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (msgs, callback, scope, args) {
var fn = function(granted) {
if (!granted) return;
var notifications = Array.isArray(msgs) ? msgs : [msgs];
for (var i = 0; i < notifications.length; i++) {
var notification = notifications[i];
this.convertProperties(notification);
}
this.exec('update', notifications, callback, scope);
};
if (args && args.skipPermission) {
fn.call(this, true);
} else {
this.requestPermission(fn, this);
}
};
/**
* Clear the specified notifications by id.
......
......@@ -29,14 +29,14 @@ exports._defaults = {
text: '',
title: '',
sound: 'res://platform_default',
trigger: 'date',
badge: undefined,
data: undefined,
every: undefined,
at: undefined,
icon: undefined,
trigger: { type: 'calendar' },
actions: [],
actionGroupId: undefined,
attachments: []
attachments: [],
progressBar: false
};
// Listener
......@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined;
defaults.color = undefined;
break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
}
};
......@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json');
......@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false;
}
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) {
if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
......@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) {
if (!defaults.hasOwnProperty(key)) {
delete options[key];
// delete options[key];
console.warn('Unknown property: ' + key);
}
}
......@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
}
}
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data);
}
if (options.actions) {
this.convertTrigger(options);
this.convertActions(options);
}
this.convertProgressBar(options);
return options;
};
......@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
};
/**
......@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exports.exec('deviceready');
exports.exec('ready');
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () {
// Set launchDetails object
exports.exec('launchDetails');
exports.exec('launch');
// Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults
......
......@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args);
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/**
* Update notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (notifications, callback, scope, args) {
this.core.update(notifications, callback, scope, args);
};
/**
* Clear the specified notifications by id.
......
......@@ -58,6 +58,8 @@ var app = {
document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('update_text').onclick = app.update;
document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('clear_all').onclick = app.clearAll;
......@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () {
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Test Message 1',
title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova',
sound: null,
......@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
title: 'Scheduled with delay',
text: 'Test Message 1',
at: _5_sec_from_now,
trigger: _5_sec_from_now,
sound: sound,
badge: 12
});
},
// Schedule a repeating notification
scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Scheduled every minute',
every: 'minute',
trigger: { every: 'minute' },
sound: sound,
icon: 'res://icon',
smallIcon: 'res://ic_popup_sync'
......@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike',
actions: [{
......@@ -181,6 +185,27 @@ var app = {
}]
});
},
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification
clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids);
......@@ -298,7 +323,7 @@ var app = {
});
cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments);
// showToast('updated: ' + obj.id);
showToast('updated: ' + obj.id);
});
cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments);
......@@ -371,7 +396,7 @@ showWinDialog = function (text) {
};
if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); };
alert = showWinDialog;
}
app.initialize();
......@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
}
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
/**
* Schedule notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (msgs, callback, scope, args) {
var fn = function(granted) {
if (!granted) return;
var notifications = Array.isArray(msgs) ? msgs : [msgs];
for (var i = 0; i < notifications.length; i++) {
var notification = notifications[i];
this.convertProperties(notification);
}
this.exec('update', notifications, callback, scope);
};
if (args && args.skipPermission) {
fn.call(this, true);
} else {
this.requestPermission(fn, this);
}
};
/**
* Clear the specified notifications by id.
......
......@@ -29,14 +29,14 @@ exports._defaults = {
text: '',
title: '',
sound: 'res://platform_default',
trigger: 'date',
badge: undefined,
data: undefined,
every: undefined,
at: undefined,
icon: undefined,
trigger: { type: 'calendar' },
actions: [],
actionGroupId: undefined,
attachments: []
attachments: [],
progressBar: false
};
// Listener
......@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined;
defaults.color = undefined;
break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
}
};
......@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json');
......@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false;
}
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) {
if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
......@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) {
if (!defaults.hasOwnProperty(key)) {
delete options[key];
// delete options[key];
console.warn('Unknown property: ' + key);
}
}
......@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
}
}
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data);
}
if (options.actions) {
this.convertTrigger(options);
this.convertActions(options);
}
this.convertProgressBar(options);
return options;
};
......@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
};
/**
......@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exports.exec('deviceready');
exports.exec('ready');
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () {
// Set launchDetails object
exports.exec('launchDetails');
exports.exec('launch');
// Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults
......
......@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args);
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/**
* Update notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (notifications, callback, scope, args) {
this.core.update(notifications, callback, scope, args);
};
/**
* Clear the specified notifications by id.
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
IIS configuration sections.
For schema documentation, see
%IIS_BIN%\config\schema\IIS_schema.xml.
Please make a backup of this file before making any changes to it.
NOTE: The following environment variables are available to be used
within this file and are understood by the IIS Express.
%IIS_USER_HOME% - The IIS Express home directory for the user
%IIS_SITES_HOME% - The default home directory for sites
%IIS_BIN% - The location of the IIS Express binaries
%SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-->
<configuration>
<!--
The <configSections> section controls the registration of sections.
Section is the basic unit of deployment, locking, searching and
containment for configuration settings.
Every section belongs to one section group.
A section group is a container of logically-related sections.
Sections cannot be nested.
Section groups may be nested.
<section
name="" [Required, Collection Key] [XML name of the section]
allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
overrideModeDefault="Allow" [Allow|Deny] [Default delegation mode]
allowLocation="true" [true|false] [Allowed in location tags]
/>
The recommended way to unlock sections is by using a location tag:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>
-->
<configSections>
<sectionGroup name="system.applicationHost">
<section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="system.webServer">
<section name="asp" overrideModeDefault="Deny" />
<section name="caching" overrideModeDefault="Allow" />
<section name="cgi" overrideModeDefault="Deny" />
<section name="defaultDocument" overrideModeDefault="Allow" />
<section name="directoryBrowse" overrideModeDefault="Allow" />
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="handlers" overrideModeDefault="Deny" />
<section name="httpCompression" overrideModeDefault="Allow" />
<section name="httpErrors" overrideModeDefault="Allow" />
<section name="httpLogging" overrideModeDefault="Deny" />
<section name="httpProtocol" overrideModeDefault="Allow" />
<section name="httpRedirect" overrideModeDefault="Allow" />
<section name="httpTracing" overrideModeDefault="Deny" />
<section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
<section name="odbcLogging" overrideModeDefault="Deny" />
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Deny" />
<section name="basicAuthentication" overrideModeDefault="Deny" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Deny" />
</sectionGroup>
<section name="authorization" overrideModeDefault="Allow" />
<section name="ipSecurity" overrideModeDefault="Deny" />
<section name="dynamicIpSecurity" overrideModeDefault="Deny" />
<section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="requestFiltering" overrideModeDefault="Allow" />
</sectionGroup>
<section name="serverRuntime" overrideModeDefault="Deny" />
<section name="serverSideInclude" overrideModeDefault="Deny" />
<section name="staticContent" overrideModeDefault="Allow" />
<sectionGroup name="tracing">
<section name="traceFailedRequests" overrideModeDefault="Allow" />
<section name="traceProviderDefinitions" overrideModeDefault="Deny" />
</sectionGroup>
<section name="urlCompression" overrideModeDefault="Allow" />
<section name="validation" overrideModeDefault="Allow" />
<sectionGroup name="webdav">
<section name="globalSettings" overrideModeDefault="Deny" />
<section name="authoring" overrideModeDefault="Deny" />
<section name="authoringRules" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="rewrite">
<section name="allowedServerVariables" overrideModeDefault="Deny" />
<section name="rules" overrideModeDefault="Allow" />
<section name="outboundRules" overrideModeDefault="Allow" />
<section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
<section name="providers" overrideModeDefault="Allow" />
<section name="rewriteMaps" overrideModeDefault="Allow" />
</sectionGroup>
<section name="webSocket" overrideModeDefault="Deny" />
</sectionGroup>
</configSections>
<configProtectedData>
<providers>
<add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
<add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=" />
<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=" />
</providers>
</configProtectedData>
<system.applicationHost>
<applicationPools>
<add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
<applicationPoolDefaults managedRuntimeLoader="v4.0">
<processModel />
</applicationPoolDefaults>
</applicationPools>
<!--
The <listenerAdapters> section defines the protocols with which the
Windows Process Activation Service (WAS) binds.
-->
<listenerAdapters>
<add name="http" />
</listenerAdapters>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
<webLimits />
</system.applicationHost>
<system.webServer>
<serverRuntime />
<asp scriptErrorSentToBrowser="true">
<cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
<limits />
</asp>
<caching enabled="true" enableKernelCache="true">
</caching>
<cgi />
<defaultDocument enabled="true">
<files>
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
<add value="default.aspx" />
</files>
</defaultDocument>
<directoryBrowse enabled="false" />
<fastCgi />
<!--
The <globalModules> section defines all native-code modules.
To enable a module, specify it in the <modules> section.
-->
<globalModules>
<add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
<add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
<!-- <add name="FileCacheModule" image="%IIS_BIN%\cachfile.dll" /> -->
<add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
<!-- <add name="HttpCacheModule" image="%IIS_BIN%\cachhttp.dll" /> -->
<add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
<add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
<add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
<add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
<add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
<add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
<add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
<add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
<add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
<add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
<add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
<add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
<add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
<!-- <add name="DigestAuthenticationModule" image="%IIS_BIN%\authmd5.dll" /> -->
<add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
<add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
<add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
<add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
<add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
<add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
<!-- <add name="TracingModule" image="%IIS_BIN%\iisetw.dll" /> -->
<add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
<add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
<add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
<add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
<add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
<add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
<!-- <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
<add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
<add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
<add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
<add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
<add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
<add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
<add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
<add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
<add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
</globalModules>
<httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
</httpErrors>
<httpLogging dontLog="false" />
<httpProtocol>
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<httpRedirect enabled="false" />
<httpTracing>
</httpTracing>
<isapiFilters>
<filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
<filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
<filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
</isapiFilters>
<odbcLogging />
<security>
<access sslFlags="None" />
<applicationDependencies>
<application name="Active Server Pages" groupId="ASP" />
</applicationDependencies>
<authentication>
<anonymousAuthentication enabled="true" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
<ipSecurity allowUnlisted="true" />
<isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
<add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
</isapiCgiRestriction>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<add fileExtension=".asa" allowed="false" />
<add fileExtension=".asax" allowed="false" />
<add fileExtension=".ascx" allowed="false" />
<add fileExtension=".master" allowed="false" />
<add fileExtension=".skin" allowed="false" />
<add fileExtension=".browser" allowed="false" />
<add fileExtension=".sitemap" allowed="false" />
<add fileExtension=".config" allowed="false" />
<add fileExtension=".cs" allowed="false" />
<add fileExtension=".csproj" allowed="false" />
<add fileExtension=".vb" allowed="false" />
<add fileExtension=".vbproj" allowed="false" />
<add fileExtension=".webinfo" allowed="false" />
<add fileExtension=".licx" allowed="false" />
<add fileExtension=".resx" allowed="false" />
<add fileExtension=".resources" allowed="false" />
<add fileExtension=".mdb" allowed="false" />
<add fileExtension=".vjsproj" allowed="false" />
<add fileExtension=".java" allowed="false" />
<add fileExtension=".jsl" allowed="false" />
<add fileExtension=".ldb" allowed="false" />
<add fileExtension=".dsdgm" allowed="false" />
<add fileExtension=".ssdgm" allowed="false" />
<add fileExtension=".lsad" allowed="false" />
<add fileExtension=".ssmap" allowed="false" />
<add fileExtension=".cd" allowed="false" />
<add fileExtension=".dsprototype" allowed="false" />
<add fileExtension=".lsaprototype" allowed="false" />
<add fileExtension=".sdm" allowed="false" />
<add fileExtension=".sdmDocument" allowed="false" />
<add fileExtension=".mdf" allowed="false" />
<add fileExtension=".ldf" allowed="false" />
<add fileExtension=".ad" allowed="false" />
<add fileExtension=".dd" allowed="false" />
<add fileExtension=".ldd" allowed="false" />
<add fileExtension=".sd" allowed="false" />
<add fileExtension=".adprototype" allowed="false" />
<add fileExtension=".lddprototype" allowed="false" />
<add fileExtension=".exclude" allowed="false" />
<add fileExtension=".refresh" allowed="false" />
<add fileExtension=".compiled" allowed="false" />
<add fileExtension=".msgx" allowed="false" />
<add fileExtension=".vsdisco" allowed="false" />
<add fileExtension=".rules" allowed="false" />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
</requestFiltering>
</security>
<serverSideInclude ssiExecDisable="false" />
<staticContent lockAttributes="isDocFooterFileName">
<mimeMap fileExtension=".323" mimeType="text/h323" />
<mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
<mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
<mimeMap fileExtension=".aac" mimeType="audio/aac" />
<mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
<mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
<mimeMap fileExtension=".accde" mimeType="application/msaccess" />
<mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
<mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
<mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ai" mimeType="application/postscript" />
<mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
<mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
<mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
<mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
<mimeMap fileExtension=".art" mimeType="image/x-jg" />
<mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asm" mimeType="text/plain" />
<mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
<mimeMap fileExtension=".au" mimeType="audio/basic" />
<mimeMap fileExtension=".avi" mimeType="video/msvideo" />
<mimeMap fileExtension=".axs" mimeType="application/olescript" />
<mimeMap fileExtension=".bas" mimeType="text/plain" />
<mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bmp" mimeType="image/bmp" />
<mimeMap fileExtension=".c" mimeType="text/plain" />
<mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
<mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
<mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
<mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
<mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
<mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
<mimeMap fileExtension=".cnf" mimeType="text/plain" />
<mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
<mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
<mimeMap fileExtension=".cpp" mimeType="text/plain" />
<mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
<mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
<mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".csh" mimeType="application/x-csh" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
<mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dcr" mimeType="application/x-director" />
<mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
<mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".dib" mimeType="image/bmp" />
<mimeMap fileExtension=".dir" mimeType="application/x-director" />
<mimeMap fileExtension=".disco" mimeType="text/xml" />
<mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
<mimeMap fileExtension=".dll.config" mimeType="text/xml" />
<mimeMap fileExtension=".dlm" mimeType="text/dlm" />
<mimeMap fileExtension=".doc" mimeType="application/msword" />
<mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
<mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<mimeMap fileExtension=".dot" mimeType="application/msword" />
<mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
<mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
<mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dtd" mimeType="text/xml" />
<mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
<mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
<mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
<mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dxr" mimeType="application/x-director" />
<mimeMap fileExtension=".eml" mimeType="message/rfc822" />
<mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
<mimeMap fileExtension=".eps" mimeType="application/postscript" />
<mimeMap fileExtension=".etx" mimeType="text/x-setext" />
<mimeMap fileExtension=".evy" mimeType="application/envoy" />
<mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
<mimeMap fileExtension=".exe.config" mimeType="text/xml" />
<mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
<mimeMap fileExtension=".fif" mimeType="application/fractals" />
<mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
<mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".flv" mimeType="video/x-flv" />
<mimeMap fileExtension=".gif" mimeType="image/gif" />
<mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
<mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
<mimeMap fileExtension=".h" mimeType="text/plain" />
<mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
<mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
<mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
<mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
<mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
<mimeMap fileExtension=".hta" mimeType="application/hta" />
<mimeMap fileExtension=".htc" mimeType="text/x-component" />
<mimeMap fileExtension=".htm" mimeType="text/html" />
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
<mimeMap fileExtension=".hxt" mimeType="text/html" />
<mimeMap fileExtension=".ico" mimeType="image/x-icon" />
<mimeMap fileExtension=".ics" mimeType="text/calendar" />
<mimeMap fileExtension=".ief" mimeType="image/ief" />
<mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
<mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
<mimeMap fileExtension=".jar" mimeType="application/java-archive" />
<mimeMap fileExtension=".java" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
<mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".json" mimeType="application/json" />
<mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
<mimeMap fileExtension=".jsx" mimeType="text/jscript" />
<mimeMap fileExtension=".latex" mimeType="application/x-latex" />
<mimeMap fileExtension=".less" mimeType="text/css" />
<mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
<mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
<mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
<mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
<mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/mp4" />
<mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
<mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
<mimeMap fileExtension=".map" mimeType="text/plain" />
<mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
<mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
<mimeMap fileExtension=".mht" mimeType="message/rfc822" />
<mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
<mimeMap fileExtension=".mid" mimeType="audio/mid" />
<mimeMap fileExtension=".midi" mimeType="audio/mid" />
<mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
<mimeMap fileExtension=".mno" mimeType="text/xml" />
<mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
<mimeMap fileExtension=".mov" mimeType="video/quicktime" />
<mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
<mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
<mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
<mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
<mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
<mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
<mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
<mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
<mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".nws" mimeType="message/rfc822" />
<mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".oda" mimeType="application/oda" />
<mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
<mimeMap fileExtension=".ods" mimeType="application/oleobject" />
<mimeMap fileExtension=".oga" mimeType="audio/ogg" />
<mimeMap fileExtension=".ogg" mimeType="video/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".one" mimeType="application/onenote" />
<mimeMap fileExtension=".onea" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
<mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
<mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
<mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
<mimeMap fileExtension=".otf" mimeType="font/otf" />
<mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
<mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
<mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
<mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
<mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pdf" mimeType="application/pdf" />
<mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
<mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
<mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".png" mimeType="image/png" />
<mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
<mimeMap fileExtension=".pnz" mimeType="image/png" />
<mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
<mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
<mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
<mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
<mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
<mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
<mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
<mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
<mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
<mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ps" mimeType="application/postscript" />
<mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
<mimeMap fileExtension=".qt" mimeType="video/quicktime" />
<mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
<mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
<mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
<mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
<mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
<mimeMap fileExtension=".rmi" mimeType="audio/mid" />
<mimeMap fileExtension=".roff" mimeType="application/x-troff" />
<mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
<mimeMap fileExtension=".rtf" mimeType="application/rtf" />
<mimeMap fileExtension=".rtx" mimeType="text/richtext" />
<mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
<mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
<mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
<mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
<mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
<mimeMap fileExtension=".sgml" mimeType="text/sgml" />
<mimeMap fileExtension=".sh" mimeType="application/x-sh" />
<mimeMap fileExtension=".shar" mimeType="application/x-shar" />
<mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
<mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
<mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
<mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
<mimeMap fileExtension=".snd" mimeType="audio/basic" />
<mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
<mimeMap fileExtension=".spx" mimeType="audio/ogg" />
<mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
<mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
<mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
<mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
<mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
<mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
<mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
<mimeMap fileExtension=".t" mimeType="application/x-troff" />
<mimeMap fileExtension=".tar" mimeType="application/x-tar" />
<mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
<mimeMap fileExtension=".tex" mimeType="application/x-tex" />
<mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
<mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
<mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tif" mimeType="image/tiff" />
<mimeMap fileExtension=".tiff" mimeType="image/tiff" />
<mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tr" mimeType="application/x-troff" />
<mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
<mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
<mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".txt" mimeType="text/plain" />
<mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
<mimeMap fileExtension=".uls" mimeType="text/iuls" />
<mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
<mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
<mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
<mimeMap fileExtension=".vcs" mimeType="text/plain" />
<mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
<mimeMap fileExtension=".vml" mimeType="text/xml" />
<mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
<mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".wav" mimeType="audio/wav" />
<mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
<mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
<mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".webm" mimeType="video/webm" />
<mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
<mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
<mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
<mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
<mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
<mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
<mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
<mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
<mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
<mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
<mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
<mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
<mimeMap fileExtension=".woff" mimeType="font/x-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
<mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
<mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wsdl" mimeType="text/xml" />
<mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
<mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
<mimeMap fileExtension=".x" mimeType="application/directx" />
<mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
<mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
<mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
<mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
<mimeMap fileExtension=".xdr" mimeType="text/plain" />
<mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
<mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
<mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
<mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
<mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
<mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xml" mimeType="text/xml" />
<mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
<mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
<mimeMap fileExtension=".xsd" mimeType="text/xml" />
<mimeMap fileExtension=".xsf" mimeType="text/xml" />
<mimeMap fileExtension=".xsl" mimeType="text/xml" />
<mimeMap fileExtension=".xslt" mimeType="text/xml" />
<mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
<mimeMap fileExtension=".z" mimeType="application/x-compress" />
<mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
</staticContent>
<tracing>
<traceProviderDefinitions>
<add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
<areas>
<clear />
<add name="Authentication" value="2" />
<add name="Security" value="4" />
<add name="Filter" value="8" />
<add name="StaticFile" value="16" />
<add name="CGI" value="32" />
<add name="Compression" value="64" />
<add name="Cache" value="128" />
<add name="RequestNotifications" value="256" />
<add name="Module" value="512" />
<add name="Rewrite" value="1024" />
<add name="FastCGI" value="4096" />
<add name="WebSocket" value="16384" />
</areas>
</add>
<add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
<areas>
<clear />
</areas>
</add>
<add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
<areas>
<clear />
</areas>
</add>
<add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
<areas>
<add name="Infrastructure" value="1" />
<add name="Module" value="2" />
<add name="Page" value="4" />
<add name="AppServices" value="8" />
</areas>
</add>
</traceProviderDefinitions>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-999" />
</add>
</traceFailedRequests>
</tracing>
<urlCompression />
<validation />
<webdav>
<globalSettings>
<propertyStores>
<add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
</propertyStores>
<lockStores>
<add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
</lockStores>
</globalSettings>
<authoring>
<locks enabled="true" lockStore="webdav_simple_lock" />
</authoring>
<authoringRules />
</webdav>
<webSocket />
<applicationInitialization />
</system.webServer>
<location path="" overrideMode="Allow">
<system.webServer>
<modules>
<add name="IsapiFilterModule" lockItem="true" />
<add name="BasicAuthenticationModule" lockItem="true" />
<add name="IsapiModule" lockItem="true" />
<add name="HttpLoggingModule" lockItem="true" />
<!--
<add name="HttpCacheModule" lockItem="true" />
-->
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="ServerSideIncludeModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
<add name="AnonymousAuthenticationModule" lockItem="true" />
<add name="CertificateMappingAuthenticationModule" lockItem="true" />
<add name="UrlAuthorizationModule" lockItem="true" />
<add name="WindowsAuthenticationModule" lockItem="true" />
<!--
<add name="DigestAuthenticationModule" lockItem="true" />
-->
<add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
<add name="WebMatrixSupportModule" lockItem="true" />
<add name="IpRestrictionModule" lockItem="true" />
<add name="DynamicIpRestrictionModule" lockItem="true" />
<add name="RequestFilteringModule" lockItem="true" />
<add name="CustomLoggingModule" lockItem="true" />
<add name="CustomErrorModule" lockItem="true" />
<add name="FailedRequestsTracingModule" lockItem="true" />
<add name="CgiModule" lockItem="true" />
<add name="FastCgiModule" lockItem="true" />
<!-- <add name="WebDAVModule" /> -->
<add name="RewriteModule" />
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
<add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
<add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
<add name="ApplicationInitializationModule" lockItem="true" />
<add name="WebSocketModule" lockItem="true" />
<add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ConfigurationValidationModule" lockItem="true" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
</modules>
<handlers accessPolicy="Read, Script">
<!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
<add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
<add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</location>
</configuration>
......@@ -13,4 +13,10 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebuggerFlavor>AppHostDeviceDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)|$(UseDotNetNativeToolchain)'=='Release|x86|true'">
<DebuggerFlavor>AppHostDeviceDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup>
<AutoRefresh>false</AutoRefresh>
</PropertyGroup>
</Project>
\ No newline at end of file
......@@ -13,4 +13,22 @@
</ItemGroup>
<Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppDebug.projitems') And '$(Configuration)'=='Debug'" Project="CordovaAppDebug.projitems" />
<Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppRelease.projitems') And '$(Configuration)'!='Debug'" Project="CordovaAppRelease.projitems" />
<ItemGroup>
<Reference Condition="'$(Platform)'=='x86'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/x86/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Condition="'$(Platform)'=='x64'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/x64/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Condition="'$(Platform)'=='ARM'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/ARM/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
</Project>
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26430.15
VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CordovaApp", "CordovaApp", "{3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}"
EndProject
......@@ -113,14 +113,14 @@ Global
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x64.Build.0 = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.ActiveCfg = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.Build.0 = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.ActiveCfg = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.Build.0 = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.ActiveCfg = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.Build.0 = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.ActiveCfg = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.Build.0 = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.ActiveCfg = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.Build.0 = Publish|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|ARM.ActiveCfg = Release|Any CPU
......@@ -139,4 +139,7 @@ Global
{F5B32CBA-8DAB-43E5-AE4F-98B3B1281FF1} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
{FB381278-F4AD-4703-A12A-C43EE0B231BD} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AD3B56BE-BD21-4EFF-B8E4-BA2F4F33DD21}
EndGlobalSection
EndGlobal
......@@ -21,7 +21,9 @@
<uap:DefaultTile ShortName="NotificationExample" Square310x310Logo="images\Square310x310Logo.png" Square71x71Logo="images\Square71x71Logo.png" Wide310x150Logo="images\Wide310x150Logo.png">
</uap:DefaultTile>
<uap:InitialRotationPreference>
<uap:Rotation Preference="portrait" />
<uap:Rotation Preference="landscape" />
<uap:Rotation Preference="landscapeFlipped" />
</uap:InitialRotationPreference>
</uap:VisualElements>
<uap:ApplicationContentUriRules>
......
......@@ -23,7 +23,41 @@ cordova.define("cordova-plugin-local-notifications.LocalNotification.Proxy", fun
var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy();
var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/**
* Check permission to show notifications.
......@@ -61,40 +95,113 @@ exports.request = function (success, error) {
* @return [ Void ]
*/
exports.schedule = function (success, error, args) {
var options = [], actions = [];
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = new LocalNotification.Options();
opts = exports.parseOptions(props);
options.push(opts);
}
for (var prop in opts) {
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
impl.schedule(options);
for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]);
}
for (var j = 0, action, btn; j < props.actions.length; j++) {
action = props.actions[j];
success();
};
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
/**
* Update notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = exports.parseOptions(props);
options.push(opts);
}
for (prop in btn) {
if (action[prop]) btn[prop] = action[prop];
impl.update(options);
for (i = 0; i < options.length; i++) {
exports.fireEvent('update', options[i]);
}
actions.push(btn);
success();
};
/**
* Clear the notifications specified by id.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.clear = function (success, error, args) {
var toasts = impl.clear(args) || [];
for (var i = 0; i < toasts.length; i++) {
exports.fireEvent('clear', toasts[i]);
}
opts.actions = actions;
success();
};
options.push(opts);
/**
* Clear all notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
*
* @return [ Void ]
*/
exports.clearAll = function (success, error) {
impl.clearAll();
exports.fireEvent('clearall');
success();
};
/**
* Cancel the notifications specified by id.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.cancel = function (success, error, args) {
var toasts = impl.cancel(args) || [];
for (var i = 0; i < toasts.length; i++) {
exports.fireEvent('cancel', toasts[i]);
}
impl.schedule(options);
success();
};
/**
* Cancel all notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
*
* @return [ Void ]
*/
exports.cancelAll = function (success, error) {
impl.cancelAll();
exports.fireEvent('cancelall');
success();
};
......@@ -167,7 +274,7 @@ exports.triggeredIds = function (success, error) {
exports.notification = function (success, error, args) {
var obj = impl.notification(args[0]);
success(obj);
success(exports.clone(obj));
};
/**
......@@ -182,7 +289,7 @@ exports.notification = function (success, error, args) {
exports.notifications = function (success, error, args) {
var objs = impl.notifications(args) || [];
success(Array.from(objs));
success(exports.cloneAll(objs));
};
/**
......@@ -196,7 +303,7 @@ exports.notifications = function (success, error, args) {
exports.scheduledNotifications = function (success, error) {
var objs = impl.scheduledNotifications() || [];
success(Array.from(objs));
success(exports.cloneAll(objs));
};
/**
......@@ -210,7 +317,7 @@ exports.scheduledNotifications = function (success, error) {
exports.triggeredNotifications = function (success, error) {
var objs = impl.triggeredNotifications() || [];
success(Array.from(objs));
success(exports.cloneAll(objs));
};
/**
......@@ -223,20 +330,187 @@ exports.triggeredNotifications = function (success, error) {
exports.clicked = function (xml, input) {
var toast = LocalNotification.Options.parse(xml),
event = toast.action || 'click',
e = { event: event };
meta = Object.assign({}, input);
if (input && input.size > 0) {
var it = input.first();
meta.text = input.first().current.value;
}
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
e.text = it.current.value;
exports.fireEvent(event, toast, meta);
};
while (it.hasCurrent) {
e[it.current.key] = it.current.value;
it.moveNext();
/**
* Invoke listeners for the given event.
*
* @param [ String ] event The name of the event.
* @param [ Object ] toast Optional notification object.
* @param [ Object ] data Optional meta data about the event.
*
* @return [ Void ]
*/
exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta);
} else {
plugin.fireEvent(event, meta);
}
};
/**
* Clone the objects and delete internal properties.
*
* @param [ Array<Object> ] objs The objects to clone for.
*
* @return [ Array<Object> ]
*/
exports.cloneAll = function (objs) {
var clones = [];
for (var i = 0; i < objs.length; i++) {
clones.push(exports.clone(objs[i]));
}
return clones;
};
/**
* Clone the object and delete internal properties.
*
* @param [ Object ] obj The object to clone for.
*
* @return [ Object ]
*/
exports.clone = function (obj) {
var ignore = ['action'],
clone = {};
for (var prop in obj) {
if (ignore.includes(prop) || typeof obj[prop] === 'function')
continue;
try {
clone[prop] = obj[prop];
} catch (e) {
clone[prop] = null;
}
}
return clone;
};
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
cordova.plugins.notification.local.core.fireEvent(event, toast, e);
return bar;
};
// Handle onclick event
......
......@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
}
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
/**
* Schedule notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (msgs, callback, scope, args) {
var fn = function(granted) {
if (!granted) return;
var notifications = Array.isArray(msgs) ? msgs : [msgs];
for (var i = 0; i < notifications.length; i++) {
var notification = notifications[i];
this.convertProperties(notification);
}
this.exec('update', notifications, callback, scope);
};
if (args && args.skipPermission) {
fn.call(this, true);
} else {
this.requestPermission(fn, this);
}
};
/**
* Clear the specified notifications by id.
......
......@@ -29,14 +29,14 @@ exports._defaults = {
text: '',
title: '',
sound: 'res://platform_default',
trigger: 'date',
badge: undefined,
data: undefined,
every: undefined,
at: undefined,
icon: undefined,
trigger: { type: 'calendar' },
actions: [],
actionGroupId: undefined,
attachments: []
attachments: [],
progressBar: false
};
// Listener
......@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined;
defaults.color = undefined;
break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
}
};
......@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json');
......@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false;
}
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) {
if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
......@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) {
if (!defaults.hasOwnProperty(key)) {
delete options[key];
// delete options[key];
console.warn('Unknown property: ' + key);
}
}
......@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
}
}
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data);
}
if (options.actions) {
this.convertTrigger(options);
this.convertActions(options);
}
this.convertProgressBar(options);
return options;
};
......@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
};
/**
......@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exports.exec('deviceready');
exports.exec('ready');
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () {
// Set launchDetails object
exports.exec('launchDetails');
exports.exec('launch');
// Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults
......
......@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args);
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/**
* Update notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (notifications, callback, scope, args) {
this.core.update(notifications, callback, scope, args);
};
/**
* Clear the specified notifications by id.
......
......@@ -58,6 +58,8 @@ var app = {
document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('update_text').onclick = app.update;
document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('clear_all').onclick = app.clearAll;
......@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () {
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Test Message 1',
title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova',
sound: null,
......@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
title: 'Scheduled with delay',
text: 'Test Message 1',
at: _5_sec_from_now,
trigger: _5_sec_from_now,
sound: sound,
badge: 12
});
},
// Schedule a repeating notification
scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Scheduled every minute',
every: 'minute',
trigger: { every: 'minute' },
sound: sound,
icon: 'res://icon',
smallIcon: 'res://ic_popup_sync'
......@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike',
actions: [{
......@@ -181,6 +185,27 @@ var app = {
}]
});
},
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification
clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids);
......@@ -298,7 +323,7 @@ var app = {
});
cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments);
// showToast('updated: ' + obj.id);
showToast('updated: ' + obj.id);
});
cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments);
......@@ -371,7 +396,7 @@ showWinDialog = function (text) {
};
if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); };
alert = showWinDialog;
}
app.initialize();
......@@ -23,7 +23,41 @@
var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy();
var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/**
* Check permission to show notifications.
......@@ -61,42 +95,45 @@ exports.request = function (success, error) {
* @return [ Void ]
*/
exports.schedule = function (success, error, args) {
var options = [], actions = [];
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = new LocalNotification.Options();
for (var prop in opts) {
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
opts = exports.parseOptions(props);
options.push(opts);
}
for (var j = 0, action, btn; j < props.actions.length; j++) {
action = props.actions[j];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
impl.schedule(options);
for (prop in btn) {
if (action[prop]) btn[prop] = action[prop];
for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]);
}
actions.push(btn);
}
success();
};
opts.actions = actions;
/**
* Update notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = exports.parseOptions(props);
options.push(opts);
}
impl.schedule(options);
impl.update(options);
for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]);
exports.fireEvent('update', options[i]);
}
success();
......@@ -299,6 +336,10 @@ exports.clicked = function (xml, input) {
meta.text = input.first().current.value;
}
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
exports.fireEvent(event, toast, meta);
};
......@@ -315,6 +356,11 @@ exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta);
} else {
......@@ -364,6 +410,109 @@ exports.clone = function (obj) {
return clone;
};
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
return bar;
};
// Handle onclick event
document.addEventListener('activated', function (e) {
if (e.kind == ActivationKind.toastNotification) {
......
......@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
}
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
/**
* Schedule notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (msgs, callback, scope, args) {
var fn = function(granted) {
if (!granted) return;
var notifications = Array.isArray(msgs) ? msgs : [msgs];
for (var i = 0; i < notifications.length; i++) {
var notification = notifications[i];
this.convertProperties(notification);
}
this.exec('update', notifications, callback, scope);
};
if (args && args.skipPermission) {
fn.call(this, true);
} else {
this.requestPermission(fn, this);
}
};
/**
* Clear the specified notifications by id.
......
......@@ -29,14 +29,14 @@ exports._defaults = {
text: '',
title: '',
sound: 'res://platform_default',
trigger: 'date',
badge: undefined,
data: undefined,
every: undefined,
at: undefined,
icon: undefined,
trigger: { type: 'calendar' },
actions: [],
actionGroupId: undefined,
attachments: []
attachments: [],
progressBar: false
};
// Listener
......@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined;
defaults.color = undefined;
break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
}
};
......@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json');
......@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false;
}
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) {
if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
......@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) {
if (!defaults.hasOwnProperty(key)) {
delete options[key];
// delete options[key];
console.warn('Unknown property: ' + key);
}
}
......@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
}
}
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data);
}
if (options.actions) {
this.convertTrigger(options);
this.convertActions(options);
}
this.convertProgressBar(options);
return options;
};
......@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
};
/**
......@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exports.exec('deviceready');
exports.exec('ready');
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () {
// Set launchDetails object
exports.exec('launchDetails');
exports.exec('launch');
// Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults
......
......@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args);
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/**
* Update notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (notifications, callback, scope, args) {
this.core.update(notifications, callback, scope, args);
};
/**
* Clear the specified notifications by id.
......
{
"name": "de.appplant.cordova.plugin.local-notification",
"cordova_name": "Cordova LocalNotification Plugin",
"version": "0.8.5",
"name": "cordova-plugin-local-notifications",
"version": "0.0.0",
"description": "Schedules and queries for local notifications",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"cordova": {
"id": "cordova-plugin-local-notifications",
"platforms": [
"ios",
"windows"
]
},
"repository": {
"type": "git",
"url": "git+https://github.com/katzer/cordova-plugin-local-notifications.git#ios10"
"url": "git+https://github.com/katzer/cordova-plugin-local-notifications.git#x"
},
"keywords": [
"appplant",
"notification",
"local notification",
"cordova",
"user notification",
"ecosystem:cordova",
"cordova-android",
"cordova-ios",
"cordova-windows"
],
"platforms": [
"ios",
"android",
"windows"
],
"engines": [
{
"name": "cordova",
......@@ -37,14 +34,14 @@
{
"name": "cordova-windows",
"version": ">=4.2.0"
},
{
"name": "apple-ios",
"version": ">=10.0.0"
}
],
"dependencies": {
"cordova-plugin-device": "*",
"cordova-plugin-app-event": ">=1.1.0"
},
"author": "Sebastián Katzer",
"license": "Apache-2.0",
"license": "Apache 2.0",
"bugs": {
"url": "https://github.com/katzer/cordova-plugin-local-notifications/issues"
},
......
......@@ -26,9 +26,9 @@
@interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate>
// Set launchDetails object
- (void) launchDetails:(CDVInvokedUrlCommand*)command;
- (void) launch:(CDVInvokedUrlCommand*)command;
// Execute all queued events
- (void) deviceready:(CDVInvokedUrlCommand*)command;
- (void) ready:(CDVInvokedUrlCommand*)command;
// Check permission to show notifications
- (void) check:(CDVInvokedUrlCommand*)command;
......@@ -40,8 +40,8 @@
// Schedule notifications
- (void) schedule:(CDVInvokedUrlCommand*)command;
//// Update set of notifications
//- (void) update:(CDVInvokedUrlCommand*)command;
// Update set of notifications
- (void) update:(CDVInvokedUrlCommand*)command;
// Clear notifications by id
- (void) clear:(CDVInvokedUrlCommand*)command;
// Clear all notifications
......
......@@ -47,13 +47,12 @@
*
* @return [ Void ]
*/
- (void) launchDetails:(CDVInvokedUrlCommand*)command
- (void) launch:(CDVInvokedUrlCommand*)command
{
if (!_launchDetails)
return;
NSString* js;
js = [NSString stringWithFormat:
@"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}",
_launchDetails[0], _launchDetails[1]];
......@@ -68,7 +67,7 @@
*
* @return [ Void ]
*/
- (void) deviceready:(CDVInvokedUrlCommand*)command
- (void) ready:(CDVInvokedUrlCommand*)command
{
deviceready = YES;
......@@ -104,60 +103,36 @@
}];
}
///**
// * Update a set of notifications.
// *
// * @param properties
// * A dict of properties for each notification
// */
//- (void) update:(CDVInvokedUrlCommand*)command
//{
// NSArray* notifications = command.arguments;
//
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UNNotificationRequest* notification;
//
// notification = [_center getNotificationWithId:id];
//
// if (!notification)
// continue;
//
// // [self updateNotification:[notification copy]
// // withOptions:options];
// //
// // [self fireEvent:@"update" notification:notification];
// //
// // if (notifications.count > 1) {
// // [NSThread sleepForTimeInterval:0.01];
// // }
// }
// } else {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UILocalNotification* notification;
//
// notification = [_app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self updateLocalNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
/**
* Update notifications.
*
* @param [Array<Hash>] properties A list of key-value properties.
*
* @return [ Void ]
*/
- (void) update:(CDVInvokedUrlCommand*)command
{
NSArray* notifications = command.arguments;
[self.commandDelegate runInBackground:^{
for (NSDictionary* options in notifications) {
NSNumber* id = [options objectForKey:@"id"];
UNNotificationRequest* notification;
notification = [_center getNotificationWithId:id];
if (!notification)
continue;
[self updateNotification:[notification copy]
withOptions:options];
[self fireEvent:@"update" notification:notification];
}
[self execCallback:command];
}];
}
/**
* Clear notifications by id.
......@@ -476,36 +451,46 @@
/**
* Schedule the local notification.
*
* @param [ APPNotificationContent* ] notification The notification to schedule.
*
* @return [ Void ]
*/
- (void) scheduleNotification:(APPNotificationContent*)notification
{
__weak APPLocalNotification* weakSelf = self;
UNNotificationRequest* request = notification.request;
NSString* event = [notification.request wasUpdated] ? @"update" : @"add";
[_center addNotificationCategory:notification.category];
[_center addNotificationRequest:request withCompletionHandler:^(NSError* e) {
__strong APPLocalNotification* strongSelf = weakSelf;
[strongSelf fireEvent:@"add" notification:request];
[strongSelf fireEvent:event notification:request];
}];
}
///**
// * Update the local notification.
// */
//- (void) updateNotification:(UILocalNotification*)notification
// withOptions:(NSDictionary*)newOptions
//{APPNotificationRequest*
// NSMutableDictionary* options = [notification.userInfo mutableCopy];
//
// [options addEntriesFromDictionary:newOptions];
// [options setObject:[NSDate date] forKey:@"updatedAt"];
//
//// notification = [[UILocalNotification alloc]
//// initWithOptions:options];
////
//// [self scheduleLocalNotification:notification];
//}
/**
* Update the local notification.
*
* @param [ UNNotificationRequest* ] notification The notification to update.
* @param [ NSDictionary* ] options The options to update.
*
* @return [ Void ]
*/
- (void) updateNotification:(UNNotificationRequest*)notification
withOptions:(NSDictionary*)newOptions
{
NSMutableDictionary* options = [notification.content.userInfo mutableCopy];
[options addEntriesFromDictionary:newOptions];
[options setObject:[NSDate date] forKey:@"updatedAt"];
APPNotificationContent*
newNotification = [[APPNotificationContent alloc] initWithOptions:options];
[self scheduleNotification:newNotification];
}
#pragma mark -
#pragma mark UNUserNotificationCenterDelegate
......@@ -517,8 +502,15 @@
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
if (![notification.request wasUpdated]) {
[self fireEvent:@"trigger" notification:notification.request];
}
if (notification.request.options.silent) {
completionHandler(UNNotificationPresentationOptionNone);
} else {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
}
/**
......
......@@ -30,6 +30,7 @@
@property (readonly, getter=subtitle) NSString* subtitle;
@property (readonly, getter=badge) NSNumber* badge;
@property (readonly, getter=text) NSString* text;
@property (readonly, getter=silent) BOOL silent;
@property (readonly, getter=sound) UNNotificationSound* sound;
@property (readonly, getter=userInfo) NSDictionary* userInfo;
@property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions;
......
......@@ -61,18 +61,6 @@
#pragma mark Properties
/**
* The type for the notification.
*
* @return [ NSString* ]
*/
- (NSString*) triggerType
{
NSString* type = [dict objectForKey:@"trigger"];
return type.length ? type : @"normal";
}
/**
* The ID for the notification.
*
* @return [ NSNumber* ]
......@@ -127,6 +115,16 @@
}
/**
* Show notification in foreground.
*
* @return [ BOOL ]
*/
- (BOOL) silent
{
return [[dict objectForKey:@"silent"] boolValue];
}
/**
* The badge number for the notification.
*
* @return [ NSNumber* ]
......@@ -280,12 +278,12 @@
*/
- (UNNotificationTrigger*) trigger
{
NSString* type = [self triggerType];
NSString* type = [self valueForTriggerOption:@"type"];
if ([type isEqualToString:@"location"])
return [self triggerWithRegion];
if (![type isEqualToString:@"date"])
if (![type isEqualToString:@"calendar"])
NSLog(@"Unknown type: %@", type);
if ([self isRepeating])
......@@ -315,6 +313,11 @@
#pragma mark -
#pragma mark Private
- (id) valueForTriggerOption:(NSString*)key
{
return [[dict objectForKey:@"trigger"] objectForKey:key];
}
/**
* The date when to fire the notification.
*
......@@ -322,8 +325,7 @@
*/
- (NSDate*) triggerDate
{
double timestamp = [[dict objectForKey:@"at"]
doubleValue];
double timestamp = [[self valueForTriggerOption:@"at"] doubleValue];
return [NSDate dateWithTimeIntervalSince1970:timestamp];
}
......@@ -335,7 +337,7 @@
*/
- (BOOL) isRepeating
{
id every = [dict objectForKey:@"every"];
id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class])
return ((NSString*) every).length > 0;
......@@ -364,7 +366,7 @@
*/
- (UNNotificationTrigger*) repeatingTrigger
{
id every = [dict objectForKey:@"every"];
id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class])
return [self triggerWithDateMatchingComponents];
......@@ -382,7 +384,7 @@
*/
- (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval
{
long interval = [[dict objectForKey:@"every"] longValue];
long interval = [[self valueForTriggerOption:@"every"] longValue];
if (interval < 60) {
NSLog(@"time interval must be at least 60 if repeating");
......@@ -438,8 +440,8 @@
*/
- (UNLocationNotificationTrigger*) triggerWithRegion
{
NSArray* center = [dict objectForKey:@"center"];
double radius = [[dict objectForKey:@"radius"] doubleValue];
NSArray* center = [self valueForTriggerOption:@"center"];
double radius = [[self valueForTriggerOption:@"radius"] doubleValue];
CLLocationCoordinate2D coord =
CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]);
......@@ -449,8 +451,8 @@
radius:radius
identifier:self.identifier];
region.notifyOnEntry = [[dict objectForKey:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[dict objectForKey:@"notifyOnExit"] boolValue];
region.notifyOnEntry = [[self valueForTriggerOption:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[self valueForTriggerOption:@"notifyOnExit"] boolValue];
return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];
}
......@@ -472,7 +474,7 @@
*/
- (NSCalendarUnit) repeatInterval
{
NSString* interval = [dict objectForKey:@"every"];
NSString* interval = [self valueForTriggerOption:@"every"];
NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
if ([interval isEqualToString:@"minute"])
......@@ -504,7 +506,7 @@
- (NSDateComponents*) customDateComponents
{
NSDateComponents* date = [[NSDateComponents alloc] init];
NSDictionary* every = [dict objectForKey:@"every"];
NSDictionary* every = [self valueForTriggerOption:@"every"];
for (NSString* key in every) {
long value = [[every valueForKey:key] longValue];
......
......@@ -27,6 +27,8 @@
// The options provided by the plug-in
- (APPNotificationOptions*) options;
// If the notification was updated
- (BOOL) wasUpdated;
// Encode the user info dict to JSON
- (NSString*) encodeToJSON;
......
......@@ -65,6 +65,16 @@ static char optionsKey;
}
/**
* If the notification was updated.
*
* @return [ BOOL ]
*/
- (BOOL) wasUpdated
{
return [self.content userInfo][@"updatedAt"] != NULL;
}
/**
* Encode the user info dict to JSON.
*/
- (NSString*) encodeToJSON
......
......@@ -22,7 +22,41 @@
var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy();
var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/**
* Check permission to show notifications.
......@@ -60,42 +94,45 @@ exports.request = function (success, error) {
* @return [ Void ]
*/
exports.schedule = function (success, error, args) {
var options = [], actions = [];
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = new LocalNotification.Options();
for (var prop in opts) {
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
opts = exports.parseOptions(props);
options.push(opts);
}
for (var j = 0, action, btn; j < props.actions.length; j++) {
action = props.actions[j];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
impl.schedule(options);
for (prop in btn) {
if (action[prop]) btn[prop] = action[prop];
for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]);
}
actions.push(btn);
}
success();
};
opts.actions = actions;
/**
* Update notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = exports.parseOptions(props);
options.push(opts);
}
impl.schedule(options);
impl.update(options);
for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]);
exports.fireEvent('update', options[i]);
}
success();
......@@ -298,6 +335,10 @@ exports.clicked = function (xml, input) {
meta.text = input.first().current.value;
}
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
exports.fireEvent(event, toast, meta);
};
......@@ -314,6 +355,11 @@ exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta);
} else {
......@@ -363,6 +409,109 @@ exports.clone = function (obj) {
return clone;
};
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
return bar;
};
// Handle onclick event
document.addEventListener('activated', function (e) {
if (e.kind == ActivationKind.toastNotification) {
......
......@@ -30,22 +30,27 @@ namespace LocalNotificationProxy.LocalNotification
/// Initializes a new instance of the <see cref="Builder"/> class.
/// </summary>
/// <param name="options">Notification properties to set.</param>
internal Builder(Options options)
public Builder(Options options)
{
this.Content = new Notification(options);
}
/// <summary>
/// Gets content
/// Gets the content.
/// </summary>
public Notification Content { get; private set; }
/// <summary>
/// Gets options
/// Gets the options.
/// </summary>
private Options Options { get => this.Content.Options; }
/// <summary>
/// Gets the trigger.
/// </summary>
private Trigger Trigger { get => this.Options.Trigger; }
/// <summary>
/// Build a toast notification specified by the options.
/// </summary>
/// <returns>A fully configured toast notification instance.</returns>
......@@ -53,6 +58,7 @@ namespace LocalNotificationProxy.LocalNotification
{
var toast = this.InitToast();
this.AddProgressBarToToast(toast);
this.AddAttachmentsToToast(toast);
this.AddActionsToToast(toast);
......@@ -60,6 +66,17 @@ namespace LocalNotificationProxy.LocalNotification
}
/// <summary>
/// If there is at least one more toast variant to build.
/// </summary>
/// <returns>True if there are more toasts to build.</returns>
public bool HasNext() => this.Trigger.Count > this.Trigger.Occurrence;
/// <summary>
/// Moves the flag to the next toast variant.
/// </summary>
public void MoveNext() => this.Trigger.Occurrence += this.HasNext() ? 1 : 0;
/// <summary>
/// Gets the initialize skeleton for a toast notification.
/// </summary>
/// <returns>Basic skeleton with sound, image and text.</returns>
......@@ -87,7 +104,7 @@ namespace LocalNotificationProxy.LocalNotification
}
},
AppLogoOverride = this.Content.Image
AppLogoOverride = this.Content.Icon
}
},
......@@ -100,6 +117,20 @@ namespace LocalNotificationProxy.LocalNotification
}
/// <summary>
/// Adds optional progress bar to the toast.
/// </summary>
/// <param name="toast">Tho toast to extend for.</param>
private void AddProgressBarToToast(ToastContent toast)
{
var progressBar = this.Content.ProgressBar;
if (progressBar != null)
{
toast.Visual.BindingGeneric.Children.Add(progressBar);
}
}
/// <summary>
/// Adds attachments to the toast.
/// </summary>
/// <param name="toast">Tho toast to extend for.</param>
......@@ -137,21 +168,17 @@ namespace LocalNotificationProxy.LocalNotification
{
var xml = toast.GetXml();
var at = this.Content.Date;
ScheduledToastNotification notification;
var notification = new ScheduledToastNotification(xml, at);
if (this.Content.IsRepeating())
{
var interval = this.Content.Interval;
notification = new ScheduledToastNotification(xml, at, interval, 5);
}
else
notification.Id = this.Content.Id;
notification.Tag = this.Options.Id.ToString();
notification.SuppressPopup = this.Options.Silent;
if (this.Trigger.Occurrence > 1)
{
notification = new ScheduledToastNotification(xml, at);
notification.Group = notification.Tag;
}
notification.Id = this.Options.ID.ToString();
notification.Tag = notification.Id;
return notification;
}
}
......
......@@ -46,8 +46,40 @@ namespace LocalNotificationProxy.LocalNotification
{
foreach (Options options in notifications)
{
var toast = new Builder(options).Build();
var builder = new Builder(options);
ScheduledToastNotification toast;
do
{
toast = builder.Build();
ToastNotifier.AddToSchedule(toast);
builder.MoveNext();
} while (builder.HasNext());
}
}
/// <summary>
/// Update notifications.
/// </summary>
/// <param name="notifications">List of key-value properties</param>
public void Update([ReadOnlyArray] Options[] notifications)
{
foreach (Options options in notifications)
{
var bar = options.ProgressBar;
if (!bar.Enabled)
{
continue;
}
var data = new NotificationData { SequenceNumber = 0 };
data.Values["progress.value"] = bar.Value.ToString();
data.Values["progress.status"] = bar.Status.ToString();
data.Values["progress.description"] = bar.Description.ToString();
ToastNotifier.Update(data, options.Id.ToString());
}
}
......@@ -98,29 +130,29 @@ namespace LocalNotificationProxy.LocalNotification
public List<Options> Cancel(int[] ids)
{
var scheduled = ToastNotifier.GetScheduledToastNotifications();
var tags = new List<int>(ids);
var toRemove = new List<int>(ids);
var toClear = new List<int>(ids);
var toasts = new List<Options>();
foreach (var toast in scheduled)
{
var id = int.Parse(toast.Tag);
if (tags.Contains(id))
if (toRemove.Contains(id))
{
tags.Remove(id);
toasts.Add(new Notification(toast).Options);
toClear.Remove(id);
ToastNotifier.RemoveFromSchedule(toast);
}
if (tags.Count == 0)
if (!this.IsPhantom(toast))
{
break;
toasts.Add(new Notification(toast).Options);
}
}
}
if (tags.Count > 0)
if (toClear.Count > 0)
{
toasts.AddRange(this.Clear(tags.ToArray()));
toasts.AddRange(this.Clear(toClear.ToArray()));
}
return toasts;
......@@ -165,9 +197,12 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts)
{
if (!this.IsPhantom(toast))
{
ids.Add(int.Parse(toast.Tag));
}
}
}
if (type == Notification.Type.All || type == Notification.Type.Triggered)
{
......@@ -175,9 +210,12 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts)
{
if (!this.IsPhantom(toast))
{
ids.Add(int.Parse(toast.Tag));
}
}
}
return ids;
}
......@@ -206,9 +244,12 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts)
{
if (!this.IsPhantom(toast))
{
notifications.Add(new Notification(toast));
}
}
}
if (type == Notification.Type.All || type == Notification.Type.Triggered)
{
......@@ -216,9 +257,12 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts)
{
if (!this.IsPhantom(toast))
{
notifications.Add(new Notification(toast));
}
}
}
return notifications;
}
......@@ -358,5 +402,25 @@ namespace LocalNotificationProxy.LocalNotification
return Notification.Type.Unknown;
}
/// <summary>
/// If the specified toast is only for internal reason.
/// </summary>
/// <param name="toast">The toast notification to test for.</param>
/// <returns>True if its an internal ("phantom") one.</returns>
private bool IsPhantom(ToastNotification toast)
{
return toast.Group.Length > 0;
}
/// <summary>
/// If the specified toast is only for internal reason.
/// </summary>
/// <param name="toast">The toast notification to test for.</param>
/// <returns>True if its an internal ("phantom") one.</returns>
private bool IsPhantom(ScheduledToastNotification toast)
{
return toast.Group.Length > 0;
}
}
}
......@@ -49,9 +49,17 @@
All, Scheduled, Triggered, Unknown
}
/// <summary>
/// Gets the wrapped notification options.
/// </summary>
public Options Options { get; private set; }
/// <summary>
/// Gets the unique identifier for the toast.
/// </summary>
public string Id => $"{this.Options.Id}#{this.Options.Trigger.Occurrence}";
/// <summary>
/// Gets a ToastAudio object based on the specified sound uri.
/// </summary>
public ToastAudio Sound
......@@ -93,12 +101,12 @@
/// <summary>
/// Gets a GenericAppLogo object based on the specified icon uri.
/// </summary>
public ToastGenericAppLogo Image
public ToastGenericAppLogo Icon
{
get
{
var image = new ToastGenericAppLogo();
var path = this.Options.Image;
var path = this.Options.Icon;
if (path == null || path.StartsWith("res://logo"))
{
......@@ -254,15 +262,43 @@
}
/// <summary>
/// Gets the progress bar widget.
/// </summary>
public AdaptiveProgressBar ProgressBar
{
get
{
var bar = this.Options.ProgressBar;
if (!bar.Enabled)
{
return null;
}
return new AdaptiveProgressBar()
{
Title = bar.Title,
Value = new BindableProgressBarValue("progress.value"),
ValueStringOverride = new BindableString("progress.description"),
Status = new BindableString("progress.status")
};
}
}
/// <summary>
/// Gets the date when to trigger the notification.
/// </summary>
public DateTime Date
{
get
{
var date = DateTimeOffset.FromUnixTimeMilliseconds(this.Options.At * 1000).LocalDateTime;
var trigger = this.Options.Trigger;
var time = trigger.At;
var date = DateTimeOffset.FromUnixTimeMilliseconds(time * 1000).LocalDateTime;
var minDate = DateTime.Now.AddSeconds(0.1);
date = date.AddTicks(this.Interval.Ticks * (trigger.Occurrence - 1));
return (date < minDate) ? minDate : date;
}
}
......@@ -274,15 +310,37 @@
{
get
{
switch (this.Options.Every)
var every = this.Options.Trigger.Every;
switch (every)
{
case null:
case "":
return TimeSpan.Zero;
case "second":
return new TimeSpan(TimeSpan.TicksPerSecond);
case "minute":
return new TimeSpan(TimeSpan.TicksPerMinute);
case "hour":
return new TimeSpan(TimeSpan.TicksPerHour);
case "day":
return new TimeSpan(TimeSpan.TicksPerDay);
default:
case "week":
return new TimeSpan(TimeSpan.TicksPerDay * 7);
case "month":
return new TimeSpan(TimeSpan.TicksPerDay * 31);
case "quarter":
return new TimeSpan(TimeSpan.TicksPerHour * 2190);
case "year":
return new TimeSpan(TimeSpan.TicksPerDay * 365);
}
try
{
return TimeSpan.FromSeconds(60 * int.Parse(every));
}
catch
{
return TimeSpan.Zero;
}
}
......@@ -296,16 +354,5 @@
{
return this.Options.GetXml();
}
/// <summary>
/// If the notification shall be repeating.
/// </summary>
/// <returns>True if the Every property has some value.</returns>
public bool IsRepeating()
{
var every = this.Options.Every;
return every != null && every.Length > 0 && !every.Equals("0");
}
}
}
......@@ -33,7 +33,7 @@ namespace LocalNotificationProxy.LocalNotification
/// <summary>
/// Gets or sets notification ID.
/// </summary>
public int ID { get; set; }
public int Id { get; set; } = 0;
/// <summary>
/// Gets or sets notification title.
......@@ -58,17 +58,17 @@ namespace LocalNotificationProxy.LocalNotification
/// <summary>
/// Gets or sets the notification image.
/// </summary>
public string Image { get; set; }
public string Icon { get; set; }
/// <summary>
/// Gets or sets the notification fire date.
/// Gets or sets a value indicating whether the popup shall be visible.
/// </summary>
public long At { get; set; }
public bool Silent { get; set; } = false;
/// <summary>
/// Gets or sets the notification repeat interval.
/// Gets or sets the notification trigger.
/// </summary>
public string Every { get; set; }
public Trigger Trigger { get; set; }
/// <summary>
/// Gets or sets the notification user data.
......@@ -86,6 +86,11 @@ namespace LocalNotificationProxy.LocalNotification
public IAction[] Actions { get; set; }
/// <summary>
/// Gets or sets the notification progress bar.
/// </summary>
public ProgressBar ProgressBar { get; set; }
/// <summary>
/// Deserializes the XML string into an instance of Options.
/// </summary>
/// <param name="identifier">The serialized instance of Options as an xml string.</param>
......@@ -98,9 +103,8 @@ namespace LocalNotificationProxy.LocalNotification
var options = new Options();
var node = doc.DocumentElement;
options.ID = int.Parse(node.GetAttribute("id"));
options.Id = int.Parse(node.GetAttribute("id"));
options.Badge = int.Parse(node.GetAttribute("badge"));
options.At = int.Parse(node.GetAttribute("at"));
if (node.GetAttributeNode("text") != null)
{
......@@ -119,17 +123,22 @@ namespace LocalNotificationProxy.LocalNotification
if (node.GetAttributeNode("image") != null)
{
options.Image = node.GetAttribute("image");
options.Icon = node.GetAttribute("image");
}
if (node.GetAttributeNode("every") != null)
if (node.GetAttributeNode("data") != null)
{
options.Every = node.GetAttribute("every");
options.Data = node.GetAttribute("data");
}
if (node.GetAttributeNode("data") != null)
if (node.GetAttributeNode("attachments") != null)
{
options.Data = node.GetAttribute("data");
options.Attachments = node.GetAttribute("attachments").Split(',');
}
if (node.GetAttributeNode("silent") != null)
{
options.Silent = true;
}
if (node.GetAttributeNode("action") != null)
......@@ -158,9 +167,8 @@ namespace LocalNotificationProxy.LocalNotification
{
var node = new XmlDocument().CreateElement("options");
node.SetAttribute("id", this.ID.ToString());
node.SetAttribute("id", this.Id.ToString());
node.SetAttribute("badge", this.Badge.ToString());
node.SetAttribute("at", this.At.ToString());
if (this.Title != null)
{
......@@ -177,19 +185,24 @@ namespace LocalNotificationProxy.LocalNotification
node.SetAttribute("sound", this.Sound);
}
if (this.Image != null)
if (this.Icon != null)
{
node.SetAttribute("image", this.Image);
node.SetAttribute("image", this.Icon);
}
if (this.Every != null)
if (this.Data != null)
{
node.SetAttribute("every", this.Every);
node.SetAttribute("data", this.Data);
}
if (this.Data != null)
if (this.Attachments != null)
{
node.SetAttribute("data", this.Data);
node.SetAttribute("attachments", string.Join(",", this.Attachments));
}
if (this.Silent)
{
node.SetAttribute("silent", "1");
}
if (action != null)
......
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
namespace LocalNotificationProxy.LocalNotification
{
public sealed class ProgressBar
{
/// <summary>
/// Gets or sets a value indicating whether the notification has a progress bar.
/// </summary>
public bool Enabled { get; set; } = false;
/// <summary>
/// Gets or sets the title.
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the value.
/// </summary>
public double Value { get; set; } = 0;
/// <summary>
/// Gets or sets the status.
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the description.
/// </summary>
public string Description { get; set; } = string.Empty;
}
}
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
namespace LocalNotificationProxy.LocalNotification
{
public sealed class Trigger
{
/// <summary>
/// Gets trigger type.
/// </summary>
public string Type { get; } = "calendar";
/// <summary>
/// Gets or sets trigger date.
/// </summary>
public long At { get; set; }
/// <summary>
/// Gets or sets trigger count.
/// </summary>
public int Count { get; set; } = 1;
/// <summary>
/// Gets trigger occurrence.
/// </summary>
public int Occurrence { get; internal set; } = 1;
/// <summary>
/// Gets or sets trigger interval.
/// </summary>
public string Every { get; set; }
}
}
......@@ -50,6 +50,15 @@ namespace LocalNotificationProxy
}
/// <summary>
/// Update notifications.
/// </summary>
/// <param name="notifications">List of key-value properties</param>
public void Update([ReadOnlyArray] Options[] notifications)
{
this.manager.Update(notifications);
}
/// <summary>
/// Clear the notifications specified by id.
/// </summary>
/// <param name="ids">The IDs of the notification to clear.</param>
......
......@@ -118,6 +118,8 @@
<Compile Include="LocalNotification\Input.cs" />
<Compile Include="LocalNotification\Manager.cs" />
<Compile Include="LocalNotification\Options.cs" />
<Compile Include="LocalNotification\ProgressBar.cs" />
<Compile Include="LocalNotification\Trigger.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmdobj
......@@ -16,8 +22,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
......@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
{
"version": 1,
"dgSpecHash": "zpPhWrSe6JMx6cEgawFb/wVE/ePYBHdm7gVMIjo8WtH6SVEe68Dcmc1KjWh0cSYhPMv6saYj9H3iVQ/lNQ5jMA==",
"success": true
}
\ No newline at end of file
......@@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\katze\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.2.0</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.3.1</NuGetToolVersion>
</PropertyGroup>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
......
{
"version": 2,
"version": 3,
"targets": {
"UAP,Version=v10.0.15063": {
"Microsoft.CSharp/4.0.0": {
......@@ -2149,10 +2149,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -4398,10 +4404,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -6681,10 +6693,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -8939,10 +8957,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -11231,10 +11255,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -13489,10 +13519,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
},
......@@ -15781,10 +15817,16 @@
},
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project",
"framework": "UAP,Version=v10.0",
"framework": "UAP,Version=v10.0.10240",
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
}
}
}
......@@ -21578,11 +21620,21 @@
"projectUniqueName": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj",
"projectName": "LocalNotificationProxy",
"projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj",
"packagesPath": "C:\\Users\\katze\\.nuget\\packages\\",
"outputPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\obj\\",
"projectStyle": "PackageReference",
"skipContentFileWrite": true,
"configFilePaths": [
"C:\\Users\\katze\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"uap10.0.15063"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"uap10.0.15063": {
"projectReferences": {
......@@ -21637,5 +21689,39 @@
"#import": []
}
}
},
"logs": [
{
"code": "NU1605",
"level": "Warning",
"warningLevel": 1,
"message": "Ein Downgrade des Pakets \"Microsoft.NETCore\" von 5.0.2 auf 5.0.0 wurde festgestellt. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen. \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.Toolkit.Uwp.Notifications.UWP (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.3) -> Microsoft.NETCore (>= 5.0.2) \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.NETCore (>= 5.0.0)",
"libraryId": "Microsoft.NETCore",
"targetGraphs": [
"UAP,Version=v10.0.15063",
"UAP,Version=v10.0.15063/win10-arm",
"UAP,Version=v10.0.15063/win10-arm-aot",
"UAP,Version=v10.0.15063/win10-x64",
"UAP,Version=v10.0.15063/win10-x64-aot",
"UAP,Version=v10.0.15063/win10-x86",
"UAP,Version=v10.0.15063/win10-x86-aot"
]
},
{
"code": "NU1605",
"level": "Warning",
"warningLevel": 1,
"message": "Ein Downgrade des Pakets \"Microsoft.NETCore.Portable.Compatibility\" von 1.0.2 auf 1.0.1 wurde festgestellt. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen. \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.Toolkit.Uwp.Notifications.UWP (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.3) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.2) \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.1)",
"libraryId": "Microsoft.NETCore.Portable.Compatibility",
"targetGraphs": [
"UAP,Version=v10.0.15063",
"UAP,Version=v10.0.15063/win10-arm",
"UAP,Version=v10.0.15063/win10-arm-aot",
"UAP,Version=v10.0.15063/win10-x64",
"UAP,Version=v10.0.15063/win10-x64-aot",
"UAP,Version=v10.0.15063/win10-x86",
"UAP,Version=v10.0.15063/win10-x86-aot"
]
}
]
}
\ No newline at end of file
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.winmdobj
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.compile.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\MultipleQualifiersPerDimensionFound.txt
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\Publish\layout.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -15,9 +15,9 @@
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\Publish\resources.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -28,13 +28,13 @@
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="Microsoft.Toolkit.Uwp.Notifications" />
<indexer-config type="RESJSON" initialPath="Microsoft.Toolkit.Uwp.Notifications" />
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\Publish\pri.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -48,9 +48,9 @@
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\Publish" startIndexAt="embed.resfiles">
<index root="obj\x64\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\Publish\layout.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -15,9 +15,9 @@
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\Publish\resources.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -28,13 +28,13 @@
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="Microsoft.Toolkit.Uwp.Notifications" />
<indexer-config type="RESJSON" initialPath="Microsoft.Toolkit.Uwp.Notifications" />
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\Publish\pri.resfiles">
<index root="\" startIndexAt="obj\x64\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......@@ -48,9 +48,9 @@
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\Publish" startIndexAt="embed.resfiles">
<index root="obj\x64\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="en-US" />
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
......
......@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.winmdobj
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.compile.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\MultipleQualifiersPerDimensionFound.txt
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\x86\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\x86\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
<indexer-config type="EMBEDFILES" />
</index>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\x86\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\x86\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
<indexer-config type="EMBEDFILES" />
</index>
</resources>
\ No newline at end of file
......@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
......@@ -25,9 +25,8 @@ namespace Microsoft.Toolkit.Uwp.Notifications
public string ProtocolActivationTargetApplicationPfn { get; set; }
/// <summary>
/// Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="ToastButton"/> and <see cref="ToastContextMenuItem"/>.
/// New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="ToastButton"/> and <see cref="ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
/// </summary>
[Obsolete("Windows does not support AfterActivationBehavior. If a future version of Windows supports this, we will undeprecate the property when support is added.")]
public ToastAfterActivationBehavior AfterActivationBehavior { get; set; } = ToastAfterActivationBehavior.Default;
internal void PopulateElement(IElement_ToastActivatable el)
......@@ -39,9 +38,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
}
el.ProtocolActivationTargetApplicationPfn = ProtocolActivationTargetApplicationPfn;
#pragma warning disable 618
el.AfterActivationBehavior = AfterActivationBehavior;
#pragma warning restore 618
}
}
}
......@@ -102,9 +102,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
{
if (ActivationOptions != null)
{
#pragma warning disable 618
if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default)
#pragma warning restore 618
{
throw new InvalidOperationException("ToastContent does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default.");
}
......
......@@ -101,9 +101,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
{
if (ActivationOptions != null)
{
#pragma warning disable 618
if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default)
#pragma warning restore 618
{
throw new InvalidOperationException("ToastHeader does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default.");
}
......
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
......@@ -1208,7 +1208,7 @@
</member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>.
New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary>
</member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
......@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\priconfig.xml
......@@ -15,4 +16,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.UWP.csprojResolveAssemblyReference.cache
{
"version": 1,
"dgSpecHash": "MPJhXYwejWeF5r2pRIM8qdwZAHqCAWLWc7K9z/4A1i0x2Sw8uWR4a0prTVhw8sAj5BtrpUC+y6F2+vdL2SiWgA==",
"success": true
}
\ No newline at end of file
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.UWP.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\MultipleQualifiersPerDimensionFound.txt
......@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\priconfig.xml
......
{
"version": 2,
"version": 3,
"targets": {
"UAP,Version=v10.0": {
"UAP,Version=v10.0.10240": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -2173,7 +2173,7 @@
}
}
},
"UAP,Version=v10.0/win10-arm": {
"UAP,Version=v10.0.10240/win10-arm": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -4428,7 +4428,7 @@
}
}
},
"UAP,Version=v10.0/win10-arm-aot": {
"UAP,Version=v10.0.10240/win10-arm-aot": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -5006,9 +5006,6 @@
},
"runtime.win10-arm-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package",
"compile": {
"runtimes/win10-arm-aot/lib/netcore50/_._": {}
},
"runtime": {
"runtimes/win10-arm-aot/lib/netcore50/clrcompression.dll": {}
}
......@@ -6722,7 +6719,7 @@
}
}
},
"UAP,Version=v10.0/win10-x64": {
"UAP,Version=v10.0.10240/win10-x64": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -8986,7 +8983,7 @@
}
}
},
"UAP,Version=v10.0/win10-x64-aot": {
"UAP,Version=v10.0.10240/win10-x64-aot": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -9567,9 +9564,6 @@
},
"runtime.win10-x64-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package",
"compile": {
"runtimes/win10-x64-aot/lib/netcore50/_._": {}
},
"runtime": {
"runtimes/win10-x64-aot/lib/netcore50/clrcompression.dll": {}
}
......@@ -11289,7 +11283,7 @@
}
}
},
"UAP,Version=v10.0/win10-x86": {
"UAP,Version=v10.0.10240/win10-x86": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -13553,7 +13547,7 @@
}
}
},
"UAP,Version=v10.0/win10-x86-aot": {
"UAP,Version=v10.0.10240/win10-x86-aot": {
"Microsoft.CSharp/4.0.1": {
"type": "package",
"dependencies": {
......@@ -14134,9 +14128,6 @@
},
"runtime.win10-x86-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package",
"compile": {
"runtimes/win10-x86-aot/lib/netcore50/_._": {}
},
"runtime": {
"runtimes/win10-x86-aot/lib/netcore50/clrcompression.dll": {}
}
......@@ -22044,7 +22035,7 @@
"Microsoft.NETCore.UniversalWindowsPlatform >= 5.2.3",
"StyleCop.Analyzers >= 1.0.0"
],
"UAP,Version=v10.0": []
"UAP,Version=v10.0.10240": []
},
"packageFolders": {
"C:\\Users\\katze\\.nuget\\packages\\": {}
......@@ -22055,14 +22046,24 @@
"projectName": "Microsoft.Toolkit.Uwp.Notifications.UWP",
"projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj",
"projectJsonPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\project.json",
"projectStyle": "ProjectJson"
"packagesPath": "C:\\Users\\katze\\.nuget\\packages\\",
"outputPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\obj\\",
"projectStyle": "ProjectJson",
"configFilePaths": [
"C:\\Users\\katze\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
}
},
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0"
},
"frameworks": {
"uap10.0": {}
"uap10.0.10240": {}
},
"runtimes": {
"win10-arm": {
......
......@@ -83,41 +83,38 @@ exports.schedule = function (msgs, callback, scope, args) {
}
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
/**
* Schedule notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (msgs, callback, scope, args) {
var fn = function(granted) {
if (!granted) return;
var notifications = Array.isArray(msgs) ? msgs : [msgs];
for (var i = 0; i < notifications.length; i++) {
var notification = notifications[i];
this.convertProperties(notification);
}
this.exec('update', notifications, callback, scope);
};
if (args && args.skipPermission) {
fn.call(this, true);
} else {
this.requestPermission(fn, this);
}
};
/**
* Clear the specified notifications by id.
......
......@@ -28,14 +28,14 @@ exports._defaults = {
text: '',
title: '',
sound: 'res://platform_default',
trigger: 'date',
badge: undefined,
data: undefined,
every: undefined,
at: undefined,
icon: undefined,
trigger: { type: 'calendar' },
actions: [],
actionGroupId: undefined,
attachments: []
attachments: [],
progressBar: false
};
// Listener
......@@ -58,12 +58,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined;
defaults.color = undefined;
break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
}
};
......@@ -77,7 +71,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json');
......@@ -89,10 +82,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false;
}
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) {
if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
......@@ -105,7 +94,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) {
if (!defaults.hasOwnProperty(key)) {
delete options[key];
// delete options[key];
console.warn('Unknown property: ' + key);
}
}
......@@ -148,21 +137,13 @@ exports.convertProperties = function (options) {
}
}
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data);
}
if (options.actions) {
this.convertTrigger(options);
this.convertActions(options);
}
this.convertProgressBar(options);
return options;
};
......@@ -198,6 +179,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
};
/**
......@@ -305,13 +362,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exports.exec('deviceready');
exports.exec('ready');
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () {
// Set launchDetails object
exports.exec('launchDetails');
exports.exec('launch');
// Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults
......
......@@ -57,22 +57,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args);
};
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/**
* Update notifications.
*
* @param [ Array ] notifications The notifications to schedule.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
* @param [ Object ] args Optional flags how to schedule.
*
* @return [ Void ]
*/
exports.update = function (notifications, callback, scope, args) {
this.core.update(notifications, callback, scope, args);
};
/**
* Clear the specified notifications by id.
......
......@@ -58,6 +58,8 @@ var app = {
document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('update_text').onclick = app.update;
document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('clear_all').onclick = app.clearAll;
......@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () {
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Test Message 1',
title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova',
sound: null,
......@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
title: 'Scheduled with delay',
text: 'Test Message 1',
at: _5_sec_from_now,
trigger: _5_sec_from_now,
sound: sound,
badge: 12
});
},
// Schedule a repeating notification
scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf';
var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({
id: 1,
text: 'Scheduled every minute',
every: 'minute',
trigger: { every: 'minute' },
sound: sound,
icon: 'res://icon',
smallIcon: 'res://ic_popup_sync'
......@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike',
actions: [{
......@@ -181,6 +185,27 @@ var app = {
}]
});
},
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification
clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids);
......@@ -298,7 +323,7 @@ var app = {
});
cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments);
// showToast('updated: ' + obj.id);
showToast('updated: ' + obj.id);
});
cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments);
......@@ -371,7 +396,7 @@ showWinDialog = function (text) {
};
if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); };
alert = showWinDialog;
}
app.initialize();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment