text:
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.2...v1.9.3)

- 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99)
- :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449)
- :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3)
- :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387)
- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437)
- :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec)
- :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46)
- Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f)
- :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f)
- :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139)
- :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262)
- :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9)
- :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6)
- make google_app_id non translatable string (#1485) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d9890fa52ecdb41b344f06f1dd081d05ea784bea)
- :penguin::bug: Issue #1474: Android: force-start starts the app in Foreground instead of Background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bb5f53a8478353ed1f5f97756adff336fb9a710)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e02ff6703a53cb18e53060e2d7f6f64ebc8588b6)

## [v1.9.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.2) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v1.9.2)

- 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef3de3281205b1fd56c57c71db31dc06a95da7a9)
- :bookmark: Bumping plugin version to 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24650bad4db49525505e9a2624ff1b5500e6b3ef)
- Optional event emit instead of function call for action buttons (#1378) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e92e951e759fe64d17d01e152575b6262973380a)
- Ensures foreground is true when inline is set to true and Android version is earlier than N   (#1459) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd61ec34c0ca5c3fadf6797a8e192b9343324f68)
- :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9)
- :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28)
- :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7)
- :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5)

## [v1.9.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.1) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.0...v1.9.1)

- 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6178688d10fc9fd5770795e5caa3f402d3fec574)
- Bumping plugin version to 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4d0d2d0c0f19305189bbc7db11c56abfcb0e629a)
- :bug: Issue #1412: push.subscribe 'not a function' error [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1c0c0bcac7ae4a0fe8a7c54e2f00fdba90ff5207)
- :memo: Add emoji guide to CONTRIBUTING [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce845fde55429c36a885a4711e04a73904ab9c0)
- Issue #1342: Fail to add 1.9.0 to ios platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7481e286607dacf01327c9f6d5a7c21acc5eeba1)
- Issue #1402: force-start:1 brings a killed application to foreground, not background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/256f28fa08da4aab9691d628a3150022b67da02d)
- Issue #1400: Version 1.9.0 on PGB not working [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c45228a892c602b8616d165ccf142eac0ff2f7f2)
- Merge pull request #1398 from getlarky/android-badge-documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6884df95602a15c219846bbcdb01ce1285d660bb)
- Warn about android badge support in documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2842de212b11a76580865c6ee0d6a1b7b42d030e)
- Enahancement : Add custom permission for PushHandlerActivity (#1362) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e15fdc442030648daabc79a44ae72b2d14b7c1d2)
- Issue #1248: upgrade ShortcutBadger version to latest [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ab1cf0f0747b1f122f1f43c4af67db37dd0e443)
- Merge pull request #1361 from pataar/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29ec1e241036611c6a3a2c71d2a61860427be5d0)
- Fix minor typos in INSTALLATION.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/840b0e06cb2643635cfb882de9a35202799f3953)
- Add mimimum cordova versions to installation docs [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dcb528384dfd7f65410545b842e16ef89277ff7b)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e268a0dceff248b703ae75ff7923b7b3d673aeee)

## [v1.9.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.0) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.4...v1.9.0)

- 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e5b7f22299d900a37064a783da43905ad73c58bf)
- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dc6a11db4157e1070e48e073a8a78401f185d324)
- Prepare for 1.9.0 release [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0f889bfb5e612ef3ffbc1466deabfe9eb99b760b)
- Update gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d70bad64564444c01e59ff494b8ba09d190d3dbb)
- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600993e7739a0a84ef77b60c4a1457f8aea084b6)
- Issue #1154: Register fail iOS 10 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6013d49ecf0025be10fb6bb87152ee4025b5df4)
- Issue #1337: Build failed, invalid package.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8631666e4654fd6acafa6cf160cc59424e912ceb)
- Set default SENDER_ID [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/82ca365f4d6d91b18fc28c338a647a2622e60f6e)
- Issue #158: Notification Event Not Firing When Closed Through App Launcher [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca18653d6ff332db41f48824a2d65bd2699ed8bc)
- Merge branch 'master' of https://github.com/hanicker/phonegap-plugin-push into hanicker-master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/43402909d3b2d5c6ff518cc69e401dc918b585aa)
- Update plugin to use GCM Cocoapods <framework> reference in plugin.xml (#1183) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b639d83fe125d5b77720d130ccec53af3a5f3d91)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4779de2a5996703ba70656630f35d79415d1af8)
- feat(forced restart, notify javascript) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c03beff9a5a83927b7020ee04c3ed541de04edd)
- restart application after force close (#158 #333) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8b7c972dbf617f22218c178d74368b35521eecb9)

## [v1.8.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.4) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.3...v1.8.4)

- 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4b18505a2c30e17564c0e80060f0524968aa0d40)
- Bumping plugin version to 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/046c727f58a6fa675a5f49c10334095cd4282884)
- Issue #1251: [Android] deviceId persists between uninstalls, but is invalid after an uninstall [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8a7bbe5cba186d9685f31adc07e25bd908409498)
- Merge pull request #1323 from hung-doan/issue-1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/021f0abd9a49fb83d19faca3ffb7d142759bb01a)
- Update GCM to 9.8+  issue #1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/450e0e01b9bcd747a49081c4a0d6ce998c37478a)
- Support Twilio Notify (#1306) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a9bb3bf0a2ca57f68eafc39070fc125746bbbb23)
- Cache multiple Android action button pushes if app is not running (#1272) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d0547bab04c292024dc6ed41939590fba01115ff)
- Add sub/unsub tests [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3bf9ff5f04e10622d7d9ff47a9bd57a829ee9eef)
- Add features: push.subscribe, push.unsubscribe (issue #1040) (#1227) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bb0d3ed087e13e24af57e682776930cea2f577a8)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cf7ce8e716fe60de121634abc164b509100a9d15)

## [v1.8.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.3) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.2...v1.8.3)

- 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0cfba9f85b7d7dfa3c244c9e78a03872ff938f9)
- Bumping plugin version to 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cc7d5abe55957cebfdd3b39ba670f8093bdac564)
- Update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0d8548d3166b7b4d34b32944b800c96e4aadf70a)
- Issue#1282 Show app name if title is empty (#1285) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3d7a3a39fb931aafa86be6b1568a682133c36de7)
- Note about background app refresh (#1267) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4f13533deb0c1b927dab9d9cddb13c53fdefd9b0)
- Issue #1213: XDK instructions link for www template is incorrect (#1283) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d2ede2bab4cd6462f7dffc4e2bc733d585107e89)
- Merge pull request #1277 from dannywillems/patch-1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea5ae88f3fcfa8fc605cf2c974b52d793bd2c4c9)
- Unused variable app. Caused warnings. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/09dedb43481d207d0b17de4eb26c5a1904d08f65)
- Issue #1254: [Question] Is it possible to get more than 3 action buttons on Android notifications? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8ab6665d878c8dec3ff9914c11a9329c8a415e7)
- Use unique pending intent request code to enable multiple... (#1225) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/475883833556eb001e2e0adb986bd96b78bdcb2f)
- Add `cordovaDependencies` section to package.json (#1232) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b343e78e9bfca921cef78eb504755477ecaeff9)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/14afb94126acb51a6f10a2094f7f391f2f17dee5)

## [v1.8.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.2) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.1...v1.8.2)

- 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b47d519abff667400c4863fe90a27ae88e3c0671)
- Bumping plugin version to 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/738735ddcd9b60014beb4207c3ccdcd30ba7a803)
- Localization from resources (#1196) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2de9fc2827a18941ae6040e90ea0da5dc97652d8)
- Issue #1199: iOS 10 is not firing the 'notification' event after clicking on a notification when the app is in hibernate [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e711b09b15a8e85156e9158026509522859c7900)
- Use unique pending intent request code to enable multiple simultaneous notifications with action buttons (#1216) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1fe640637fd67ec0ce2cf50ee1cab793ed01cfb7)
- (doc) Fixing `ios.catetories` type in api reference. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0a93fab9cec5ac2a2b813090958054e8e7b15f9a)
- Issue #1155: [doc] Explain usage of the top level "priority" in GCM notifications [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ddaf48e089dc3cb46f9bd9f5e4678a2118b14a48)
- Issue #1121: Notification is not shown on ios device [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/432761202c43a1f2a4ba9c643df78b81b87d66fa)
- Issue #1160: data.additionalData.[Object] as 'undefined' in iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/946052a895268155f56a7a3a1006d019599b46f9)
- Few edits (#1179) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f90b4bbf0e78adaa029737cf70b146ec97d09015)
- Adding workshop tutorial link to the README (#1169) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/59800a930557bd864e527404e1035c2d8ac149c9)
- added Azure server-side example (#1124) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bd4d0e612f6f1c62e33d147564b7e495436f15e)
- Update appxmanifests with ToastCapable=true after plugin install (#1158) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eeefc036a8600bea80135b6b14241509853444ab)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/30d3d5dc733c80bc1687e5eff28d0614a0f38e51)

## [v1.8.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.1) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.0...v1.8.1)

- 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95c27d29ef37bfd750972561022db53de256840d)
- Bumping plugin version to 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4ba55ff310d4d931503de2547738cc169b6f968)
- [Windows] Added a check on activation context existence (#1129) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/151c8cd97aa71742798e969dd9e6c2208b8c1f15)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cd4ee00e2eb081d0d29d001e580009fba5c341a)

## [v1.8.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.0) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.7.4...v1.8.0)

- 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d5a8480e6e230c959d8079554a6366f3605cb97e)
- Bumping plugin version to 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8c784536e40ce6dddf14edeff7ad2a9ee944156)
- Check that serviceWorker exists before unregistering [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef004002d60d8028ed6aad2cef79d4d8ac6aed49)
- Populate additionalData on browser platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/63a29cdbbc0cd0374552d51e0e2d2217f5361f79)
- Issue #683:  Support Android N inline reply actions [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e835ca31ac02a3455ece8c96938260935e2e7100)
- Issue #1109: Installation.MD has a mistake [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89834b78a63ad6c927295eb5699204a0ccb49a73)
- Use push server DELETE route to remove browser keys [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4615ea694bd5858bfdb8553c9a9390e1e30c2c36)
- [chore] fix mis-spelling [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/efdef52deec4f7e8b6b4ee87460bd87cc0479c74)
- Browser: always call success on unimplemented methods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1b8bf267674508361c68fb03b12f97608e87456b)
- Update push url [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e1d8774f760d7a72a547d68e1b2ac367572e2b6d)
- Merge branch 'browser' [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a2ad8da9a25a02a1b674e6adf0a37e18cde185ab)
- Add browser platform support [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e8e0fe47001e461cf7fb7274d4c2b3dc687cd90e)
- Issue #1080: clearAllNotifications not working on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bea2a7469ab2bd677e12d440b457e1d5383b1f0)
- [whoops] revert accidental commit of a pluginpub test [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/da301e8a43a0a659947294c9d94f7fd09f5ac4b2)
- [doc] remove deprecation notice on hasPermission [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d4b79a81c5ad85a4b566e5a23a19b10fa78dcf17)
- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8512a6cb7be3c0bb2b5db813c7aaff4c49fc52a2)
- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b015543b8a06526b7b70357407e635c180c473ee)
- Update CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6f87a50d9f9cb3bd7c9ba599b3d3afbc0fd7aaf)

## [1.7.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.7.4) (2016-07-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.3...v1.7.4)

**Closed issues:**

- FYI: Resumed iOS 10 Notifications results in an error (fix problem on iOS) [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002)

## [1.7.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.3) (2016-07-06)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.2...1.7.3)

**Closed issues:**

- Implemented clearBadge for Android [\#1030](https://github.com/phonegap/phonegap-plugin-push/issues/1030)
- update badge number even if the app is totally closed [\#1027](https://github.com/phonegap/phonegap-plugin-push/issues/1027)
- Documentation issue of Android pictures push [\#1028](https://github.com/phonegap/phonegap-plugin-push/issues/1028)
- [iOS] unregister for a topic: parameter is not consistent between ios/android [\#1029](https://github.com/phonegap/phonegap-plugin-push/issues/1029)
- [doc] Error installing in IOS, version requirement: >=4.1.0 [\#1047](https://github.com/phonegap/phonegap-plugin-push/issues/1047)

## [1.7.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.2) (2016-06-24)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.1...1.7.2)

**Closed issues:**

- FYI: Resumed iOS 10 Notifications results in an error [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002)

## [1.7.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.1) (2016-06-17)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.0...1.7.1)

**Closed issues:**

- Update docs for Android badges [\#982](https://github.com/phonegap/phonegap-plugin-push/issues/982)
- visibility not working [\#987](https://github.com/phonegap/phonegap-plugin-push/issues/982)
- Revert pinning of support-v13 [\#983](https://github.com/phonegap/phonegap-plugin-push/issues/983)

## [1.7.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.0) (2016-06-06)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.4...1.7.0)

**Closed issues:**

- disable notification's sounds on a per notification basis [\#885](https://github.com/phonegap/phonegap-plugin-push/issues/885)
- Android GCM Action Buttons lack of documentation [\#884](https://github.com/phonegap/phonegap-plugin-push/issues/884)
- Android double on('notification') fired [\#828](https://github.com/phonegap/phonegap-plugin-push/issues/828)
- Device should register, Push Notification should receive on IOS (IntelXDK) [\#926](https://github.com/phonegap/phonegap-plugin-push/issues/926)
- Use cordova-ios 4.1.0 in Milestone 1.7.0 [\#751](https://github.com/phonegap/phonegap-plugin-push/issues/751)
- Badge on android [\#190](https://github.com/phonegap/phonegap-plugin-push/issues/190)
- JS error in Success callbackId: PushNotifiation###.. whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824)
- coldstart flag always set to true if the app has been opened through an alert, on ios 9.3.1, plugin version 1.6.2 cordova 6.1.0 cordova ios 4.1.1 [\#795](https://github.com/phonegap/phonegap-plugin-push/issues/795)
- Is there any way to clear notifications out from the app? [\#346](https://github.com/phonegap/phonegap-plugin-push/issues/346)
- Show contents of notification when phone is locked [\#750](https://github.com/phonegap/phonegap-plugin-push/issues/750)
- PushPlugin.m init() should send pending notification when js side is ready [\#658](https://github.com/phonegap/phonegap-plugin-push/issues/658)

## [1.6.4](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.4) (2016-05-24)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.3...1.6.4)

**Closed issues:**

- hasPermission() for windows [\#874](https://github.com/phonegap/phonegap-plugin-push/issues/874)
- Latest Play store service breaks phonegap-plugin-push [\#909](https://github.com/phonegap/phonegap-plugin-push/issues/909)

## [1.6.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.3) (2016-04-27)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.2...1.6.3)

**Fixed bugs:**

- \[Android\] Can't install multiple apps using this plugin \(v1.6.x\) [\#768](https://github.com/phonegap/phonegap-plugin-push/issues/768)
- JS error in "Success callbackId: PushNotifiation\#\#\#.." whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824)

**Closed issues:**

- Move example directory to a phonegap template [\#832](https://github.com/phonegap/phonegap-plugin-push/issues/832)
- va [\#830](https://github.com/phonegap/phonegap-plugin-push/issues/830)
- does not create the notification bar [\#821](https://github.com/phonegap/phonegap-plugin-push/issues/821)
- Did not show notification in status bar for Xiomi Redmi Note 3 [\#790](https://github.com/phonegap/phonegap-plugin-push/issues/790)
- PushNotification.hasPermission not working as expected [\#789](https://github.com/phonegap/phonegap-plugin-push/issues/789)

## [1.6.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.2) (2016-04-06)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.1...1.6.2)

**Fixed bugs:**

- Unexpected / Broken Android Behavior [\#767](https://github.com/phonegap/phonegap-plugin-push/issues/767)

**Closed issues:**

- Android: JSON Exception No Value Found for Sender [\#781](https://github.com/phonegap/phonegap-plugin-push/issues/781)
- Should I call init\(\) every time the app is launched?? [\#777](https://github.com/phonegap/phonegap-plugin-push/issues/777)
- Request: extend action buttons to wearables [\#776](https://github.com/phonegap/phonegap-plugin-push/issues/776)
- After upgrade: 601 duplicate symbols for architecture i386 [\#769](https://github.com/phonegap/phonegap-plugin-push/issues/769)
- push plugin [\#766](https://github.com/phonegap/phonegap-plugin-push/issues/766)
- Documentation mentions old name for dependency [\#763](https://github.com/phonegap/phonegap-plugin-push/issues/763)
- push.on\('notification'\) callback is not called on coldstart on iOS [\#758](https://github.com/phonegap/phonegap-plugin-push/issues/758)
- plugin doesn't work in background or when app not running on kitkat 4.4.2 [\#754](https://github.com/phonegap/phonegap-plugin-push/issues/754)
- App Icon not displayed in tray using build.phonegap and cli-6.0.0 \[ios\] [\#753](https://github.com/phonegap/phonegap-plugin-push/issues/753)
- push.on\('registration'\) event not called on IOS. [\#752](https://github.com/phonegap/phonegap-plugin-push/issues/752)
- catch 22 when trying to use this plug [\#741](https://github.com/phonegap/phonegap-plugin-push/issues/741)
- push.setApplicationIconBadgeNumber not working in background [\#736](https://github.com/phonegap/phonegap-plugin-push/issues/736)
- Strange issue while debugging in Safari Inspector [\#733](https://github.com/phonegap/phonegap-plugin-push/issues/733)

## [1.6.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.1) (2016-03-23)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.0...1.6.1)

**Fixed bugs:**

- App crashes on notification when in background [\#715](https://github.com/phonegap/phonegap-plugin-push/issues/715)

**Closed issues:**

- Memory Leak when call `push.on\('registration'`. so `Push Plugin register called` not called [\#743](https://github.com/phonegap/phonegap-plugin-push/issues/743)
- l [\#739](https://github.com/phonegap/phonegap-plugin-push/issues/739)
- \[testing issue template\] ignore me [\#717](https://github.com/phonegap/phonegap-plugin-push/issues/717)
- Incorrect init option "vibration" in a few ios samples on PAYLOAD.md [\#713](https://github.com/phonegap/phonegap-plugin-push/issues/713)
- android M wear case [\#691](https://github.com/phonegap/phonegap-plugin-push/issues/691)
- Incorrect document detailing \(PHONEGAP\_BUILD.md\) [\#686](https://github.com/phonegap/phonegap-plugin-push/issues/686)
- Windows Phone 8.1, not fired plugin methods [\#526](https://github.com/phonegap/phonegap-plugin-push/issues/526)

## [1.6.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.0) (2016-03-09)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.3...1.6.0)

**Implemented enhancements:**

- Background processing with coldstart on iOS [\#583](https://github.com/phonegap/phonegap-plugin-push/issues/583)

**Fixed bugs:**

- Android: notification does not dismiss after selection button \(1.6.x dev\) [\#610](https://github.com/phonegap/phonegap-plugin-push/issues/610)

**Closed issues:**

- XDK doesn't work with v1.5.x. Are you going to have a non-gradle version for v1.5.x [\#675](https://github.com/phonegap/phonegap-plugin-push/issues/675)
- emoji support [\#668](https://github.com/phonegap/phonegap-plugin-push/issues/668)
- iOS sound not found \[edited with new debug info\] [\#667](https://github.com/phonegap/phonegap-plugin-push/issues/667)
- Push notification register APN to GCM Problem [\#665](https://github.com/phonegap/phonegap-plugin-push/issues/665)
- IOS Never fire the registration event [\#659](https://github.com/phonegap/phonegap-plugin-push/issues/659)
- Badge count inaccurate [\#651](https://github.com/phonegap/phonegap-plugin-push/issues/651)
- Android Icon options in phonegap-plugin-push@1.2.3  [\#648](https://github.com/phonegap/phonegap-plugin-push/issues/648)
- Getting same registration id when re-register  [\#641](https://github.com/phonegap/phonegap-plugin-push/issues/641)
- Callback not called unless you register to GCM everytime you open the app [\#626](https://github.com/phonegap/phonegap-plugin-push/issues/626)
- How to make GCM show alert automatically ios [\#602](https://github.com/phonegap/phonegap-plugin-push/issues/602)
- Shoddy image for notification icon,status bar icon? [\#587](https://github.com/phonegap/phonegap-plugin-push/issues/587)
- ERROR: Plugin 'PushNotification' not found [\#568](https://github.com/phonegap/phonegap-plugin-push/issues/568)
- ar [\#533](https://github.com/phonegap/phonegap-plugin-push/issues/533)
- No sound and vibration for GCM when built with Cordova but Ok with PhoneBuild [\#520](https://github.com/phonegap/phonegap-plugin-push/issues/520)

## [1.5.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.3) (2016-01-14)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.2...1.5.3)

**Fixed bugs:**

- Android 4.1 and AppOpsManager [\#495](https://github.com/phonegap/phonegap-plugin-push/issues/495)

**Closed issues:**

- iOS Building Error [\#507](https://github.com/phonegap/phonegap-plugin-push/issues/507)
- \[FIX\] notification not fired when app is in background/killed ? Check this out [\#502](https://github.com/phonegap/phonegap-plugin-push/issues/502)
- Which Sender ID to use [\#485](https://github.com/phonegap/phonegap-plugin-push/issues/485)
- coldstart not documented [\#483](https://github.com/phonegap/phonegap-plugin-push/issues/483)
- Android: iconColor doesn't work in hexadecimal \(\#RRGGBB\) format [\#480](https://github.com/phonegap/phonegap-plugin-push/issues/480)
- Cannot find symbol variable INSTANCE\_ID\_SCOPE [\#477](https://github.com/phonegap/phonegap-plugin-push/issues/477)
- notification event not fired on cold start on Android 5 [\#469](https://github.com/phonegap/phonegap-plugin-push/issues/469)
- Push notifications not working with iPhone6 + ios 9.2? [\#462](https://github.com/phonegap/phonegap-plugin-push/issues/462)
- UTF8 support on android: the notification text \(on android only\) is shown with "???" [\#461](https://github.com/phonegap/phonegap-plugin-push/issues/461)
- example application? [\#460](https://github.com/phonegap/phonegap-plugin-push/issues/460)
- build fail in ios - version 1.5.2 [\#458](https://github.com/phonegap/phonegap-plugin-push/issues/458)
- Getting NotRegistered error when sending GCM push notification, but the device never unregistered [\#419](https://github.com/phonegap/phonegap-plugin-push/issues/419)
- Changelog neglected [\#412](https://github.com/phonegap/phonegap-plugin-push/issues/412)

## [1.5.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.1) (2015-12-21)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.1...1.5.2)

**Fixed bugs:**

- notification\_applicationDidBecomeActive method [\#447](https://github.com/phonegap/phonegap-plugin-push/issues/447)

## [1.5.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.1) (2015-12-18)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.0...1.5.1)

**Closed issues:**

- Unsubscribing to topics should not clear event handlers [\#443](https://github.com/phonegap/phonegap-plugin-push/issues/443)

## [1.5.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.0) (2015-12-18)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.5...1.5.0)

**Fixed bugs:**

- Make sure iOS/Android can receive the same GCM payload [\#401](https://github.com/phonegap/phonegap-plugin-push/issues/401)

**Closed issues:**

- Using stacking notifications but only able to process one [\#435](https://github.com/phonegap/phonegap-plugin-push/issues/435)
- Cant find stacking docs [\#430](https://github.com/phonegap/phonegap-plugin-push/issues/430)
- Android Marshmallow 6.0 push icon [\#422](https://github.com/phonegap/phonegap-plugin-push/issues/422)
- Distinguish between 'android' or 'ios' on registration event [\#418](https://github.com/phonegap/phonegap-plugin-push/issues/418)
- Phonegap Build Issues for 1.4.X [\#417](https://github.com/phonegap/phonegap-plugin-push/issues/417)
- using in Ionic [\#416](https://github.com/phonegap/phonegap-plugin-push/issues/416)
- notification event not called on ios [\#414](https://github.com/phonegap/phonegap-plugin-push/issues/414)
- \[docs\] detail on deviceready dependency [\#410](https://github.com/phonegap/phonegap-plugin-push/issues/410)
- iOS: Plugin does not start [\#404](https://github.com/phonegap/phonegap-plugin-push/issues/404)
- Process notifications in background [\#398](https://github.com/phonegap/phonegap-plugin-push/issues/398)
- On iOS 9 the badge does not clear [\#395](https://github.com/phonegap/phonegap-plugin-push/issues/395)
- Background notification OK, but event "notification" never called [\#387](https://github.com/phonegap/phonegap-plugin-push/issues/387)
- Android action button callback not triggered   [\#298](https://github.com/phonegap/phonegap-plugin-push/issues/298)

## [1.4.5](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.5) (2015-12-03)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.4...1.4.5)

**Fixed bugs:**

- register -\> unregister lifecycle [\#368](https://github.com/phonegap/phonegap-plugin-push/issues/368)

**Closed issues:**

- jshint support [\#380](https://github.com/phonegap/phonegap-plugin-push/issues/380)
- Platform support [\#379](https://github.com/phonegap/phonegap-plugin-push/issues/379)
- Ionic implemenation [\#364](https://github.com/phonegap/phonegap-plugin-push/issues/364)
- on registration callback getting called repeatedly. [\#353](https://github.com/phonegap/phonegap-plugin-push/issues/353)
- on\("notification"\) dont fire when the app its open [\#351](https://github.com/phonegap/phonegap-plugin-push/issues/351)

## [1.4.4](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.4) (2015-11-20)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.3...1.4.4)

**Fixed bugs:**

- InstanceID.getToken\(\) not called in an Intent [\#354](https://github.com/phonegap/phonegap-plugin-push/issues/354)
- Handle both data and notification payloads in the same GCM push [\#343](https://github.com/phonegap/phonegap-plugin-push/issues/343)
- \[INSTALL\_FAILED\_CONFLICTING\_PROVIDER\] [\#320](https://github.com/phonegap/phonegap-plugin-push/issues/320)
- Getting "Error : Empty registration ID received from GCM" [\#315](https://github.com/phonegap/phonegap-plugin-push/issues/315)

**Closed issues:**

- xcode build fails with phonegap-plugin-push [\#358](https://github.com/phonegap/phonegap-plugin-push/issues/358)
- App crashes after adding push plugin and wikipedia app installed [\#357](https://github.com/phonegap/phonegap-plugin-push/issues/357)
- Conflict when compiling with com.google.maps [\#355](https://github.com/phonegap/phonegap-plugin-push/issues/355)

## [1.4.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.3) (2015-11-18)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.2...1.4.3)

**Closed issues:**

- \[Question\] about the action's icon color [\#348](https://github.com/phonegap/phonegap-plugin-push/issues/348)
- Can I access Web API's from 'notification' handler? [\#335](https://github.com/phonegap/phonegap-plugin-push/issues/335)
- Init Error: Missing Instance ID Service [\#334](https://github.com/phonegap/phonegap-plugin-push/issues/334)
- Install issue [\#332](https://github.com/phonegap/phonegap-plugin-push/issues/332)
- Multiple Apps gets error [\#330](https://github.com/phonegap/phonegap-plugin-push/issues/330)
- Can't find variable PushNotification [\#328](https://github.com/phonegap/phonegap-plugin-push/issues/328)
- When app is in background, clicking on Android notification in shade opens app but does not trigger the on\('notification'\) event handler [\#326](https://github.com/phonegap/phonegap-plugin-push/issues/326)
- "Missing Command Error" when running in browser [\#318](https://github.com/phonegap/phonegap-plugin-push/issues/318)
- Small icon not working [\#316](https://github.com/phonegap/phonegap-plugin-push/issues/316)
- Duplicate push notifications happening on iOS when phone is unlocked [\#309](https://github.com/phonegap/phonegap-plugin-push/issues/309)
- Is it possible to add badge on Android portion. [\#308](https://github.com/phonegap/phonegap-plugin-push/issues/308)
- \[just a question\] about the priority [\#306](https://github.com/phonegap/phonegap-plugin-push/issues/306)
- Android - After unregister and reregister no notifications [\#304](https://github.com/phonegap/phonegap-plugin-push/issues/304)
- Amazon-Fireos and Blackberry 10 support [\#300](https://github.com/phonegap/phonegap-plugin-push/issues/300)
- 1.4.x not showing notification on Android [\#299](https://github.com/phonegap/phonegap-plugin-push/issues/299)
- "push.unregister" not really work in iOS [\#296](https://github.com/phonegap/phonegap-plugin-push/issues/296)

## [1.4.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.2) (2015-11-03)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.1...1.4.2)

**Closed issues:**

- data.registrationId is empty string "" on register event callback [\#295](https://github.com/phonegap/phonegap-plugin-push/issues/295)

## [1.4.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.1) (2015-11-02)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.0...1.4.1)

## [1.4.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.0) (2015-10-27)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.3.0...1.4.0)

**Implemented enhancements:**

- Use Google's InstanceID API [\#188](https://github.com/phonegap/phonegap-plugin-push/issues/188)

**Closed issues:**

- How to handle a re-installed app? [\#203](https://github.com/phonegap/phonegap-plugin-push/issues/203)
- interactive push notifications? [\#266](https://github.com/phonegap/phonegap-plugin-push/issues/266)
- Empty registrationId Android [\#265](https://github.com/phonegap/phonegap-plugin-push/issues/265)
- Run callback when clicking of notification body [\#261](https://github.com/phonegap/phonegap-plugin-push/issues/261)
- Android BUILD FAILED [\#251](https://github.com/phonegap/phonegap-plugin-push/issues/251)
- Re-register [\#250](https://github.com/phonegap/phonegap-plugin-push/issues/250)
- how to work in background ?  [\#249](https://github.com/phonegap/phonegap-plugin-push/issues/249)
- installing plugin [\#244](https://github.com/phonegap/phonegap-plugin-push/issues/244)
- No Sound and vibration [\#242](https://github.com/phonegap/phonegap-plugin-push/issues/242)
- Unable to build apk [\#241](https://github.com/phonegap/phonegap-plugin-push/issues/241)
- still having problems with build.  [\#239](https://github.com/phonegap/phonegap-plugin-push/issues/239)
- Registering on iOS 9 [\#238](https://github.com/phonegap/phonegap-plugin-push/issues/238)
- Custom sound repeated multiple times on Android [\#237](https://github.com/phonegap/phonegap-plugin-push/issues/237)
- Android: status bar notification is not shown [\#236](https://github.com/phonegap/phonegap-plugin-push/issues/236)
- Multiple Push Notifications - phonegap build [\#234](https://github.com/phonegap/phonegap-plugin-push/issues/234)
-  error: cannot find symbol String token = InstanceID.getInstance\(getApplicationContext\(\)\).getToken\(senderID, GCM\); [\#231](https://github.com/phonegap/phonegap-plugin-push/issues/231)
- Problem using "ledColor" and "VibrationPattern" [\#229](https://github.com/phonegap/phonegap-plugin-push/issues/229)
- Notificaction event receive, but not notification showing on android [\#228](https://github.com/phonegap/phonegap-plugin-push/issues/228)
- Events for registration not being fired [\#227](https://github.com/phonegap/phonegap-plugin-push/issues/227)
- 'registration' event not firing on windows phone [\#224](https://github.com/phonegap/phonegap-plugin-push/issues/224)
- Can i subscribe to a topic in using plugin? [\#219](https://github.com/phonegap/phonegap-plugin-push/issues/219)
- GCMIntentService.java:472: error: cannot find symbol iconColor [\#217](https://github.com/phonegap/phonegap-plugin-push/issues/217)
- Push Plugin registering on iOS 9 Devices but not showing Notification [\#216](https://github.com/phonegap/phonegap-plugin-push/issues/216)
- Receiving a notification "outside app" while in it? [\#213](https://github.com/phonegap/phonegap-plugin-push/issues/213)
- iOS push not working for device tokens when spaces removed [\#212](https://github.com/phonegap/phonegap-plugin-push/issues/212)
- Error: Plugin PushPlugin failed to install. [\#210](https://github.com/phonegap/phonegap-plugin-push/issues/210)
- Build error [\#205](https://github.com/phonegap/phonegap-plugin-push/issues/205)
- Android push.on\('registration', cb\) fires correctly on device, but not in emulator. [\#204](https://github.com/phonegap/phonegap-plugin-push/issues/204)
- 1.3.0 version not compatible with "crosswalk" by PGB [\#199](https://github.com/phonegap/phonegap-plugin-push/issues/199)
- How to get data on didReceiveNotification Background Process  [\#198](https://github.com/phonegap/phonegap-plugin-push/issues/198)
- PushNotification is not defined in some devices [\#196](https://github.com/phonegap/phonegap-plugin-push/issues/196)
- not getting notifications on the Android device [\#195](https://github.com/phonegap/phonegap-plugin-push/issues/195)
- Installation Errors [\#186](https://github.com/phonegap/phonegap-plugin-push/issues/186)
- IOS: on registration fired twice [\#185](https://github.com/phonegap/phonegap-plugin-push/issues/185)
- Build failed with exit code 8 [\#184](https://github.com/phonegap/phonegap-plugin-push/issues/184)
- iOS: Not able to schedule local notification after adding the plugin [\#183](https://github.com/phonegap/phonegap-plugin-push/issues/183)
- How to show multiple notifications individually in android? [\#181](https://github.com/phonegap/phonegap-plugin-push/issues/181)
- iOS init option type [\#180](https://github.com/phonegap/phonegap-plugin-push/issues/180)
- Building for Android is a quest [\#179](https://github.com/phonegap/phonegap-plugin-push/issues/179)
- How do i tell if the user open the app by tapping the notification? [\#176](https://github.com/phonegap/phonegap-plugin-push/issues/176)
- IOS custom push sound when app is in background [\#175](https://github.com/phonegap/phonegap-plugin-push/issues/175)
- Hi guys please post full working procedure, I'm not able to get registration id also. Please help [\#174](https://github.com/phonegap/phonegap-plugin-push/issues/174)
- Has anyone tested this plugin on windows? [\#173](https://github.com/phonegap/phonegap-plugin-push/issues/173)

## [1.3.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.3.0) (2015-09-21)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.3...1.3.0)

**Implemented enhancements:**

- How to use GCM 3.0 with this plugin? [\#127](https://github.com/phonegap/phonegap-plugin-push/issues/127)
- Android: possibility to send a notification with a title and without message [\#122](https://github.com/phonegap/phonegap-plugin-push/issues/122)
- Enhancement - Led, Vibration Pattern, Priority on Android [\#105](https://github.com/phonegap/phonegap-plugin-push/issues/105)

**Fixed bugs:**

-  It is using in gcm data.additionalData ?	 [\#126](https://github.com/phonegap/phonegap-plugin-push/issues/126)
- iOS notification from cold boot [\#117](https://github.com/phonegap/phonegap-plugin-push/issues/117)
- Notification LED is not working [\#97](https://github.com/phonegap/phonegap-plugin-push/issues/97)

**Closed issues:**

- Know which version is used in build service [\#151](https://github.com/phonegap/phonegap-plugin-push/issues/151)
- Registration is not working in IOS9 [\#150](https://github.com/phonegap/phonegap-plugin-push/issues/150)
- build fail on android  [\#149](https://github.com/phonegap/phonegap-plugin-push/issues/149)
- iconColor does not set icon background on Android [\#146](https://github.com/phonegap/phonegap-plugin-push/issues/146)
- Prevent windows toast notification when in foreground [\#145](https://github.com/phonegap/phonegap-plugin-push/issues/145)
- How to implement push notification for ios with this plug-in? [\#143](https://github.com/phonegap/phonegap-plugin-push/issues/143)
- After installing this plugin I can't build on Android [\#141](https://github.com/phonegap/phonegap-plugin-push/issues/141)
- version 1.2.3 [\#134](https://github.com/phonegap/phonegap-plugin-push/issues/134)
- New inbox style on android [\#131](https://github.com/phonegap/phonegap-plugin-push/issues/131)
- impossible to install the phonegap-plugin-push Error  [\#130](https://github.com/phonegap/phonegap-plugin-push/issues/130)
- Hello, i am developing a cordova app which requires push notifications to be sent to users android phone, so i tried using this new phonegap push plugin as old one is deprecated, and it keeps giving me an error in console: Uncaught ReferenceError: module is not defined ---   Line 154 Push.js and i dont have much experience with cordova, so can anyone assist me ? [\#128](https://github.com/phonegap/phonegap-plugin-push/issues/128)
- INVALID\_REGISTRATION when http post request with to IOS [\#123](https://github.com/phonegap/phonegap-plugin-push/issues/123)
- Andriod :More than 2 notifications in status bar it is not works. [\#121](https://github.com/phonegap/phonegap-plugin-push/issues/121)
- Release notes for 1.2.x [\#119](https://github.com/phonegap/phonegap-plugin-push/issues/119)
- Google cloud messaging GCM - Push Notification not being sent \(Server Side\) [\#110](https://github.com/phonegap/phonegap-plugin-push/issues/110)

## [1.2.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.3) (2015-09-08)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.2...1.2.3)

**Fixed bugs:**

- Notification not showing..... [\#101](https://github.com/phonegap/phonegap-plugin-push/issues/101)
- Same data payload for messages with action buttons [\#90](https://github.com/phonegap/phonegap-plugin-push/issues/90)

**Closed issues:**

- Notification doesn't show the app icon [\#112](https://github.com/phonegap/phonegap-plugin-push/issues/112)
- Notification doesn't show the app icon [\#111](https://github.com/phonegap/phonegap-plugin-push/issues/111)
- Issue with plugin facebook connect [\#107](https://github.com/phonegap/phonegap-plugin-push/issues/107)
- Cordova Support [\#99](https://github.com/phonegap/phonegap-plugin-push/issues/99)
- Uncaught ReferenceError: cordova is not defined, http://localhost:8100/lib/push.js, Line: 7 [\#98](https://github.com/phonegap/phonegap-plugin-push/issues/98)
- Notifications never received on Android [\#96](https://github.com/phonegap/phonegap-plugin-push/issues/96)
- How know the way the app was launched [\#95](https://github.com/phonegap/phonegap-plugin-push/issues/95)
- Android, example doesn't work when it goes into background [\#94](https://github.com/phonegap/phonegap-plugin-push/issues/94)
- Utilizing push plugin [\#91](https://github.com/phonegap/phonegap-plugin-push/issues/91)

## [1.2.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.2) (2015-08-31)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.1...1.2.2)

**Closed issues:**

- PushPlugin notification icon is too big [\#88](https://github.com/phonegap/phonegap-plugin-push/issues/88)

## [1.2.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.1) (2015-08-31)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.0...1.2.1)

**Implemented enhancements:**

- Question about GCM Notifications and data in the message payload [\#87](https://github.com/phonegap/phonegap-plugin-push/issues/87)

**Fixed bugs:**

- Notification callback for pushes without a message [\#80](https://github.com/phonegap/phonegap-plugin-push/issues/80)

**Closed issues:**

- Android: No notification displayed on device. Notification event never called. [\#86](https://github.com/phonegap/phonegap-plugin-push/issues/86)
- it seem no wp8 version for now [\#56](https://github.com/phonegap/phonegap-plugin-push/issues/56)

## [1.2.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.0) (2015-08-25)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.1...1.2.0)

**Implemented enhancements:**

- Implement Inbox style for Android [\#74](https://github.com/phonegap/phonegap-plugin-push/issues/74)
- multi-line text support [\#63](https://github.com/phonegap/phonegap-plugin-push/issues/63)

**Fixed bugs:**

- Pushes being deleted from notification bar when cold start [\#67](https://github.com/phonegap/phonegap-plugin-push/issues/67)

**Closed issues:**

- oficial push plugin and windows and wp8 compatibility [\#71](https://github.com/phonegap/phonegap-plugin-push/issues/71)
- On Android, GCMIntentService.onError\(\) doesn't get passed to the JavaScript "error" event [\#65](https://github.com/phonegap/phonegap-plugin-push/issues/65)
- Android: add property to vibrate phone on received notification [\#61](https://github.com/phonegap/phonegap-plugin-push/issues/61)
- push.on =\> "registration" will trigger twice times that only in iOS [\#57](https://github.com/phonegap/phonegap-plugin-push/issues/57)

## [1.1.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.1) (2015-07-27)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.0) (2015-07-27)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.1...1.1.0)

**Implemented enhancements:**

- iOS doesn't add foreground key [\#41](https://github.com/phonegap/phonegap-plugin-push/issues/41)
- Android: Notification icon problem [\#20](https://github.com/phonegap/phonegap-plugin-push/issues/20)
- iOS badge number [\#18](https://github.com/phonegap/phonegap-plugin-push/issues/18)
- How i can set icons for push notifications in status bar and push view in android [\#14](https://github.com/phonegap/phonegap-plugin-push/issues/14)
- Support Win8.1 + Phone 8.1 Universal Apps \(WNS\), drop support for WP8.0 \(MPNS\) [\#13](https://github.com/phonegap/phonegap-plugin-push/issues/13)

**Fixed bugs:**

- iOS only reads out "aps" payload [\#29](https://github.com/phonegap/phonegap-plugin-push/issues/29)
- Event not fired when in background [\#24](https://github.com/phonegap/phonegap-plugin-push/issues/24)
- Custom notification sound in background mode? [\#17](https://github.com/phonegap/phonegap-plugin-push/issues/17)

**Closed issues:**

- iOS only receives first notification in foreground [\#42](https://github.com/phonegap/phonegap-plugin-push/issues/42)
- Cannot register on iOS [\#30](https://github.com/phonegap/phonegap-plugin-push/issues/30)
- Fix Android paths in src folder [\#23](https://github.com/phonegap/phonegap-plugin-push/issues/23)
- PushNotification not defined [\#21](https://github.com/phonegap/phonegap-plugin-push/issues/21)
- Error trying to remove the plugin [\#19](https://github.com/phonegap/phonegap-plugin-push/issues/19)
- Handling multiple notifications on Android devices  [\#12](https://github.com/phonegap/phonegap-plugin-push/issues/12)
- PGB \(build.phonegap.com\) problem [\#11](https://github.com/phonegap/phonegap-plugin-push/issues/11)
- reporting location via gcm [\#6](https://github.com/phonegap/phonegap-plugin-push/issues/6)

**Merged pull requests:**

- Updating Readme to document toast capable setting [\#47](https://github.com/phonegap/phonegap-plugin-push/pull/47) ([rakatyal](https://github.com/rakatyal))
- fix issue \#41 [\#44](https://github.com/phonegap/phonegap-plugin-push/pull/44) ([Deminetix](https://github.com/Deminetix))
- fix issue \#42 [\#43](https://github.com/phonegap/phonegap-plugin-push/pull/43) ([Deminetix](https://github.com/Deminetix))
- Adding hyperlinks to README [\#40](https://github.com/phonegap/phonegap-plugin-push/pull/40) ([rakatyal](https://github.com/rakatyal))
- Updating Readme [\#37](https://github.com/phonegap/phonegap-plugin-push/pull/37) ([rakatyal](https://github.com/rakatyal))
- Adding windows support to plugin [\#36](https://github.com/phonegap/phonegap-plugin-push/pull/36) ([rakatyal](https://github.com/rakatyal))
- Raghav/update [\#35](https://github.com/phonegap/phonegap-plugin-push/pull/35) ([rakatyal](https://github.com/rakatyal))
- Adding behavior for different notification types [\#28](https://github.com/phonegap/phonegap-plugin-push/pull/28) ([rakatyal](https://github.com/rakatyal))
- Initial commit to add support for windows universal platform [\#15](https://github.com/phonegap/phonegap-plugin-push/pull/15) ([rakatyal](https://github.com/rakatyal))

## [1.0.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.1) (2015-06-08)
[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.0...1.0.1)

**Closed issues:**

- documentation "senderId" correction [\#10](https://github.com/phonegap/phonegap-plugin-push/issues/10)
- add to our ci page [\#9](https://github.com/phonegap/phonegap-plugin-push/issues/9)
- Update installation instructions [\#7](https://github.com/phonegap/phonegap-plugin-push/issues/7)

## [1.0.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.0) (2015-06-05)
**Closed issues:**

- Update code using enabledRemoteNotificationTypes because it is "not supported in iOS 8" [\#8](https://github.com/phonegap/phonegap-plugin-push/issues/8)
- Register method not working [\#4](https://github.com/phonegap/phonegap-plugin-push/issues/4)
- Publish plugin to npm [\#3](https://github.com/phonegap/phonegap-plugin-push/issues/3)
- Update example to use new API [\#2](https://github.com/phonegap/phonegap-plugin-push/issues/2)
- Lowercase Example/ directory [\#1](https://github.com/phonegap/phonegap-plugin-push/issues/1)

\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*


text:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Wait for activity on any curl_multi connection</title>

curl_multi_remove_handle

curl_multi_setopt

cURL Functions

PHP Manual

curl_multi_select

(PHP 5)

curl_multi_select — Wait for activity on any curl_multi connection

Description

   int curl_multi_select
    ( resource $mh
   [, float $timeout = 1.0
  ] )

    Blocks until there is activity on any of the curl_multi connections.

Parameters

mh

A cURL multi handle returned by
curl_multi_init().

timeout

       Time, in seconds, to wait for a response.

Return Values

   On success, returns the number of descriptors contained in
   the descriptor sets.  On failure, this function will return -1 on a select failure or timeout (from the underlying select system call).

See Also

curl_multi_init() - Returns a new cURL multi handle

curl_multi_remove_handle

curl_multi_setopt

cURL Functions

PHP Manual

redpajama_set_name: RedPajamaGithub


text:
/*
 * This file is part of Nucleus, licensed under the MIT License (MIT). See the LICENSE.txt file
 * at the root of this project for more details.
 */
package io.github.nucleuspowered.nucleus.modules.commandlogger.listeners;

import com.google.inject.Inject;
import io.github.nucleuspowered.nucleus.modules.commandlogger.config.CommandLoggerConfig;
import io.github.nucleuspowered.nucleus.modules.commandlogger.services.CommandLoggerHandler;
import io.github.nucleuspowered.nucleus.core.scaffold.listener.ListenerBase;
import io.github.nucleuspowered.nucleus.core.services.INucleusServiceCollection;
import io.github.nucleuspowered.nucleus.core.services.interfaces.IMessageProviderService;
import io.github.nucleuspowered.nucleus.core.services.interfaces.IPlayerDisplayNameService;
import io.github.nucleuspowered.nucleus.core.services.interfaces.IReloadableService;
import io.github.nucleuspowered.nucleus.core.util.CommandNameCache;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.apache.logging.log4j.Logger;
import org.spongepowered.api.Server;
import org.spongepowered.api.SystemSubject;
import org.spongepowered.api.block.entity.CommandBlock;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.vehicle.minecart.CommandBlockMinecart;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
import org.spongepowered.api.event.command.ExecuteCommandEvent;
import org.spongepowered.api.event.lifecycle.StoppingEngineEvent;
import org.spongepowered.api.util.Nameable;
import org.spongepowered.plugin.PluginContainer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import javax.naming.Name;

public class CommandLoggingListener implements IReloadableService.Reloadable, ListenerBase {

    private final CommandLoggerHandler handler;
    private final IMessageProviderService messageProvider;
    private final IPlayerDisplayNameService displayNameProvider;
    private final Logger logger;
    private CommandLoggerConfig c;
    private Set<String> commandsToFilter = new HashSet<>();

    @Inject
    public CommandLoggingListener(final INucleusServiceCollection serviceCollection) {
        this.handler = serviceCollection.getServiceUnchecked(CommandLoggerHandler.class);
        this.c = serviceCollection.configProvider().getModuleConfig(CommandLoggerConfig.class);
        this.messageProvider = serviceCollection.messageProvider();
        this.logger = serviceCollection.logger();
        this.displayNameProvider = serviceCollection.playerDisplayNameService();
    }

    @Listener(order = Order.LAST)
    public void onCommand(final ExecuteCommandEvent.Pre event) {
        final Object source = event.cause().root();
        // Check source.
        final boolean accept;
        if (source instanceof Player) {
            accept = this.c.getLoggerTarget().isLogPlayer();
        } else if (source instanceof CommandBlock || source instanceof CommandBlockMinecart) {
            accept = this.c.getLoggerTarget().isLogCommandBlock();
        } else if (source instanceof SystemSubject) {
            accept = this.c.getLoggerTarget().isLogConsole();
        } else {
            accept = this.c.getLoggerTarget().isLogOther();
        }
        if (!accept) {
            // We're not logging this!
            return;
        }
        final String name = PlainTextComponentSerializer.plainText().serialize(this.displayNameProvider.getName(source, Component.text("unknown")));

        final String command = event.command().toLowerCase();
        final Set<String> commands = CommandNameCache.INSTANCE.getFromCommandAndSource(command, event.commandCause());
        commands.retainAll(this.commandsToFilter);

        // If whitelist, and we have the command, or if not blacklist, and we do not have the command.
        if (this.c.isWhitelist() == !commands.isEmpty()) {
            final String cause;
            if (this.c.isCauseEnhanced()) {
                final List<String> l = event.cause()
                        .all()
                        .stream()
                        .filter(x -> (x instanceof PluginContainer || x instanceof Nameable || x instanceof SystemSubject) && x != source)
                        .map(x -> {
                            if (x instanceof Nameable) {
                                return ((Nameable) x).name();
                            } else if (x instanceof SystemSubject) {
                                return "Server";
                            } else {
                                return "(plugin) " + ((PluginContainer) x).metadata().name();
                            }
                        })
                        .collect(Collectors.toList());
                if (l.isEmpty()) {
                    cause = name;
                } else {
                    final List<String> stack = new ArrayList<>(l);
                    Collections.reverse(stack);
                    cause = String.format("[ %s -> ] %s", String.join(" -> ", stack), name);
                }
            } else {
                cause = name;
            }
            final String message = this.messageProvider.getMessageString("commandlog.message",
                    cause,
                    event.command(),
                    event.arguments());
            this.logger.info(message);
            this.handler.queueEntry(message);
        }
    }

    @Listener
    public void onShutdown(final StoppingEngineEvent<Server> event) {
        try {
            this.handler.onServerShutdown();
        } catch (final IOException e) {
            e.printStackTrace();
        }
    }

    @Override public void onReload(final INucleusServiceCollection serviceCollection) {
        this.c = serviceCollection.configProvider().getModuleConfig(CommandLoggerConfig.class);
        this.commandsToFilter = this.c.getCommandsToFilter().stream().map(String::toLowerCase).collect(Collectors.toSet());
    }
}


text:
////////////////////////////////////////////////////////////
// CANVAS
////////////////////////////////////////////////////////////
var stage
var canvasW=0;
var canvasH=0;

/*!
 *
 * START GAME CANVAS - This is the function that runs to setup game canvas
 *
 */
function initGameCanvas(w,h){
	canvasW=w;
	canvasH=h;
	stage = new createjs.Stage("gameCanvas");

	createjs.Touch.enable(stage);
	stage.enableMouseOver(20);
	stage.mouseMoveOutside = true;

	createjs.Ticker.setFPS(60);
	createjs.Ticker.addEventListener("tick", tick);
}

var canvasContainer, mainContainer, categoryContainer, gameContainer, questionContainer, editContainer, resultContainer;
var bg, logo, startButton, arrowLeft, arrowRight, categoryTxt, categoryTitleTxt, categoryContinueTxt, questionTxt, scoreTxt, timerBar, brainScore, brainResult, replayButton, resultDescTxt, resultScoreTxt, iconFacebook, iconTwitter, iconGoogle, resultShareTxt, loaderData, loaderAnimate, brainCorrectData, brainCorrectAnimate;
$.question={};

/*!
 *
 * BUILD GAME CANVAS ASSERTS - This is the function that runs to build game canvas asserts
 *
 */
function buildGameCanvas(){
	canvasContainer = new createjs.Container();
	mainContainer = new createjs.Container();
	categoryContainer = new createjs.Container();
	gameContainer = new createjs.Container();
	editContainer = new createjs.Container();
	questionContainer = new createjs.Container();
	imageContainer = new createjs.Container();
	resultContainer = new createjs.Container();

	bg = new createjs.Shape();
	bg.graphics.beginFill(backgroundColour).drawRect(0, 0, canvasW, canvasH);

	logo = new createjs.Bitmap(loader.getResult('logo'));

	startButton = new createjs.Text();
	startButton.font = "50px bariol_regularregular";
	startButton.color = "#ffffff";
	startButton.text = loadingText;
	startButton.textAlign = "center";
	startButton.textBaseline='alphabetic';
	startButton.x = canvasW/2;
	startButton.y = canvasH/100*83;

	arrowLeft = new createjs.Bitmap(loader.getResult('arrow'));
	arrowRight = new createjs.Bitmap(loader.getResult('arrow'));
	centerReg(arrowLeft);
	centerReg(arrowRight);

	arrowLeft.x = canvasW/100 * 10;
	arrowRight.x = canvasW/100 * 90;
	arrowLeft.scaleX = -1;
	arrowLeft.y = arrowRight.y = canvasH/2;

	createHitarea(arrowLeft);
	createHitarea(arrowRight);

	categoryTxt = new createjs.Text();
	categoryTxt.font = "70px bariol_regularregular";
	categoryTxt.color = "#ffffff";
	categoryTxt.text = '';
	categoryTxt.textAlign = "center";
	categoryTxt.textBaseline='alphabetic';
	categoryTxt.x = canvasW/2;
	categoryTxt.y = canvasH/100*30;

	categoryTitleTxt = new createjs.Text();
	categoryTitleTxt.font = "140px bariol_regularregular";
	categoryTitleTxt.color = "#ffffff";
	categoryTitleTxt.text = 'RIDDLE';
	categoryTitleTxt.textAlign = "center";
	categoryTitleTxt.textBaseline='alphabetic';
	categoryTitleTxt.x = canvasW/2;
	categoryTitleTxt.y = canvasH/100 * 58;

	categoryContinueTxt = new createjs.Text();
	categoryContinueTxt.font = "50px bariol_regularregular";
	categoryContinueTxt.color = "#ffffff";
	categoryContinueTxt.text = categoryContinueText;
	categoryContinueTxt.textAlign = "center";
	categoryContinueTxt.textBaseline='alphabetic';
	categoryContinueTxt.x = canvasW/2;
	categoryContinueTxt.y = canvasH/100 * 83;

	var _frameW=96;
	var _frameH=33;
	var _frame = {"regX": (_frameW/2), "regY": (_frameH/2), "height": _frameH, "count": 25, "width": _frameW};
	var _animations = {static:{frames: [0]},
						loading:{frames: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24], speed: 1, next:'loading'}};

	loaderData = new createjs.SpriteSheet({
		"images": [loader.getResult("loader").src],
		"frames": _frame,
		"animations": _animations
	});

	loaderAnimate = new createjs.Sprite(loaderData, "static");
	loaderAnimate.framerate = 20;
	loaderAnimate.x = canvasW/2;
	loaderAnimate.y = canvasH/2;

	var _frameW=260;
	var _frameH=250;
	var _frame = {"regX": (_frameW/2), "regY": (_frameH/2), "height": _frameH, "count": 15, "width": _frameW};
	var _animations = {static:{frames: [0]},
						correct:{frames: [1,2,3,4,5,6,7,8,9,10,11,12,13,14], speed: 1, next:'complete'},
						complete:{frames:[14]}};
	//game
	brainCorrectData = new createjs.SpriteSheet({
		"images": [loader.getResult("brainCorrect").src],
		"frames": _frame,
		"animations": _animations
	});

	brainCorrectAnimate = new createjs.Sprite(brainCorrectData, "static");
	brainCorrectAnimate.framerate = 20;
	brainCorrectAnimate.x = canvasW/2;
	brainCorrectAnimate.y = canvasH/2;

	questionTxt = new createjs.Text();
	questionTxt.font = "70px bariol_regularregular";
	questionTxt.color = questionTextColour;
	questionTxt.textAlign = 'left';
	questionTxt.textBaseline='alphabetic';
	questionTxt.x = canvasW/100 * 5;
	questionTxt.y = canvasH/100 * 10;

	scoreTxt = new createjs.Text();
	scoreTxt.font = "70px bariol_regularregular";
	scoreTxt.color = questionTextColour;
	scoreTxt.textAlign = 'right';
	scoreTxt.textBaseline='alphabetic';
	scoreTxt.text = 0;
	scoreTxt.x = canvasW/100 * 85;
	scoreTxt.y = canvasH/100 * 10;

	timerBar = new createjs.Shape();

	brainScore = new createjs.Bitmap(loader.getResult('brainScore'));
	centerReg(brainScore);
	brainScore.x = canvasW/100 * 92;
	brainScore.y = canvasH/100 * 6.5;

	brainResult = new createjs.Bitmap(loader.getResult('brainResult'));
	centerReg(brainResult);
	brainResult.x = canvasW/2;
	brainResult.y = canvasH/100 * 25;

	resultDescTxt = new createjs.Text();
	resultDescTxt.font = "60px bariol_regularregular";
	resultDescTxt.color = "#ffffff";
	resultDescTxt.text = resultTitleText;
	resultDescTxt.textAlign = "center";
	resultDescTxt.textBaseline='alphabetic';
	resultDescTxt.x = canvasW/2;
	resultDescTxt.y = canvasH/100*44;

	resultScoreTxt = new createjs.Text();
	resultScoreTxt.font = "110px bariol_regularregular";
	resultScoreTxt.color = "#ffffff";
	resultScoreTxt.text = 0;
	resultScoreTxt.textAlign = "center";
	resultScoreTxt.textBaseline='alphabetic';
	resultScoreTxt.x = canvasW/2;
	resultScoreTxt.y = canvasH/100*57;

	resultShareTxt = new createjs.Text();
	resultShareTxt.font = "30px bariol_regularregular";
	resultShareTxt.color = "#ffffff";
	resultShareTxt.text = shareText;
	resultShareTxt.textAlign = "center";
	resultShareTxt.textBaseline='alphabetic';
	resultShareTxt.x = canvasW/2;
	resultShareTxt.y = canvasH/100*75;

	iconFacebook = new createjs.Bitmap(loader.getResult('iconFacebook'));
	iconTwitter = new createjs.Bitmap(loader.getResult('iconTwitter'));
	iconGoogle = new createjs.Bitmap(loader.getResult('iconGoogle'));
	centerReg(iconFacebook);
	createHitarea(iconFacebook);
	centerReg(iconTwitter);
	createHitarea(iconTwitter);
	centerReg(iconGoogle);
	createHitarea(iconGoogle);
	iconFacebook.x = canvasW/100*40;
	iconTwitter.x = canvasW/2;
	iconGoogle.x = canvasW/100*60;
	iconFacebook.y = iconTwitter.y = iconGoogle.y = canvasH/100 * 83;

	replayButton = new createjs.Text();
	replayButton.font = "50px bariol_regularregular";
	replayButton.color = "#ffffff";
	replayButton.text = replayButtonText;
	replayButton.textAlign = "center";
	replayButton.textBaseline='alphabetic';
	replayButton.x = canvasW/2;
	replayButton.y = canvasH/100*65;
	replayButton.hitArea = new createjs.Shape(new createjs.Graphics().beginFill("#000").drawRect(-200, -30, 400, 40));

	mainContainer.addChild(logo, startButton);
	categoryContainer.addChild(arrowLeft, arrowRight, categoryTitleTxt, categoryContinueTxt);
	gameContainer.addChild(loaderAnimate, editContainer, questionContainer, questionTxt, brainScore, scoreTxt, timerBar, brainCorrectAnimate);
	resultContainer.addChild(brainResult, resultDescTxt, resultScoreTxt, iconFacebook, iconTwitter, iconGoogle, resultShareTxt, replayButton);
	canvasContainer.addChild(bg, mainContainer, categoryContainer, gameContainer, resultContainer);
	stage.addChild(canvasContainer);

	resizeCanvas();
}

/*!
 *
 * RESIZE GAME CANVAS - This is the function that runs to resize game canvas
 *
 */
function resizeCanvas(){
 	if(canvasContainer!=undefined){
		canvasContainer.scaleX=canvasContainer.scaleY=scalePercent;
	}
}

/*!
 *
 * REMOVE GAME CANVAS - This is the function that runs to remove game canvas
 *
 */
 function removeGameCanvas(){
	 stage.autoClear = true;
	 stage.removeAllChildren();
	 stage.update();
	 createjs.Ticker.removeEventListener("tick", tick);
	 createjs.Ticker.removeEventListener("tick", stage);
 }

/*!
 *
 * CANVAS LOOP - This is the function that runs for canvas loop
 *
 */
function tick(event) {
	stage.update(event);
}

/*!
 *
 * CANVAS MISC FUNCTIONS
 *
 */
function centerReg(obj){
	obj.regX=obj.image.naturalWidth/2;
	obj.regY=obj.image.naturalHeight/2;
}

function createHitarea(obj){
	obj.hitArea = new createjs.Shape(new createjs.Graphics().beginFill("#000").drawRect(0, 0, obj.image.naturalWidth, obj.image.naturalHeight));
}


text:
Option& Option::operator = (const Option& source)
{
	if (this == &source)							//check if current object and argument object are same object
		return *this;

	S = source.S;
	K = source.K;
	r = source.r;
	sig = source.sig;
	b = source.b;
	return *this;
}


text:
gdb=0
valgrind=0
prefix=()

extend() {
    if which "$1" &>/dev/null; then
        prefix+=("$@")
    else
        # bailing out would be counted as a failure by test harnesses,
        # ignore missing programs so that tests can be gracefully skipped
        printf "warning: command '$1' not found\n" >&2
    fi
}

usage() {
    printf "runtest.sh - run an executable test\n"
    printf "usage: runtest.sh [options] <testfile> [test-options]\n"
    printf "\n"
    printf "Options:\n"
    printf "   -g   gdb\n"
    printf "   -h   display help\n"
    printf "   -v   valgrind\n"
}

while getopts cdghlrsv name; do
  case $name in
    g) gdb=1;;
    h) usage; exit;;
    v) valgrind=1;;
  esac
done

[ $gdb -eq 1 ] && extend gdb
[ $valgrind -eq 1 ] && extend valgrind --quiet --leak-check=full \
    --gen-suppressions=no --error-exitcode=123

shift $(($OPTIND - 1)) # remove our options from the stack

prog="$(realpath "$1")"; shift
"${prefix[@]}" "$prog" "$@"


text:
package org.cagrid.dorian;

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.jvnet.jaxb2_commons.lang.Equals;
import org.jvnet.jaxb2_commons.lang.EqualsStrategy;
import org.jvnet.jaxb2_commons.lang.HashCode;
import org.jvnet.jaxb2_commons.lang.HashCodeStrategy;
import org.jvnet.jaxb2_commons.lang.JAXBEqualsStrategy;
import org.jvnet.jaxb2_commons.lang.JAXBHashCodeStrategy;
import org.jvnet.jaxb2_commons.lang.JAXBToStringStrategy;
import org.jvnet.jaxb2_commons.lang.ToString;
import org.jvnet.jaxb2_commons.lang.ToStringStrategy;
import org.jvnet.jaxb2_commons.locator.ObjectLocator;
import org.jvnet.jaxb2_commons.locator.util.LocatorUtils;

/**
 *
Java class for anonymous complex type.
 *
 *
The following schema fragment specifies the expected content contained within this class.
 *
 *

 * <complexType>
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="trustedIdP">
 *           <complexType>
 *             <complexContent>
 *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 <sequence>
 *                   <element ref="{http://cagrid.nci.nih.gov/1/dorian-ifs}TrustedIdP"/>
 *                 </sequence>
 *               </restriction>
 *             </complexContent>
 *           </complexType>
 *         </element>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 *

 *
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "trustedIdP"
})
@XmlRootElement(name = "GetPublishRequest")
public class GetPublishRequest
    implements Serializable, Equals, HashCode, ToString
{

    @XmlElement(required = true)
    protected GetPublishRequest.TrustedIdP trustedIdP;

    /**
     * Gets the value of the trustedIdP property.
     *
     * @return
     *     possible object is
     *     {@link GetPublishRequest.TrustedIdP }
     *
     */
    public GetPublishRequest.TrustedIdP getTrustedIdP() {
        return trustedIdP;
    }

    /**
     * Sets the value of the trustedIdP property.
     *
     * @param value
     *     allowed object is
     *     {@link GetPublishRequest.TrustedIdP }
     *
     */
    public void setTrustedIdP(GetPublishRequest.TrustedIdP value) {
        this.trustedIdP = value;
    }

    public String toString() {
        final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
        final StringBuilder buffer = new StringBuilder();
        append(null, buffer, strategy);
        return buffer.toString();
    }

    public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
        strategy.appendStart(locator, this, buffer);
        appendFields(locator, buffer, strategy);
        strategy.appendEnd(locator, this, buffer);
        return buffer;
    }

    public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
        {
            GetPublishRequest.TrustedIdP theTrustedIdP;
            theTrustedIdP = this.getTrustedIdP();
            strategy.appendField(locator, this, "trustedIdP", buffer, theTrustedIdP);
        }
        return buffer;
    }

    public int hashCode(ObjectLocator locator, HashCodeStrategy strategy) {
        int currentHashCode = 1;
        {
            GetPublishRequest.TrustedIdP theTrustedIdP;
            theTrustedIdP = this.getTrustedIdP();
            currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "trustedIdP", theTrustedIdP), currentHashCode, theTrustedIdP);
        }
        return currentHashCode;
    }

    public int hashCode() {
        final HashCodeStrategy strategy = JAXBHashCodeStrategy.INSTANCE;
        return this.hashCode(null, strategy);
    }

    public boolean equals(ObjectLocator thisLocator, ObjectLocator thatLocator, Object object, EqualsStrategy strategy) {
        if (!(object instanceof GetPublishRequest)) {
            return false;
        }
        if (this == object) {
            return true;
        }
        final GetPublishRequest that = ((GetPublishRequest) object);
        {
            GetPublishRequest.TrustedIdP lhsTrustedIdP;
            lhsTrustedIdP = this.getTrustedIdP();
            GetPublishRequest.TrustedIdP rhsTrustedIdP;
            rhsTrustedIdP = that.getTrustedIdP();
            if (!strategy.equals(LocatorUtils.property(thisLocator, "trustedIdP", lhsTrustedIdP), LocatorUtils.property(thatLocator, "trustedIdP", rhsTrustedIdP), lhsTrustedIdP, rhsTrustedIdP)) {
                return false;
            }
        }
        return true;
    }

    public boolean equals(Object object) {
        final EqualsStrategy strategy = JAXBEqualsStrategy.INSTANCE;
        return equals(null, null, object, strategy);
    }

    /**
     *
Java class for anonymous complex type.
     *
     *
The following schema fragment specifies the expected content contained within this class.
     *
     *

     * <complexType>
     *   <complexContent>
     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       <sequence>
     *         <element ref="{http://cagrid.nci.nih.gov/1/dorian-ifs}TrustedIdP"/>
     *       </sequence>
     *     </restriction>
     *   </complexContent>
     * </complexType>
     *

     *
     *
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "trustedIdP"
    })
    public static class TrustedIdP
        implements Serializable, Equals, HashCode, ToString
    {

        @XmlElement(name = "TrustedIdP", namespace = "http://cagrid.nci.nih.gov/1/dorian-ifs", required = true)
        protected org.cagrid.dorian.model.federation.TrustedIdP trustedIdP;

        /**
         * Gets the value of the trustedIdP property.
         *
         * @return
         *     possible object is
         *     {@link org.cagrid.dorian.model.federation.TrustedIdP }
         *
         */
        public org.cagrid.dorian.model.federation.TrustedIdP getTrustedIdP() {
            return trustedIdP;
        }

        /**
         * Sets the value of the trustedIdP property.
         *
         * @param value
         *     allowed object is
         *     {@link org.cagrid.dorian.model.federation.TrustedIdP }
         *
         */
        public void setTrustedIdP(org.cagrid.dorian.model.federation.TrustedIdP value) {
            this.trustedIdP = value;
        }

        public String toString() {
            final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
            final StringBuilder buffer = new StringBuilder();
            append(null, buffer, strategy);
            return buffer.toString();
        }

        public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
            strategy.appendStart(locator, this, buffer);
            appendFields(locator, buffer, strategy);
            strategy.appendEnd(locator, this, buffer);
            return buffer;
        }

        public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
            {
                org.cagrid.dorian.model.federation.TrustedIdP theTrustedIdP;
                theTrustedIdP = this.getTrustedIdP();
                strategy.appendField(locator, this, "trustedIdP", buffer, theTrustedIdP);
            }
            return buffer;
        }

        public int hashCode(ObjectLocator locator, HashCodeStrategy strategy) {
            int currentHashCode = 1;
            {
                org.cagrid.dorian.model.federation.TrustedIdP theTrustedIdP;
                theTrustedIdP = this.getTrustedIdP();
                currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "trustedIdP", theTrustedIdP), currentHashCode, theTrustedIdP);
            }
            return currentHashCode;
        }

        public int hashCode() {
            final HashCodeStrategy strategy = JAXBHashCodeStrategy.INSTANCE;
            return this.hashCode(null, strategy);
        }

        public boolean equals(ObjectLocator thisLocator, ObjectLocator thatLocator, Object object, EqualsStrategy strategy) {
            if (!(object instanceof GetPublishRequest.TrustedIdP)) {
                return false;
            }
            if (this == object) {
                return true;
            }
            final GetPublishRequest.TrustedIdP that = ((GetPublishRequest.TrustedIdP) object);
            {
                org.cagrid.dorian.model.federation.TrustedIdP lhsTrustedIdP;
                lhsTrustedIdP = this.getTrustedIdP();
                org.cagrid.dorian.model.federation.TrustedIdP rhsTrustedIdP;
                rhsTrustedIdP = that.getTrustedIdP();
                if (!strategy.equals(LocatorUtils.property(thisLocator, "trustedIdP", lhsTrustedIdP), LocatorUtils.property(thatLocator, "trustedIdP", rhsTrustedIdP), lhsTrustedIdP, rhsTrustedIdP)) {
                    return false;
                }
            }
            return true;
        }

        public boolean equals(Object object) {
            final EqualsStrategy strategy = JAXBEqualsStrategy.INSTANCE;
            return equals(null, null, object, strategy);
        }

    }

}


text:
import { get } from 'ember-metal/property_get';
import run from 'ember-metal/run_loop';
import EmberView from 'ember-views/views/view';
import compile from 'ember-template-compiler/system/compile';

import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';

var view, originalViewKeyword;

QUnit.module('Ember.View#createElement', {
  setup() {
    originalViewKeyword = registerKeyword('view',  viewKeyword);
  },
  teardown() {
    run(function() {
      view.destroy();
    });
    resetKeyword('view', originalViewKeyword);
  }
});

QUnit.test('returns the receiver', function() {
  var ret;

  view = EmberView.create();

  run(function() {
    ret = view.createElement();
  });

  equal(ret, view, 'returns receiver');
});

import { test } from 'ember-glimmer/tests/utils/skip-if-glimmer';

test('calls render and turns resultant string into element', function() {
  view = EmberView.create({
    tagName: 'span',
    template: compile('foo')
  });

  equal(get(view, 'element'), null, 'precondition - has no element');
  run(function() {
    view.createElement();
  });

  var elem = get(view, 'element');
  ok(elem, 'has element now');
  equal(elem.innerHTML, 'foo', 'has innerHTML from context');
  equal(elem.tagName.toString().toLowerCase(), 'span', 'has tagName from view');
});


text:
package org.apache.spark.deploy.k8s.features

import io.fabric8.kubernetes.api.model.HasMetadata

import org.apache.spark.deploy.k8s.{KubernetesConf, SparkPod}
import org.apache.spark.deploy.k8s.Constants._
import org.apache.spark.deploy.k8s.KubernetesExecutorSpecificConf
import org.apache.spark.deploy.k8s.features.hadooputils.HadoopBootstrapUtil
import org.apache.spark.internal.Logging

/**
 * This step is responsible for mounting the DT secret for the executors
 */
private[spark] class KerberosConfExecutorFeatureStep(
    kubernetesConf: KubernetesConf[KubernetesExecutorSpecificConf])
  extends KubernetesFeatureConfigStep with Logging {

  private val sparkConf = kubernetesConf.sparkConf
  private val maybeKrb5CMap = sparkConf.getOption(KRB5_CONFIG_MAP_NAME)
  require(maybeKrb5CMap.isDefined, "HADOOP_CONF_DIR ConfigMap not found")

  override def configurePod(pod: SparkPod): SparkPod = {
    logInfo(s"Mounting Resources for Kerberos")
    HadoopBootstrapUtil.bootstrapKerberosPod(
      sparkConf.get(KERBEROS_DT_SECRET_NAME),
      sparkConf.get(KERBEROS_DT_SECRET_KEY),
      sparkConf.get(KERBEROS_SPARK_USER_NAME),
      None,
      None,
      maybeKrb5CMap,
      pod)
  }

  override def getAdditionalPodSystemProperties(): Map[String, String] = Map.empty

  override def getAdditionalKubernetesResources(): Seq[HasMetadata] = Seq.empty[HasMetadata]
}


text:
import { newE2EPage } from '@stencil/core/testing';

test('list: standalone', async () => {
  const page = await newE2EPage({
    url: '/src/components/list/test/standalone?ionic:_testing=true'
  });

  const compare = await page.compareScreenshot();
  expect(compare).toMatchScreenshot();
});


text:
import {Component, OnInit} from "@angular/core";
import {WordBundle} from "../../../../domain/word-bundle";
import {WordAndBundleEditorService} from "../../../component-services/word-and-bundle-editor/word-and-bundle-editor.service";
import {WordBundlePickerService} from "../../../component-services/word-and-bundle-editor/word-bundle-picker/word-bundle-picker.service";
import set = Reflect.set;

@Component({
  selector: 'word-bundle-picker',
  templateUrl: './word-bundle-picker.component.html',
  styleUrls: ['./word-bundle-picker.component.less']
})
export class WordBundlePickerComponent implements OnInit {

  constructor(private wordAndBundleEditorService: WordAndBundleEditorService,
              private wordBundlePickerService: WordBundlePickerService) {
  }

  ngOnInit() {
  }

  addWordBundle() {
    this.wordBundlePickerService.addWordBundle();
  }

  pickWordBundle(wordBundle: WordBundle) {
    this.wordBundlePickerService.pickWordBundle(wordBundle);
  }

  editWordBundle() {
    this.wordBundlePickerService.editWordBundle();
  }
}


text:
User Manual
===========

.. toctree::
   intro
   code-annotation
   :maxdepth: 2
   :caption: Contents:


text:
FROM java:8-jre-alpine

ENV JAVA_APP_JAR frontend-0.0.1-SNAPSHOT-fat.jar

EXPOSE 8080

ADD target/$JAVA_APP_JAR /app/
ADD src/openshift /app/
RUN chmod 777 /app/

WORKDIR /app/
ENTRYPOINT ["sh", "-c"]
CMD ["java -Dvertx.zookeeper.hosts=${ZOOKEEPER_SERVICE_HOST} -jar $JAVA_APP_JAR -cluster -cp ."]


text:
using namespace __sanitizer;

namespace __xray {

Flags xray_flags_dont_use_directly; // use via flags().

void Flags::setDefaults() XRAY_NEVER_INSTRUMENT {
#define XRAY_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;
#include "xray_flags.inc"
#undef XRAY_FLAG
}

void registerXRayFlags(FlagParser *P, Flags *F) XRAY_NEVER_INSTRUMENT {
#define XRAY_FLAG(Type, Name, DefaultValue, Description)                       \
  RegisterFlag(P, #Name, Description, &F->Name);
#include "xray_flags.inc"
#undef XRAY_FLAG
}

// This function, as defined with the help of a macro meant to be introduced at
// build time of the XRay runtime, passes in a statically defined list of
// options that control XRay. This means users/deployments can tweak the
// defaults that override the hard-coded defaults in the xray_flags.inc at
// compile-time using the XRAY_DEFAULT_OPTIONS macro.
const char *useCompilerDefinedFlags() XRAY_NEVER_INSTRUMENT {
#ifdef XRAY_DEFAULT_OPTIONS
  // Do the double-layered string conversion to prevent badly crafted strings
  // provided through the XRAY_DEFAULT_OPTIONS from causing compilation issues
  // (or changing the semantics of the implementation through the macro). This
  // ensures that we convert whatever XRAY_DEFAULT_OPTIONS is defined as a
  // string literal.
  return SANITIZER_STRINGIFY(XRAY_DEFAULT_OPTIONS);
#else
  return "";
#endif
}

void initializeFlags() XRAY_NEVER_INSTRUMENT {
  SetCommonFlagsDefaults();
  auto *F = flags();
  F->setDefaults();

  FlagParser XRayParser;
  registerXRayFlags(&XRayParser, F);
  RegisterCommonFlags(&XRayParser);

  // Use options defaulted at compile-time for the runtime.
  const char *XRayCompileFlags = useCompilerDefinedFlags();
  XRayParser.ParseString(XRayCompileFlags);

  // Override from environment variables.
  XRayParser.ParseString(GetEnv("XRAY_OPTIONS"));

  // Override from command line.
  InitializeCommonFlags();

  if (Verbosity())
    ReportUnrecognizedFlags();

  if (common_flags()->help) {
    XRayParser.PrintFlagDescriptions();
  }
}

} // namespace __xray


text:
Connecting aspiring readers with donors to build a home library of books.

[![Build Status](https://travis-ci.org/scottag99/myhomelibrary.svg?branch=master)](https://travis-ci.org/scottag99/myhomelibrary)

## Development Environment setup

My Home Library is a Ruby on Rails application deployed to a Heroku pipeline. Rails 5, Ruby 2.3.0, and Postgres 9.4(?) are the current framework versions.

### How to use vagrant to deploy My Home Library for development

First you need to have vagrant installed locally:

    https://www.vagrantup.com/downloads.html

Currently, only VirtualBox is configured for deployment. Vagrant can deploy to VMWare Fusion but the plugin requires a separate license so you need VirtualBox:

    https://www.virtualbox.org/wiki/Downloads

##### Application

The current Vagrantfile for the My Home Library app will setup an ubuntu VM that is similar to the Heroku stack that the application will run on

Vagrant will also setup port forwards for 3000 to local 3000 for access to remote app server

##### Deploy

The first time you deploy with Vagrant, an OS image is downloaded and provisioned. Future deploys will only update the application code.

1. Open terminal in same directory of this repo
1. Execute `vagrant up`. This will download the pre-configured linux VM for VirtualBox and run some initialization scripts.
1. In a browser, navigate to http://127.0.0.1:3000/ and the My Home Library splash page should render.
1. You are now ready to code. To execute new migrations, gems, or restart the server, run `vagrant reload`.

##### Environment variables

My Home Library uses `dotenv` to manage environment variables while in development. You will need to create a `.env` file with the keys below. Values can be obtained from the maintainer.

    AUTH0_CLIENT_ID=
    AUTH0_CLIENT_SECRET=

##### Helpful commands:

* `vagrant up` to start the environment.
* `vagrant ssh` to open up a terminal to the server
* `vagrant reload` to run `bundler`, `db:migrate`, and restart the rails server

## Application Flow and Structure

### Process Flow

1. Member of Barbara Bush Houston Literacy Foundation (BBHLF) logs in to Admin area.
1. BBHLF user creates a new organization. This will almost always be a school right now but could expand beyond schools in the future.
1. A user is assigned as a "Volunteer" to the organization. This will be a librarian or teacher in most cases.
1. A new campaign is created for the organization with title like "Fall 2016".
1. The partner assigned above is now able to log in the Volunteer area.
1. The partner works with kids to build their wish list by searching the catalog of books and assigning to the kid's specific wish list.
1. After the wish lists are created, donors can search for lists by school, gender, grade, or teacher. They will not see the child's name.
1. The donor can choose to fund a wish list which will take them to the donation page where the amount for the wish list is pre-populated in the form.
1. Upon successful submission of the form, the transaction reference is recorded and the wish list is marked as "funded"

### Authentication

Authentication is handled by Auth0. Metadata on the Auth0 record marks users as Admin. Before filters on the different area controllers handle verifying access to these areas.

## Running Rails Commands

You can SSH to the Vagrant box if you don't have Rails setup on your local machine and run rails commands from the `/vagrant` directory.

### Developing and Updating React Components

The wish list selection and edit screens use React for the UI elements. You can run a local version of the screen by running

    npm start

This will load a `node` environment on your local machine and allow you to modify the React source files found in `src`. After making needed changes, you need to compile your React components by running:

    npm run build

This will produce a `main.js` file in the `build/static/js` directory. This file needs to be copied to the respective `app/assets/javascripts` directory.

    cp build/static/js/main.j* app/assets/javascripts/


text:
package cmd

import (
	"fmt"
	"io"
	"strings"

	"github.com/spf13/cobra"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

var (
	Version   string
	BuildTime string
)

// TODO maybe give this an Add method which will ensure two command
// with same name aren't added
var subcommandFns = map[string]func(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command{}

func NewRootCommand(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command {
	setupVersionBuild()
	rc := &cobra.Command{
		Use:   "pilosa",
		Short: "Pilosa - A Distributed In-memory Binary Bitmap Index.",
		// TODO - is documentation actually there?
		Long: `Pilosa is a fast index to turbocharge your database.

This binary contains Pilosa itself, as well as common
tools for administering pilosa, importing/exporting data,
backing up, and more. Complete documentation is available
at https://www.pilosa.com/docs/

Version: ` + Version + `
Build Time: ` + BuildTime + "\n",
		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
			v := viper.New()
			err := setAllConfig(v, cmd.Flags(), "PILOSA")
			if err != nil {
				return err
			}

			// return "dry run" error if "dry-run" flag is set
			if ret, err := cmd.Flags().GetBool("dry-run"); ret && err == nil {
				if cmd.Parent() != nil {
					return fmt.Errorf("dry run")
				} else if err != nil {
					return fmt.Errorf("problem getting dry-run flag: %v", err)
				}
			}

			return nil
		},
	}
	rc.PersistentFlags().Bool("dry-run", false, "stop before executing")
	_ = rc.PersistentFlags().MarkHidden("dry-run")
	rc.PersistentFlags().StringP("config", "c", "", "Configuration file to read from.")
	for _, subcomFn := range subcommandFns {
		rc.AddCommand(subcomFn(stdin, stdout, stderr))
	}
	rc.SetOutput(stderr)
	return rc
}

func setupVersionBuild() {
	if Version == "" {
		Version = "v0.0.0"
	}
	if BuildTime == "" {
		BuildTime = "not recorded"
	}
}

// setAllConfig takes a FlagSet to be the definition of all configuration
// options, as well as their defaults. It then reads from the command line, the
// environment, and a config file (if specified), and applies the configuration
// in that priority order. Since each flag in the set contains a pointer to
// where its value should be stored, setAllConfig can directly modify the value
// of each config variable.
//
// setAllConfig looks for environment variables which are capitalized versions
// of the flag names with dashes replaced by underscores, and prefixed with
// envPrefix plus an underscore.
func setAllConfig(v *viper.Viper, flags *pflag.FlagSet, envPrefix string) error {
	// add cmd line flag def to viper
	err := v.BindPFlags(flags)
	if err != nil {
		return err
	}

	// add env to viper
	v.SetEnvPrefix(envPrefix)
	v.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
	v.AutomaticEnv()

	c := v.GetString("config")

	// add config file to viper
	if c != "" {
		v.SetConfigFile(c)
		v.SetConfigType("toml")
		err := v.ReadInConfig()
		if err != nil {
			return fmt.Errorf("error reading configuration file '%s': %v", c, err)
		}
	}

	// set all values from viper
	var flagErr error
	flags.VisitAll(func(f *pflag.Flag) {
		if flagErr != nil {
			return
		}
		var value string
		if f.Value.Type() == "stringSlice" {
			// special handling is needed for stringSlice as v.GetString will
			// always return "" in the case that the value is an actual string
			// slice from a config file rather than a comma separated string
			// from a flag or env var.
			vss := v.GetStringSlice(f.Name)
			value = strings.Join(vss, ",")
		} else {
			value = v.GetString(f.Name)
		}

		if f.Changed {
			// If f.Changed is true, that means the value has already been set
			// by a flag, and we don't need to ask viper for it since the flag
			// is the highest priority. This works around a problem with string
			// slices where f.Value.Set(csvString) would cause the elements of
			// csvString to be appended to the existing value rather than
			// replacing it.
			return
		}
		flagErr = f.Value.Set(value)
	})
	return flagErr
}


text:
{{< layout}}

{{$pageTitle}}Track a passport application{{/pageTitle}}

{{$content}}

You need to ask someone to
confirm your identity

Your old passport is damaged. We can't print your new passport until your identity is confirmed.

  Continue

Your application history

          Application received
          10:05am on 5 September 2017

          Application submitted
          10:03am on 5 September 2017

    Sign out
{{/content}}

{{/ layout}}


text:
layout: organization
category: local

title: Staying Alive Foundation
impact_area: Health
keywords:
location_services:
location_offices:
website: www.stayingalive.org

description:
mission: |
  Launched in 1998, Staying Alive is a multimedia global HIV and AIDS prevention campaign that challenges stigma and discrimination associated with HIV and AIDS as well as empowers young people to protect themselves from infection.

cash_grants:
grants:
service_opp:
services:

learn:
cont_relationship:

salutation:
first_name:
last_name:
title_contact_person:

city: New York
state: NY
address: |
  1515 Broadway Suite 4769
  New York NY 10036
lat: 40.757256
lng: -73.985793
phone: 212-846-6994
ext:
fax: 212-846-1307
email:
preferred_contact:
contact_person_intro:
---