From 2113f815bd0daee8a52917014e54508503eea4cf Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Mon, 18 Mar 2013 09:35:36 -0500 Subject: [PATCH] First revision --- .gitignore | 11 + android/AndroidManifest.xml | 49 + android/ant.properties | 19 + android/assets/www | 1 + android/build.xml | 92 + android/cordova/appinfo.jar | Bin 0 -> 1579 bytes android/cordova/build | 24 + android/cordova/clean | 24 + android/cordova/cordova | 167 + android/cordova/log | 24 + android/cordova/release | 24 + android/cordova/run | 24 + android/gen/R.java.d | 15 + .../pointswatcher/BuildConfig.java | 6 + .../com/moparisthebest/pointswatcher/R.java | 25 + android/libs/cordova-2.5.0.jar | Bin 0 -> 240800 bytes android/libs/cordova-2.5.0.js | 6461 + android/local.properties | 10 + android/proguard-project.txt | 20 + android/project.properties | 14 + android/res/drawable-hdpi/icon.png | 1 + android/res/drawable-ldpi/icon.png | 1 + android/res/drawable-mdpi/icon.png | 1 + android/res/drawable-xhdpi/icon.png | 1 + android/res/drawable/icon.png | 1 + android/res/layout/main.xml | 13 + android/res/values/strings.xml | 4 + android/res/xml/config.xml | 48 + .../pointswatcher/PointsWatcher.java | 36 + blackberry/blackberry.xml | 456 + blackberry/build.xml | 160 + blackberry/cordova/build | 44 + blackberry/cordova/run | 43 + .../lib/ant-contrib/ant-contrib-1.0b3.jar | Bin 0 -> 224277 bytes .../ext-air/Cordova_Network/library.xml | 40 + .../src/org/apache/cordova/network/Network.as | 88 + .../ext-qnx/org.apache.cordova/client.js | 16 + .../ext-qnx/org.apache.cordova/index.js | 34 + .../ext-qnx/org.apache.cordova/manifest.json | 5 + .../lib/cordova.2.5.0/ext-qnx/readme.md | 1 + .../lib/cordova.2.5.0/ext/cordova.2.5.0.jar | Bin 0 -> 185082 bytes .../cordova.2.5.0/javascript/cordova-2.5.0.js | 10569 + blackberry/playbook.xml | 338 + blackberry/project.properties | 137 + blackberry/qnx.xml | 336 + blackberry/res/config.xml | 112 + blackberry/www | 1 + images/convert.sh | 71 + images/icon.svg | 132 + .../sansation/SansationBoldItalicWebfont.eot | Bin 0 -> 21056 bytes .../sansation/SansationBoldItalicWebfont.svg | 145 + .../sansation/SansationBoldItalicWebfont.ttf | Bin 0 -> 20852 bytes .../sansation/SansationBoldItalicWebfont.woff | Bin 0 -> 12904 bytes .../fonts/sansation/SansationBoldWebfont.eot | Bin 0 -> 18364 bytes .../fonts/sansation/SansationBoldWebfont.svg | 145 + .../fonts/sansation/SansationBoldWebfont.ttf | Bin 0 -> 18188 bytes .../fonts/sansation/SansationBoldWebfont.woff | Bin 0 -> 11140 bytes .../sansation/SansationItalicWebfont.eot | Bin 0 -> 21412 bytes .../sansation/SansationItalicWebfont.svg | 145 + .../sansation/SansationItalicWebfont.ttf | Bin 0 -> 21228 bytes .../sansation/SansationItalicWebfont.woff | Bin 0 -> 13004 bytes .../sansation/SansationLightItalicWebfont.eot | Bin 0 -> 21640 bytes .../sansation/SansationLightItalicWebfont.svg | 145 + .../sansation/SansationLightItalicWebfont.ttf | Bin 0 -> 21408 bytes .../SansationLightItalicWebfont.woff | Bin 0 -> 13060 bytes .../fonts/sansation/SansationLightWebfont.eot | Bin 0 -> 18584 bytes .../fonts/sansation/SansationLightWebfont.svg | 145 + .../fonts/sansation/SansationLightWebfont.ttf | Bin 0 -> 18380 bytes .../sansation/SansationLightWebfont.woff | Bin 0 -> 11120 bytes .../sansation/SansationRegularWebfont.eot | Bin 0 -> 18356 bytes .../sansation/SansationRegularWebfont.svg | 145 + .../sansation/SansationRegularWebfont.ttf | Bin 0 -> 18168 bytes .../sansation/SansationRegularWebfont.woff | Bin 0 -> 10944 bytes www/assets/fonts/sansation/demo.html | 58 + www/assets/fonts/sansation/license.txt | 18 + www/assets/fonts/sansation/stylesheet.css | 76 + www/assets/graphics/backArrow.png | Bin 0 -> 450 bytes www/assets/graphics/bread.png | Bin 0 -> 580 bytes www/assets/graphics/calculator.svg | 3 + www/assets/graphics/info.png | Bin 0 -> 1133 bytes www/assets/graphics/moreDisclosure.png | Bin 0 -> 501 bytes www/assets/graphics/notebook.svg | 10 + www/assets/graphics/search.png | Bin 0 -> 947 bytes www/assets/graphics/settings.svg | 8 + www/assets/graphics/wheatBg.png | Bin 0 -> 21127 bytes www/assets/graphics/wheatBgNoColor.png | Bin 0 -> 18621 bytes www/assets/styles.css | 402 + www/config.xml | 119 + www/icon.png | Bin 0 -> 10833 bytes www/index.html | 30 + www/js/application.js | 298 + www/js/libs/css/activityIndicator.css | 15 + www/js/libs/iscroll.js | 1078 + www/js/libs/jquery.animateEnhanced.js | 779 + www/js/libs/jquery1.7.1.js | 9266 + www/js/libs/mustache.js | 536 + www/js/libs/noClickDelay.js | 54 + .../splitviewnavigator/splitviewnavigator.css | 83 + .../splitviewnavigator/splitviewnavigator.js | 185 + www/js/viewAssembler.js | 181 + www/js/viewnavigator/viewnavigator.css | 149 + www/js/viewnavigator/viewnavigator.js | 377 + www/res/icon/android/icon-36-ldpi.png | Bin 0 -> 2820 bytes www/res/icon/android/icon-48-mdpi.png | Bin 0 -> 4130 bytes www/res/icon/android/icon-72-hdpi.png | Bin 0 -> 7356 bytes www/res/icon/android/icon-96-xhdpi.png | Bin 0 -> 10833 bytes www/res/icon/blackberry/icon-80.png | Bin 0 -> 8531 bytes www/res/icon/ios/icon-57-2x.png | Bin 0 -> 14809 bytes www/res/icon/ios/icon-57.png | Bin 0 -> 5475 bytes www/res/icon/ios/icon-72-2x.png | Bin 0 -> 22640 bytes www/res/icon/ios/icon-72.png | Bin 0 -> 7356 bytes www/res/icon/webos/icon-64.png | Bin 0 -> 6381 bytes www/res/icon/windows-phone/icon-173.png | Bin 0 -> 30971 bytes www/res/icon/windows-phone/icon-48.png | Bin 0 -> 4130 bytes .../screen/android/screen-hdpi-portrait.png | Bin 0 -> 30932 bytes .../screen/android/screen-ldpi-portrait.png | Bin 0 -> 26333 bytes .../screen/android/screen-mdpi-portrait.png | Bin 0 -> 27439 bytes .../screen/android/screen-xhdpi-portrait.png | Bin 0 -> 35819 bytes www/res/screen/blackberry/screen-225.png | Bin 0 -> 48240 bytes www/res/screen/ios/screen-ipad-landscape.png | Bin 0 -> 33377 bytes www/res/screen/ios/screen-ipad-portrait.png | Bin 0 -> 34018 bytes .../screen/ios/screen-iphone-portrait-2x.png | Bin 0 -> 33067 bytes www/res/screen/ios/screen-iphone-portrait.png | Bin 0 -> 27439 bytes .../screen/windows-phone/screen-portrait.jpg | Bin 0 -> 16872 bytes www/screen.png | Bin 0 -> 30932 bytes www/values.js | 167706 +++++++++++++++ www/views/aboutViewTemplate.html | 41 + www/views/calcAllowanceViewTemplate.html | 22 + www/views/calcPointsViewTemplate.html | 21 + www/views/defaultViewTemplate.html | 10 + www/views/pointsViewTemplate.html | 18 + www/views/searchResultsViewTemplate.html | 21 + www/views/searchViewTemplate.html | 11 + 133 files changed, 202144 insertions(+) create mode 100644 .gitignore create mode 100644 android/AndroidManifest.xml create mode 100644 android/ant.properties create mode 120000 android/assets/www create mode 100644 android/build.xml create mode 100644 android/cordova/appinfo.jar create mode 100755 android/cordova/build create mode 100755 android/cordova/clean create mode 100755 android/cordova/cordova create mode 100755 android/cordova/log create mode 100755 android/cordova/release create mode 100755 android/cordova/run create mode 100644 android/gen/R.java.d create mode 100644 android/gen/com/moparisthebest/pointswatcher/BuildConfig.java create mode 100644 android/gen/com/moparisthebest/pointswatcher/R.java create mode 100644 android/libs/cordova-2.5.0.jar create mode 100644 android/libs/cordova-2.5.0.js create mode 100644 android/local.properties create mode 100644 android/proguard-project.txt create mode 100644 android/project.properties create mode 120000 android/res/drawable-hdpi/icon.png create mode 120000 android/res/drawable-ldpi/icon.png create mode 120000 android/res/drawable-mdpi/icon.png create mode 120000 android/res/drawable-xhdpi/icon.png create mode 120000 android/res/drawable/icon.png create mode 100644 android/res/layout/main.xml create mode 100644 android/res/values/strings.xml create mode 100644 android/res/xml/config.xml create mode 100644 android/src/com/moparisthebest/pointswatcher/PointsWatcher.java create mode 100644 blackberry/blackberry.xml create mode 100644 blackberry/build.xml create mode 100755 blackberry/cordova/build create mode 100755 blackberry/cordova/run create mode 100644 blackberry/lib/ant-contrib/ant-contrib-1.0b3.jar create mode 100644 blackberry/lib/cordova.2.5.0/ext-air/Cordova_Network/library.xml create mode 100644 blackberry/lib/cordova.2.5.0/ext-air/Cordova_Network/src/org/apache/cordova/network/Network.as create mode 100644 blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/client.js create mode 100644 blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/index.js create mode 100644 blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/manifest.json create mode 100644 blackberry/lib/cordova.2.5.0/ext-qnx/readme.md create mode 100644 blackberry/lib/cordova.2.5.0/ext/cordova.2.5.0.jar create mode 100644 blackberry/lib/cordova.2.5.0/javascript/cordova-2.5.0.js create mode 100644 blackberry/playbook.xml create mode 100644 blackberry/project.properties create mode 100644 blackberry/qnx.xml create mode 100644 blackberry/res/config.xml create mode 120000 blackberry/www create mode 100755 images/convert.sh create mode 100644 images/icon.svg create mode 100755 www/assets/fonts/sansation/SansationBoldItalicWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationBoldItalicWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationBoldItalicWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationBoldItalicWebfont.woff create mode 100755 www/assets/fonts/sansation/SansationBoldWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationBoldWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationBoldWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationBoldWebfont.woff create mode 100755 www/assets/fonts/sansation/SansationItalicWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationItalicWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationItalicWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationItalicWebfont.woff create mode 100755 www/assets/fonts/sansation/SansationLightItalicWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationLightItalicWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationLightItalicWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationLightItalicWebfont.woff create mode 100755 www/assets/fonts/sansation/SansationLightWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationLightWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationLightWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationLightWebfont.woff create mode 100755 www/assets/fonts/sansation/SansationRegularWebfont.eot create mode 100755 www/assets/fonts/sansation/SansationRegularWebfont.svg create mode 100755 www/assets/fonts/sansation/SansationRegularWebfont.ttf create mode 100755 www/assets/fonts/sansation/SansationRegularWebfont.woff create mode 100755 www/assets/fonts/sansation/demo.html create mode 100755 www/assets/fonts/sansation/license.txt create mode 100755 www/assets/fonts/sansation/stylesheet.css create mode 100644 www/assets/graphics/backArrow.png create mode 100644 www/assets/graphics/bread.png create mode 100755 www/assets/graphics/calculator.svg create mode 100644 www/assets/graphics/info.png create mode 100644 www/assets/graphics/moreDisclosure.png create mode 100755 www/assets/graphics/notebook.svg create mode 100644 www/assets/graphics/search.png create mode 100755 www/assets/graphics/settings.svg create mode 100644 www/assets/graphics/wheatBg.png create mode 100644 www/assets/graphics/wheatBgNoColor.png create mode 100755 www/assets/styles.css create mode 100644 www/config.xml create mode 100644 www/icon.png create mode 100644 www/index.html create mode 100644 www/js/application.js create mode 100644 www/js/libs/css/activityIndicator.css create mode 100755 www/js/libs/iscroll.js create mode 100755 www/js/libs/jquery.animateEnhanced.js create mode 100644 www/js/libs/jquery1.7.1.js create mode 100755 www/js/libs/mustache.js create mode 100644 www/js/libs/noClickDelay.js create mode 100644 www/js/splitviewnavigator/splitviewnavigator.css create mode 100644 www/js/splitviewnavigator/splitviewnavigator.js create mode 100644 www/js/viewAssembler.js create mode 100644 www/js/viewnavigator/viewnavigator.css create mode 100644 www/js/viewnavigator/viewnavigator.js create mode 100644 www/res/icon/android/icon-36-ldpi.png create mode 100644 www/res/icon/android/icon-48-mdpi.png create mode 100644 www/res/icon/android/icon-72-hdpi.png create mode 100644 www/res/icon/android/icon-96-xhdpi.png create mode 100644 www/res/icon/blackberry/icon-80.png create mode 100644 www/res/icon/ios/icon-57-2x.png create mode 100644 www/res/icon/ios/icon-57.png create mode 100644 www/res/icon/ios/icon-72-2x.png create mode 100644 www/res/icon/ios/icon-72.png create mode 100644 www/res/icon/webos/icon-64.png create mode 100644 www/res/icon/windows-phone/icon-173.png create mode 100644 www/res/icon/windows-phone/icon-48.png create mode 100644 www/res/screen/android/screen-hdpi-portrait.png create mode 100644 www/res/screen/android/screen-ldpi-portrait.png create mode 100644 www/res/screen/android/screen-mdpi-portrait.png create mode 100644 www/res/screen/android/screen-xhdpi-portrait.png create mode 100644 www/res/screen/blackberry/screen-225.png create mode 100644 www/res/screen/ios/screen-ipad-landscape.png create mode 100644 www/res/screen/ios/screen-ipad-portrait.png create mode 100644 www/res/screen/ios/screen-iphone-portrait-2x.png create mode 100644 www/res/screen/ios/screen-iphone-portrait.png create mode 100644 www/res/screen/windows-phone/screen-portrait.jpg create mode 100644 www/screen.png create mode 100644 www/values.js create mode 100644 www/views/aboutViewTemplate.html create mode 100644 www/views/calcAllowanceViewTemplate.html create mode 100644 www/views/calcPointsViewTemplate.html create mode 100644 www/views/defaultViewTemplate.html create mode 100644 www/views/pointsViewTemplate.html create mode 100644 www/views/searchResultsViewTemplate.html create mode 100644 www/views/searchViewTemplate.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f29a65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# editor backup files +*~ + +android/bin +blackberry/build +images/markets + +# idea project files +.idea/ + + diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 0000000..c9ef5ff --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/android/ant.properties b/android/ant.properties new file mode 100644 index 0000000..9a76e50 --- /dev/null +++ b/android/ant.properties @@ -0,0 +1,19 @@ +# This file is used to override default values used by the Ant build system. +# +# This file must be checked into Version Control Systems, as it is +# integral to the build system of your project. + +# This file is only used by the Ant script. + +# You can use this to override default values such as +# 'source.dir' for the location of your java source folder and +# 'out.dir' for the location of your output folder. + +# You can also use it define how the release builds are signed by declaring +# the following properties: +# 'key.store' for the location of your keystore and +# 'key.alias' for the name of the key to use. +# The password will be asked during the build when you use the 'release' target. + +key.store=/home/mopar/.config/android.keystore +key.alias=android_market diff --git a/android/assets/www b/android/assets/www new file mode 120000 index 0000000..933a599 --- /dev/null +++ b/android/assets/www @@ -0,0 +1 @@ +../../www \ No newline at end of file diff --git a/android/build.xml b/android/build.xml new file mode 100644 index 0000000..0c79a02 --- /dev/null +++ b/android/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/cordova/appinfo.jar b/android/cordova/appinfo.jar new file mode 100644 index 0000000000000000000000000000000000000000..af1bde61eeb8a736e99441fdf50b50b48f07d88f GIT binary patch literal 1579 zcmWIWW@Zs#;Nak3@N_A1Vn70%3@i-3t|5-Po_=on|4uP5Ff#;rvvYt{FhP|C;M6Pv zQ~}rQ>*(j{<{BKL=j-;__snS@Z(Y5MyxzK6=gyqp9At3C_`%a6JuhD!Pv48Bt5`T^ zyp}v7Ev1$5LtItu`4TOQ=i;JI#8sy;OwImO^iwVE*-NYEDq`Z%nigUrPg2yHQ*Az9 z`c%2IVkg*jdY5l^#Q^P21Y+E-69vjT78K-UCMT9;=I43lrRD1-=Oh*v_l8D?ONWa5 z^UE{#S=QF(y&yt2G>b!}IUri`#;L7~6c-$f($R7*;&7fk^JUDAil5s1KE=ofZCD*^ z_j`8CD?8zgokvt7wbRevOpo7}f8MV8-=E*#!x@f!=x$=k)BeFxexxY;;BkrmWTr~V z$%RKgcJ@>!)!X;^8>%Ko9rKY+GgMEGJH#wG|71kK2g`i|-i`;Ax`d{Qlq5zTn$8vE zRJU|N_=!nPc6X+2Toll;{^+xXJ^3v)OCH#+@%k}M(JXUDTY10Y9J!hk0y8&i%~1?A z@QM5KTKZ1pMf0pBFSnE)e;S;2bYst{MR`)Q?|hZmb*VMC*8O_cuE?ui^O9#=-P2LL z^vTPo>fO6!cX(ImB=$}a@;Kz4`D$09QOR=o?PcL!)80?{xkqrxyiIRs1zxi~Y$Sfh zS6e+MWKTaM*Q!U>HR~U-ukluR%63XfOUuGcQf0Qmi_mq8x^&qh^{bEdJ$$>`V1w?% z&Mv7}JhIb*ua+G@6?Jq~cCl&Pb2Y=@uWHvhgVzf)2Dh@#er5U~YbWFMg@1WJEbYyW zQxl(-%upEmQKXMcd>%{uQ9d?FrVG`#;`T0Momvu;YdOJq+Rn_7TJ;6y+ryu2s|eWG z&DbW#==)>GljvDhUw+LAVE@VM9UWn{)OW7_^DX&TwC*T=vr|1C%EPp+U03w?kBMit z#`sx(4=SGGf7Jg+q-&Id{~YcAlCRFH@VxB)lD2k}zE@>W!n{@amcMxlC%@O5v2OY7 z)T*6_UmiS^TKk#Dv&gRegh9bfi6?jd?|0+5_@G7c@~Vy8%dMXtnaWhY?UL{ft?zzi z>wjxawUd7KqhZmC6uYN^t9b7#vuux2+Oc5Kn?Kp)Anny z^HYs4)0u58S6bq;JvT2*V$<}h)O@L+Z)+xVUzwT5$oto1xv;=~gBdd_w%l8Ew{((8 zw!m2%_G&kN9{CGW+*7VE=$L)mB-QYQ$z+EA0t*iXFh5K(yX=rs_=6*`t(km7-YQ{-_g=h|wZwc{j(=RPLZp?8JM&!j z7n*6(FYFw4Pq1a5(7NYaPl5Xex5qoRCxrfT;>^4#t|j6y@A%aQe-`r#ZZ*P3j9hK< zg<3t8Hns_VI+q~pyy8N!=;0eq)6~9mxSl-N#>T%mh4I%0*MEwSC$uPbo|)0|hMCjy zSGFLRT@!!*>Fs_eomJS4*Vna9;_MgWyYQWWuJa2-phP&_X%&5)C+wc*+@T*=(kMOOUhL9)u&K`fcHNE^R-I%9utY-w3i-#swdziB@F#Kf)l{}10 zA`Ga-Dy+-|6|1NKUQU7vS#+()1sbSOMF3kM6Rs7hh($L6* 0) { print }}' | grep device` + if [ -z "$devices" ] ; then + echo "1" + else + echo "0" + fi +} + +function emulate { + declare -a avd_list=($(android list avd | grep "Name:" | cut -f 2 -d ":" | xargs)) + # we need to start adb-server + adb start-server 1>/dev/null + + # Do not launch an emulator if there is already one running or if a device is attached + if [ $(check_devices) == 0 ] ; then + return + fi + + local avd_id="1000" #FIXME: hopefully user does not have 1000 AVDs + # User has no AVDs + if [ ${#avd_list[@]} == 0 ] + then + echo "You don't have any Android Virtual Devices. Please create at least one AVD." + echo "android" + fi + # User has only one AVD + if [ ${#avd_list[@]} == 1 ] + then + emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[0]} 1> /dev/null 2>&1 & + # User has more than 1 AVD + elif [ ${#avd_list[@]} -gt 1 ] + then + while [ -z ${avd_list[$avd_id]} ] + do + echo "Choose from one of the following Android Virtual Devices [0 to $((${#avd_list[@]}-1))]:" + for(( i = 0 ; i < ${#avd_list[@]} ; i++ )) + do + echo "$i) ${avd_list[$i]}" + done + read -t 5 -p "> " avd_id + # default value if input timeout + if [ $avd_id -eq 1000 ] ; then avd_id=0 ; fi + done + emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[$avd_id]} 1> /dev/null 2>&1 & + fi + +} + +function clean { + ant clean +} +# has to be used independently and not in conjunction with other commands +function log { + adb logcat +} + +function run { + clean && emulate && wait_for_device && install && launch +} + +function install { + + declare -a devices=($(adb devices | awk '/List of devices attached/ { while(getline > 0) { print }}' | grep device | cut -f 1)) + local device_id="1000" #FIXME: hopefully user does not have 1000 AVDs + + if [ ${#devices[@]} == 0 ] + then + # should not reach here. Emulator should launch or device should be attached + echo "Emulator not running or device not attached. Could not install debug package" + exit 70 + fi + + if [ ${#devices[@]} == 1 ] + then + export ANDROID_SERIAL=${devices[0]} + # User has more than 1 AVD + elif [ ${#devices[@]} -gt 1 ] + then + while [ -z ${devices[$device_id]} ] + do + echo "Choose from one of the following devices/emulators [0 to $((${#devices[@]}-1))]:" + for(( i = 0 ; i < ${#devices[@]} ; i++ )) + do + echo "$i) ${devices[$i]}" + done + read -t 5 -p "> " device_id + # default value if input timeout + if [ $device_id -eq 1000 ] ; then device_id=0 ; fi + done + export ANDROID_SERIAL=${devices[$device_id]} + fi + + ant debug install +} + +function clean_after_build(){ + rm -f assets/www/cordova.js +} + +function build { + trap clean_after_build EXIT + cp libs/cordova-2.5.0.js assets/www/cordova.js + ant debug +} + +function release { + trap clean_after_build EXIT + cp libs/cordova-2.5.0.js assets/www/cordova.js + ant release +} + +function wait_for_device { + local i="0" + echo -n "Waiting for device..." + + while [ $i -lt 300 ] + do + if [ $(check_devices) -eq 0 ] + then + break + else + sleep 1 + i=$[i+1] + echo -n "." + fi + done + # Device timeout: emulator has not started in time or device not attached + if [ $i -eq 300 ] + then + echo "device timeout!" + exit 69 + else + echo "connected!" + fi +} + +function launch { + local launch_str=$(java -jar "$PROJECT_PATH"/cordova/appinfo.jar "$PROJECT_PATH"/AndroidManifest.xml) + adb shell am start -n $launch_str +} + +# TODO parse arguments +(cd "$PROJECT_PATH" && $1) diff --git a/android/cordova/log b/android/cordova/log new file mode 100755 index 0000000..087a200 --- /dev/null +++ b/android/cordova/log @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#!/bin/bash + +set -e + +CORDOVA_PATH=$( cd "$( dirname "$0" )/.." && pwd ) + +bash "$CORDOVA_PATH"/cordova/cordova log diff --git a/android/cordova/release b/android/cordova/release new file mode 100755 index 0000000..73d873e --- /dev/null +++ b/android/cordova/release @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#!/bin/bash + +set -e + +CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd ) + +bash "$CORDOVA_PATH"/cordova release diff --git a/android/cordova/run b/android/cordova/run new file mode 100755 index 0000000..840a8d5 --- /dev/null +++ b/android/cordova/run @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#!/bin/bash + +set -e + +CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd ) + +bash "$CORDOVA_PATH"/cordova run diff --git a/android/gen/R.java.d b/android/gen/R.java.d new file mode 100644 index 0000000..71aab67 --- /dev/null +++ b/android/gen/R.java.d @@ -0,0 +1,15 @@ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/gen/com/moparisthebest/pointswatcher/R.java \ + : /home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/drawable-mdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/drawable-xhdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/layout/main.xml \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/drawable-hdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/drawable/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/xml/config.xml \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/values/strings.xml \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/res/drawable-ldpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/res/drawable-mdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/res/drawable-xhdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/res/drawable-hdpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/res/drawable/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/res/drawable-ldpi/icon.png \ +/home/mopar/devel/priv/pointsplus/PointsWatcher/android/bin/AndroidManifest.xml \ diff --git a/android/gen/com/moparisthebest/pointswatcher/BuildConfig.java b/android/gen/com/moparisthebest/pointswatcher/BuildConfig.java new file mode 100644 index 0000000..9cc7317 --- /dev/null +++ b/android/gen/com/moparisthebest/pointswatcher/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package com.moparisthebest.pointswatcher; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/android/gen/com/moparisthebest/pointswatcher/R.java b/android/gen/com/moparisthebest/pointswatcher/R.java new file mode 100644 index 0000000..8010672 --- /dev/null +++ b/android/gen/com/moparisthebest/pointswatcher/R.java @@ -0,0 +1,25 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.moparisthebest.pointswatcher; + +public final class R { + public static final class attr { + } + public static final class drawable { + public static final int icon=0x7f020000; + } + public static final class layout { + public static final int main=0x7f030000; + } + public static final class string { + public static final int app_name=0x7f050000; + } + public static final class xml { + public static final int config=0x7f040000; + } +} diff --git a/android/libs/cordova-2.5.0.jar b/android/libs/cordova-2.5.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..1c3b9f078501a1d512653b5c22b8a9e9d4657d25 GIT binary patch literal 240800 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ΝpIo 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

Uf9p5ftN2Ckl&W+o8B+#Tk-;uV!psh*_G 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¬Lb6@uCFB8FQr;YHMEw@*(_6YCY{tuPK+GNX}h56 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

VPXD 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

%F;YFI@7!D>x1Bm`zP7*?uz%$_r5la+@Bz%oZiw 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 z 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 ajT9QnL|~u index into requireStack of modules currently being built. + var inProgressModules = {}; + + function build(module) { + var factory = module.factory; + module.exports = {}; + delete module.factory; + factory(require, module.exports, module); + return module.exports; + } + + require = function (id) { + if (!modules[id]) { + throw "module " + id + " not found"; + } else if (id in inProgressModules) { + var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; + throw "Cycle in require graph: " + cycle; + } + if (modules[id].factory) { + try { + inProgressModules[id] = requireStack.length; + requireStack.push(id); + return build(modules[id]); + } finally { + delete inProgressModules[id]; + requireStack.pop(); + } + } + return modules[id].exports; + }; + + define = function (id, factory) { + if (modules[id]) { + throw "module " + id + " already defined"; + } + + modules[id] = { + id: id, + factory: factory + }; + }; + + define.remove = function (id) { + delete modules[id]; + }; + + define.moduleMap = modules; +})(); + +//Export for use in node +if (typeof module === "object" && typeof require === "function") { + module.exports.require = require; + module.exports.define = define; +} + +// file: lib/cordova.js +define("cordova", function(require, exports, module) { + + +var channel = require('cordova/channel'); + +/** + * Listen for DOMContentLoaded and notify our channel subscribers. + */ +document.addEventListener('DOMContentLoaded', function() { + channel.onDOMContentLoaded.fire(); +}, false); +if (document.readyState == 'complete' || document.readyState == 'interactive') { + channel.onDOMContentLoaded.fire(); +} + +/** + * Intercept calls to addEventListener + removeEventListener and handle deviceready, + * resume, and pause events. + */ +var m_document_addEventListener = document.addEventListener; +var m_document_removeEventListener = document.removeEventListener; +var m_window_addEventListener = window.addEventListener; +var m_window_removeEventListener = window.removeEventListener; + +/** + * Houses custom event handlers to intercept on document + window event listeners. + */ +var documentEventHandlers = {}, + windowEventHandlers = {}; + +document.addEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + if (typeof documentEventHandlers[e] != 'undefined') { + documentEventHandlers[e].subscribe(handler); + } else { + m_document_addEventListener.call(document, evt, handler, capture); + } +}; + +window.addEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + if (typeof windowEventHandlers[e] != 'undefined') { + windowEventHandlers[e].subscribe(handler); + } else { + m_window_addEventListener.call(window, evt, handler, capture); + } +}; + +document.removeEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + // If unsubscribing from an event that is handled by a plugin + if (typeof documentEventHandlers[e] != "undefined") { + documentEventHandlers[e].unsubscribe(handler); + } else { + m_document_removeEventListener.call(document, evt, handler, capture); + } +}; + +window.removeEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + // If unsubscribing from an event that is handled by a plugin + if (typeof windowEventHandlers[e] != "undefined") { + windowEventHandlers[e].unsubscribe(handler); + } else { + m_window_removeEventListener.call(window, evt, handler, capture); + } +}; + +function createEvent(type, data) { + var event = document.createEvent('Events'); + event.initEvent(type, false, false); + if (data) { + for (var i in data) { + if (data.hasOwnProperty(i)) { + event[i] = data[i]; + } + } + } + return event; +} + +if(typeof window.console === "undefined") { + window.console = { + log:function(){} + }; +} + +var cordova = { + define:define, + require:require, + /** + * Methods to add/remove your own addEventListener hijacking on document + window. + */ + addWindowEventHandler:function(event) { + return (windowEventHandlers[event] = channel.create(event)); + }, + addStickyDocumentEventHandler:function(event) { + return (documentEventHandlers[event] = channel.createSticky(event)); + }, + addDocumentEventHandler:function(event) { + return (documentEventHandlers[event] = channel.create(event)); + }, + removeWindowEventHandler:function(event) { + delete windowEventHandlers[event]; + }, + removeDocumentEventHandler:function(event) { + delete documentEventHandlers[event]; + }, + /** + * Retrieve original event handlers that were replaced by Cordova + * + * @return object + */ + getOriginalHandlers: function() { + return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, + 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; + }, + /** + * Method to fire event from native code + * bNoDetach is required for events which cause an exception which needs to be caught in native code + */ + fireDocumentEvent: function(type, data, bNoDetach) { + var evt = createEvent(type, data); + if (typeof documentEventHandlers[type] != 'undefined') { + if( bNoDetach ) { + documentEventHandlers[type].fire(evt); + } + else { + setTimeout(function() { + documentEventHandlers[type].fire(evt); + }, 0); + } + } else { + document.dispatchEvent(evt); + } + }, + fireWindowEvent: function(type, data) { + var evt = createEvent(type,data); + if (typeof windowEventHandlers[type] != 'undefined') { + setTimeout(function() { + windowEventHandlers[type].fire(evt); + }, 0); + } else { + window.dispatchEvent(evt); + } + }, + + /** + * Plugin callback mechanism. + */ + // Randomize the starting callbackId to avoid collisions after refreshing or navigating. + // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. + callbackId: Math.floor(Math.random() * 2000000000), + callbacks: {}, + callbackStatus: { + NO_RESULT: 0, + OK: 1, + CLASS_NOT_FOUND_EXCEPTION: 2, + ILLEGAL_ACCESS_EXCEPTION: 3, + INSTANTIATION_EXCEPTION: 4, + MALFORMED_URL_EXCEPTION: 5, + IO_EXCEPTION: 6, + INVALID_ACTION: 7, + JSON_EXCEPTION: 8, + ERROR: 9 + }, + + /** + * Called by native code when returning successful result from an action. + */ + callbackSuccess: function(callbackId, args) { + try { + cordova.callbackFromNative(callbackId, true, args.status, args.message, args.keepCallback); + } catch (e) { + console.log("Error in error callback: " + callbackId + " = "+e); + } + }, + + /** + * Called by native code when returning error result from an action. + */ + callbackError: function(callbackId, args) { + // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. + // Derive success from status. + try { + cordova.callbackFromNative(callbackId, false, args.status, args.message, args.keepCallback); + } catch (e) { + console.log("Error in error callback: " + callbackId + " = "+e); + } + }, + + /** + * Called by native code when returning the result from an action. + */ + callbackFromNative: function(callbackId, success, status, message, keepCallback) { + var callback = cordova.callbacks[callbackId]; + if (callback) { + if (success && status == cordova.callbackStatus.OK) { + callback.success && callback.success(message); + } else if (!success) { + callback.fail && callback.fail(message); + } + + // Clear callback if not expecting any more results + if (!keepCallback) { + delete cordova.callbacks[callbackId]; + } + } + }, + addConstructor: function(func) { + channel.onCordovaReady.subscribe(function() { + try { + func(); + } catch(e) { + console.log("Failed to run constructor: " + e); + } + }); + } +}; + +// Register pause, resume and deviceready channels as events on document. +channel.onPause = cordova.addDocumentEventHandler('pause'); +channel.onResume = cordova.addDocumentEventHandler('resume'); +channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); + +module.exports = cordova; + +}); + +// file: lib/common/argscheck.js +define("cordova/argscheck", function(require, exports, module) { + +var exec = require('cordova/exec'); +var utils = require('cordova/utils'); + +var moduleExports = module.exports; + +var typeMap = { + 'A': 'Array', + 'D': 'Date', + 'N': 'Number', + 'S': 'String', + 'F': 'Function', + 'O': 'Object' +}; + +function extractParamName(callee, argIndex) { + return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; +} + +function checkArgs(spec, functionName, args, opt_callee) { + if (!moduleExports.enableChecks) { + return; + } + var errMsg = null; + var typeName; + for (var i = 0; i < spec.length; ++i) { + var c = spec.charAt(i), + cUpper = c.toUpperCase(), + arg = args[i]; + // Asterix means allow anything. + if (c == '*') { + continue; + } + typeName = utils.typeName(arg); + if ((arg === null || arg === undefined) && c == cUpper) { + continue; + } + if (typeName != typeMap[cUpper]) { + errMsg = 'Expected ' + typeMap[cUpper]; + break; + } + } + if (errMsg) { + errMsg += ', but got ' + typeName + '.'; + errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; + // Don't log when running jake test. + if (typeof jasmine == 'undefined') { + console.error(errMsg); + } + throw TypeError(errMsg); + } +} + +function getValue(value, defaultValue) { + return value === undefined ? defaultValue : value; +} + +moduleExports.checkArgs = checkArgs; +moduleExports.getValue = getValue; +moduleExports.enableChecks = true; + + +}); + +// file: lib/common/builder.js +define("cordova/builder", function(require, exports, module) { + +var utils = require('cordova/utils'); + +function each(objects, func, context) { + for (var prop in objects) { + if (objects.hasOwnProperty(prop)) { + func.apply(context, [objects[prop], prop]); + } + } +} + +function clobber(obj, key, value) { + exports.replaceHookForTesting(obj, key); + obj[key] = value; + // Getters can only be overridden by getters. + if (obj[key] !== value) { + utils.defineGetter(obj, key, function() { + return value; + }); + } +} + +function assignOrWrapInDeprecateGetter(obj, key, value, message) { + if (message) { + utils.defineGetter(obj, key, function() { + console.log(message); + delete obj[key]; + clobber(obj, key, value); + return value; + }); + } else { + clobber(obj, key, value); + } +} + +function include(parent, objects, clobber, merge) { + each(objects, function (obj, key) { + try { + var result = obj.path ? require(obj.path) : {}; + + if (clobber) { + // Clobber if it doesn't exist. + if (typeof parent[key] === 'undefined') { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } else if (typeof obj.path !== 'undefined') { + // If merging, merge properties onto parent, otherwise, clobber. + if (merge) { + recursiveMerge(parent[key], result); + } else { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } + } + result = parent[key]; + } else { + // Overwrite if not currently defined. + if (typeof parent[key] == 'undefined') { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } else { + // Set result to what already exists, so we can build children into it if they exist. + result = parent[key]; + } + } + + if (obj.children) { + include(result, obj.children, clobber, merge); + } + } catch(e) { + utils.alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"'); + } + }); +} + +/** + * Merge properties from one object onto another recursively. Properties from + * the src object will overwrite existing target property. + * + * @param target Object to merge properties into. + * @param src Object to merge properties from. + */ +function recursiveMerge(target, src) { + for (var prop in src) { + if (src.hasOwnProperty(prop)) { + if (target.prototype && target.prototype.constructor === target) { + // If the target object is a constructor override off prototype. + clobber(target.prototype, prop, src[prop]); + } else { + if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { + recursiveMerge(target[prop], src[prop]); + } else { + clobber(target, prop, src[prop]); + } + } + } + } +} + +exports.buildIntoButDoNotClobber = function(objects, target) { + include(target, objects, false, false); +}; +exports.buildIntoAndClobber = function(objects, target) { + include(target, objects, true, false); +}; +exports.buildIntoAndMerge = function(objects, target) { + include(target, objects, true, true); +}; +exports.recursiveMerge = recursiveMerge; +exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; +exports.replaceHookForTesting = function() {}; + +}); + +// file: lib/common/channel.js +define("cordova/channel", function(require, exports, module) { + +var utils = require('cordova/utils'), + nextGuid = 1; + +/** + * Custom pub-sub "channel" that can have functions subscribed to it + * This object is used to define and control firing of events for + * cordova initialization, as well as for custom events thereafter. + * + * The order of events during page load and Cordova startup is as follows: + * + * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. + * onNativeReady* Internal event that indicates the Cordova native side is ready. + * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. + * onCordovaInfoReady* Internal event fired when device properties are available. + * onCordovaConnectionReady* Internal event fired when the connection property has been set. + * onDeviceReady* User event fired to indicate that Cordova is ready + * onResume User event fired to indicate a start/resume lifecycle event + * onPause User event fired to indicate a pause lifecycle event + * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). + * + * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. + * All listeners that subscribe after the event is fired will be executed right away. + * + * The only Cordova events that user code should register for are: + * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript + * pause App has moved to background + * resume App has returned to foreground + * + * Listeners can be registered as: + * document.addEventListener("deviceready", myDeviceReadyListener, false); + * document.addEventListener("resume", myResumeListener, false); + * document.addEventListener("pause", myPauseListener, false); + * + * The DOM lifecycle events should be used for saving and restoring state + * window.onload + * window.onunload + * + */ + +/** + * Channel + * @constructor + * @param type String the channel name + */ +var Channel = function(type, sticky) { + this.type = type; + // Map of guid -> function. + this.handlers = {}; + // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. + this.state = sticky ? 1 : 0; + // Used in sticky mode to remember args passed to fire(). + this.fireArgs = null; + // Used by onHasSubscribersChange to know if there are any listeners. + this.numHandlers = 0; + // Function that is called when the first listener is subscribed, or when + // the last listener is unsubscribed. + this.onHasSubscribersChange = null; +}, + channel = { + /** + * Calls the provided function only after all of the channels specified + * have been fired. All channels must be sticky channels. + */ + join: function(h, c) { + var len = c.length, + i = len, + f = function() { + if (!(--i)) h(); + }; + for (var j=0; jNative bridge. + POLLING: 0, + // For LOAD_URL to be viable, it would need to have a work-around for + // the bug where the soft-keyboard gets dismissed when a message is sent. + LOAD_URL: 1, + // For the ONLINE_EVENT to be viable, it would need to intercept all event + // listeners (both through addEventListener and window.ononline) as well + // as set the navigator property itself. + ONLINE_EVENT: 2, + // Uses reflection to access private APIs of the WebView that can send JS + // to be executed. + // Requires Android 3.2.4 or above. + PRIVATE_API: 3 + }, + jsToNativeBridgeMode, // Set lazily. + nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, + pollEnabled = false, + messagesFromNative = []; + +function androidExec(success, fail, service, action, args) { + // Set default bridge modes if they have not already been set. + // By default, we use the failsafe, since addJavascriptInterface breaks too often + if (jsToNativeBridgeMode === undefined) { + androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); + } + + // Process any ArrayBuffers in the args into a string. + for (var i = 0; i < args.length; i++) { + if (utils.typeName(args[i]) == 'ArrayBuffer') { + args[i] = window.btoa(String.fromCharCode.apply(null, new Uint8Array(args[i]))); + } + } + + var callbackId = service + cordova.callbackId++, + argsJson = JSON.stringify(args), + returnValue; + + // TODO: Returning the payload of a synchronous call was deprecated in 2.2.0. + // Remove it after 6 months. + function captureReturnValue(value) { + returnValue = value; + success && success(value); + } + + cordova.callbacks[callbackId] = {success:captureReturnValue, fail:fail}; + + if (jsToNativeBridgeMode == jsToNativeModes.LOCATION_CHANGE) { + window.location = 'http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson; + } else { + var messages = nativeApiProvider.get().exec(service, action, callbackId, argsJson); + androidExec.processMessages(messages); + } + if (cordova.callbacks[callbackId]) { + if (success || fail) { + cordova.callbacks[callbackId].success = success; + } else { + delete cordova.callbacks[callbackId]; + } + } + return returnValue; +} + +function pollOnce() { + var msg = nativeApiProvider.get().retrieveJsMessages(); + androidExec.processMessages(msg); +} + +function pollingTimerFunc() { + if (pollEnabled) { + pollOnce(); + setTimeout(pollingTimerFunc, 50); + } +} + +function hookOnlineApis() { + function proxyEvent(e) { + cordova.fireWindowEvent(e.type); + } + // The network module takes care of firing online and offline events. + // It currently fires them only on document though, so we bridge them + // to window here (while first listening for exec()-releated online/offline + // events). + window.addEventListener('online', pollOnce, false); + window.addEventListener('offline', pollOnce, false); + cordova.addWindowEventHandler('online'); + cordova.addWindowEventHandler('offline'); + document.addEventListener('online', proxyEvent, false); + document.addEventListener('offline', proxyEvent, false); +} + +hookOnlineApis(); + +androidExec.jsToNativeModes = jsToNativeModes; +androidExec.nativeToJsModes = nativeToJsModes; + +androidExec.setJsToNativeBridgeMode = function(mode) { + if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { + console.log('Falling back on PROMPT mode since _cordovaNative is missing.'); + mode = jsToNativeModes.PROMPT; + } + nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); + jsToNativeBridgeMode = mode; +}; + +androidExec.setNativeToJsBridgeMode = function(mode) { + if (mode == nativeToJsBridgeMode) { + return; + } + if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { + pollEnabled = false; + } + + nativeToJsBridgeMode = mode; + // Tell the native side to switch modes. + nativeApiProvider.get().setNativeToJsBridgeMode(mode); + + if (mode == nativeToJsModes.POLLING) { + pollEnabled = true; + setTimeout(pollingTimerFunc, 1); + } +}; + +// Processes a single message, as encoded by NativeToJsMessageQueue.java. +function processMessage(message) { + try { + var firstChar = message.charAt(0); + if (firstChar == 'J') { + eval(message.slice(1)); + } else if (firstChar == 'S' || firstChar == 'F') { + var success = firstChar == 'S'; + var keepCallback = message.charAt(1) == '1'; + var spaceIdx = message.indexOf(' ', 2); + var status = +message.slice(2, spaceIdx); + var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); + var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); + var payloadKind = message.charAt(nextSpaceIdx + 1); + var payload; + if (payloadKind == 's') { + payload = message.slice(nextSpaceIdx + 2); + } else if (payloadKind == 't') { + payload = true; + } else if (payloadKind == 'f') { + payload = false; + } else if (payloadKind == 'N') { + payload = null; + } else if (payloadKind == 'n') { + payload = +message.slice(nextSpaceIdx + 2); + } else if (payloadKind == 'A') { + var data = message.slice(nextSpaceIdx + 2); + var bytes = window.atob(data); + var arraybuffer = new Uint8Array(bytes.length); + for (var i = 0; i < bytes.length; i++) { + arraybuffer[i] = bytes.charCodeAt(i); + } + payload = arraybuffer.buffer; + } else { + payload = JSON.parse(message.slice(nextSpaceIdx + 1)); + } + cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); + } else { + console.log("processMessage failed: invalid message:" + message); + } + } catch (e) { + console.log("processMessage failed: Message: " + message); + console.log("processMessage failed: Error: " + e); + console.log("processMessage failed: Stack: " + e.stack); + } +} + +// This is called from the NativeToJsMessageQueue.java. +androidExec.processMessages = function(messages) { + if (messages) { + messagesFromNative.push(messages); + while (messagesFromNative.length) { + messages = messagesFromNative.shift(); + // The Java side can send a * message to indicate that it + // still has messages waiting to be retrieved. + // TODO(agrieve): This is currently disabled on the Java side + // since it breaks returning the result in exec of synchronous + // plugins. Once we remove this ability, we can remove this comment. + if (messages == '*') { + window.setTimeout(pollOnce, 0); + continue; + } + + var spaceIdx = messages.indexOf(' '); + var msgLen = +messages.slice(0, spaceIdx); + var message = messages.substr(spaceIdx + 1, msgLen); + messages = messages.slice(spaceIdx + msgLen + 1); + // Put the remaining messages back into queue in case an exec() + // is made by the callback. + if (messages) { + messagesFromNative.unshift(messages); + } + + if (message) { + processMessage(message); + } + } + } +}; + +module.exports = androidExec; + +}); + +// file: lib/common/modulemapper.js +define("cordova/modulemapper", function(require, exports, module) { + +var builder = require('cordova/builder'), + moduleMap = define.moduleMap, + symbolList, + deprecationMap; + +exports.reset = function() { + symbolList = []; + deprecationMap = {}; +}; + +function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { + if (!(moduleName in moduleMap)) { + throw new Error('Module ' + moduleName + ' does not exist.'); + } + symbolList.push(strategy, moduleName, symbolPath); + if (opt_deprecationMessage) { + deprecationMap[symbolPath] = opt_deprecationMessage; + } +} + +// Note: Android 2.3 does have Function.bind(). +exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('c', moduleName, symbolPath, opt_deprecationMessage); +}; + +exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('m', moduleName, symbolPath, opt_deprecationMessage); +}; + +exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('d', moduleName, symbolPath, opt_deprecationMessage); +}; + +function prepareNamespace(symbolPath, context) { + if (!symbolPath) { + return context; + } + var parts = symbolPath.split('.'); + var cur = context; + for (var i = 0, part; part = parts[i]; ++i) { + cur = cur[part] = cur[part] || {}; + } + return cur; +} + +exports.mapModules = function(context) { + var origSymbols = {}; + context.CDV_origSymbols = origSymbols; + for (var i = 0, len = symbolList.length; i < len; i += 3) { + var strategy = symbolList[i]; + var moduleName = symbolList[i + 1]; + var symbolPath = symbolList[i + 2]; + var lastDot = symbolPath.lastIndexOf('.'); + var namespace = symbolPath.substr(0, lastDot); + var lastName = symbolPath.substr(lastDot + 1); + + var module = require(moduleName); + var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; + var parentObj = prepareNamespace(namespace, context); + var target = parentObj[lastName]; + + if (strategy == 'm' && target) { + builder.recursiveMerge(target, module); + } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + if (!(symbolPath in origSymbols)) { + origSymbols[symbolPath] = target; + } + builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); + } + } +}; + +exports.getOriginalSymbol = function(context, symbolPath) { + var origSymbols = context.CDV_origSymbols; + if (origSymbols && (symbolPath in origSymbols)) { + return origSymbols[symbolPath]; + } + var parts = symbolPath.split('.'); + var obj = context; + for (var i = 0; i < parts.length; ++i) { + obj = obj && obj[parts[i]]; + } + return obj; +}; + +exports.loadMatchingModules = function(matchingRegExp) { + for (var k in moduleMap) { + if (matchingRegExp.exec(k)) { + require(k); + } + } +}; + +exports.reset(); + + +}); + +// file: lib/android/platform.js +define("cordova/platform", function(require, exports, module) { + +module.exports = { + id: "android", + initialize:function() { + var channel = require("cordova/channel"), + cordova = require('cordova'), + exec = require('cordova/exec'), + modulemapper = require('cordova/modulemapper'); + + modulemapper.loadMatchingModules(/cordova.*\/symbols$/); + modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); + + modulemapper.mapModules(window); + + // Inject a listener for the backbutton on the document. + var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); + backButtonChannel.onHasSubscribersChange = function() { + // If we just attached the first handler or detached the last handler, + // let native know we need to override the back button. + exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]); + }; + + // Add hardware MENU and SEARCH button handlers + cordova.addDocumentEventHandler('menubutton'); + cordova.addDocumentEventHandler('searchbutton'); + + // Let native code know we are all done on the JS side. + // Native code will then un-hide the WebView. + channel.join(function() { + exec(null, null, "App", "show", []); + }, [channel.onCordovaReady]); + } +}; + +}); + +// file: lib/common/plugin/Acceleration.js +define("cordova/plugin/Acceleration", function(require, exports, module) { + +var Acceleration = function(x, y, z, timestamp) { + this.x = x; + this.y = y; + this.z = z; + this.timestamp = timestamp || (new Date()).getTime(); +}; + +module.exports = Acceleration; + +}); + +// file: lib/common/plugin/Camera.js +define("cordova/plugin/Camera", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + Camera = require('cordova/plugin/CameraConstants'), + CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle'); + +var cameraExport = {}; + +// Tack on the Camera Constants to the base camera plugin. +for (var key in Camera) { + cameraExport[key] = Camera[key]; +} + +/** + * Gets a picture from source defined by "options.sourceType", and returns the + * image as defined by the "options.destinationType" option. + + * The defaults are sourceType=CAMERA and destinationType=FILE_URI. + * + * @param {Function} successCallback + * @param {Function} errorCallback + * @param {Object} options + */ +cameraExport.getPicture = function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'Camera.getPicture', arguments); + options = options || {}; + var getValue = argscheck.getValue; + + var quality = getValue(options.quality, 50); + var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI); + var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA); + var targetWidth = getValue(options.targetWidth, -1); + var targetHeight = getValue(options.targetHeight, -1); + var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG); + var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE); + var allowEdit = !!options.allowEdit; + var correctOrientation = !!options.correctOrientation; + var saveToPhotoAlbum = !!options.saveToPhotoAlbum; + var popoverOptions = getValue(options.popoverOptions, null); + + var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType, + mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions]; + + exec(successCallback, errorCallback, "Camera", "takePicture", args); + return new CameraPopoverHandle(); +}; + +cameraExport.cleanup = function(successCallback, errorCallback) { + exec(successCallback, errorCallback, "Camera", "cleanup", []); +}; + +module.exports = cameraExport; + +}); + +// file: lib/common/plugin/CameraConstants.js +define("cordova/plugin/CameraConstants", function(require, exports, module) { + +module.exports = { + DestinationType:{ + DATA_URL: 0, // Return base64 encoded string + FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android) + NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS) + }, + EncodingType:{ + JPEG: 0, // Return JPEG encoded image + PNG: 1 // Return PNG encoded image + }, + MediaType:{ + PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType + VIDEO: 1, // allow selection of video only, ONLY RETURNS URL + ALLMEDIA : 2 // allow selection from all media types + }, + PictureSourceType:{ + PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android) + CAMERA : 1, // Take picture from camera + SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android) + }, + PopoverArrowDirection:{ + ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover + ARROW_DOWN : 2, + ARROW_LEFT : 4, + ARROW_RIGHT : 8, + ARROW_ANY : 15 + } +}; + +}); + +// file: lib/common/plugin/CameraPopoverHandle.js +define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * A handle to an image picker popover. + */ +var CameraPopoverHandle = function() { + this.setPosition = function(popoverOptions) { + console.log('CameraPopoverHandle.setPosition is only supported on iOS.'); + }; +}; + +module.exports = CameraPopoverHandle; + +}); + +// file: lib/common/plugin/CameraPopoverOptions.js +define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) { + +var Camera = require('cordova/plugin/CameraConstants'); + +/** + * Encapsulates options for iOS Popover image picker + */ +var CameraPopoverOptions = function(x,y,width,height,arrowDir){ + // information of rectangle that popover should be anchored to + this.x = x || 0; + this.y = y || 32; + this.width = width || 320; + this.height = height || 480; + // The direction of the popover arrow + this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY; +}; + +module.exports = CameraPopoverOptions; + +}); + +// file: lib/common/plugin/CaptureAudioOptions.js +define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) { + +/** + * Encapsulates all audio capture operation configuration options. + */ +var CaptureAudioOptions = function(){ + // Upper limit of sound clips user can record. Value must be equal or greater than 1. + this.limit = 1; + // Maximum duration of a single sound clip in seconds. + this.duration = 0; + // The selected audio mode. Must match with one of the elements in supportedAudioModes array. + this.mode = null; +}; + +module.exports = CaptureAudioOptions; + +}); + +// file: lib/common/plugin/CaptureError.js +define("cordova/plugin/CaptureError", function(require, exports, module) { + +/** + * The CaptureError interface encapsulates all errors in the Capture API. + */ +var CaptureError = function(c) { + this.code = c || null; +}; + +// Camera or microphone failed to capture image or sound. +CaptureError.CAPTURE_INTERNAL_ERR = 0; +// Camera application or audio capture application is currently serving other capture request. +CaptureError.CAPTURE_APPLICATION_BUSY = 1; +// Invalid use of the API (e.g. limit parameter has value less than one). +CaptureError.CAPTURE_INVALID_ARGUMENT = 2; +// User exited camera application or audio capture application before capturing anything. +CaptureError.CAPTURE_NO_MEDIA_FILES = 3; +// The requested capture operation is not supported. +CaptureError.CAPTURE_NOT_SUPPORTED = 20; + +module.exports = CaptureError; + +}); + +// file: lib/common/plugin/CaptureImageOptions.js +define("cordova/plugin/CaptureImageOptions", function(require, exports, module) { + +/** + * Encapsulates all image capture operation configuration options. + */ +var CaptureImageOptions = function(){ + // Upper limit of images user can take. Value must be equal or greater than 1. + this.limit = 1; + // The selected image mode. Must match with one of the elements in supportedImageModes array. + this.mode = null; +}; + +module.exports = CaptureImageOptions; + +}); + +// file: lib/common/plugin/CaptureVideoOptions.js +define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) { + +/** + * Encapsulates all video capture operation configuration options. + */ +var CaptureVideoOptions = function(){ + // Upper limit of videos user can record. Value must be equal or greater than 1. + this.limit = 1; + // Maximum duration of a single video clip in seconds. + this.duration = 0; + // The selected video mode. Must match with one of the elements in supportedVideoModes array. + this.mode = null; +}; + +module.exports = CaptureVideoOptions; + +}); + +// file: lib/common/plugin/CompassError.js +define("cordova/plugin/CompassError", function(require, exports, module) { + +/** + * CompassError. + * An error code assigned by an implementation when an error has occurred + * @constructor + */ +var CompassError = function(err) { + this.code = (err !== undefined ? err : null); +}; + +CompassError.COMPASS_INTERNAL_ERR = 0; +CompassError.COMPASS_NOT_SUPPORTED = 20; + +module.exports = CompassError; + +}); + +// file: lib/common/plugin/CompassHeading.js +define("cordova/plugin/CompassHeading", function(require, exports, module) { + +var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) { + this.magneticHeading = magneticHeading; + this.trueHeading = trueHeading; + this.headingAccuracy = headingAccuracy; + this.timestamp = timestamp || new Date().getTime(); +}; + +module.exports = CompassHeading; + +}); + +// file: lib/common/plugin/ConfigurationData.js +define("cordova/plugin/ConfigurationData", function(require, exports, module) { + +/** + * Encapsulates a set of parameters that the capture device supports. + */ +function ConfigurationData() { + // The ASCII-encoded string in lower case representing the media type. + this.type = null; + // The height attribute represents height of the image or video in pixels. + // In the case of a sound clip this attribute has value 0. + this.height = 0; + // The width attribute represents width of the image or video in pixels. + // In the case of a sound clip this attribute has value 0 + this.width = 0; +} + +module.exports = ConfigurationData; + +}); + +// file: lib/common/plugin/Connection.js +define("cordova/plugin/Connection", function(require, exports, module) { + +/** + * Network status + */ +module.exports = { + UNKNOWN: "unknown", + ETHERNET: "ethernet", + WIFI: "wifi", + CELL_2G: "2g", + CELL_3G: "3g", + CELL_4G: "4g", + CELL:"cellular", + NONE: "none" +}; + +}); + +// file: lib/common/plugin/Contact.js +define("cordova/plugin/Contact", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + ContactError = require('cordova/plugin/ContactError'), + utils = require('cordova/utils'); + +/** +* Converts primitives into Complex Object +* Currently only used for Date fields +*/ +function convertIn(contact) { + var value = contact.birthday; + try { + contact.birthday = new Date(parseFloat(value)); + } catch (exception){ + console.log("Cordova Contact convertIn error: exception creating date."); + } + return contact; +} + +/** +* Converts Complex objects into primitives +* Only conversion at present is for Dates. +**/ + +function convertOut(contact) { + var value = contact.birthday; + if (value !== null) { + // try to make it a Date object if it is not already + if (!utils.isDate(value)){ + try { + value = new Date(value); + } catch(exception){ + value = null; + } + } + if (utils.isDate(value)){ + value = value.valueOf(); // convert to milliseconds + } + contact.birthday = value; + } + return contact; +} + +/** +* Contains information about a single contact. +* @constructor +* @param {DOMString} id unique identifier +* @param {DOMString} displayName +* @param {ContactName} name +* @param {DOMString} nickname +* @param {Array.} phoneNumbers array of phone numbers +* @param {Array.} emails array of email addresses +* @param {Array.} addresses array of addresses +* @param {Array.} ims instant messaging user ids +* @param {Array.} organizations +* @param {DOMString} birthday contact's birthday +* @param {DOMString} note user notes about contact +* @param {Array.} photos +* @param {Array.} categories +* @param {Array.} urls contact's web sites +*/ +var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses, + ims, organizations, birthday, note, photos, categories, urls) { + this.id = id || null; + this.rawId = null; + this.displayName = displayName || null; + this.name = name || null; // ContactName + this.nickname = nickname || null; + this.phoneNumbers = phoneNumbers || null; // ContactField[] + this.emails = emails || null; // ContactField[] + this.addresses = addresses || null; // ContactAddress[] + this.ims = ims || null; // ContactField[] + this.organizations = organizations || null; // ContactOrganization[] + this.birthday = birthday || null; + this.note = note || null; + this.photos = photos || null; // ContactField[] + this.categories = categories || null; // ContactField[] + this.urls = urls || null; // ContactField[] +}; + +/** +* Removes contact from device storage. +* @param successCB success callback +* @param errorCB error callback +*/ +Contact.prototype.remove = function(successCB, errorCB) { + argscheck.checkArgs('FF', 'Contact.remove', arguments); + var fail = errorCB && function(code) { + errorCB(new ContactError(code)); + }; + if (this.id === null) { + fail(ContactError.UNKNOWN_ERROR); + } + else { + exec(successCB, fail, "Contacts", "remove", [this.id]); + } +}; + +/** +* Creates a deep copy of this Contact. +* With the contact ID set to null. +* @return copy of this Contact +*/ +Contact.prototype.clone = function() { + var clonedContact = utils.clone(this); + clonedContact.id = null; + clonedContact.rawId = null; + + function nullIds(arr) { + if (arr) { + for (var i = 0; i < arr.length; ++i) { + arr[i].id = null; + } + } + } + + // Loop through and clear out any id's in phones, emails, etc. + nullIds(clonedContact.phoneNumbers); + nullIds(clonedContact.emails); + nullIds(clonedContact.addresses); + nullIds(clonedContact.ims); + nullIds(clonedContact.organizations); + nullIds(clonedContact.categories); + nullIds(clonedContact.photos); + nullIds(clonedContact.urls); + return clonedContact; +}; + +/** +* Persists contact to device storage. +* @param successCB success callback +* @param errorCB error callback +*/ +Contact.prototype.save = function(successCB, errorCB) { + argscheck.checkArgs('FFO', 'Contact.save', arguments); + var fail = errorCB && function(code) { + errorCB(new ContactError(code)); + }; + var success = function(result) { + if (result) { + if (successCB) { + var fullContact = require('cordova/plugin/contacts').create(result); + successCB(convertIn(fullContact)); + } + } + else { + // no Entry object returned + fail(ContactError.UNKNOWN_ERROR); + } + }; + var dupContact = convertOut(utils.clone(this)); + exec(success, fail, "Contacts", "save", [dupContact]); +}; + + +module.exports = Contact; + +}); + +// file: lib/common/plugin/ContactAddress.js +define("cordova/plugin/ContactAddress", function(require, exports, module) { + +/** +* Contact address. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code +* @param formatted // NOTE: not a W3C standard +* @param streetAddress +* @param locality +* @param region +* @param postalCode +* @param country +*/ + +var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) { + this.id = null; + this.pref = (typeof pref != 'undefined' ? pref : false); + this.type = type || null; + this.formatted = formatted || null; + this.streetAddress = streetAddress || null; + this.locality = locality || null; + this.region = region || null; + this.postalCode = postalCode || null; + this.country = country || null; +}; + +module.exports = ContactAddress; + +}); + +// file: lib/common/plugin/ContactError.js +define("cordova/plugin/ContactError", function(require, exports, module) { + +/** + * ContactError. + * An error code assigned by an implementation when an error has occurred + * @constructor + */ +var ContactError = function(err) { + this.code = (typeof err != 'undefined' ? err : null); +}; + +/** + * Error codes + */ +ContactError.UNKNOWN_ERROR = 0; +ContactError.INVALID_ARGUMENT_ERROR = 1; +ContactError.TIMEOUT_ERROR = 2; +ContactError.PENDING_OPERATION_ERROR = 3; +ContactError.IO_ERROR = 4; +ContactError.NOT_SUPPORTED_ERROR = 5; +ContactError.PERMISSION_DENIED_ERROR = 20; + +module.exports = ContactError; + +}); + +// file: lib/common/plugin/ContactField.js +define("cordova/plugin/ContactField", function(require, exports, module) { + +/** +* Generic contact field. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard +* @param type +* @param value +* @param pref +*/ +var ContactField = function(type, value, pref) { + this.id = null; + this.type = (type && type.toString()) || null; + this.value = (value && value.toString()) || null; + this.pref = (typeof pref != 'undefined' ? pref : false); +}; + +module.exports = ContactField; + +}); + +// file: lib/common/plugin/ContactFindOptions.js +define("cordova/plugin/ContactFindOptions", function(require, exports, module) { + +/** + * ContactFindOptions. + * @constructor + * @param filter used to match contacts against + * @param multiple boolean used to determine if more than one contact should be returned + */ + +var ContactFindOptions = function(filter, multiple) { + this.filter = filter || ''; + this.multiple = (typeof multiple != 'undefined' ? multiple : false); +}; + +module.exports = ContactFindOptions; + +}); + +// file: lib/common/plugin/ContactName.js +define("cordova/plugin/ContactName", function(require, exports, module) { + +/** +* Contact name. +* @constructor +* @param formatted // NOTE: not part of W3C standard +* @param familyName +* @param givenName +* @param middle +* @param prefix +* @param suffix +*/ +var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) { + this.formatted = formatted || null; + this.familyName = familyName || null; + this.givenName = givenName || null; + this.middleName = middle || null; + this.honorificPrefix = prefix || null; + this.honorificSuffix = suffix || null; +}; + +module.exports = ContactName; + +}); + +// file: lib/common/plugin/ContactOrganization.js +define("cordova/plugin/ContactOrganization", function(require, exports, module) { + +/** +* Contact organization. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard +* @param name +* @param dept +* @param title +* @param startDate +* @param endDate +* @param location +* @param desc +*/ + +var ContactOrganization = function(pref, type, name, dept, title) { + this.id = null; + this.pref = (typeof pref != 'undefined' ? pref : false); + this.type = type || null; + this.name = name || null; + this.department = dept || null; + this.title = title || null; +}; + +module.exports = ContactOrganization; + +}); + +// file: lib/common/plugin/Coordinates.js +define("cordova/plugin/Coordinates", function(require, exports, module) { + +/** + * This class contains position information. + * @param {Object} lat + * @param {Object} lng + * @param {Object} alt + * @param {Object} acc + * @param {Object} head + * @param {Object} vel + * @param {Object} altacc + * @constructor + */ +var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) { + /** + * The latitude of the position. + */ + this.latitude = lat; + /** + * The longitude of the position, + */ + this.longitude = lng; + /** + * The accuracy of the position. + */ + this.accuracy = acc; + /** + * The altitude of the position. + */ + this.altitude = (alt !== undefined ? alt : null); + /** + * The direction the device is moving at the position. + */ + this.heading = (head !== undefined ? head : null); + /** + * The velocity with which the device is moving at the position. + */ + this.speed = (vel !== undefined ? vel : null); + + if (this.speed === 0 || this.speed === null) { + this.heading = NaN; + } + + /** + * The altitude accuracy of the position. + */ + this.altitudeAccuracy = (altacc !== undefined) ? altacc : null; +}; + +module.exports = Coordinates; + +}); + +// file: lib/common/plugin/DirectoryEntry.js +define("cordova/plugin/DirectoryEntry", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'), + Entry = require('cordova/plugin/Entry'), + FileError = require('cordova/plugin/FileError'), + DirectoryReader = require('cordova/plugin/DirectoryReader'); + +/** + * An interface representing a directory on the file system. + * + * {boolean} isFile always false (readonly) + * {boolean} isDirectory always true (readonly) + * {DOMString} name of the directory, excluding the path leading to it (readonly) + * {DOMString} fullPath the absolute full path to the directory (readonly) + * TODO: implement this!!! {FileSystem} filesystem on which the directory resides (readonly) + */ +var DirectoryEntry = function(name, fullPath) { + DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath); +}; + +utils.extend(DirectoryEntry, Entry); + +/** + * Creates a new DirectoryReader to read entries from this directory + */ +DirectoryEntry.prototype.createReader = function() { + return new DirectoryReader(this.fullPath); +}; + +/** + * Creates or looks up a directory + * + * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory + * @param {Flags} options to create or exclusively create the directory + * @param {Function} successCallback is called with the new entry + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) { + argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments); + var win = successCallback && function(result) { + var entry = new DirectoryEntry(result.name, result.fullPath); + successCallback(entry); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getDirectory", [this.fullPath, path, options]); +}; + +/** + * Deletes a directory and all of it's contents + * + * @param {Function} successCallback is called with no parameters + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) { + argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments); + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]); +}; + +/** + * Creates or looks up a file + * + * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file + * @param {Flags} options to create or exclusively create the file + * @param {Function} successCallback is called with the new entry + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) { + argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments); + var win = successCallback && function(result) { + var FileEntry = require('cordova/plugin/FileEntry'); + var entry = new FileEntry(result.name, result.fullPath); + successCallback(entry); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getFile", [this.fullPath, path, options]); +}; + +module.exports = DirectoryEntry; + +}); + +// file: lib/common/plugin/DirectoryReader.js +define("cordova/plugin/DirectoryReader", function(require, exports, module) { + +var exec = require('cordova/exec'), + FileError = require('cordova/plugin/FileError') ; + +/** + * An interface that lists the files and directories in a directory. + */ +function DirectoryReader(path) { + this.path = path || null; +} + +/** + * Returns a list of entries from a directory. + * + * @param {Function} successCallback is called with a list of entries + * @param {Function} errorCallback is called with a FileError + */ +DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) { + var win = typeof successCallback !== 'function' ? null : function(result) { + var retVal = []; + for (var i=0; i= 2) { + if (end < 0) { + newEnd = Math.max(size + end, 0); + } else { + newEnd = Math.min(end, size); + } + } + + var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size); + newFile.start = this.start + newStart; + newFile.end = this.start + newEnd; + return newFile; +}; + + +module.exports = File; + +}); + +// file: lib/common/plugin/FileEntry.js +define("cordova/plugin/FileEntry", function(require, exports, module) { + +var utils = require('cordova/utils'), + exec = require('cordova/exec'), + Entry = require('cordova/plugin/Entry'), + FileWriter = require('cordova/plugin/FileWriter'), + File = require('cordova/plugin/File'), + FileError = require('cordova/plugin/FileError'); + +/** + * An interface representing a file on the file system. + * + * {boolean} isFile always true (readonly) + * {boolean} isDirectory always false (readonly) + * {DOMString} name of the file, excluding the path leading to it (readonly) + * {DOMString} fullPath the absolute full path to the file (readonly) + * {FileSystem} filesystem on which the file resides (readonly) + */ +var FileEntry = function(name, fullPath) { + FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]); +}; + +utils.extend(FileEntry, Entry); + +/** + * Creates a new FileWriter associated with the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new FileWriter + * @param {Function} errorCallback is called with a FileError + */ +FileEntry.prototype.createWriter = function(successCallback, errorCallback) { + this.file(function(filePointer) { + var writer = new FileWriter(filePointer); + + if (writer.fileName === null || writer.fileName === "") { + errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR)); + } else { + successCallback && successCallback(writer); + } + }, errorCallback); +}; + +/** + * Returns a File that represents the current state of the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new File object + * @param {Function} errorCallback is called with a FileError + */ +FileEntry.prototype.file = function(successCallback, errorCallback) { + var win = successCallback && function(f) { + var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size); + successCallback(file); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getFileMetadata", [this.fullPath]); +}; + + +module.exports = FileEntry; + +}); + +// file: lib/common/plugin/FileError.js +define("cordova/plugin/FileError", function(require, exports, module) { + +/** + * FileError + */ +function FileError(error) { + this.code = error || null; +} + +// File error codes +// Found in DOMException +FileError.NOT_FOUND_ERR = 1; +FileError.SECURITY_ERR = 2; +FileError.ABORT_ERR = 3; + +// Added by File API specification +FileError.NOT_READABLE_ERR = 4; +FileError.ENCODING_ERR = 5; +FileError.NO_MODIFICATION_ALLOWED_ERR = 6; +FileError.INVALID_STATE_ERR = 7; +FileError.SYNTAX_ERR = 8; +FileError.INVALID_MODIFICATION_ERR = 9; +FileError.QUOTA_EXCEEDED_ERR = 10; +FileError.TYPE_MISMATCH_ERR = 11; +FileError.PATH_EXISTS_ERR = 12; + +module.exports = FileError; + +}); + +// file: lib/common/plugin/FileReader.js +define("cordova/plugin/FileReader", function(require, exports, module) { + +var exec = require('cordova/exec'), + modulemapper = require('cordova/modulemapper'), + utils = require('cordova/utils'), + File = require('cordova/plugin/File'), + FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'), + origFileReader = modulemapper.getOriginalSymbol(this, 'FileReader'); + +/** + * This class reads the mobile device file system. + * + * For Android: + * The root directory is the root of the file system. + * To read from the SD card, the file name is "sdcard/my_file.txt" + * @constructor + */ +var FileReader = function() { + this._readyState = 0; + this._error = null; + this._result = null; + this._fileName = ''; + this._realReader = origFileReader ? new origFileReader() : {}; +}; + +// States +FileReader.EMPTY = 0; +FileReader.LOADING = 1; +FileReader.DONE = 2; + +utils.defineGetter(FileReader.prototype, 'readyState', function() { + return this._fileName ? this._readyState : this._realReader.readyState; +}); + +utils.defineGetter(FileReader.prototype, 'error', function() { + return this._fileName ? this._error: this._realReader.error; +}); + +utils.defineGetter(FileReader.prototype, 'result', function() { + return this._fileName ? this._result: this._realReader.result; +}); + +function defineEvent(eventName) { + utils.defineGetterSetter(FileReader.prototype, eventName, function() { + return this._realReader[eventName] || null; + }, function(value) { + this._realReader[eventName] = value; + }); +} +defineEvent('onloadstart'); // When the read starts. +defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total) +defineEvent('onload'); // When the read has successfully completed. +defineEvent('onerror'); // When the read has failed (see errors). +defineEvent('onloadend'); // When the request has completed (either in success or failure). +defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method. + +function initRead(reader, file) { + // Already loading something + if (reader.readyState == FileReader.LOADING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + reader._result = null; + reader._error = null; + reader._readyState = FileReader.LOADING; + + if (typeof file == 'string') { + // Deprecated in Cordova 2.4. + console.warning('Using a string argument with FileReader.readAs functions is deprecated.'); + reader._fileName = file; + } else if (typeof file.fullPath == 'string') { + reader._fileName = file.fullPath; + } else { + reader._fileName = ''; + return true; + } + + reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader})); +} + +/** + * Abort reading file. + */ +FileReader.prototype.abort = function() { + if (origFileReader && !this._fileName) { + return this._realReader.abort(); + } + this._result = null; + + if (this._readyState == FileReader.DONE || this._readyState == FileReader.EMPTY) { + return; + } + + this._readyState = FileReader.DONE; + + // If abort callback + if (typeof this.onabort === 'function') { + this.onabort(new ProgressEvent('abort', {target:this})); + } + // If load end callback + if (typeof this.onloadend === 'function') { + this.onloadend(new ProgressEvent('loadend', {target:this})); + } +}; + +/** + * Read text file. + * + * @param file {File} File object containing file properties + * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets) + */ +FileReader.prototype.readAsText = function(file, encoding) { + if (initRead(this, file)) { + return this._realReader.readAsText(file, encoding); + } + + // Default encoding is UTF-8 + var enc = encoding ? encoding : "UTF-8"; + var me = this; + var execArgs = [this._fileName, enc]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // Save result + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // DONE state + me._readyState = FileReader.DONE; + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + // null result + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsText", execArgs); +}; + + +/** + * Read file and return data as a base64 encoded data url. + * A data url is of the form: + * data:[][;base64], + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsDataURL = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsDataURL(file); + } + + var me = this; + var execArgs = [this._fileName]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + // Save result + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsDataURL", execArgs); +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsBinaryString = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsBinaryString(file); + } + // TODO - Can't return binary data to browser. + console.log('method "readAsBinaryString" is not supported at this time.'); + this.abort(); +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsArrayBuffer = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsArrayBuffer(file); + } + // TODO - Can't return binary data to browser. + console.log('This method is not supported at this time.'); + this.abort(); +}; + +module.exports = FileReader; + +}); + +// file: lib/common/plugin/FileSystem.js +define("cordova/plugin/FileSystem", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'); + +/** + * An interface representing a file system + * + * @constructor + * {DOMString} name the unique name of the file system (readonly) + * {DirectoryEntry} root directory of the file system (readonly) + */ +var FileSystem = function(name, root) { + this.name = name || null; + if (root) { + this.root = new DirectoryEntry(root.name, root.fullPath); + } +}; + +module.exports = FileSystem; + +}); + +// file: lib/common/plugin/FileTransfer.js +define("cordova/plugin/FileTransfer", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + FileTransferError = require('cordova/plugin/FileTransferError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +function newProgressEvent(result) { + var pe = new ProgressEvent(); + pe.lengthComputable = result.lengthComputable; + pe.loaded = result.loaded; + pe.total = result.total; + return pe; +} + +var idCounter = 0; + +/** + * FileTransfer uploads a file to a remote server. + * @constructor + */ +var FileTransfer = function() { + this._id = ++idCounter; + this.onprogress = null; // optional callback +}; + +/** +* Given an absolute file path, uploads a file on the device to a remote server +* using a multipart HTTP request. +* @param filePath {String} Full path of the file on the device +* @param server {String} URL of the server to receive the file +* @param successCallback (Function} Callback to be invoked when upload has completed +* @param errorCallback {Function} Callback to be invoked upon error +* @param options {FileUploadOptions} Optional parameters such as file name and mimetype +* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false +*/ +FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) { + argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments); + // check for options + var fileKey = null; + var fileName = null; + var mimeType = null; + var params = null; + var chunkedMode = true; + var headers = null; + if (options) { + fileKey = options.fileKey; + fileName = options.fileName; + mimeType = options.mimeType; + headers = options.headers; + if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") { + chunkedMode = options.chunkedMode; + } + if (options.params) { + params = options.params; + } + else { + params = {}; + } + } + + var fail = errorCallback && function(e) { + var error = new FileTransferError(e.code, e.source, e.target, e.http_status); + errorCallback(error); + }; + + var self = this; + var win = function(result) { + if (typeof result.lengthComputable != "undefined") { + if (self.onprogress) { + self.onprogress(newProgressEvent(result)); + } + } else { + successCallback && successCallback(result); + } + }; + exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id]); +}; + +/** + * Downloads a file form a given URL and saves it to the specified directory. + * @param source {String} URL of the server to receive the file + * @param target {String} Full path of the file on the device + * @param successCallback (Function} Callback to be invoked when upload has completed + * @param errorCallback {Function} Callback to be invoked upon error + * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false + */ +FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts) { + argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments); + var self = this; + var win = function(result) { + if (typeof result.lengthComputable != "undefined") { + if (self.onprogress) { + return self.onprogress(newProgressEvent(result)); + } + } else if (successCallback) { + var entry = null; + if (result.isDirectory) { + entry = new (require('cordova/plugin/DirectoryEntry'))(); + } + else if (result.isFile) { + entry = new (require('cordova/plugin/FileEntry'))(); + } + entry.isDirectory = result.isDirectory; + entry.isFile = result.isFile; + entry.name = result.name; + entry.fullPath = result.fullPath; + successCallback(entry); + } + }; + + var fail = errorCallback && function(e) { + var error = new FileTransferError(e.code, e.source, e.target, e.http_status); + errorCallback(error); + }; + + exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id]); +}; + +/** + * Aborts the ongoing file transfer on this object + * @param successCallback {Function} Callback to be invoked upon success + * @param errorCallback {Function} Callback to be invoked upon error + */ +FileTransfer.prototype.abort = function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'FileTransfer', 'abort', [this._id]); +}; + +module.exports = FileTransfer; + +}); + +// file: lib/common/plugin/FileTransferError.js +define("cordova/plugin/FileTransferError", function(require, exports, module) { + +/** + * FileTransferError + * @constructor + */ +var FileTransferError = function(code, source, target, status, body) { + this.code = code || null; + this.source = source || null; + this.target = target || null; + this.http_status = status || null; + this.body = body || null; +}; + +FileTransferError.FILE_NOT_FOUND_ERR = 1; +FileTransferError.INVALID_URL_ERR = 2; +FileTransferError.CONNECTION_ERR = 3; +FileTransferError.ABORT_ERR = 4; + +module.exports = FileTransferError; + +}); + +// file: lib/common/plugin/FileUploadOptions.js +define("cordova/plugin/FileUploadOptions", function(require, exports, module) { + +/** + * Options to customize the HTTP request used to upload files. + * @constructor + * @param fileKey {String} Name of file request parameter. + * @param fileName {String} Filename to be used by the server. Defaults to image.jpg. + * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg. + * @param params {Object} Object with key: value params to send to the server. + * @param headers {Object} Keys are header names, values are header values. Multiple + * headers of the same name are not supported. + */ +var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers) { + this.fileKey = fileKey || null; + this.fileName = fileName || null; + this.mimeType = mimeType || null; + this.params = params || null; + this.headers = headers || null; +}; + +module.exports = FileUploadOptions; + +}); + +// file: lib/common/plugin/FileUploadResult.js +define("cordova/plugin/FileUploadResult", function(require, exports, module) { + +/** + * FileUploadResult + * @constructor + */ +var FileUploadResult = function() { + this.bytesSent = 0; + this.responseCode = null; + this.response = null; +}; + +module.exports = FileUploadResult; + +}); + +// file: lib/common/plugin/FileWriter.js +define("cordova/plugin/FileWriter", function(require, exports, module) { + +var exec = require('cordova/exec'), + FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +/** + * This class writes to the mobile device file system. + * + * For Android: + * The root directory is the root of the file system. + * To write to the SD card, the file name is "sdcard/my_file.txt" + * + * @constructor + * @param file {File} File object containing file properties + * @param append if true write to the end of the file, otherwise overwrite the file + */ +var FileWriter = function(file) { + this.fileName = ""; + this.length = 0; + if (file) { + this.fileName = file.fullPath || file; + this.length = file.size || 0; + } + // default is to write at the beginning of the file + this.position = 0; + + this.readyState = 0; // EMPTY + + this.result = null; + + // Error + this.error = null; + + // Event handlers + this.onwritestart = null; // When writing starts + this.onprogress = null; // While writing the file, and reporting partial file data + this.onwrite = null; // When the write has successfully completed. + this.onwriteend = null; // When the request has completed (either in success or failure). + this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method. + this.onerror = null; // When the write has failed (see errors). +}; + +// States +FileWriter.INIT = 0; +FileWriter.WRITING = 1; +FileWriter.DONE = 2; + +/** + * Abort writing file. + */ +FileWriter.prototype.abort = function() { + // check for invalid state + if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // set error + this.error = new FileError(FileError.ABORT_ERR); + + this.readyState = FileWriter.DONE; + + // If abort callback + if (typeof this.onabort === "function") { + this.onabort(new ProgressEvent("abort", {"target":this})); + } + + // If write end callback + if (typeof this.onwriteend === "function") { + this.onwriteend(new ProgressEvent("writeend", {"target":this})); + } +}; + +/** + * Writes data to the file + * + * @param text to be written + */ +FileWriter.prototype.write = function(text) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":me})); + } + + // Write file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // position always increases by bytes written because file would be extended + me.position += r; + // The length of the file is now where we are done writing. + + me.length = me.position; + + // DONE state + me.readyState = FileWriter.DONE; + + // If onwrite callback + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Save error + me.error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, "File", "write", [this.fileName, text, this.position]); +}; + +/** + * Moves the file pointer to the location specified. + * + * If the offset is a negative number the position of the file + * pointer is rewound. If the offset is greater than the file + * size the position is set to the end of the file. + * + * @param offset is the location to move the file pointer to. + */ +FileWriter.prototype.seek = function(offset) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + if (!offset && offset !== 0) { + return; + } + + // See back from end of file. + if (offset < 0) { + this.position = Math.max(offset + this.length, 0); + } + // Offset is bigger than file size so set position + // to the end of the file. + else if (offset > this.length) { + this.position = this.length; + } + // Offset is between 0 and file size so set the position + // to start writing. + else { + this.position = offset; + } +}; + +/** + * Truncates the file to the size specified. + * + * @param size to chop the file at. + */ +FileWriter.prototype.truncate = function(size) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":this})); + } + + // Write file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Update the length of the file + me.length = r; + me.position = Math.min(me.position, r); + + // If onwrite callback + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Save error + me.error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, "File", "truncate", [this.fileName, size]); +}; + +module.exports = FileWriter; + +}); + +// file: lib/common/plugin/Flags.js +define("cordova/plugin/Flags", function(require, exports, module) { + +/** + * Supplies arguments to methods that lookup or create files and directories. + * + * @param create + * {boolean} file or directory if it doesn't exist + * @param exclusive + * {boolean} used with create; if true the command will fail if + * target path exists + */ +function Flags(create, exclusive) { + this.create = create || false; + this.exclusive = exclusive || false; +} + +module.exports = Flags; + +}); + +// file: lib/common/plugin/GlobalizationError.js +define("cordova/plugin/GlobalizationError", function(require, exports, module) { + + +/** + * Globalization error object + * + * @constructor + * @param code + * @param message + */ +var GlobalizationError = function(code, message) { + this.code = code || null; + this.message = message || ''; +}; + +// Globalization error codes +GlobalizationError.UNKNOWN_ERROR = 0; +GlobalizationError.FORMATTING_ERROR = 1; +GlobalizationError.PARSING_ERROR = 2; +GlobalizationError.PATTERN_ERROR = 3; + +module.exports = GlobalizationError; + +}); + +// file: lib/common/plugin/InAppBrowser.js +define("cordova/plugin/InAppBrowser", function(require, exports, module) { + +var exec = require('cordova/exec'); +var channel = require('cordova/channel'); + +function InAppBrowser() { + this.channels = { + 'loadstart': channel.create('loadstart'), + 'loadstop' : channel.create('loadstop'), + 'exit' : channel.create('exit') + }; +} + +InAppBrowser.prototype = { + _eventHandler: function (event) { + if (event.type in this.channels) { + this.channels[event.type].fire(event); + } + }, + close: function (eventname) { + exec(null, null, "InAppBrowser", "close", []); + }, + addEventListener: function (eventname,f) { + if (eventname in this.channels) { + this.channels[eventname].subscribe(f); + } + }, + removeEventListener: function(eventname, f) { + if (eventname in this.channels) { + this.channels[eventname].unsubscribe(f); + } + } +}; + +module.exports = function(strUrl, strWindowName, strWindowFeatures) { + var iab = new InAppBrowser(); + var cb = function(eventname) { + iab._eventHandler(eventname); + }; + exec(cb, null, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); + return iab; +}; + + +}); + +// file: lib/common/plugin/LocalFileSystem.js +define("cordova/plugin/LocalFileSystem", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * Represents a local file system. + */ +var LocalFileSystem = function() { + +}; + +LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence +LocalFileSystem.PERSISTENT = 1; //persistent + +module.exports = LocalFileSystem; + +}); + +// file: lib/common/plugin/Media.js +define("cordova/plugin/Media", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'); + +var mediaObjects = {}; + +/** + * This class provides access to the device media, interfaces to both sound and video + * + * @constructor + * @param src The file name or url to play + * @param successCallback The callback to be called when the file is done playing or recording. + * successCallback() + * @param errorCallback The callback to be called if there is an error. + * errorCallback(int errorCode) - OPTIONAL + * @param statusCallback The callback to be called when media status has changed. + * statusCallback(int statusCode) - OPTIONAL + */ +var Media = function(src, successCallback, errorCallback, statusCallback) { + argscheck.checkArgs('SFFF', 'Media', arguments); + this.id = utils.createUUID(); + mediaObjects[this.id] = this; + this.src = src; + this.successCallback = successCallback; + this.errorCallback = errorCallback; + this.statusCallback = statusCallback; + this._duration = -1; + this._position = -1; + exec(null, this.errorCallback, "Media", "create", [this.id, this.src]); +}; + +// Media messages +Media.MEDIA_STATE = 1; +Media.MEDIA_DURATION = 2; +Media.MEDIA_POSITION = 3; +Media.MEDIA_ERROR = 9; + +// Media states +Media.MEDIA_NONE = 0; +Media.MEDIA_STARTING = 1; +Media.MEDIA_RUNNING = 2; +Media.MEDIA_PAUSED = 3; +Media.MEDIA_STOPPED = 4; +Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"]; + +// "static" function to return existing objs. +Media.get = function(id) { + return mediaObjects[id]; +}; + +/** + * Start or resume playing audio file. + */ +Media.prototype.play = function(options) { + exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]); +}; + +/** + * Stop playing audio file. + */ +Media.prototype.stop = function() { + var me = this; + exec(function() { + me._position = 0; + }, this.errorCallback, "Media", "stopPlayingAudio", [this.id]); +}; + +/** + * Seek or jump to a new time in the track.. + */ +Media.prototype.seekTo = function(milliseconds) { + var me = this; + exec(function(p) { + me._position = p; + }, this.errorCallback, "Media", "seekToAudio", [this.id, milliseconds]); +}; + +/** + * Pause playing audio file. + */ +Media.prototype.pause = function() { + exec(null, this.errorCallback, "Media", "pausePlayingAudio", [this.id]); +}; + +/** + * Get duration of an audio file. + * The duration is only set for audio that is playing, paused or stopped. + * + * @return duration or -1 if not known. + */ +Media.prototype.getDuration = function() { + return this._duration; +}; + +/** + * Get position of audio. + */ +Media.prototype.getCurrentPosition = function(success, fail) { + var me = this; + exec(function(p) { + me._position = p; + success(p); + }, fail, "Media", "getCurrentPositionAudio", [this.id]); +}; + +/** + * Start recording audio file. + */ +Media.prototype.startRecord = function() { + exec(null, this.errorCallback, "Media", "startRecordingAudio", [this.id, this.src]); +}; + +/** + * Stop recording audio file. + */ +Media.prototype.stopRecord = function() { + exec(null, this.errorCallback, "Media", "stopRecordingAudio", [this.id]); +}; + +/** + * Release the resources. + */ +Media.prototype.release = function() { + exec(null, this.errorCallback, "Media", "release", [this.id]); +}; + +/** + * Adjust the volume. + */ +Media.prototype.setVolume = function(volume) { + exec(null, null, "Media", "setVolume", [this.id, volume]); +}; + +/** + * Audio has status update. + * PRIVATE + * + * @param id The media object id (string) + * @param msgType The 'type' of update this is + * @param value Use of value is determined by the msgType + */ +Media.onStatus = function(id, msgType, value) { + + var media = mediaObjects[id]; + + if(media) { + switch(msgType) { + case Media.MEDIA_STATE : + media.statusCallback && media.statusCallback(value); + if(value == Media.MEDIA_STOPPED) { + media.successCallback && media.successCallback(); + } + break; + case Media.MEDIA_DURATION : + media._duration = value; + break; + case Media.MEDIA_ERROR : + media.errorCallback && media.errorCallback(value); + break; + case Media.MEDIA_POSITION : + media._position = Number(value); + break; + default : + console.error && console.error("Unhandled Media.onStatus :: " + msgType); + break; + } + } + else { + console.error && console.error("Received Media.onStatus callback for unknown media :: " + id); + } + +}; + +module.exports = Media; + +}); + +// file: lib/common/plugin/MediaError.js +define("cordova/plugin/MediaError", function(require, exports, module) { + +/** + * This class contains information about any Media errors. +*/ +/* + According to :: http://dev.w3.org/html5/spec-author-view/video.html#mediaerror + We should never be creating these objects, we should just implement the interface + which has 1 property for an instance, 'code' + + instead of doing : + errorCallbackFunction( new MediaError(3,'msg') ); +we should simply use a literal : + errorCallbackFunction( {'code':3} ); + */ + + var _MediaError = window.MediaError; + + +if(!_MediaError) { + window.MediaError = _MediaError = function(code, msg) { + this.code = (typeof code != 'undefined') ? code : null; + this.message = msg || ""; // message is NON-standard! do not use! + }; +} + +_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0; +_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1; +_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2; +_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3; +_MediaError.MEDIA_ERR_NONE_SUPPORTED = _MediaError.MEDIA_ERR_NONE_SUPPORTED || 4; +// TODO: MediaError.MEDIA_ERR_NONE_SUPPORTED is legacy, the W3 spec now defines it as below. +// as defined by http://dev.w3.org/html5/spec-author-view/video.html#error-codes +_MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = _MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED || 4; + +module.exports = _MediaError; + +}); + +// file: lib/common/plugin/MediaFile.js +define("cordova/plugin/MediaFile", function(require, exports, module) { + +var utils = require('cordova/utils'), + exec = require('cordova/exec'), + File = require('cordova/plugin/File'), + CaptureError = require('cordova/plugin/CaptureError'); +/** + * Represents a single file. + * + * name {DOMString} name of the file, without path information + * fullPath {DOMString} the full path of the file, including the name + * type {DOMString} mime type + * lastModifiedDate {Date} last modified date + * size {Number} size of the file in bytes + */ +var MediaFile = function(name, fullPath, type, lastModifiedDate, size){ + MediaFile.__super__.constructor.apply(this, arguments); +}; + +utils.extend(MediaFile, File); + +/** + * Request capture format data for a specific file and type + * + * @param {Function} successCB + * @param {Function} errorCB + */ +MediaFile.prototype.getFormatData = function(successCallback, errorCallback) { + if (typeof this.fullPath === "undefined" || this.fullPath === null) { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); + } else { + exec(successCallback, errorCallback, "Capture", "getFormatData", [this.fullPath, this.type]); + } +}; + +module.exports = MediaFile; + +}); + +// file: lib/common/plugin/MediaFileData.js +define("cordova/plugin/MediaFileData", function(require, exports, module) { + +/** + * MediaFileData encapsulates format information of a media file. + * + * @param {DOMString} codecs + * @param {long} bitrate + * @param {long} height + * @param {long} width + * @param {float} duration + */ +var MediaFileData = function(codecs, bitrate, height, width, duration){ + this.codecs = codecs || null; + this.bitrate = bitrate || 0; + this.height = height || 0; + this.width = width || 0; + this.duration = duration || 0; +}; + +module.exports = MediaFileData; + +}); + +// file: lib/common/plugin/Metadata.js +define("cordova/plugin/Metadata", function(require, exports, module) { + +/** + * Information about the state of the file or directory + * + * {Date} modificationTime (readonly) + */ +var Metadata = function(time) { + this.modificationTime = (typeof time != 'undefined'?new Date(time):null); +}; + +module.exports = Metadata; + +}); + +// file: lib/common/plugin/Position.js +define("cordova/plugin/Position", function(require, exports, module) { + +var Coordinates = require('cordova/plugin/Coordinates'); + +var Position = function(coords, timestamp) { + if (coords) { + this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy); + } else { + this.coords = new Coordinates(); + } + this.timestamp = (timestamp !== undefined) ? timestamp : new Date(); +}; + +module.exports = Position; + +}); + +// file: lib/common/plugin/PositionError.js +define("cordova/plugin/PositionError", function(require, exports, module) { + +/** + * Position error object + * + * @constructor + * @param code + * @param message + */ +var PositionError = function(code, message) { + this.code = code || null; + this.message = message || ''; +}; + +PositionError.PERMISSION_DENIED = 1; +PositionError.POSITION_UNAVAILABLE = 2; +PositionError.TIMEOUT = 3; + +module.exports = PositionError; + +}); + +// file: lib/common/plugin/ProgressEvent.js +define("cordova/plugin/ProgressEvent", function(require, exports, module) { + +// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill +// Feature test: See if we can instantiate a native ProgressEvent; +// if so, use that approach, +// otherwise fill-in with our own implementation. +// +// NOTE: right now we always fill in with our own. Down the road would be nice if we can use whatever is native in the webview. +var ProgressEvent = (function() { + /* + var createEvent = function(data) { + var event = document.createEvent('Events'); + event.initEvent('ProgressEvent', false, false); + if (data) { + for (var i in data) { + if (data.hasOwnProperty(i)) { + event[i] = data[i]; + } + } + if (data.target) { + // TODO: cannot call .dispatchEvent + // need to first figure out how to implement EventTarget + } + } + return event; + }; + try { + var ev = createEvent({type:"abort",target:document}); + return function ProgressEvent(type, data) { + data.type = type; + return createEvent(data); + }; + } catch(e){ + */ + return function ProgressEvent(type, dict) { + this.type = type; + this.bubbles = false; + this.cancelBubble = false; + this.cancelable = false; + this.lengthComputable = false; + this.loaded = dict && dict.loaded ? dict.loaded : 0; + this.total = dict && dict.total ? dict.total : 0; + this.target = dict && dict.target ? dict.target : null; + }; + //} +})(); + +module.exports = ProgressEvent; + +}); + +// file: lib/common/plugin/accelerometer.js +define("cordova/plugin/accelerometer", function(require, exports, module) { + +/** + * This class provides access to device accelerometer data. + * @constructor + */ +var argscheck = require('cordova/argscheck'), + utils = require("cordova/utils"), + exec = require("cordova/exec"), + Acceleration = require('cordova/plugin/Acceleration'); + +// Is the accel sensor running? +var running = false; + +// Keeps reference to watchAcceleration calls. +var timers = {}; + +// Array of listeners; used to keep track of when we should call start and stop. +var listeners = []; + +// Last returned acceleration object from native +var accel = null; + +// Tells native to start. +function start() { + exec(function(a) { + var tempListeners = listeners.slice(0); + accel = new Acceleration(a.x, a.y, a.z, a.timestamp); + for (var i = 0, l = tempListeners.length; i < l; i++) { + tempListeners[i].win(accel); + } + }, function(e) { + var tempListeners = listeners.slice(0); + for (var i = 0, l = tempListeners.length; i < l; i++) { + tempListeners[i].fail(e); + } + }, "Accelerometer", "start", []); + running = true; +} + +// Tells native to stop. +function stop() { + exec(null, null, "Accelerometer", "stop", []); + running = false; +} + +// Adds a callback pair to the listeners array +function createCallbackPair(win, fail) { + return {win:win, fail:fail}; +} + +// Removes a win/fail listener pair from the listeners array +function removeListeners(l) { + var idx = listeners.indexOf(l); + if (idx > -1) { + listeners.splice(idx, 1); + if (listeners.length === 0) { + stop(); + } + } +} + +var accelerometer = { + /** + * Asynchronously acquires the current acceleration. + * + * @param {Function} successCallback The function to call when the acceleration data is available + * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) + * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) + */ + getCurrentAcceleration: function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'accelerometer.getCurrentAcceleration', arguments); + + var p; + var win = function(a) { + removeListeners(p); + successCallback(a); + }; + var fail = function(e) { + removeListeners(p); + errorCallback && errorCallback(e); + }; + + p = createCallbackPair(win, fail); + listeners.push(p); + + if (!running) { + start(); + } + }, + + /** + * Asynchronously acquires the acceleration repeatedly at a given interval. + * + * @param {Function} successCallback The function to call each time the acceleration data is available + * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) + * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) + * @return String The watch id that must be passed to #clearWatch to stop watching. + */ + watchAcceleration: function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'accelerometer.watchAcceleration', arguments); + // Default interval (10 sec) + var frequency = (options && options.frequency && typeof options.frequency == 'number') ? options.frequency : 10000; + + // Keep reference to watch id, and report accel readings as often as defined in frequency + var id = utils.createUUID(); + + var p = createCallbackPair(function(){}, function(e) { + removeListeners(p); + errorCallback && errorCallback(e); + }); + listeners.push(p); + + timers[id] = { + timer:window.setInterval(function() { + if (accel) { + successCallback(accel); + } + }, frequency), + listeners:p + }; + + if (running) { + // If we're already running then immediately invoke the success callback + // but only if we have retrieved a value, sample code does not check for null ... + if (accel) { + successCallback(accel); + } + } else { + start(); + } + + return id; + }, + + /** + * Clears the specified accelerometer watch. + * + * @param {String} id The id of the watch returned from #watchAcceleration. + */ + clearWatch: function(id) { + // Stop javascript timer & remove from timer list + if (id && timers[id]) { + window.clearInterval(timers[id].timer); + removeListeners(timers[id].listeners); + delete timers[id]; + } + } +}; + +module.exports = accelerometer; + +}); + +// file: lib/common/plugin/accelerometer/symbols.js +define("cordova/plugin/accelerometer/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/Acceleration', 'Acceleration'); +modulemapper.defaults('cordova/plugin/accelerometer', 'navigator.accelerometer'); + +}); + +// file: lib/android/plugin/android/app.js +define("cordova/plugin/android/app", function(require, exports, module) { + +var exec = require('cordova/exec'); + +module.exports = { + /** + * Clear the resource cache. + */ + clearCache:function() { + exec(null, null, "App", "clearCache", []); + }, + + /** + * Load the url into the webview or into new browser instance. + * + * @param url The URL to load + * @param props Properties that can be passed in to the activity: + * wait: int => wait msec before loading URL + * loadingDialog: "Title,Message" => display a native loading dialog + * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error + * clearHistory: boolean => clear webview history (default=false) + * openExternal: boolean => open in a new browser (default=false) + * + * Example: + * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); + */ + loadUrl:function(url, props) { + exec(null, null, "App", "loadUrl", [url, props]); + }, + + /** + * Cancel loadUrl that is waiting to be loaded. + */ + cancelLoadUrl:function() { + exec(null, null, "App", "cancelLoadUrl", []); + }, + + /** + * Clear web history in this web view. + * Instead of BACK button loading the previous web page, it will exit the app. + */ + clearHistory:function() { + exec(null, null, "App", "clearHistory", []); + }, + + /** + * Go to previous page displayed. + * This is the same as pressing the backbutton on Android device. + */ + backHistory:function() { + exec(null, null, "App", "backHistory", []); + }, + + /** + * Override the default behavior of the Android back button. + * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. + * + * Note: The user should not have to call this method. Instead, when the user + * registers for the "backbutton" event, this is automatically done. + * + * @param override T=override, F=cancel override + */ + overrideBackbutton:function(override) { + exec(null, null, "App", "overrideBackbutton", [override]); + }, + + /** + * Exit and terminate the application. + */ + exitApp:function() { + return exec(null, null, "App", "exitApp", []); + } +}; + +}); + +// file: lib/android/plugin/android/device.js +define("cordova/plugin/android/device", function(require, exports, module) { + +var channel = require('cordova/channel'), + utils = require('cordova/utils'), + exec = require('cordova/exec'), + app = require('cordova/plugin/android/app'); + +module.exports = { + /* + * DEPRECATED + * This is only for Android. + * + * You must explicitly override the back button. + */ + overrideBackButton:function() { + console.log("Device.overrideBackButton() is deprecated. Use App.overrideBackbutton(true)."); + app.overrideBackbutton(true); + }, + + /* + * DEPRECATED + * This is only for Android. + * + * This resets the back button to the default behavior + */ + resetBackButton:function() { + console.log("Device.resetBackButton() is deprecated. Use App.overrideBackbutton(false)."); + app.overrideBackbutton(false); + }, + + /* + * DEPRECATED + * This is only for Android. + * + * This terminates the activity! + */ + exitApp:function() { + console.log("Device.exitApp() is deprecated. Use App.exitApp()."); + app.exitApp(); + } +}; + +}); + +// file: lib/android/plugin/android/nativeapiprovider.js +define("cordova/plugin/android/nativeapiprovider", function(require, exports, module) { + +var nativeApi = this._cordovaNative || require('cordova/plugin/android/promptbasednativeapi'); +var currentApi = nativeApi; + +module.exports = { + get: function() { return currentApi; }, + setPreferPrompt: function(value) { + currentApi = value ? require('cordova/plugin/android/promptbasednativeapi') : nativeApi; + }, + // Used only by tests. + set: function(value) { + currentApi = value; + } +}; + +}); + +// file: lib/android/plugin/android/notification.js +define("cordova/plugin/android/notification", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * Provides Android enhanced notification API. + */ +module.exports = { + activityStart : function(title, message) { + // If title and message not specified then mimic Android behavior of + // using default strings. + if (typeof title === "undefined" && typeof message == "undefined") { + title = "Busy"; + message = 'Please wait...'; + } + + exec(null, null, 'Notification', 'activityStart', [ title, message ]); + }, + + /** + * Close an activity dialog + */ + activityStop : function() { + exec(null, null, 'Notification', 'activityStop', []); + }, + + /** + * Display a progress dialog with progress bar that goes from 0 to 100. + * + * @param {String} + * title Title of the progress dialog. + * @param {String} + * message Message to display in the dialog. + */ + progressStart : function(title, message) { + exec(null, null, 'Notification', 'progressStart', [ title, message ]); + }, + + /** + * Close the progress dialog. + */ + progressStop : function() { + exec(null, null, 'Notification', 'progressStop', []); + }, + + /** + * Set the progress dialog value. + * + * @param {Number} + * value 0-100 + */ + progressValue : function(value) { + exec(null, null, 'Notification', 'progressValue', [ value ]); + } +}; + +}); + +// file: lib/android/plugin/android/promptbasednativeapi.js +define("cordova/plugin/android/promptbasednativeapi", function(require, exports, module) { + +module.exports = { + exec: function(service, action, callbackId, argsJson) { + return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId])); + }, + setNativeToJsBridgeMode: function(value) { + prompt(value, 'gap_bridge_mode:'); + }, + retrieveJsMessages: function() { + return prompt('', 'gap_poll:'); + } +}; + +}); + +// file: lib/android/plugin/android/storage.js +define("cordova/plugin/android/storage", function(require, exports, module) { + +var utils = require('cordova/utils'), + exec = require('cordova/exec'), + channel = require('cordova/channel'); + +var queryQueue = {}; + +/** + * SQL result set object + * PRIVATE METHOD + * @constructor + */ +var DroidDB_Rows = function() { + this.resultSet = []; // results array + this.length = 0; // number of rows +}; + +/** + * Get item from SQL result set + * + * @param row The row number to return + * @return The row object + */ +DroidDB_Rows.prototype.item = function(row) { + return this.resultSet[row]; +}; + +/** + * SQL result set that is returned to user. + * PRIVATE METHOD + * @constructor + */ +var DroidDB_Result = function() { + this.rows = new DroidDB_Rows(); +}; + +/** + * Callback from native code when query is complete. + * PRIVATE METHOD + * + * @param id Query id + */ +function completeQuery(id, data) { + var query = queryQueue[id]; + if (query) { + try { + delete queryQueue[id]; + + // Get transaction + var tx = query.tx; + + // If transaction hasn't failed + // Note: We ignore all query results if previous query + // in the same transaction failed. + if (tx && tx.queryList[id]) { + + // Save query results + var r = new DroidDB_Result(); + r.rows.resultSet = data; + r.rows.length = data.length; + try { + if (typeof query.successCallback === 'function') { + query.successCallback(query.tx, r); + } + } catch (ex) { + console.log("executeSql error calling user success callback: "+ex); + } + + tx.queryComplete(id); + } + } catch (e) { + console.log("executeSql error: "+e); + } + } +} + +/** + * Callback from native code when query fails + * PRIVATE METHOD + * + * @param reason Error message + * @param id Query id + */ +function failQuery(reason, id) { + var query = queryQueue[id]; + if (query) { + try { + delete queryQueue[id]; + + // Get transaction + var tx = query.tx; + + // If transaction hasn't failed + // Note: We ignore all query results if previous query + // in the same transaction failed. + if (tx && tx.queryList[id]) { + tx.queryList = {}; + + try { + if (typeof query.errorCallback === 'function') { + query.errorCallback(query.tx, reason); + } + } catch (ex) { + console.log("executeSql error calling user error callback: "+ex); + } + + tx.queryFailed(id, reason); + } + + } catch (e) { + console.log("executeSql error: "+e); + } + } +} + +/** + * SQL query object + * PRIVATE METHOD + * + * @constructor + * @param tx The transaction object that this query belongs to + */ +var DroidDB_Query = function(tx) { + + // Set the id of the query + this.id = utils.createUUID(); + + // Add this query to the queue + queryQueue[this.id] = this; + + // Init result + this.resultSet = []; + + // Set transaction that this query belongs to + this.tx = tx; + + // Add this query to transaction list + this.tx.queryList[this.id] = this; + + // Callbacks + this.successCallback = null; + this.errorCallback = null; + +}; + +/** + * Transaction object + * PRIVATE METHOD + * @constructor + */ +var DroidDB_Tx = function() { + + // Set the id of the transaction + this.id = utils.createUUID(); + + // Callbacks + this.successCallback = null; + this.errorCallback = null; + + // Query list + this.queryList = {}; +}; + +/** + * Mark query in transaction as complete. + * If all queries are complete, call the user's transaction success callback. + * + * @param id Query id + */ +DroidDB_Tx.prototype.queryComplete = function(id) { + delete this.queryList[id]; + + // If no more outstanding queries, then fire transaction success + if (this.successCallback) { + var count = 0; + var i; + for (i in this.queryList) { + if (this.queryList.hasOwnProperty(i)) { + count++; + } + } + if (count === 0) { + try { + this.successCallback(); + } catch(e) { + console.log("Transaction error calling user success callback: " + e); + } + } + } +}; + +/** + * Mark query in transaction as failed. + * + * @param id Query id + * @param reason Error message + */ +DroidDB_Tx.prototype.queryFailed = function(id, reason) { + + // The sql queries in this transaction have already been run, since + // we really don't have a real transaction implemented in native code. + // However, the user callbacks for the remaining sql queries in transaction + // will not be called. + this.queryList = {}; + + if (this.errorCallback) { + try { + this.errorCallback(reason); + } catch(e) { + console.log("Transaction error calling user error callback: " + e); + } + } +}; + +/** + * Execute SQL statement + * + * @param sql SQL statement to execute + * @param params Statement parameters + * @param successCallback Success callback + * @param errorCallback Error callback + */ +DroidDB_Tx.prototype.executeSql = function(sql, params, successCallback, errorCallback) { + + // Init params array + if (typeof params === 'undefined') { + params = []; + } + + // Create query and add to queue + var query = new DroidDB_Query(this); + queryQueue[query.id] = query; + + // Save callbacks + query.successCallback = successCallback; + query.errorCallback = errorCallback; + + // Call native code + exec(null, null, "Storage", "executeSql", [sql, params, query.id]); +}; + +var DatabaseShell = function() { +}; + +/** + * Start a transaction. + * Does not support rollback in event of failure. + * + * @param process {Function} The transaction function + * @param successCallback {Function} + * @param errorCallback {Function} + */ +DatabaseShell.prototype.transaction = function(process, errorCallback, successCallback) { + var tx = new DroidDB_Tx(); + tx.successCallback = successCallback; + tx.errorCallback = errorCallback; + try { + process(tx); + } catch (e) { + console.log("Transaction error: "+e); + if (tx.errorCallback) { + try { + tx.errorCallback(e); + } catch (ex) { + console.log("Transaction error calling user error callback: "+e); + } + } + } +}; + +/** + * Open database + * + * @param name Database name + * @param version Database version + * @param display_name Database display name + * @param size Database size in bytes + * @return Database object + */ +var DroidDB_openDatabase = function(name, version, display_name, size) { + exec(null, null, "Storage", "openDatabase", [name, version, display_name, size]); + var db = new DatabaseShell(); + return db; +}; + + +module.exports = { + openDatabase:DroidDB_openDatabase, + failQuery:failQuery, + completeQuery:completeQuery +}; + +}); + +// file: lib/android/plugin/android/storage/openDatabase.js +define("cordova/plugin/android/storage/openDatabase", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'), + storage = require('cordova/plugin/android/storage'); + +var originalOpenDatabase = modulemapper.getOriginalSymbol(window, 'openDatabase'); + +module.exports = function(name, version, desc, size) { + // First patch WebSQL if necessary + if (!originalOpenDatabase) { + // Not defined, create an openDatabase function for all to use! + return storage.openDatabase.apply(this, arguments); + } + + // Defined, but some Android devices will throw a SECURITY_ERR - + // so we wrap the whole thing in a try-catch and shim in our own + // if the device has Android bug 16175. + try { + return originalOpenDatabase(name, version, desc, size); + } catch (ex) { + if (ex.code !== 18) { + throw ex; + } + } + return storage.openDatabase(name, version, desc, size); +}; + + + +}); + +// file: lib/android/plugin/android/storage/symbols.js +define("cordova/plugin/android/storage/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDatabase'); + + +}); + +// file: lib/common/plugin/battery.js +define("cordova/plugin/battery", function(require, exports, module) { + +/** + * This class contains information about the current battery status. + * @constructor + */ +var cordova = require('cordova'), + exec = require('cordova/exec'); + +function handlers() { + return battery.channels.batterystatus.numHandlers + + battery.channels.batterylow.numHandlers + + battery.channels.batterycritical.numHandlers; +} + +var Battery = function() { + this._level = null; + this._isPlugged = null; + // Create new event handlers on the window (returns a channel instance) + this.channels = { + batterystatus:cordova.addWindowEventHandler("batterystatus"), + batterylow:cordova.addWindowEventHandler("batterylow"), + batterycritical:cordova.addWindowEventHandler("batterycritical") + }; + for (var key in this.channels) { + this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange; + } +}; +/** + * Event handlers for when callbacks get registered for the battery. + * Keep track of how many handlers we have so we can start and stop the native battery listener + * appropriately (and hopefully save on battery life!). + */ +Battery.onHasSubscribersChange = function() { + // If we just registered the first handler, make sure native listener is started. + if (this.numHandlers === 1 && handlers() === 1) { + exec(battery._status, battery._error, "Battery", "start", []); + } else if (handlers() === 0) { + exec(null, null, "Battery", "stop", []); + } +}; + +/** + * Callback for battery status + * + * @param {Object} info keys: level, isPlugged + */ +Battery.prototype._status = function(info) { + if (info) { + var me = battery; + var level = info.level; + if (me._level !== level || me._isPlugged !== info.isPlugged) { + // Fire batterystatus event + cordova.fireWindowEvent("batterystatus", info); + + // Fire low battery event + if (level === 20 || level === 5) { + if (level === 20) { + cordova.fireWindowEvent("batterylow", info); + } + else { + cordova.fireWindowEvent("batterycritical", info); + } + } + } + me._level = level; + me._isPlugged = info.isPlugged; + } +}; + +/** + * Error callback for battery start + */ +Battery.prototype._error = function(e) { + console.log("Error initializing Battery: " + e); +}; + +var battery = new Battery(); + +module.exports = battery; + +}); + +// file: lib/common/plugin/battery/symbols.js +define("cordova/plugin/battery/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/battery', 'navigator.battery'); + +}); + +// file: lib/common/plugin/camera/symbols.js +define("cordova/plugin/camera/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/Camera', 'navigator.camera'); +modulemapper.defaults('cordova/plugin/CameraConstants', 'Camera'); +modulemapper.defaults('cordova/plugin/CameraPopoverOptions', 'CameraPopoverOptions'); + +}); + +// file: lib/common/plugin/capture.js +define("cordova/plugin/capture", function(require, exports, module) { + +var exec = require('cordova/exec'), + MediaFile = require('cordova/plugin/MediaFile'); + +/** + * Launches a capture of different types. + * + * @param (DOMString} type + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureVideoOptions} options + */ +function _capture(type, successCallback, errorCallback, options) { + var win = function(pluginResult) { + var mediaFiles = []; + var i; + for (i = 0; i < pluginResult.length; i++) { + var mediaFile = new MediaFile(); + mediaFile.name = pluginResult[i].name; + mediaFile.fullPath = pluginResult[i].fullPath; + mediaFile.type = pluginResult[i].type; + mediaFile.lastModifiedDate = pluginResult[i].lastModifiedDate; + mediaFile.size = pluginResult[i].size; + mediaFiles.push(mediaFile); + } + successCallback(mediaFiles); + }; + exec(win, errorCallback, "Capture", type, [options]); +} +/** + * The Capture interface exposes an interface to the camera and microphone of the hosting device. + */ +function Capture() { + this.supportedAudioModes = []; + this.supportedImageModes = []; + this.supportedVideoModes = []; +} + +/** + * Launch audio recorder application for recording audio clip(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureAudioOptions} options + */ +Capture.prototype.captureAudio = function(successCallback, errorCallback, options){ + _capture("captureAudio", successCallback, errorCallback, options); +}; + +/** + * Launch camera application for taking image(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureImageOptions} options + */ +Capture.prototype.captureImage = function(successCallback, errorCallback, options){ + _capture("captureImage", successCallback, errorCallback, options); +}; + +/** + * Launch device camera application for recording video(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureVideoOptions} options + */ +Capture.prototype.captureVideo = function(successCallback, errorCallback, options){ + _capture("captureVideo", successCallback, errorCallback, options); +}; + + +module.exports = new Capture(); + +}); + +// file: lib/common/plugin/capture/symbols.js +define("cordova/plugin/capture/symbols", function(require, exports, module) { + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/CaptureError', 'CaptureError'); +modulemapper.clobbers('cordova/plugin/CaptureAudioOptions', 'CaptureAudioOptions'); +modulemapper.clobbers('cordova/plugin/CaptureImageOptions', 'CaptureImageOptions'); +modulemapper.clobbers('cordova/plugin/CaptureVideoOptions', 'CaptureVideoOptions'); +modulemapper.clobbers('cordova/plugin/ConfigurationData', 'ConfigurationData'); +modulemapper.clobbers('cordova/plugin/MediaFile', 'MediaFile'); +modulemapper.clobbers('cordova/plugin/MediaFileData', 'MediaFileData'); +modulemapper.clobbers('cordova/plugin/capture', 'navigator.device.capture'); + +}); + +// file: lib/common/plugin/compass.js +define("cordova/plugin/compass", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + utils = require('cordova/utils'), + CompassHeading = require('cordova/plugin/CompassHeading'), + CompassError = require('cordova/plugin/CompassError'), + timers = {}, + compass = { + /** + * Asynchronously acquires the current heading. + * @param {Function} successCallback The function to call when the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {CompassOptions} options The options for getting the heading data (not used). + */ + getCurrentHeading:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'compass.getCurrentHeading', arguments); + + var win = function(result) { + var ch = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp); + successCallback(ch); + }; + var fail = errorCallback && function(code) { + var ce = new CompassError(code); + errorCallback(ce); + }; + + // Get heading + exec(win, fail, "Compass", "getHeading", [options]); + }, + + /** + * Asynchronously acquires the heading repeatedly at a given interval. + * @param {Function} successCallback The function to call each time the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {HeadingOptions} options The options for getting the heading data + * such as timeout and the frequency of the watch. For iOS, filter parameter + * specifies to watch via a distance filter rather than time. + */ + watchHeading:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'compass.watchHeading', arguments); + // Default interval (100 msec) + var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100; + var filter = (options !== undefined && options.filter !== undefined) ? options.filter : 0; + + var id = utils.createUUID(); + if (filter > 0) { + // is an iOS request for watch by filter, no timer needed + timers[id] = "iOS"; + compass.getCurrentHeading(successCallback, errorCallback, options); + } else { + // Start watch timer to get headings + timers[id] = window.setInterval(function() { + compass.getCurrentHeading(successCallback, errorCallback); + }, frequency); + } + + return id; + }, + + /** + * Clears the specified heading watch. + * @param {String} watchId The ID of the watch returned from #watchHeading. + */ + clearWatch:function(id) { + // Stop javascript timer & remove from timer list + if (id && timers[id]) { + if (timers[id] != "iOS") { + clearInterval(timers[id]); + } else { + // is iOS watch by filter so call into device to stop + exec(null, null, "Compass", "stopHeading", []); + } + delete timers[id]; + } + } + }; + +module.exports = compass; + +}); + +// file: lib/common/plugin/compass/symbols.js +define("cordova/plugin/compass/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/CompassHeading', 'CompassHeading'); +modulemapper.clobbers('cordova/plugin/CompassError', 'CompassError'); +modulemapper.clobbers('cordova/plugin/compass', 'navigator.compass'); + +}); + +// file: lib/common/plugin/console-via-logger.js +define("cordova/plugin/console-via-logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ + +var logger = require("cordova/plugin/logger"); +var utils = require("cordova/utils"); + +//------------------------------------------------------------------------------ +// object that we're exporting +//------------------------------------------------------------------------------ +var console = module.exports; + +//------------------------------------------------------------------------------ +// copy of the original console object +//------------------------------------------------------------------------------ +var WinConsole = window.console; + +//------------------------------------------------------------------------------ +// whether to use the logger +//------------------------------------------------------------------------------ +var UseLogger = false; + +//------------------------------------------------------------------------------ +// Timers +//------------------------------------------------------------------------------ +var Timers = {}; + +//------------------------------------------------------------------------------ +// used for unimplemented methods +//------------------------------------------------------------------------------ +function noop() {} + +//------------------------------------------------------------------------------ +// used for unimplemented methods +//------------------------------------------------------------------------------ +console.useLogger = function (value) { + if (arguments.length) UseLogger = !!value; + + if (UseLogger) { + if (logger.useConsole()) { + throw new Error("console and logger are too intertwingly"); + } + } + + return UseLogger; +}; + +//------------------------------------------------------------------------------ +console.log = function() { + if (logger.useConsole()) return; + logger.log.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.error = function() { + if (logger.useConsole()) return; + logger.error.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.warn = function() { + if (logger.useConsole()) return; + logger.warn.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.info = function() { + if (logger.useConsole()) return; + logger.info.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.debug = function() { + if (logger.useConsole()) return; + logger.debug.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.assert = function(expression) { + if (expression) return; + + var message = utils.vformat(arguments[1], [].slice.call(arguments, 2)); + console.log("ASSERT: " + message); +}; + +//------------------------------------------------------------------------------ +console.clear = function() {}; + +//------------------------------------------------------------------------------ +console.dir = function(object) { + console.log("%o", object); +}; + +//------------------------------------------------------------------------------ +console.dirxml = function(node) { + console.log(node.innerHTML); +}; + +//------------------------------------------------------------------------------ +console.trace = noop; + +//------------------------------------------------------------------------------ +console.group = console.log; + +//------------------------------------------------------------------------------ +console.groupCollapsed = console.log; + +//------------------------------------------------------------------------------ +console.groupEnd = noop; + +//------------------------------------------------------------------------------ +console.time = function(name) { + Timers[name] = new Date().valueOf(); +}; + +//------------------------------------------------------------------------------ +console.timeEnd = function(name) { + var timeStart = Timers[name]; + if (!timeStart) { + console.warn("unknown timer: " + name); + return; + } + + var timeElapsed = new Date().valueOf() - timeStart; + console.log(name + ": " + timeElapsed + "ms"); +}; + +//------------------------------------------------------------------------------ +console.timeStamp = noop; + +//------------------------------------------------------------------------------ +console.profile = noop; + +//------------------------------------------------------------------------------ +console.profileEnd = noop; + +//------------------------------------------------------------------------------ +console.count = noop; + +//------------------------------------------------------------------------------ +console.exception = console.log; + +//------------------------------------------------------------------------------ +console.table = function(data, columns) { + console.log("%o", data); +}; + +//------------------------------------------------------------------------------ +// return a new function that calls both functions passed as args +//------------------------------------------------------------------------------ +function wrappedOrigCall(orgFunc, newFunc) { + return function() { + var args = [].slice.call(arguments); + try { orgFunc.apply(WinConsole, args); } catch (e) {} + try { newFunc.apply(console, args); } catch (e) {} + }; +} + +//------------------------------------------------------------------------------ +// For every function that exists in the original console object, that +// also exists in the new console object, wrap the new console method +// with one that calls both +//------------------------------------------------------------------------------ +for (var key in console) { + if (typeof WinConsole[key] == "function") { + console[key] = wrappedOrigCall(WinConsole[key], console[key]); + } +} + +}); + +// file: lib/common/plugin/contacts.js +define("cordova/plugin/contacts", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + ContactError = require('cordova/plugin/ContactError'), + utils = require('cordova/utils'), + Contact = require('cordova/plugin/Contact'); + +/** +* Represents a group of Contacts. +* @constructor +*/ +var contacts = { + /** + * Returns an array of Contacts matching the search criteria. + * @param fields that should be searched + * @param successCB success callback + * @param errorCB error callback + * @param {ContactFindOptions} options that can be applied to contact searching + * @return array of Contacts matching search criteria + */ + find:function(fields, successCB, errorCB, options) { + argscheck.checkArgs('afFO', 'contacts.find', arguments); + if (!fields.length) { + errorCB && errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR)); + } else { + var win = function(result) { + var cs = []; + for (var i = 0, l = result.length; i < l; i++) { + cs.push(contacts.create(result[i])); + } + successCB(cs); + }; + exec(win, errorCB, "Contacts", "search", [fields, options]); + } + }, + + /** + * This function creates a new contact, but it does not persist the contact + * to device storage. To persist the contact to device storage, invoke + * contact.save(). + * @param properties an object whose properties will be examined to create a new Contact + * @returns new Contact object + */ + create:function(properties) { + argscheck.checkArgs('O', 'contacts.create', arguments); + var contact = new Contact(); + for (var i in properties) { + if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) { + contact[i] = properties[i]; + } + } + return contact; + } +}; + +module.exports = contacts; + +}); + +// file: lib/common/plugin/contacts/symbols.js +define("cordova/plugin/contacts/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/contacts', 'navigator.contacts'); +modulemapper.clobbers('cordova/plugin/Contact', 'Contact'); +modulemapper.clobbers('cordova/plugin/ContactAddress', 'ContactAddress'); +modulemapper.clobbers('cordova/plugin/ContactError', 'ContactError'); +modulemapper.clobbers('cordova/plugin/ContactField', 'ContactField'); +modulemapper.clobbers('cordova/plugin/ContactFindOptions', 'ContactFindOptions'); +modulemapper.clobbers('cordova/plugin/ContactName', 'ContactName'); +modulemapper.clobbers('cordova/plugin/ContactOrganization', 'ContactOrganization'); + +}); + +// file: lib/common/plugin/device.js +define("cordova/plugin/device", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + channel = require('cordova/channel'), + utils = require('cordova/utils'), + exec = require('cordova/exec'); + +// Tell cordova channel to wait on the CordovaInfoReady event +channel.waitForInitialization('onCordovaInfoReady'); + +/** + * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the + * phone, etc. + * @constructor + */ +function Device() { + this.available = false; + this.platform = null; + this.version = null; + this.name = null; + this.uuid = null; + this.cordova = null; + this.model = null; + + var me = this; + + channel.onCordovaReady.subscribe(function() { + me.getInfo(function(info) { + me.available = true; + me.platform = info.platform; + me.version = info.version; + me.name = info.name; + me.uuid = info.uuid; + me.cordova = info.cordova; + me.model = info.model; + channel.onCordovaInfoReady.fire(); + },function(e) { + me.available = false; + utils.alert("[ERROR] Error initializing Cordova: " + e); + }); + }); +} + +/** + * Get device info + * + * @param {Function} successCallback The function to call when the heading data is available + * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) + */ +Device.prototype.getInfo = function(successCallback, errorCallback) { + argscheck.checkArgs('fF', 'Device.getInfo', arguments); + exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); +}; + +module.exports = new Device(); + +}); + +// file: lib/android/plugin/device/symbols.js +define("cordova/plugin/device/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/device', 'device'); +modulemapper.merges('cordova/plugin/android/device', 'device'); + +}); + +// file: lib/common/plugin/echo.js +define("cordova/plugin/echo", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback. + * @param successCallback invoked with a FileSystem object + * @param errorCallback invoked if error occurs retrieving file system + * @param message The string to be echoed. + * @param forceAsync Whether to force an async return value (for testing native->js bridge). + */ +module.exports = function(successCallback, errorCallback, message, forceAsync) { + var action = forceAsync ? 'echoAsync' : 'echo'; + if (!forceAsync && message.constructor == ArrayBuffer) { + action = 'echoArrayBuffer'; + } + exec(successCallback, errorCallback, "Echo", action, [message]); +}; + + +}); + +// file: lib/android/plugin/file/symbols.js +define("cordova/plugin/file/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'), + symbolshelper = require('cordova/plugin/file/symbolshelper'); + +symbolshelper(modulemapper.clobbers); + +}); + +// file: lib/common/plugin/file/symbolshelper.js +define("cordova/plugin/file/symbolshelper", function(require, exports, module) { + +module.exports = function(exportFunc) { + exportFunc('cordova/plugin/DirectoryEntry', 'DirectoryEntry'); + exportFunc('cordova/plugin/DirectoryReader', 'DirectoryReader'); + exportFunc('cordova/plugin/Entry', 'Entry'); + exportFunc('cordova/plugin/File', 'File'); + exportFunc('cordova/plugin/FileEntry', 'FileEntry'); + exportFunc('cordova/plugin/FileError', 'FileError'); + exportFunc('cordova/plugin/FileReader', 'FileReader'); + exportFunc('cordova/plugin/FileSystem', 'FileSystem'); + exportFunc('cordova/plugin/FileUploadOptions', 'FileUploadOptions'); + exportFunc('cordova/plugin/FileUploadResult', 'FileUploadResult'); + exportFunc('cordova/plugin/FileWriter', 'FileWriter'); + exportFunc('cordova/plugin/Flags', 'Flags'); + exportFunc('cordova/plugin/LocalFileSystem', 'LocalFileSystem'); + exportFunc('cordova/plugin/Metadata', 'Metadata'); + exportFunc('cordova/plugin/ProgressEvent', 'ProgressEvent'); + exportFunc('cordova/plugin/requestFileSystem', 'requestFileSystem'); + exportFunc('cordova/plugin/resolveLocalFileSystemURI', 'resolveLocalFileSystemURI'); +}; + +}); + +// file: lib/common/plugin/filetransfer/symbols.js +define("cordova/plugin/filetransfer/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/FileTransfer', 'FileTransfer'); +modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError'); + +}); + +// file: lib/common/plugin/geolocation.js +define("cordova/plugin/geolocation", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'), + PositionError = require('cordova/plugin/PositionError'), + Position = require('cordova/plugin/Position'); + +var timers = {}; // list of timers in use + +// Returns default params, overrides if provided with values +function parseParameters(options) { + var opt = { + maximumAge: 0, + enableHighAccuracy: false, + timeout: Infinity + }; + + if (options) { + if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) { + opt.maximumAge = options.maximumAge; + } + if (options.enableHighAccuracy !== undefined) { + opt.enableHighAccuracy = options.enableHighAccuracy; + } + if (options.timeout !== undefined && !isNaN(options.timeout)) { + if (options.timeout < 0) { + opt.timeout = 0; + } else { + opt.timeout = options.timeout; + } + } + } + + return opt; +} + +// Returns a timeout failure, closed over a specified timeout value and error callback. +function createTimeout(errorCallback, timeout) { + var t = setTimeout(function() { + clearTimeout(t); + t = null; + errorCallback({ + code:PositionError.TIMEOUT, + message:"Position retrieval timed out." + }); + }, timeout); + return t; +} + +var geolocation = { + lastPosition:null, // reference to last known (cached) position returned + /** + * Asynchronously acquires the current position. + * + * @param {Function} successCallback The function to call when the position data is available + * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL) + * @param {PositionOptions} options The options for getting the position data. (OPTIONAL) + */ + getCurrentPosition:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); + options = parseParameters(options); + + // Timer var that will fire an error callback if no position is retrieved from native + // before the "timeout" param provided expires + var timeoutTimer = {timer:null}; + + var win = function(p) { + clearTimeout(timeoutTimer.timer); + if (!(timeoutTimer.timer)) { + // Timeout already happened, or native fired error callback for + // this geo request. + // Don't continue with success callback. + return; + } + var pos = new Position( + { + latitude:p.latitude, + longitude:p.longitude, + altitude:p.altitude, + accuracy:p.accuracy, + heading:p.heading, + velocity:p.velocity, + altitudeAccuracy:p.altitudeAccuracy + }, + (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp))) + ); + geolocation.lastPosition = pos; + successCallback(pos); + }; + var fail = function(e) { + clearTimeout(timeoutTimer.timer); + timeoutTimer.timer = null; + var err = new PositionError(e.code, e.message); + if (errorCallback) { + errorCallback(err); + } + }; + + // Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just + // fire the success callback with the cached position. + if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) { + successCallback(geolocation.lastPosition); + // If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object. + } else if (options.timeout === 0) { + fail({ + code:PositionError.TIMEOUT, + message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter." + }); + // Otherwise we have to call into native to retrieve a position. + } else { + if (options.timeout !== Infinity) { + // If the timeout value was not set to Infinity (default), then + // set up a timeout function that will fire the error callback + // if no successful position was retrieved before timeout expired. + timeoutTimer.timer = createTimeout(fail, options.timeout); + } else { + // This is here so the check in the win function doesn't mess stuff up + // may seem weird but this guarantees timeoutTimer is + // always truthy before we call into native + timeoutTimer.timer = true; + } + exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]); + } + return timeoutTimer; + }, + /** + * Asynchronously watches the geolocation for changes to geolocation. When a change occurs, + * the successCallback is called with the new location. + * + * @param {Function} successCallback The function to call each time the location data is available + * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL) + * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL) + * @return String The watch id that must be passed to #clearWatch to stop watching. + */ + watchPosition:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); + options = parseParameters(options); + + var id = utils.createUUID(); + + // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition + timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options); + + var fail = function(e) { + clearTimeout(timers[id].timer); + var err = new PositionError(e.code, e.message); + if (errorCallback) { + errorCallback(err); + } + }; + + var win = function(p) { + clearTimeout(timers[id].timer); + if (options.timeout !== Infinity) { + timers[id].timer = createTimeout(fail, options.timeout); + } + var pos = new Position( + { + latitude:p.latitude, + longitude:p.longitude, + altitude:p.altitude, + accuracy:p.accuracy, + heading:p.heading, + velocity:p.velocity, + altitudeAccuracy:p.altitudeAccuracy + }, + (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp))) + ); + geolocation.lastPosition = pos; + successCallback(pos); + }; + + exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]); + + return id; + }, + /** + * Clears the specified heading watch. + * + * @param {String} id The ID of the watch returned from #watchPosition + */ + clearWatch:function(id) { + if (id && timers[id] !== undefined) { + clearTimeout(timers[id].timer); + timers[id].timer = false; + exec(null, null, "Geolocation", "clearWatch", [id]); + } + } +}; + +module.exports = geolocation; + +}); + +// file: lib/common/plugin/geolocation/symbols.js +define("cordova/plugin/geolocation/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/geolocation', 'navigator.geolocation'); +modulemapper.clobbers('cordova/plugin/PositionError', 'PositionError'); +modulemapper.clobbers('cordova/plugin/Position', 'Position'); +modulemapper.clobbers('cordova/plugin/Coordinates', 'Coordinates'); + +}); + +// file: lib/common/plugin/globalization.js +define("cordova/plugin/globalization", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + GlobalizationError = require('cordova/plugin/GlobalizationError'); + +var globalization = { + +/** +* Returns the string identifier for the client's current language. +* It returns the language identifier string to the successCB callback with a +* properties object as a parameter. If there is an error getting the language, +* then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {String}: The language identifier +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getPreferredLanguage(function (language) {alert('language:' + language.value + '\n');}, +* function () {}); +*/ +getPreferredLanguage:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getPreferredLanguage', arguments); + exec(successCB, failureCB, "Globalization","getPreferredLanguage", []); +}, + +/** +* Returns the string identifier for the client's current locale setting. +* It returns the locale identifier string to the successCB callback with a +* properties object as a parameter. If there is an error getting the locale, +* then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {String}: The locale identifier +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getLocaleName(function (locale) {alert('locale:' + locale.value + '\n');}, +* function () {}); +*/ +getLocaleName:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getLocaleName', arguments); + exec(successCB, failureCB, "Globalization","getLocaleName", []); +}, + + +/** +* Returns a date formatted as a string according to the client's user preferences and +* calendar using the time zone of the client. It returns the formatted date string to the +* successCB callback with a properties object as a parameter. If there is an error +* formatting the date, then the errorCB callback is invoked. +* +* The defaults are: formatLenght="short" and selector="date and time" +* +* @param {Date} date +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.value {String}: The localized date string +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.dateToString(new Date(), +* function (date) {alert('date:' + date.value + '\n');}, +* function (errorCode) {alert(errorCode);}, +* {formatLength:'short'}); +*/ +dateToString:function(date, successCB, failureCB, options) { + argscheck.checkArgs('dfFO', 'Globalization.dateToString', arguments); + var dateValue = date.valueOf(); + exec(successCB, failureCB, "Globalization", "dateToString", [{"date": dateValue, "options": options}]); +}, + + +/** +* Parses a date formatted as a string according to the client's user +* preferences and calendar using the time zone of the client and returns +* the corresponding date object. It returns the date to the successCB +* callback with a properties object as a parameter. If there is an error +* parsing the date string, then the errorCB callback is invoked. +* +* The defaults are: formatLength="short" and selector="date and time" +* +* @param {String} dateString +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.year {Number}: The four digit year +* Object.month {Number}: The month from (0 - 11) +* Object.day {Number}: The day from (1 - 31) +* Object.hour {Number}: The hour from (0 - 23) +* Object.minute {Number}: The minute from (0 - 59) +* Object.second {Number}: The second from (0 - 59) +* Object.millisecond {Number}: The milliseconds (from 0 - 999), +* not available on all platforms +* +* @error GlobalizationError.PARSING_ERROR +* +* Example +* globalization.stringToDate('4/11/2011', +* function (date) { alert('Month:' + date.month + '\n' + +* 'Day:' + date.day + '\n' + +* 'Year:' + date.year + '\n');}, +* function (errorCode) {alert(errorCode);}, +* {selector:'date'}); +*/ +stringToDate:function(dateString, successCB, failureCB, options) { + argscheck.checkArgs('sfFO', 'Globalization.stringToDate', arguments); + exec(successCB, failureCB, "Globalization", "stringToDate", [{"dateString": dateString, "options": options}]); +}, + + +/** +* Returns a pattern string for formatting and parsing dates according to the client's +* user preferences. It returns the pattern to the successCB callback with a +* properties object as a parameter. If there is an error obtaining the pattern, +* then the errorCB callback is invoked. +* +* The defaults are: formatLength="short" and selector="date and time" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.pattern {String}: The date and time pattern for formatting and parsing dates. +* The patterns follow Unicode Technical Standard #35 +* http://unicode.org/reports/tr35/tr35-4.html +* Object.timezone {String}: The abbreviated name of the time zone on the client +* Object.utc_offset {Number}: The current difference in seconds between the client's +* time zone and coordinated universal time. +* Object.dst_offset {Number}: The current daylight saving time offset in seconds +* between the client's non-daylight saving's time zone +* and the client's daylight saving's time zone. +* +* @error GlobalizationError.PATTERN_ERROR +* +* Example +* globalization.getDatePattern( +* function (date) {alert('pattern:' + date.pattern + '\n');}, +* function () {}, +* {formatLength:'short'}); +*/ +getDatePattern:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getDatePattern', arguments); + exec(successCB, failureCB, "Globalization", "getDatePattern", [{"options": options}]); +}, + + +/** +* Returns an array of either the names of the months or days of the week +* according to the client's user preferences and calendar. It returns the array of names to the +* successCB callback with a properties object as a parameter. If there is an error obtaining the +* names, then the errorCB callback is invoked. +* +* The defaults are: type="wide" and item="months" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'narrow' or 'wide' +* item {String}: 'months', or 'days' +* +* @return Object.value {Array{String}}: The array of names starting from either +* the first month in the year or the +* first day of the week. +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getDateNames(function (names) { +* for(var i = 0; i < names.value.length; i++) { +* alert('Month:' + names.value[i] + '\n');}}, +* function () {}); +*/ +getDateNames:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getDateNames', arguments); + exec(successCB, failureCB, "Globalization", "getDateNames", [{"options": options}]); +}, + +/** +* Returns whether daylight savings time is in effect for a given date using the client's +* time zone and calendar. It returns whether or not daylight savings time is in effect +* to the successCB callback with a properties object as a parameter. If there is an error +* reading the date, then the errorCB callback is invoked. +* +* @param {Date} date +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.dst {Boolean}: The value "true" indicates that daylight savings time is +* in effect for the given date and "false" indicate that it is not. +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.isDayLightSavingsTime(new Date(), +* function (date) {alert('dst:' + date.dst + '\n');} +* function () {}); +*/ +isDayLightSavingsTime:function(date, successCB, failureCB) { + argscheck.checkArgs('dfF', 'Globalization.isDayLightSavingsTime', arguments); + var dateValue = date.valueOf(); + exec(successCB, failureCB, "Globalization", "isDayLightSavingsTime", [{"date": dateValue}]); +}, + +/** +* Returns the first day of the week according to the client's user preferences and calendar. +* The days of the week are numbered starting from 1 where 1 is considered to be Sunday. +* It returns the day to the successCB callback with a properties object as a parameter. +* If there is an error obtaining the pattern, then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {Number}: The number of the first day of the week. +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getFirstDayOfWeek(function (day) +* { alert('Day:' + day.value + '\n');}, +* function () {}); +*/ +getFirstDayOfWeek:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getFirstDayOfWeek', arguments); + exec(successCB, failureCB, "Globalization", "getFirstDayOfWeek", []); +}, + + +/** +* Returns a number formatted as a string according to the client's user preferences. +* It returns the formatted number string to the successCB callback with a properties object as a +* parameter. If there is an error formatting the number, then the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {Number} number +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.value {String}: The formatted number string. +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.numberToString(3.25, +* function (number) {alert('number:' + number.value + '\n');}, +* function () {}, +* {type:'decimal'}); +*/ +numberToString:function(number, successCB, failureCB, options) { + argscheck.checkArgs('nfFO', 'Globalization.numberToString', arguments); + exec(successCB, failureCB, "Globalization", "numberToString", [{"number": number, "options": options}]); +}, + +/** +* Parses a number formatted as a string according to the client's user preferences and +* returns the corresponding number. It returns the number to the successCB callback with a +* properties object as a parameter. If there is an error parsing the number string, then +* the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {String} numberString +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.value {Number}: The parsed number. +* +* @error GlobalizationError.PARSING_ERROR +* +* Example +* globalization.stringToNumber('1234.56', +* function (number) {alert('Number:' + number.value + '\n');}, +* function () { alert('Error parsing number');}); +*/ +stringToNumber:function(numberString, successCB, failureCB, options) { + argscheck.checkArgs('sfFO', 'Globalization.stringToNumber', arguments); + exec(successCB, failureCB, "Globalization", "stringToNumber", [{"numberString": numberString, "options": options}]); +}, + +/** +* Returns a pattern string for formatting and parsing numbers according to the client's user +* preferences. It returns the pattern to the successCB callback with a properties object as a +* parameter. If there is an error obtaining the pattern, then the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.pattern {String}: The number pattern for formatting and parsing numbers. +* The patterns follow Unicode Technical Standard #35. +* http://unicode.org/reports/tr35/tr35-4.html +* Object.symbol {String}: The symbol to be used when formatting and parsing +* e.g., percent or currency symbol. +* Object.fraction {Number}: The number of fractional digits to use when parsing and +* formatting numbers. +* Object.rounding {Number}: The rounding increment to use when parsing and formatting. +* Object.positive {String}: The symbol to use for positive numbers when parsing and formatting. +* Object.negative: {String}: The symbol to use for negative numbers when parsing and formatting. +* Object.decimal: {String}: The decimal symbol to use for parsing and formatting. +* Object.grouping: {String}: The grouping symbol to use for parsing and formatting. +* +* @error GlobalizationError.PATTERN_ERROR +* +* Example +* globalization.getNumberPattern( +* function (pattern) {alert('Pattern:' + pattern.pattern + '\n');}, +* function () {}); +*/ +getNumberPattern:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getNumberPattern', arguments); + exec(successCB, failureCB, "Globalization", "getNumberPattern", [{"options": options}]); +}, + +/** +* Returns a pattern string for formatting and parsing currency values according to the client's +* user preferences and ISO 4217 currency code. It returns the pattern to the successCB callback with a +* properties object as a parameter. If there is an error obtaining the pattern, then the errorCB +* callback is invoked. +* +* @param {String} currencyCode +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.pattern {String}: The currency pattern for formatting and parsing currency values. +* The patterns follow Unicode Technical Standard #35 +* http://unicode.org/reports/tr35/tr35-4.html +* Object.code {String}: The ISO 4217 currency code for the pattern. +* Object.fraction {Number}: The number of fractional digits to use when parsing and +* formatting currency. +* Object.rounding {Number}: The rounding increment to use when parsing and formatting. +* Object.decimal: {String}: The decimal symbol to use for parsing and formatting. +* Object.grouping: {String}: The grouping symbol to use for parsing and formatting. +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.getCurrencyPattern('EUR', +* function (currency) {alert('Pattern:' + currency.pattern + '\n');} +* function () {}); +*/ +getCurrencyPattern:function(currencyCode, successCB, failureCB) { + argscheck.checkArgs('sfF', 'Globalization.getCurrencyPattern', arguments); + exec(successCB, failureCB, "Globalization", "getCurrencyPattern", [{"currencyCode": currencyCode}]); +} + +}; + +module.exports = globalization; + +}); + +// file: lib/common/plugin/globalization/symbols.js +define("cordova/plugin/globalization/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/globalization', 'navigator.globalization'); +modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError'); + +}); + +// file: lib/android/plugin/inappbrowser/symbols.js +define("cordova/plugin/inappbrowser/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/InAppBrowser', 'open'); + +}); + +// file: lib/common/plugin/logger.js +define("cordova/plugin/logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ +// The logger module exports the following properties/functions: +// +// LOG - constant for the level LOG +// ERROR - constant for the level ERROR +// WARN - constant for the level WARN +// INFO - constant for the level INFO +// DEBUG - constant for the level DEBUG +// logLevel() - returns current log level +// logLevel(value) - sets and returns a new log level +// useConsole() - returns whether logger is using console +// useConsole(value) - sets and returns whether logger is using console +// log(message,...) - logs a message at level LOG +// error(message,...) - logs a message at level ERROR +// warn(message,...) - logs a message at level WARN +// info(message,...) - logs a message at level INFO +// debug(message,...) - logs a message at level DEBUG +// logLevel(level,message,...) - logs a message specified level +// +//------------------------------------------------------------------------------ + +var logger = exports; + +var exec = require('cordova/exec'); +var utils = require('cordova/utils'); + +var UseConsole = true; +var Queued = []; +var DeviceReady = false; +var CurrentLevel; + +/** + * Logging levels + */ + +var Levels = [ + "LOG", + "ERROR", + "WARN", + "INFO", + "DEBUG" +]; + +/* + * add the logging levels to the logger object and + * to a separate levelsMap object for testing + */ + +var LevelsMap = {}; +for (var i=0; i CurrentLevel) return; + + // queue the message if not yet at deviceready + if (!DeviceReady && !UseConsole) { + Queued.push([level, message]); + return; + } + + // if not using the console, use the native logger + if (!UseConsole) { + exec(null, null, "Logger", "logLevel", [level, message]); + return; + } + + // make sure console is not using logger + if (console.__usingCordovaLogger) { + throw new Error("console and logger are too intertwingly"); + } + + // log to the console + switch (level) { + case logger.LOG: console.log(message); break; + case logger.ERROR: console.log("ERROR: " + message); break; + case logger.WARN: console.log("WARN: " + message); break; + case logger.INFO: console.log("INFO: " + message); break; + case logger.DEBUG: console.log("DEBUG: " + message); break; + } +}; + +// when deviceready fires, log queued messages +logger.__onDeviceReady = function() { + if (DeviceReady) return; + + DeviceReady = true; + + for (var i=0; i 3) { + fail(FileError.SYNTAX_ERR); + } else { + // if successful, return a FileSystem object + var success = function(file_system) { + if (file_system) { + if (successCallback) { + // grab the name and root from the file system object + var result = new FileSystem(file_system.name, file_system.root); + successCallback(result); + } + } + else { + // no FileSystem object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + exec(success, fail, "File", "requestFileSystem", [type, size]); + } +}; + +module.exports = requestFileSystem; + +}); + +// file: lib/common/plugin/resolveLocalFileSystemURI.js +define("cordova/plugin/resolveLocalFileSystemURI", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + FileEntry = require('cordova/plugin/FileEntry'), + FileError = require('cordova/plugin/FileError'), + exec = require('cordova/exec'); + +/** + * Look up file system Entry referred to by local URI. + * @param {DOMString} uri URI referring to a local file or directory + * @param successCallback invoked with Entry object corresponding to URI + * @param errorCallback invoked if error occurs retrieving file system entry + */ +module.exports = function(uri, successCallback, errorCallback) { + argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments); + // error callback + var fail = function(error) { + errorCallback && errorCallback(new FileError(error)); + }; + // sanity check for 'not:valid:filename' + if(!uri || uri.split(":").length > 2) { + setTimeout( function() { + fail(FileError.ENCODING_ERR); + },0); + return; + } + // if successful, return either a file or directory entry + var success = function(entry) { + var result; + if (entry) { + if (successCallback) { + // create appropriate Entry object + result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath) : new FileEntry(entry.name, entry.fullPath); + successCallback(result); + } + } + else { + // no Entry object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + + exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]); +}; + +}); + +// file: lib/common/plugin/splashscreen.js +define("cordova/plugin/splashscreen", function(require, exports, module) { + +var exec = require('cordova/exec'); + +var splashscreen = { + show:function() { + exec(null, null, "SplashScreen", "show", []); + }, + hide:function() { + exec(null, null, "SplashScreen", "hide", []); + } +}; + +module.exports = splashscreen; + +}); + +// file: lib/common/plugin/splashscreen/symbols.js +define("cordova/plugin/splashscreen/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/splashscreen', 'navigator.splashscreen'); + +}); + +// file: lib/common/symbols.js +define("cordova/symbols", function(require, exports, module) { + +var modulemapper = require('cordova/modulemapper'); + +// Use merges here in case others symbols files depend on this running first, +// but fail to declare the dependency with a require(). +modulemapper.merges('cordova', 'cordova'); +modulemapper.clobbers('cordova/exec', 'cordova.exec'); +modulemapper.clobbers('cordova/exec', 'Cordova.exec'); + +}); + +// file: lib/common/utils.js +define("cordova/utils", function(require, exports, module) { + +var utils = exports; + +/** + * Defines a property getter / setter for obj[key]. + */ +utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { + if (Object.defineProperty) { + var desc = { + get: getFunc, + configurable: true + }; + if (opt_setFunc) { + desc.set = opt_setFunc; + } + Object.defineProperty(obj, key, desc); + } else { + obj.__defineGetter__(key, getFunc); + if (opt_setFunc) { + obj.__defineSetter__(key, opt_setFunc); + } + } +}; + +/** + * Defines a property getter for obj[key]. + */ +utils.defineGetter = utils.defineGetterSetter; + +utils.arrayIndexOf = function(a, item) { + if (a.indexOf) { + return a.indexOf(item); + } + var len = a.length; + for (var i = 0; i < len; ++i) { + if (a[i] == item) { + return i; + } + } + return -1; +}; + +/** + * Returns whether the item was found in the array. + */ +utils.arrayRemove = function(a, item) { + var index = utils.arrayIndexOf(a, item); + if (index != -1) { + a.splice(index, 1); + } + return index != -1; +}; + +utils.typeName = function(val) { + return Object.prototype.toString.call(val).slice(8, -1); +}; + +/** + * Returns an indication of whether the argument is an array or not + */ +utils.isArray = function(a) { + return utils.typeName(a) == 'Array'; +}; + +/** + * Returns an indication of whether the argument is a Date or not + */ +utils.isDate = function(d) { + return utils.typeName(d) == 'Date'; +}; + +/** + * Does a deep clone of the object. + */ +utils.clone = function(obj) { + if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { + return obj; + } + + var retVal, i; + + if(utils.isArray(obj)){ + retVal = []; + for(i = 0; i < obj.length; ++i){ + retVal.push(utils.clone(obj[i])); + } + return retVal; + } + + retVal = {}; + for(i in obj){ + if(!(i in retVal) || retVal[i] != obj[i]) { + retVal[i] = utils.clone(obj[i]); + } + } + return retVal; +}; + +/** + * Returns a wrapped version of the function + */ +utils.close = function(context, func, params) { + if (typeof params == 'undefined') { + return function() { + return func.apply(context, arguments); + }; + } else { + return function() { + return func.apply(context, params); + }; + } +}; + +/** + * Create a UUID + */ +utils.createUUID = function() { + return UUIDcreatePart(4) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(6); +}; + +/** + * Extends a child object from a parent object using classical inheritance + * pattern. + */ +utils.extend = (function() { + // proxy used to establish prototype chain + var F = function() {}; + // extend Child from Parent + return function(Child, Parent) { + F.prototype = Parent.prototype; + Child.prototype = new F(); + Child.__super__ = Parent.prototype; + Child.prototype.constructor = Child; + }; +}()); + +/** + * Alerts a message in any available way: alert or console.log. + */ +utils.alert = function(msg) { + if (window.alert) { + window.alert(msg); + } else if (console && console.log) { + console.log(msg); + } +}; + +/** + * Formats a string and arguments following it ala sprintf() + * + * see utils.vformat() for more information + */ +utils.format = function(formatString /* ,... */) { + var args = [].slice.call(arguments, 1); + return utils.vformat(formatString, args); +}; + +/** + * Formats a string and arguments following it ala vsprintf() + * + * format chars: + * %j - format arg as JSON + * %o - format arg as JSON + * %c - format arg as '' + * %% - replace with '%' + * any other char following % will format it's + * arg via toString(). + * + * for rationale, see FireBug's Console API: + * http://getfirebug.com/wiki/index.php/Console_API + */ +utils.vformat = function(formatString, args) { + if (formatString === null || formatString === undefined) return ""; + if (arguments.length == 1) return formatString.toString(); + if (typeof formatString != "string") return formatString.toString(); + + var pattern = /(.*?)%(.)(.*)/; + var rest = formatString; + var result = []; + + while (args.length) { + var arg = args.shift(); + var match = pattern.exec(rest); + + if (!match) break; + + rest = match[3]; + + result.push(match[1]); + + if (match[2] == '%') { + result.push('%'); + args.unshift(arg); + continue; + } + + result.push(formatted(arg, match[2])); + } + + result.push(rest); + + return result.join(''); +}; + +//------------------------------------------------------------------------------ +function UUIDcreatePart(length) { + var uuidpart = ""; + for (var i=0; i + + + + diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml new file mode 100644 index 0000000..342ffa0 --- /dev/null +++ b/android/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Points Watcher + diff --git a/android/res/xml/config.xml b/android/res/xml/config.xml new file mode 100644 index 0000000..d15ac26 --- /dev/null +++ b/android/res/xml/config.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/src/com/moparisthebest/pointswatcher/PointsWatcher.java b/android/src/com/moparisthebest/pointswatcher/PointsWatcher.java new file mode 100644 index 0000000..30e3283 --- /dev/null +++ b/android/src/com/moparisthebest/pointswatcher/PointsWatcher.java @@ -0,0 +1,36 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.moparisthebest.pointswatcher; + +import android.os.Bundle; +import org.apache.cordova.*; + +public class PointsWatcher extends DroidGap +{ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + // Set by in config.xml + super.loadUrl(Config.getStartUrl()); + //super.loadUrl("file:///android_asset/www/index.html") + } +} + diff --git a/blackberry/blackberry.xml b/blackberry/blackberry.xml new file mode 100644 index 0000000..c324b30 --- /dev/null +++ b/blackberry/blackberry.xml @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +NAME + ${ant.project.name} + +SYNOPSIS + ant TARGET COMMAND [-D<argument>=<value>]... + +DESCRIPTION + You can build and deploy your project to a device or simulator. + +TARGETS + blackberry ........ Builds a cod file and deploys to a device or simulator + + playbook .......... Builds a bar file and deploys to a device or simulator + +COMMANDS + help .............. Show this help menu. + ant, ant help + + load-device ....... Builds and deploys project to a connected USB device. + ant load-device + + load-simulator .... Builds and deploys project to default simulator. + ant load-simulator + + build ............. Compiles and packages the project for deployment. + ant build + + clean ............. Remove all files from the build/ directory. + ant clean + + clean-device ...... Remove this project from the connected USB device. + ant clean-device + + clean-simulator ... Remove this project from the simulator (takes a while). + ant clean-simulator + +GETTING STARTED + 1. Edit project.properties + + 2. <ant load-simulator> to run the project on the simulator + + 3. Customize your project by editing res/config.xml + + 4. To run the project on a BlackBerry device, you will need to obtain + code signing keys from RIM. Once you have the key, a project is + installed by connecting a BlackBerry via USB and running + <ant load-device>. + + + diff --git a/blackberry/build.xml b/blackberry/build.xml new file mode 100644 index 0000000..ba44856 --- /dev/null +++ b/blackberry/build.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +NAME + ${ant.project.name} + +SYNOPSIS + ant TARGET COMMAND [-D<argument>=<value>]... + +DESCRIPTION + You can build and deploy your project to a device or simulator. + +TARGETS + blackberry ........ Builds a cod file and deploys to a device or simulator + + playbook .......... Builds a bar file and deploys to a device or simulator + + qnx ............... Builds a bar file and deploys to a device or simulator + +COMMANDS + help .............. Show this help menu. + ant, ant help + + load-device ....... Builds and deploys project to a connected USB device. + ant TARGET load-device + + load-simulator .... Builds and deploys project to default simulator. + ant TARGET load-simulator + + build ............. Compiles and packages the project for deployment. + ant TARGET build + + package-app ....... Packages the app into a WebWorks-compatible .zip file. + ant TARGET package-app + + clean ............. Remove all files from the build/ directory. + ant TARGET clean + + clean-device ...... Remove this project from the connected USB device. + ant TARGET clean-device + + clean-simulator ... Remove this project from the simulator (takes a while). + ant TARGET clean-simulator + +GETTING STARTED + 1. Edit project.properties + + 2. <ant load-simulator> to run the project on the simulator + + 3. Customize your project by editing res/config.xml + + 4. To run the project on a BlackBerry device, you will need to obtain + code signing keys from RIM. Once you have the key, a project is + installed by connecting a BlackBerry via USB and running + <ant load-device>. + + + diff --git a/blackberry/cordova/build b/blackberry/cordova/build new file mode 100755 index 0000000..f66c3e9 --- /dev/null +++ b/blackberry/cordova/build @@ -0,0 +1,44 @@ +#! /bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +ANT=$(which ant) + +if [ -z "$1" ] +then + echo 'usage: build ' + echo 'where can be one of "blackberry", "playbook" or "qnx"' + echo 'NOTE: please customize the project.properties file first before using this command!' + exit 0 +fi + +function clean_after_build(){ + rm www/cordova.js + mv www/config.main.xml www/config.xml +} + +cd "$( dirname "$0" )"/.. + +if [ "$1" == "blackberry" -o "$1" == "playbook" -o "$1" == "qnx" ] +then + trap clean_after_build EXIT + cp lib/cordova.2.5.0/javascript/cordova-2.5.0.js www/cordova.js + mv www/config.xml www/config.main.xml && cp res/config.xml www/config.xml + $ANT $1 build +else + echo 'Platform not recognized! Please use one of "blackberry", "playbook", or "qnx" for the platform parameter.' +fi diff --git a/blackberry/cordova/run b/blackberry/cordova/run new file mode 100755 index 0000000..afa0ad7 --- /dev/null +++ b/blackberry/cordova/run @@ -0,0 +1,43 @@ +#! /bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +ANT=$(which ant) + +if [ -z "$1" ] +then + echo 'usage: run ' + echo 'where can be one of "blackberry", "playbook" or "qnx"' + echo 'NOTE: please customize the project.properties file first before using this command!' + exit 0 +fi + +cd "$( dirname "$0" )"/.. + +if [ "$1" == "blackberry" -o "$1" == "playbook" -o "$1" == "qnx" ] +then + echo 'Do you have a BlackBerry device connected to your computer? (y/n)' + read DEVICE + if [ $DEVICE == "y" ] + then + $ANT $1 debug-device + else + $ANT $1 load-simulator + fi +else + echo 'Platform not recognized! Please use one of "blackberry", "playbook", or "qnx" for the platform parameter.' +fi diff --git a/blackberry/lib/ant-contrib/ant-contrib-1.0b3.jar b/blackberry/lib/ant-contrib/ant-contrib-1.0b3.jar new file mode 100644 index 0000000000000000000000000000000000000000..062537661a514c2ce97d18948f4f25f7226cc1a0 GIT binary patch literal 224277 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 z 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%0DDNlc$iKGo<(eUp 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

0zGh%HPCY&11) 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 + + + + org.apache.cordova.network.Network + + + + + + + + + + + + + + + + + + diff --git a/blackberry/lib/cordova.2.5.0/ext-air/Cordova_Network/src/org/apache/cordova/network/Network.as b/blackberry/lib/cordova.2.5.0/ext-air/Cordova_Network/src/org/apache/cordova/network/Network.as new file mode 100644 index 0000000..d2ad030 --- /dev/null +++ b/blackberry/lib/cordova.2.5.0/ext-air/Cordova_Network/src/org/apache/cordova/network/Network.as @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * Copyright (c) 2011, Research In Motion Limited. + */ + + +package org.apache.cordova.network { + import flash.net.NetworkInfo; + import flash.net.NetworkInterface; + import flash.events.Event; + import qnx.system.Device; + + import webworks.extension.DefaultExtension; + + public class Network extends DefaultExtension{ + + private var _jsFunctionCallbackIDs:Array = []; + private const FEATURE_ID:Array = [ "org.apache.cordova" ]; + + public function Network() { + //Attach event listener once only + NetworkInfo.networkInfo.addEventListener(flash.events.Event.NETWORK_CHANGE, networkChange); + } + + override public function getFeatureList():Array { + return FEATURE_ID; + } + + public function getConnectionInfo(param:String):void{ + if(_jsFunctionCallbackIDs.indexOf(param) < 0){ + _jsFunctionCallbackIDs.push(param); + } + } + + public function getDeviceInfo(id:String):void{ + evalJavaScriptEvent(id, [{ + "uuid" : Device.device.pin, + "version": Device.device.scmBundle + }]); + } + + private function networkChange( event: Event ) : void { + + /** + * Right now, we only care if there is a connection or not, since PlayBook only has WiFi + * At the JS layer, we will map this from offline/online. + * At some point in the future where there are more connection types on PlayBook, + * we will want to attempt to map this to the real Cordova connection types... + */ + + var haveCoverage : Boolean = false; + var networkStatus : String = "offline"; + var connectionType = "none"; + + NetworkInfo.networkInfo.findInterfaces().some( + function callback(item:NetworkInterface, index:int, vector:Vector.):Boolean { + this.webView.executeJavaScript("alert('Network Interface ' + item.name)"); + haveCoverage = item.active || haveCoverage; + return haveCoverage; + }, this); + + if (haveCoverage) { + networkStatus = "online"; + connectionType = "wifi"; + } + + for (var i:Number=0; i<_jsFunctionCallbackIDs.length ; i++){ + evalJavaScriptEvent(_jsFunctionCallbackIDs[i], [{"type" : connectionType, "event" : networkStatus }] ); + } + } + } +} diff --git a/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/client.js b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/client.js new file mode 100644 index 0000000..f8308b8 --- /dev/null +++ b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/client.js @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2011 Research In Motion Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/index.js b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/index.js new file mode 100644 index 0000000..4a60b93 --- /dev/null +++ b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/index.js @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2011 Research In Motion Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var Whitelist = require("../../lib/policy/whitelist").Whitelist, + whitelist = new Whitelist(), + noop = function () {}; + +module.exports = { + isWhitelisted: function (success, fail, args) { + var url = JSON.parse(decodeURIComponent(args[0])), + success = success || noop, + fail = fail || noop; + + if (url) { + success(whitelist.isAccessAllowed(url)); + } + else { + error("please provide an url"); + } + } +}; diff --git a/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/manifest.json b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/manifest.json new file mode 100644 index 0000000..9efdda2 --- /dev/null +++ b/blackberry/lib/cordova.2.5.0/ext-qnx/org.apache.cordova/manifest.json @@ -0,0 +1,5 @@ +{ + "global": false, + "namespace": "org.apache.cordova", + "dependencies": [] +} diff --git a/blackberry/lib/cordova.2.5.0/ext-qnx/readme.md b/blackberry/lib/cordova.2.5.0/ext-qnx/readme.md new file mode 100644 index 0000000..6527192 --- /dev/null +++ b/blackberry/lib/cordova.2.5.0/ext-qnx/readme.md @@ -0,0 +1 @@ +Placeholder for native extensions needed on qnx diff --git a/blackberry/lib/cordova.2.5.0/ext/cordova.2.5.0.jar b/blackberry/lib/cordova.2.5.0/ext/cordova.2.5.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..43e63ff18d8d456ed777e4819238f729adfd7ef2 GIT binary patch literal 185082 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 +uGBTn{7GB* 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%0AuoQqLgH4<(BDG>6N3xvK45n{{#c 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 index into requireStack of modules currently being built. + var inProgressModules = {}; + + function build(module) { + var factory = module.factory; + module.exports = {}; + delete module.factory; + factory(require, module.exports, module); + return module.exports; + } + + require = function (id) { + if (!modules[id]) { + throw "module " + id + " not found"; + } else if (id in inProgressModules) { + var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; + throw "Cycle in require graph: " + cycle; + } + if (modules[id].factory) { + try { + inProgressModules[id] = requireStack.length; + requireStack.push(id); + return build(modules[id]); + } finally { + delete inProgressModules[id]; + requireStack.pop(); + } + } + return modules[id].exports; + }; + + define = function (id, factory) { + if (modules[id]) { + throw "module " + id + " already defined"; + } + + modules[id] = { + id: id, + factory: factory + }; + }; + + define.remove = function (id) { + delete modules[id]; + }; + + define.moduleMap = modules; +})(); + +//Export for use in node +if (typeof module === "object" && typeof require === "function") { + module.exports.require = require; + module.exports.define = define; +} + +// file: lib/cordova.js +define("cordova", function(require, exports, module) { + + +var channel = require('cordova/channel'); + +/** + * Listen for DOMContentLoaded and notify our channel subscribers. + */ +document.addEventListener('DOMContentLoaded', function() { + channel.onDOMContentLoaded.fire(); +}, false); +if (document.readyState == 'complete' || document.readyState == 'interactive') { + channel.onDOMContentLoaded.fire(); +} + +/** + * Intercept calls to addEventListener + removeEventListener and handle deviceready, + * resume, and pause events. + */ +var m_document_addEventListener = document.addEventListener; +var m_document_removeEventListener = document.removeEventListener; +var m_window_addEventListener = window.addEventListener; +var m_window_removeEventListener = window.removeEventListener; + +/** + * Houses custom event handlers to intercept on document + window event listeners. + */ +var documentEventHandlers = {}, + windowEventHandlers = {}; + +document.addEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + if (typeof documentEventHandlers[e] != 'undefined') { + documentEventHandlers[e].subscribe(handler); + } else { + m_document_addEventListener.call(document, evt, handler, capture); + } +}; + +window.addEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + if (typeof windowEventHandlers[e] != 'undefined') { + windowEventHandlers[e].subscribe(handler); + } else { + m_window_addEventListener.call(window, evt, handler, capture); + } +}; + +document.removeEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + // If unsubscribing from an event that is handled by a plugin + if (typeof documentEventHandlers[e] != "undefined") { + documentEventHandlers[e].unsubscribe(handler); + } else { + m_document_removeEventListener.call(document, evt, handler, capture); + } +}; + +window.removeEventListener = function(evt, handler, capture) { + var e = evt.toLowerCase(); + // If unsubscribing from an event that is handled by a plugin + if (typeof windowEventHandlers[e] != "undefined") { + windowEventHandlers[e].unsubscribe(handler); + } else { + m_window_removeEventListener.call(window, evt, handler, capture); + } +}; + +function createEvent(type, data) { + var event = document.createEvent('Events'); + event.initEvent(type, false, false); + if (data) { + for (var i in data) { + if (data.hasOwnProperty(i)) { + event[i] = data[i]; + } + } + } + return event; +} + +if(typeof window.console === "undefined") { + window.console = { + log:function(){} + }; +} + +var cordova = { + define:define, + require:require, + /** + * Methods to add/remove your own addEventListener hijacking on document + window. + */ + addWindowEventHandler:function(event) { + return (windowEventHandlers[event] = channel.create(event)); + }, + addStickyDocumentEventHandler:function(event) { + return (documentEventHandlers[event] = channel.createSticky(event)); + }, + addDocumentEventHandler:function(event) { + return (documentEventHandlers[event] = channel.create(event)); + }, + removeWindowEventHandler:function(event) { + delete windowEventHandlers[event]; + }, + removeDocumentEventHandler:function(event) { + delete documentEventHandlers[event]; + }, + /** + * Retrieve original event handlers that were replaced by Cordova + * + * @return object + */ + getOriginalHandlers: function() { + return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, + 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; + }, + /** + * Method to fire event from native code + * bNoDetach is required for events which cause an exception which needs to be caught in native code + */ + fireDocumentEvent: function(type, data, bNoDetach) { + var evt = createEvent(type, data); + if (typeof documentEventHandlers[type] != 'undefined') { + if( bNoDetach ) { + documentEventHandlers[type].fire(evt); + } + else { + setTimeout(function() { + documentEventHandlers[type].fire(evt); + }, 0); + } + } else { + document.dispatchEvent(evt); + } + }, + fireWindowEvent: function(type, data) { + var evt = createEvent(type,data); + if (typeof windowEventHandlers[type] != 'undefined') { + setTimeout(function() { + windowEventHandlers[type].fire(evt); + }, 0); + } else { + window.dispatchEvent(evt); + } + }, + + /** + * Plugin callback mechanism. + */ + // Randomize the starting callbackId to avoid collisions after refreshing or navigating. + // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. + callbackId: Math.floor(Math.random() * 2000000000), + callbacks: {}, + callbackStatus: { + NO_RESULT: 0, + OK: 1, + CLASS_NOT_FOUND_EXCEPTION: 2, + ILLEGAL_ACCESS_EXCEPTION: 3, + INSTANTIATION_EXCEPTION: 4, + MALFORMED_URL_EXCEPTION: 5, + IO_EXCEPTION: 6, + INVALID_ACTION: 7, + JSON_EXCEPTION: 8, + ERROR: 9 + }, + + /** + * Called by native code when returning successful result from an action. + */ + callbackSuccess: function(callbackId, args) { + try { + cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); + } catch (e) { + console.log("Error in error callback: " + callbackId + " = "+e); + } + }, + + /** + * Called by native code when returning error result from an action. + */ + callbackError: function(callbackId, args) { + // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. + // Derive success from status. + try { + cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); + } catch (e) { + console.log("Error in error callback: " + callbackId + " = "+e); + } + }, + + /** + * Called by native code when returning the result from an action. + */ + callbackFromNative: function(callbackId, success, status, args, keepCallback) { + var callback = cordova.callbacks[callbackId]; + if (callback) { + if (success && status == cordova.callbackStatus.OK) { + callback.success && callback.success.apply(null, args); + } else if (!success) { + callback.fail && callback.fail.apply(null, args); + } + + // Clear callback if not expecting any more results + if (!keepCallback) { + delete cordova.callbacks[callbackId]; + } + } + }, + addConstructor: function(func) { + channel.onCordovaReady.subscribe(function() { + try { + func(); + } catch(e) { + console.log("Failed to run constructor: " + e); + } + }); + } +}; + +// Register pause, resume and deviceready channels as events on document. +channel.onPause = cordova.addDocumentEventHandler('pause'); +channel.onResume = cordova.addDocumentEventHandler('resume'); +channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); + +module.exports = cordova; + +}); + +// file: lib/common/argscheck.js +define("cordova/argscheck", function(require, exports, module) { + +var exec = require('cordova/exec'); +var utils = require('cordova/utils'); + +var moduleExports = module.exports; + +var typeMap = { + 'A': 'Array', + 'D': 'Date', + 'N': 'Number', + 'S': 'String', + 'F': 'Function', + 'O': 'Object' +}; + +function extractParamName(callee, argIndex) { + return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; +} + +function checkArgs(spec, functionName, args, opt_callee) { + if (!moduleExports.enableChecks) { + return; + } + var errMsg = null; + var typeName; + for (var i = 0; i < spec.length; ++i) { + var c = spec.charAt(i), + cUpper = c.toUpperCase(), + arg = args[i]; + // Asterix means allow anything. + if (c == '*') { + continue; + } + typeName = utils.typeName(arg); + if ((arg === null || arg === undefined) && c == cUpper) { + continue; + } + if (typeName != typeMap[cUpper]) { + errMsg = 'Expected ' + typeMap[cUpper]; + break; + } + } + if (errMsg) { + errMsg += ', but got ' + typeName + '.'; + errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; + // Don't log when running jake test. + if (typeof jasmine == 'undefined') { + console.error(errMsg); + } + throw TypeError(errMsg); + } +} + +function getValue(value, defaultValue) { + return value === undefined ? defaultValue : value; +} + +moduleExports.checkArgs = checkArgs; +moduleExports.getValue = getValue; +moduleExports.enableChecks = true; + + +}); + +// file: lib/common/builder.js +define("cordova/builder", function(require, exports, module) { + +var utils = require('cordova/utils'); + +function each(objects, func, context) { + for (var prop in objects) { + if (objects.hasOwnProperty(prop)) { + func.apply(context, [objects[prop], prop]); + } + } +} + +function clobber(obj, key, value) { + exports.replaceHookForTesting(obj, key); + obj[key] = value; + // Getters can only be overridden by getters. + if (obj[key] !== value) { + utils.defineGetter(obj, key, function() { + return value; + }); + } +} + +function assignOrWrapInDeprecateGetter(obj, key, value, message) { + if (message) { + utils.defineGetter(obj, key, function() { + console.log(message); + delete obj[key]; + clobber(obj, key, value); + return value; + }); + } else { + clobber(obj, key, value); + } +} + +function include(parent, objects, clobber, merge) { + each(objects, function (obj, key) { + try { + var result = obj.path ? require(obj.path) : {}; + + if (clobber) { + // Clobber if it doesn't exist. + if (typeof parent[key] === 'undefined') { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } else if (typeof obj.path !== 'undefined') { + // If merging, merge properties onto parent, otherwise, clobber. + if (merge) { + recursiveMerge(parent[key], result); + } else { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } + } + result = parent[key]; + } else { + // Overwrite if not currently defined. + if (typeof parent[key] == 'undefined') { + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); + } else { + // Set result to what already exists, so we can build children into it if they exist. + result = parent[key]; + } + } + + if (obj.children) { + include(result, obj.children, clobber, merge); + } + } catch(e) { + utils.alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"'); + } + }); +} + +/** + * Merge properties from one object onto another recursively. Properties from + * the src object will overwrite existing target property. + * + * @param target Object to merge properties into. + * @param src Object to merge properties from. + */ +function recursiveMerge(target, src) { + for (var prop in src) { + if (src.hasOwnProperty(prop)) { + if (target.prototype && target.prototype.constructor === target) { + // If the target object is a constructor override off prototype. + clobber(target.prototype, prop, src[prop]); + } else { + if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { + recursiveMerge(target[prop], src[prop]); + } else { + clobber(target, prop, src[prop]); + } + } + } + } +} + +exports.buildIntoButDoNotClobber = function(objects, target) { + include(target, objects, false, false); +}; +exports.buildIntoAndClobber = function(objects, target) { + include(target, objects, true, false); +}; +exports.buildIntoAndMerge = function(objects, target) { + include(target, objects, true, true); +}; +exports.recursiveMerge = recursiveMerge; +exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; +exports.replaceHookForTesting = function() {}; + +}); + +// file: lib/common/channel.js +define("cordova/channel", function(require, exports, module) { + +var utils = require('cordova/utils'), + nextGuid = 1; + +/** + * Custom pub-sub "channel" that can have functions subscribed to it + * This object is used to define and control firing of events for + * cordova initialization, as well as for custom events thereafter. + * + * The order of events during page load and Cordova startup is as follows: + * + * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. + * onNativeReady* Internal event that indicates the Cordova native side is ready. + * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. + * onCordovaInfoReady* Internal event fired when device properties are available. + * onCordovaConnectionReady* Internal event fired when the connection property has been set. + * onDeviceReady* User event fired to indicate that Cordova is ready + * onResume User event fired to indicate a start/resume lifecycle event + * onPause User event fired to indicate a pause lifecycle event + * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). + * + * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. + * All listeners that subscribe after the event is fired will be executed right away. + * + * The only Cordova events that user code should register for are: + * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript + * pause App has moved to background + * resume App has returned to foreground + * + * Listeners can be registered as: + * document.addEventListener("deviceready", myDeviceReadyListener, false); + * document.addEventListener("resume", myResumeListener, false); + * document.addEventListener("pause", myPauseListener, false); + * + * The DOM lifecycle events should be used for saving and restoring state + * window.onload + * window.onunload + * + */ + +/** + * Channel + * @constructor + * @param type String the channel name + */ +var Channel = function(type, sticky) { + this.type = type; + // Map of guid -> function. + this.handlers = {}; + // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. + this.state = sticky ? 1 : 0; + // Used in sticky mode to remember args passed to fire(). + this.fireArgs = null; + // Used by onHasSubscribersChange to know if there are any listeners. + this.numHandlers = 0; + // Function that is called when the first listener is subscribed, or when + // the last listener is unsubscribed. + this.onHasSubscribersChange = null; +}, + channel = { + /** + * Calls the provided function only after all of the channels specified + * have been fired. All channels must be sticky channels. + */ + join: function(h, c) { + var len = c.length, + i = len, + f = function() { + if (!(--i)) h(); + }; + for (var j=0; j -1) { + return 'qnx'; + } + else if (navigator.userAgent.indexOf("PlayBook") > -1) { + return 'air'; + } + else if (navigator.userAgent.indexOf("BlackBerry") > -1) { + return 'java'; + } + else { + console.log("Unknown user agent?!?!? defaulting to java"); + return 'java'; + } + }, + initialize: function() { + var modulemapper = require('cordova/modulemapper'), + platform = require('cordova/plugin/' + this.runtime() + '/platform'); + + modulemapper.loadMatchingModules(/cordova.*\/symbols$/); + modulemapper.loadMatchingModules(new RegExp('cordova/.*' + this.runtime() + '/.*bbsymbols$')); + modulemapper.mapModules(this.contextObj); + + platform.initialize(); + }, + contextObj: this // Used for testing. +}; + +}); + +// file: lib/common/plugin/Acceleration.js +define("cordova/plugin/Acceleration", function(require, exports, module) { + +var Acceleration = function(x, y, z, timestamp) { + this.x = x; + this.y = y; + this.z = z; + this.timestamp = timestamp || (new Date()).getTime(); +}; + +module.exports = Acceleration; + +}); + +// file: lib/common/plugin/Camera.js +define("cordova/plugin/Camera", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + Camera = require('cordova/plugin/CameraConstants'), + CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle'); + +var cameraExport = {}; + +// Tack on the Camera Constants to the base camera plugin. +for (var key in Camera) { + cameraExport[key] = Camera[key]; +} + +/** + * Gets a picture from source defined by "options.sourceType", and returns the + * image as defined by the "options.destinationType" option. + + * The defaults are sourceType=CAMERA and destinationType=FILE_URI. + * + * @param {Function} successCallback + * @param {Function} errorCallback + * @param {Object} options + */ +cameraExport.getPicture = function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'Camera.getPicture', arguments); + options = options || {}; + var getValue = argscheck.getValue; + + var quality = getValue(options.quality, 50); + var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI); + var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA); + var targetWidth = getValue(options.targetWidth, -1); + var targetHeight = getValue(options.targetHeight, -1); + var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG); + var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE); + var allowEdit = !!options.allowEdit; + var correctOrientation = !!options.correctOrientation; + var saveToPhotoAlbum = !!options.saveToPhotoAlbum; + var popoverOptions = getValue(options.popoverOptions, null); + + var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType, + mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions]; + + exec(successCallback, errorCallback, "Camera", "takePicture", args); + return new CameraPopoverHandle(); +}; + +cameraExport.cleanup = function(successCallback, errorCallback) { + exec(successCallback, errorCallback, "Camera", "cleanup", []); +}; + +module.exports = cameraExport; + +}); + +// file: lib/common/plugin/CameraConstants.js +define("cordova/plugin/CameraConstants", function(require, exports, module) { + +module.exports = { + DestinationType:{ + DATA_URL: 0, // Return base64 encoded string + FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android) + NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS) + }, + EncodingType:{ + JPEG: 0, // Return JPEG encoded image + PNG: 1 // Return PNG encoded image + }, + MediaType:{ + PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType + VIDEO: 1, // allow selection of video only, ONLY RETURNS URL + ALLMEDIA : 2 // allow selection from all media types + }, + PictureSourceType:{ + PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android) + CAMERA : 1, // Take picture from camera + SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android) + }, + PopoverArrowDirection:{ + ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover + ARROW_DOWN : 2, + ARROW_LEFT : 4, + ARROW_RIGHT : 8, + ARROW_ANY : 15 + } +}; + +}); + +// file: lib/common/plugin/CameraPopoverHandle.js +define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * A handle to an image picker popover. + */ +var CameraPopoverHandle = function() { + this.setPosition = function(popoverOptions) { + console.log('CameraPopoverHandle.setPosition is only supported on iOS.'); + }; +}; + +module.exports = CameraPopoverHandle; + +}); + +// file: lib/common/plugin/CameraPopoverOptions.js +define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) { + +var Camera = require('cordova/plugin/CameraConstants'); + +/** + * Encapsulates options for iOS Popover image picker + */ +var CameraPopoverOptions = function(x,y,width,height,arrowDir){ + // information of rectangle that popover should be anchored to + this.x = x || 0; + this.y = y || 32; + this.width = width || 320; + this.height = height || 480; + // The direction of the popover arrow + this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY; +}; + +module.exports = CameraPopoverOptions; + +}); + +// file: lib/common/plugin/CaptureAudioOptions.js +define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) { + +/** + * Encapsulates all audio capture operation configuration options. + */ +var CaptureAudioOptions = function(){ + // Upper limit of sound clips user can record. Value must be equal or greater than 1. + this.limit = 1; + // Maximum duration of a single sound clip in seconds. + this.duration = 0; + // The selected audio mode. Must match with one of the elements in supportedAudioModes array. + this.mode = null; +}; + +module.exports = CaptureAudioOptions; + +}); + +// file: lib/common/plugin/CaptureError.js +define("cordova/plugin/CaptureError", function(require, exports, module) { + +/** + * The CaptureError interface encapsulates all errors in the Capture API. + */ +var CaptureError = function(c) { + this.code = c || null; +}; + +// Camera or microphone failed to capture image or sound. +CaptureError.CAPTURE_INTERNAL_ERR = 0; +// Camera application or audio capture application is currently serving other capture request. +CaptureError.CAPTURE_APPLICATION_BUSY = 1; +// Invalid use of the API (e.g. limit parameter has value less than one). +CaptureError.CAPTURE_INVALID_ARGUMENT = 2; +// User exited camera application or audio capture application before capturing anything. +CaptureError.CAPTURE_NO_MEDIA_FILES = 3; +// The requested capture operation is not supported. +CaptureError.CAPTURE_NOT_SUPPORTED = 20; + +module.exports = CaptureError; + +}); + +// file: lib/common/plugin/CaptureImageOptions.js +define("cordova/plugin/CaptureImageOptions", function(require, exports, module) { + +/** + * Encapsulates all image capture operation configuration options. + */ +var CaptureImageOptions = function(){ + // Upper limit of images user can take. Value must be equal or greater than 1. + this.limit = 1; + // The selected image mode. Must match with one of the elements in supportedImageModes array. + this.mode = null; +}; + +module.exports = CaptureImageOptions; + +}); + +// file: lib/common/plugin/CaptureVideoOptions.js +define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) { + +/** + * Encapsulates all video capture operation configuration options. + */ +var CaptureVideoOptions = function(){ + // Upper limit of videos user can record. Value must be equal or greater than 1. + this.limit = 1; + // Maximum duration of a single video clip in seconds. + this.duration = 0; + // The selected video mode. Must match with one of the elements in supportedVideoModes array. + this.mode = null; +}; + +module.exports = CaptureVideoOptions; + +}); + +// file: lib/common/plugin/CompassError.js +define("cordova/plugin/CompassError", function(require, exports, module) { + +/** + * CompassError. + * An error code assigned by an implementation when an error has occurred + * @constructor + */ +var CompassError = function(err) { + this.code = (err !== undefined ? err : null); +}; + +CompassError.COMPASS_INTERNAL_ERR = 0; +CompassError.COMPASS_NOT_SUPPORTED = 20; + +module.exports = CompassError; + +}); + +// file: lib/common/plugin/CompassHeading.js +define("cordova/plugin/CompassHeading", function(require, exports, module) { + +var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) { + this.magneticHeading = magneticHeading; + this.trueHeading = trueHeading; + this.headingAccuracy = headingAccuracy; + this.timestamp = timestamp || new Date().getTime(); +}; + +module.exports = CompassHeading; + +}); + +// file: lib/common/plugin/ConfigurationData.js +define("cordova/plugin/ConfigurationData", function(require, exports, module) { + +/** + * Encapsulates a set of parameters that the capture device supports. + */ +function ConfigurationData() { + // The ASCII-encoded string in lower case representing the media type. + this.type = null; + // The height attribute represents height of the image or video in pixels. + // In the case of a sound clip this attribute has value 0. + this.height = 0; + // The width attribute represents width of the image or video in pixels. + // In the case of a sound clip this attribute has value 0 + this.width = 0; +} + +module.exports = ConfigurationData; + +}); + +// file: lib/common/plugin/Connection.js +define("cordova/plugin/Connection", function(require, exports, module) { + +/** + * Network status + */ +module.exports = { + UNKNOWN: "unknown", + ETHERNET: "ethernet", + WIFI: "wifi", + CELL_2G: "2g", + CELL_3G: "3g", + CELL_4G: "4g", + CELL:"cellular", + NONE: "none" +}; + +}); + +// file: lib/common/plugin/Contact.js +define("cordova/plugin/Contact", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + ContactError = require('cordova/plugin/ContactError'), + utils = require('cordova/utils'); + +/** +* Converts primitives into Complex Object +* Currently only used for Date fields +*/ +function convertIn(contact) { + var value = contact.birthday; + try { + contact.birthday = new Date(parseFloat(value)); + } catch (exception){ + console.log("Cordova Contact convertIn error: exception creating date."); + } + return contact; +} + +/** +* Converts Complex objects into primitives +* Only conversion at present is for Dates. +**/ + +function convertOut(contact) { + var value = contact.birthday; + if (value !== null) { + // try to make it a Date object if it is not already + if (!utils.isDate(value)){ + try { + value = new Date(value); + } catch(exception){ + value = null; + } + } + if (utils.isDate(value)){ + value = value.valueOf(); // convert to milliseconds + } + contact.birthday = value; + } + return contact; +} + +/** +* Contains information about a single contact. +* @constructor +* @param {DOMString} id unique identifier +* @param {DOMString} displayName +* @param {ContactName} name +* @param {DOMString} nickname +* @param {Array.} phoneNumbers array of phone numbers +* @param {Array.} emails array of email addresses +* @param {Array.} addresses array of addresses +* @param {Array.} ims instant messaging user ids +* @param {Array.} organizations +* @param {DOMString} birthday contact's birthday +* @param {DOMString} note user notes about contact +* @param {Array.} photos +* @param {Array.} categories +* @param {Array.} urls contact's web sites +*/ +var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses, + ims, organizations, birthday, note, photos, categories, urls) { + this.id = id || null; + this.rawId = null; + this.displayName = displayName || null; + this.name = name || null; // ContactName + this.nickname = nickname || null; + this.phoneNumbers = phoneNumbers || null; // ContactField[] + this.emails = emails || null; // ContactField[] + this.addresses = addresses || null; // ContactAddress[] + this.ims = ims || null; // ContactField[] + this.organizations = organizations || null; // ContactOrganization[] + this.birthday = birthday || null; + this.note = note || null; + this.photos = photos || null; // ContactField[] + this.categories = categories || null; // ContactField[] + this.urls = urls || null; // ContactField[] +}; + +/** +* Removes contact from device storage. +* @param successCB success callback +* @param errorCB error callback +*/ +Contact.prototype.remove = function(successCB, errorCB) { + argscheck.checkArgs('FF', 'Contact.remove', arguments); + var fail = errorCB && function(code) { + errorCB(new ContactError(code)); + }; + if (this.id === null) { + fail(ContactError.UNKNOWN_ERROR); + } + else { + exec(successCB, fail, "Contacts", "remove", [this.id]); + } +}; + +/** +* Creates a deep copy of this Contact. +* With the contact ID set to null. +* @return copy of this Contact +*/ +Contact.prototype.clone = function() { + var clonedContact = utils.clone(this); + clonedContact.id = null; + clonedContact.rawId = null; + + function nullIds(arr) { + if (arr) { + for (var i = 0; i < arr.length; ++i) { + arr[i].id = null; + } + } + } + + // Loop through and clear out any id's in phones, emails, etc. + nullIds(clonedContact.phoneNumbers); + nullIds(clonedContact.emails); + nullIds(clonedContact.addresses); + nullIds(clonedContact.ims); + nullIds(clonedContact.organizations); + nullIds(clonedContact.categories); + nullIds(clonedContact.photos); + nullIds(clonedContact.urls); + return clonedContact; +}; + +/** +* Persists contact to device storage. +* @param successCB success callback +* @param errorCB error callback +*/ +Contact.prototype.save = function(successCB, errorCB) { + argscheck.checkArgs('FFO', 'Contact.save', arguments); + var fail = errorCB && function(code) { + errorCB(new ContactError(code)); + }; + var success = function(result) { + if (result) { + if (successCB) { + var fullContact = require('cordova/plugin/contacts').create(result); + successCB(convertIn(fullContact)); + } + } + else { + // no Entry object returned + fail(ContactError.UNKNOWN_ERROR); + } + }; + var dupContact = convertOut(utils.clone(this)); + exec(success, fail, "Contacts", "save", [dupContact]); +}; + + +module.exports = Contact; + +}); + +// file: lib/common/plugin/ContactAddress.js +define("cordova/plugin/ContactAddress", function(require, exports, module) { + +/** +* Contact address. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code +* @param formatted // NOTE: not a W3C standard +* @param streetAddress +* @param locality +* @param region +* @param postalCode +* @param country +*/ + +var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) { + this.id = null; + this.pref = (typeof pref != 'undefined' ? pref : false); + this.type = type || null; + this.formatted = formatted || null; + this.streetAddress = streetAddress || null; + this.locality = locality || null; + this.region = region || null; + this.postalCode = postalCode || null; + this.country = country || null; +}; + +module.exports = ContactAddress; + +}); + +// file: lib/common/plugin/ContactError.js +define("cordova/plugin/ContactError", function(require, exports, module) { + +/** + * ContactError. + * An error code assigned by an implementation when an error has occurred + * @constructor + */ +var ContactError = function(err) { + this.code = (typeof err != 'undefined' ? err : null); +}; + +/** + * Error codes + */ +ContactError.UNKNOWN_ERROR = 0; +ContactError.INVALID_ARGUMENT_ERROR = 1; +ContactError.TIMEOUT_ERROR = 2; +ContactError.PENDING_OPERATION_ERROR = 3; +ContactError.IO_ERROR = 4; +ContactError.NOT_SUPPORTED_ERROR = 5; +ContactError.PERMISSION_DENIED_ERROR = 20; + +module.exports = ContactError; + +}); + +// file: lib/common/plugin/ContactField.js +define("cordova/plugin/ContactField", function(require, exports, module) { + +/** +* Generic contact field. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard +* @param type +* @param value +* @param pref +*/ +var ContactField = function(type, value, pref) { + this.id = null; + this.type = (type && type.toString()) || null; + this.value = (value && value.toString()) || null; + this.pref = (typeof pref != 'undefined' ? pref : false); +}; + +module.exports = ContactField; + +}); + +// file: lib/common/plugin/ContactFindOptions.js +define("cordova/plugin/ContactFindOptions", function(require, exports, module) { + +/** + * ContactFindOptions. + * @constructor + * @param filter used to match contacts against + * @param multiple boolean used to determine if more than one contact should be returned + */ + +var ContactFindOptions = function(filter, multiple) { + this.filter = filter || ''; + this.multiple = (typeof multiple != 'undefined' ? multiple : false); +}; + +module.exports = ContactFindOptions; + +}); + +// file: lib/common/plugin/ContactName.js +define("cordova/plugin/ContactName", function(require, exports, module) { + +/** +* Contact name. +* @constructor +* @param formatted // NOTE: not part of W3C standard +* @param familyName +* @param givenName +* @param middle +* @param prefix +* @param suffix +*/ +var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) { + this.formatted = formatted || null; + this.familyName = familyName || null; + this.givenName = givenName || null; + this.middleName = middle || null; + this.honorificPrefix = prefix || null; + this.honorificSuffix = suffix || null; +}; + +module.exports = ContactName; + +}); + +// file: lib/common/plugin/ContactOrganization.js +define("cordova/plugin/ContactOrganization", function(require, exports, module) { + +/** +* Contact organization. +* @constructor +* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard +* @param name +* @param dept +* @param title +* @param startDate +* @param endDate +* @param location +* @param desc +*/ + +var ContactOrganization = function(pref, type, name, dept, title) { + this.id = null; + this.pref = (typeof pref != 'undefined' ? pref : false); + this.type = type || null; + this.name = name || null; + this.department = dept || null; + this.title = title || null; +}; + +module.exports = ContactOrganization; + +}); + +// file: lib/common/plugin/Coordinates.js +define("cordova/plugin/Coordinates", function(require, exports, module) { + +/** + * This class contains position information. + * @param {Object} lat + * @param {Object} lng + * @param {Object} alt + * @param {Object} acc + * @param {Object} head + * @param {Object} vel + * @param {Object} altacc + * @constructor + */ +var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) { + /** + * The latitude of the position. + */ + this.latitude = lat; + /** + * The longitude of the position, + */ + this.longitude = lng; + /** + * The accuracy of the position. + */ + this.accuracy = acc; + /** + * The altitude of the position. + */ + this.altitude = (alt !== undefined ? alt : null); + /** + * The direction the device is moving at the position. + */ + this.heading = (head !== undefined ? head : null); + /** + * The velocity with which the device is moving at the position. + */ + this.speed = (vel !== undefined ? vel : null); + + if (this.speed === 0 || this.speed === null) { + this.heading = NaN; + } + + /** + * The altitude accuracy of the position. + */ + this.altitudeAccuracy = (altacc !== undefined) ? altacc : null; +}; + +module.exports = Coordinates; + +}); + +// file: lib/common/plugin/DirectoryEntry.js +define("cordova/plugin/DirectoryEntry", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'), + Entry = require('cordova/plugin/Entry'), + FileError = require('cordova/plugin/FileError'), + DirectoryReader = require('cordova/plugin/DirectoryReader'); + +/** + * An interface representing a directory on the file system. + * + * {boolean} isFile always false (readonly) + * {boolean} isDirectory always true (readonly) + * {DOMString} name of the directory, excluding the path leading to it (readonly) + * {DOMString} fullPath the absolute full path to the directory (readonly) + * TODO: implement this!!! {FileSystem} filesystem on which the directory resides (readonly) + */ +var DirectoryEntry = function(name, fullPath) { + DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath); +}; + +utils.extend(DirectoryEntry, Entry); + +/** + * Creates a new DirectoryReader to read entries from this directory + */ +DirectoryEntry.prototype.createReader = function() { + return new DirectoryReader(this.fullPath); +}; + +/** + * Creates or looks up a directory + * + * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory + * @param {Flags} options to create or exclusively create the directory + * @param {Function} successCallback is called with the new entry + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) { + argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments); + var win = successCallback && function(result) { + var entry = new DirectoryEntry(result.name, result.fullPath); + successCallback(entry); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getDirectory", [this.fullPath, path, options]); +}; + +/** + * Deletes a directory and all of it's contents + * + * @param {Function} successCallback is called with no parameters + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) { + argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments); + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]); +}; + +/** + * Creates or looks up a file + * + * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file + * @param {Flags} options to create or exclusively create the file + * @param {Function} successCallback is called with the new entry + * @param {Function} errorCallback is called with a FileError + */ +DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) { + argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments); + var win = successCallback && function(result) { + var FileEntry = require('cordova/plugin/FileEntry'); + var entry = new FileEntry(result.name, result.fullPath); + successCallback(entry); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getFile", [this.fullPath, path, options]); +}; + +module.exports = DirectoryEntry; + +}); + +// file: lib/common/plugin/DirectoryReader.js +define("cordova/plugin/DirectoryReader", function(require, exports, module) { + +var exec = require('cordova/exec'), + FileError = require('cordova/plugin/FileError') ; + +/** + * An interface that lists the files and directories in a directory. + */ +function DirectoryReader(path) { + this.path = path || null; +} + +/** + * Returns a list of entries from a directory. + * + * @param {Function} successCallback is called with a list of entries + * @param {Function} errorCallback is called with a FileError + */ +DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) { + var win = typeof successCallback !== 'function' ? null : function(result) { + var retVal = []; + for (var i=0; i= 2) { + if (end < 0) { + newEnd = Math.max(size + end, 0); + } else { + newEnd = Math.min(end, size); + } + } + + var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size); + newFile.start = this.start + newStart; + newFile.end = this.start + newEnd; + return newFile; +}; + + +module.exports = File; + +}); + +// file: lib/common/plugin/FileEntry.js +define("cordova/plugin/FileEntry", function(require, exports, module) { + +var utils = require('cordova/utils'), + exec = require('cordova/exec'), + Entry = require('cordova/plugin/Entry'), + FileWriter = require('cordova/plugin/FileWriter'), + File = require('cordova/plugin/File'), + FileError = require('cordova/plugin/FileError'); + +/** + * An interface representing a file on the file system. + * + * {boolean} isFile always true (readonly) + * {boolean} isDirectory always false (readonly) + * {DOMString} name of the file, excluding the path leading to it (readonly) + * {DOMString} fullPath the absolute full path to the file (readonly) + * {FileSystem} filesystem on which the file resides (readonly) + */ +var FileEntry = function(name, fullPath) { + FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]); +}; + +utils.extend(FileEntry, Entry); + +/** + * Creates a new FileWriter associated with the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new FileWriter + * @param {Function} errorCallback is called with a FileError + */ +FileEntry.prototype.createWriter = function(successCallback, errorCallback) { + this.file(function(filePointer) { + var writer = new FileWriter(filePointer); + + if (writer.fileName === null || writer.fileName === "") { + errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR)); + } else { + successCallback && successCallback(writer); + } + }, errorCallback); +}; + +/** + * Returns a File that represents the current state of the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new File object + * @param {Function} errorCallback is called with a FileError + */ +FileEntry.prototype.file = function(successCallback, errorCallback) { + var win = successCallback && function(f) { + var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size); + successCallback(file); + }; + var fail = errorCallback && function(code) { + errorCallback(new FileError(code)); + }; + exec(win, fail, "File", "getFileMetadata", [this.fullPath]); +}; + + +module.exports = FileEntry; + +}); + +// file: lib/common/plugin/FileError.js +define("cordova/plugin/FileError", function(require, exports, module) { + +/** + * FileError + */ +function FileError(error) { + this.code = error || null; +} + +// File error codes +// Found in DOMException +FileError.NOT_FOUND_ERR = 1; +FileError.SECURITY_ERR = 2; +FileError.ABORT_ERR = 3; + +// Added by File API specification +FileError.NOT_READABLE_ERR = 4; +FileError.ENCODING_ERR = 5; +FileError.NO_MODIFICATION_ALLOWED_ERR = 6; +FileError.INVALID_STATE_ERR = 7; +FileError.SYNTAX_ERR = 8; +FileError.INVALID_MODIFICATION_ERR = 9; +FileError.QUOTA_EXCEEDED_ERR = 10; +FileError.TYPE_MISMATCH_ERR = 11; +FileError.PATH_EXISTS_ERR = 12; + +module.exports = FileError; + +}); + +// file: lib/common/plugin/FileReader.js +define("cordova/plugin/FileReader", function(require, exports, module) { + +var exec = require('cordova/exec'), + modulemapper = require('cordova/modulemapper'), + utils = require('cordova/utils'), + File = require('cordova/plugin/File'), + FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'), + origFileReader = modulemapper.getOriginalSymbol(this, 'FileReader'); + +/** + * This class reads the mobile device file system. + * + * For Android: + * The root directory is the root of the file system. + * To read from the SD card, the file name is "sdcard/my_file.txt" + * @constructor + */ +var FileReader = function() { + this._readyState = 0; + this._error = null; + this._result = null; + this._fileName = ''; + this._realReader = origFileReader ? new origFileReader() : {}; +}; + +// States +FileReader.EMPTY = 0; +FileReader.LOADING = 1; +FileReader.DONE = 2; + +utils.defineGetter(FileReader.prototype, 'readyState', function() { + return this._fileName ? this._readyState : this._realReader.readyState; +}); + +utils.defineGetter(FileReader.prototype, 'error', function() { + return this._fileName ? this._error: this._realReader.error; +}); + +utils.defineGetter(FileReader.prototype, 'result', function() { + return this._fileName ? this._result: this._realReader.result; +}); + +function defineEvent(eventName) { + utils.defineGetterSetter(FileReader.prototype, eventName, function() { + return this._realReader[eventName] || null; + }, function(value) { + this._realReader[eventName] = value; + }); +} +defineEvent('onloadstart'); // When the read starts. +defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total) +defineEvent('onload'); // When the read has successfully completed. +defineEvent('onerror'); // When the read has failed (see errors). +defineEvent('onloadend'); // When the request has completed (either in success or failure). +defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method. + +function initRead(reader, file) { + // Already loading something + if (reader.readyState == FileReader.LOADING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + reader._result = null; + reader._error = null; + reader._readyState = FileReader.LOADING; + + if (typeof file == 'string') { + // Deprecated in Cordova 2.4. + console.warning('Using a string argument with FileReader.readAs functions is deprecated.'); + reader._fileName = file; + } else if (typeof file.fullPath == 'string') { + reader._fileName = file.fullPath; + } else { + reader._fileName = ''; + return true; + } + + reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader})); +} + +/** + * Abort reading file. + */ +FileReader.prototype.abort = function() { + if (origFileReader && !this._fileName) { + return this._realReader.abort(); + } + this._result = null; + + if (this._readyState == FileReader.DONE || this._readyState == FileReader.EMPTY) { + return; + } + + this._readyState = FileReader.DONE; + + // If abort callback + if (typeof this.onabort === 'function') { + this.onabort(new ProgressEvent('abort', {target:this})); + } + // If load end callback + if (typeof this.onloadend === 'function') { + this.onloadend(new ProgressEvent('loadend', {target:this})); + } +}; + +/** + * Read text file. + * + * @param file {File} File object containing file properties + * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets) + */ +FileReader.prototype.readAsText = function(file, encoding) { + if (initRead(this, file)) { + return this._realReader.readAsText(file, encoding); + } + + // Default encoding is UTF-8 + var enc = encoding ? encoding : "UTF-8"; + var me = this; + var execArgs = [this._fileName, enc]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // Save result + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // DONE state + me._readyState = FileReader.DONE; + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + // null result + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsText", execArgs); +}; + + +/** + * Read file and return data as a base64 encoded data url. + * A data url is of the form: + * data:[][;base64], + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsDataURL = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsDataURL(file); + } + + var me = this; + var execArgs = [this._fileName]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + // Save result + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsDataURL", execArgs); +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsBinaryString = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsBinaryString(file); + } + // TODO - Can't return binary data to browser. + console.log('method "readAsBinaryString" is not supported at this time.'); + this.abort(); +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsArrayBuffer = function(file) { + if (initRead(this, file)) { + return this._realReader.readAsArrayBuffer(file); + } + // TODO - Can't return binary data to browser. + console.log('This method is not supported at this time.'); + this.abort(); +}; + +module.exports = FileReader; + +}); + +// file: lib/common/plugin/FileSystem.js +define("cordova/plugin/FileSystem", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'); + +/** + * An interface representing a file system + * + * @constructor + * {DOMString} name the unique name of the file system (readonly) + * {DirectoryEntry} root directory of the file system (readonly) + */ +var FileSystem = function(name, root) { + this.name = name || null; + if (root) { + this.root = new DirectoryEntry(root.name, root.fullPath); + } +}; + +module.exports = FileSystem; + +}); + +// file: lib/common/plugin/FileTransfer.js +define("cordova/plugin/FileTransfer", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + FileTransferError = require('cordova/plugin/FileTransferError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +function newProgressEvent(result) { + var pe = new ProgressEvent(); + pe.lengthComputable = result.lengthComputable; + pe.loaded = result.loaded; + pe.total = result.total; + return pe; +} + +var idCounter = 0; + +/** + * FileTransfer uploads a file to a remote server. + * @constructor + */ +var FileTransfer = function() { + this._id = ++idCounter; + this.onprogress = null; // optional callback +}; + +/** +* Given an absolute file path, uploads a file on the device to a remote server +* using a multipart HTTP request. +* @param filePath {String} Full path of the file on the device +* @param server {String} URL of the server to receive the file +* @param successCallback (Function} Callback to be invoked when upload has completed +* @param errorCallback {Function} Callback to be invoked upon error +* @param options {FileUploadOptions} Optional parameters such as file name and mimetype +* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false +*/ +FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) { + argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments); + // check for options + var fileKey = null; + var fileName = null; + var mimeType = null; + var params = null; + var chunkedMode = true; + var headers = null; + if (options) { + fileKey = options.fileKey; + fileName = options.fileName; + mimeType = options.mimeType; + headers = options.headers; + if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") { + chunkedMode = options.chunkedMode; + } + if (options.params) { + params = options.params; + } + else { + params = {}; + } + } + + var fail = errorCallback && function(e) { + var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body); + errorCallback(error); + }; + + var self = this; + var win = function(result) { + if (typeof result.lengthComputable != "undefined") { + if (self.onprogress) { + self.onprogress(newProgressEvent(result)); + } + } else { + successCallback && successCallback(result); + } + }; + exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id]); +}; + +/** + * Downloads a file form a given URL and saves it to the specified directory. + * @param source {String} URL of the server to receive the file + * @param target {String} Full path of the file on the device + * @param successCallback (Function} Callback to be invoked when upload has completed + * @param errorCallback {Function} Callback to be invoked upon error + * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false + */ +FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts) { + argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments); + var self = this; + var win = function(result) { + if (typeof result.lengthComputable != "undefined") { + if (self.onprogress) { + return self.onprogress(newProgressEvent(result)); + } + } else if (successCallback) { + var entry = null; + if (result.isDirectory) { + entry = new (require('cordova/plugin/DirectoryEntry'))(); + } + else if (result.isFile) { + entry = new (require('cordova/plugin/FileEntry'))(); + } + entry.isDirectory = result.isDirectory; + entry.isFile = result.isFile; + entry.name = result.name; + entry.fullPath = result.fullPath; + successCallback(entry); + } + }; + + var fail = errorCallback && function(e) { + var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body); + errorCallback(error); + }; + + exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id]); +}; + +/** + * Aborts the ongoing file transfer on this object + * @param successCallback {Function} Callback to be invoked upon success + * @param errorCallback {Function} Callback to be invoked upon error + */ +FileTransfer.prototype.abort = function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'FileTransfer', 'abort', [this._id]); +}; + +module.exports = FileTransfer; + +}); + +// file: lib/common/plugin/FileTransferError.js +define("cordova/plugin/FileTransferError", function(require, exports, module) { + +/** + * FileTransferError + * @constructor + */ +var FileTransferError = function(code, source, target, status, body) { + this.code = code || null; + this.source = source || null; + this.target = target || null; + this.http_status = status || null; + this.body = body || null; +}; + +FileTransferError.FILE_NOT_FOUND_ERR = 1; +FileTransferError.INVALID_URL_ERR = 2; +FileTransferError.CONNECTION_ERR = 3; +FileTransferError.ABORT_ERR = 4; + +module.exports = FileTransferError; + +}); + +// file: lib/common/plugin/FileUploadOptions.js +define("cordova/plugin/FileUploadOptions", function(require, exports, module) { + +/** + * Options to customize the HTTP request used to upload files. + * @constructor + * @param fileKey {String} Name of file request parameter. + * @param fileName {String} Filename to be used by the server. Defaults to image.jpg. + * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg. + * @param params {Object} Object with key: value params to send to the server. + * @param headers {Object} Keys are header names, values are header values. Multiple + * headers of the same name are not supported. + */ +var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers) { + this.fileKey = fileKey || null; + this.fileName = fileName || null; + this.mimeType = mimeType || null; + this.params = params || null; + this.headers = headers || null; +}; + +module.exports = FileUploadOptions; + +}); + +// file: lib/common/plugin/FileUploadResult.js +define("cordova/plugin/FileUploadResult", function(require, exports, module) { + +/** + * FileUploadResult + * @constructor + */ +var FileUploadResult = function() { + this.bytesSent = 0; + this.responseCode = null; + this.response = null; +}; + +module.exports = FileUploadResult; + +}); + +// file: lib/common/plugin/FileWriter.js +define("cordova/plugin/FileWriter", function(require, exports, module) { + +var exec = require('cordova/exec'), + FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +/** + * This class writes to the mobile device file system. + * + * For Android: + * The root directory is the root of the file system. + * To write to the SD card, the file name is "sdcard/my_file.txt" + * + * @constructor + * @param file {File} File object containing file properties + * @param append if true write to the end of the file, otherwise overwrite the file + */ +var FileWriter = function(file) { + this.fileName = ""; + this.length = 0; + if (file) { + this.fileName = file.fullPath || file; + this.length = file.size || 0; + } + // default is to write at the beginning of the file + this.position = 0; + + this.readyState = 0; // EMPTY + + this.result = null; + + // Error + this.error = null; + + // Event handlers + this.onwritestart = null; // When writing starts + this.onprogress = null; // While writing the file, and reporting partial file data + this.onwrite = null; // When the write has successfully completed. + this.onwriteend = null; // When the request has completed (either in success or failure). + this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method. + this.onerror = null; // When the write has failed (see errors). +}; + +// States +FileWriter.INIT = 0; +FileWriter.WRITING = 1; +FileWriter.DONE = 2; + +/** + * Abort writing file. + */ +FileWriter.prototype.abort = function() { + // check for invalid state + if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // set error + this.error = new FileError(FileError.ABORT_ERR); + + this.readyState = FileWriter.DONE; + + // If abort callback + if (typeof this.onabort === "function") { + this.onabort(new ProgressEvent("abort", {"target":this})); + } + + // If write end callback + if (typeof this.onwriteend === "function") { + this.onwriteend(new ProgressEvent("writeend", {"target":this})); + } +}; + +/** + * Writes data to the file + * + * @param text to be written + */ +FileWriter.prototype.write = function(text) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":me})); + } + + // Write file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // position always increases by bytes written because file would be extended + me.position += r; + // The length of the file is now where we are done writing. + + me.length = me.position; + + // DONE state + me.readyState = FileWriter.DONE; + + // If onwrite callback + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Save error + me.error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, "File", "write", [this.fileName, text, this.position]); +}; + +/** + * Moves the file pointer to the location specified. + * + * If the offset is a negative number the position of the file + * pointer is rewound. If the offset is greater than the file + * size the position is set to the end of the file. + * + * @param offset is the location to move the file pointer to. + */ +FileWriter.prototype.seek = function(offset) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + if (!offset && offset !== 0) { + return; + } + + // See back from end of file. + if (offset < 0) { + this.position = Math.max(offset + this.length, 0); + } + // Offset is bigger than file size so set position + // to the end of the file. + else if (offset > this.length) { + this.position = this.length; + } + // Offset is between 0 and file size so set the position + // to start writing. + else { + this.position = offset; + } +}; + +/** + * Truncates the file to the size specified. + * + * @param size to chop the file at. + */ +FileWriter.prototype.truncate = function(size) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":this})); + } + + // Write file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Update the length of the file + me.length = r; + me.position = Math.min(me.position, r); + + // If onwrite callback + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me.readyState === FileWriter.DONE) { + return; + } + + // DONE state + me.readyState = FileWriter.DONE; + + // Save error + me.error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {"target":me})); + } + + // If onwriteend callback + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } + }, "File", "truncate", [this.fileName, size]); +}; + +module.exports = FileWriter; + +}); + +// file: lib/common/plugin/Flags.js +define("cordova/plugin/Flags", function(require, exports, module) { + +/** + * Supplies arguments to methods that lookup or create files and directories. + * + * @param create + * {boolean} file or directory if it doesn't exist + * @param exclusive + * {boolean} used with create; if true the command will fail if + * target path exists + */ +function Flags(create, exclusive) { + this.create = create || false; + this.exclusive = exclusive || false; +} + +module.exports = Flags; + +}); + +// file: lib/common/plugin/GlobalizationError.js +define("cordova/plugin/GlobalizationError", function(require, exports, module) { + + +/** + * Globalization error object + * + * @constructor + * @param code + * @param message + */ +var GlobalizationError = function(code, message) { + this.code = code || null; + this.message = message || ''; +}; + +// Globalization error codes +GlobalizationError.UNKNOWN_ERROR = 0; +GlobalizationError.FORMATTING_ERROR = 1; +GlobalizationError.PARSING_ERROR = 2; +GlobalizationError.PATTERN_ERROR = 3; + +module.exports = GlobalizationError; + +}); + +// file: lib/common/plugin/InAppBrowser.js +define("cordova/plugin/InAppBrowser", function(require, exports, module) { + +var exec = require('cordova/exec'); +var channel = require('cordova/channel'); + +function InAppBrowser() { + this.channels = { + 'loadstart': channel.create('loadstart'), + 'loadstop' : channel.create('loadstop'), + 'exit' : channel.create('exit') + }; +} + +InAppBrowser.prototype = { + _eventHandler: function (event) { + if (event.type in this.channels) { + this.channels[event.type].fire(event); + } + }, + close: function (eventname) { + exec(null, null, "InAppBrowser", "close", []); + }, + addEventListener: function (eventname,f) { + if (eventname in this.channels) { + this.channels[eventname].subscribe(f); + } + }, + removeEventListener: function(eventname, f) { + if (eventname in this.channels) { + this.channels[eventname].unsubscribe(f); + } + } +}; + +module.exports = function(strUrl, strWindowName, strWindowFeatures) { + var iab = new InAppBrowser(); + var cb = function(eventname) { + iab._eventHandler(eventname); + }; + exec(cb, null, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); + return iab; +}; + + +}); + +// file: lib/common/plugin/LocalFileSystem.js +define("cordova/plugin/LocalFileSystem", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * Represents a local file system. + */ +var LocalFileSystem = function() { + +}; + +LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence +LocalFileSystem.PERSISTENT = 1; //persistent + +module.exports = LocalFileSystem; + +}); + +// file: lib/common/plugin/Media.js +define("cordova/plugin/Media", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'); + +var mediaObjects = {}; + +/** + * This class provides access to the device media, interfaces to both sound and video + * + * @constructor + * @param src The file name or url to play + * @param successCallback The callback to be called when the file is done playing or recording. + * successCallback() + * @param errorCallback The callback to be called if there is an error. + * errorCallback(int errorCode) - OPTIONAL + * @param statusCallback The callback to be called when media status has changed. + * statusCallback(int statusCode) - OPTIONAL + */ +var Media = function(src, successCallback, errorCallback, statusCallback) { + argscheck.checkArgs('SFFF', 'Media', arguments); + this.id = utils.createUUID(); + mediaObjects[this.id] = this; + this.src = src; + this.successCallback = successCallback; + this.errorCallback = errorCallback; + this.statusCallback = statusCallback; + this._duration = -1; + this._position = -1; + exec(null, this.errorCallback, "Media", "create", [this.id, this.src]); +}; + +// Media messages +Media.MEDIA_STATE = 1; +Media.MEDIA_DURATION = 2; +Media.MEDIA_POSITION = 3; +Media.MEDIA_ERROR = 9; + +// Media states +Media.MEDIA_NONE = 0; +Media.MEDIA_STARTING = 1; +Media.MEDIA_RUNNING = 2; +Media.MEDIA_PAUSED = 3; +Media.MEDIA_STOPPED = 4; +Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"]; + +// "static" function to return existing objs. +Media.get = function(id) { + return mediaObjects[id]; +}; + +/** + * Start or resume playing audio file. + */ +Media.prototype.play = function(options) { + exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]); +}; + +/** + * Stop playing audio file. + */ +Media.prototype.stop = function() { + var me = this; + exec(function() { + me._position = 0; + }, this.errorCallback, "Media", "stopPlayingAudio", [this.id]); +}; + +/** + * Seek or jump to a new time in the track.. + */ +Media.prototype.seekTo = function(milliseconds) { + var me = this; + exec(function(p) { + me._position = p; + }, this.errorCallback, "Media", "seekToAudio", [this.id, milliseconds]); +}; + +/** + * Pause playing audio file. + */ +Media.prototype.pause = function() { + exec(null, this.errorCallback, "Media", "pausePlayingAudio", [this.id]); +}; + +/** + * Get duration of an audio file. + * The duration is only set for audio that is playing, paused or stopped. + * + * @return duration or -1 if not known. + */ +Media.prototype.getDuration = function() { + return this._duration; +}; + +/** + * Get position of audio. + */ +Media.prototype.getCurrentPosition = function(success, fail) { + var me = this; + exec(function(p) { + me._position = p; + success(p); + }, fail, "Media", "getCurrentPositionAudio", [this.id]); +}; + +/** + * Start recording audio file. + */ +Media.prototype.startRecord = function() { + exec(null, this.errorCallback, "Media", "startRecordingAudio", [this.id, this.src]); +}; + +/** + * Stop recording audio file. + */ +Media.prototype.stopRecord = function() { + exec(null, this.errorCallback, "Media", "stopRecordingAudio", [this.id]); +}; + +/** + * Release the resources. + */ +Media.prototype.release = function() { + exec(null, this.errorCallback, "Media", "release", [this.id]); +}; + +/** + * Adjust the volume. + */ +Media.prototype.setVolume = function(volume) { + exec(null, null, "Media", "setVolume", [this.id, volume]); +}; + +/** + * Audio has status update. + * PRIVATE + * + * @param id The media object id (string) + * @param msgType The 'type' of update this is + * @param value Use of value is determined by the msgType + */ +Media.onStatus = function(id, msgType, value) { + + var media = mediaObjects[id]; + + if(media) { + switch(msgType) { + case Media.MEDIA_STATE : + media.statusCallback && media.statusCallback(value); + if(value == Media.MEDIA_STOPPED) { + media.successCallback && media.successCallback(); + } + break; + case Media.MEDIA_DURATION : + media._duration = value; + break; + case Media.MEDIA_ERROR : + media.errorCallback && media.errorCallback(value); + break; + case Media.MEDIA_POSITION : + media._position = Number(value); + break; + default : + console.error && console.error("Unhandled Media.onStatus :: " + msgType); + break; + } + } + else { + console.error && console.error("Received Media.onStatus callback for unknown media :: " + id); + } + +}; + +module.exports = Media; + +}); + +// file: lib/common/plugin/MediaError.js +define("cordova/plugin/MediaError", function(require, exports, module) { + +/** + * This class contains information about any Media errors. +*/ +/* + According to :: http://dev.w3.org/html5/spec-author-view/video.html#mediaerror + We should never be creating these objects, we should just implement the interface + which has 1 property for an instance, 'code' + + instead of doing : + errorCallbackFunction( new MediaError(3,'msg') ); +we should simply use a literal : + errorCallbackFunction( {'code':3} ); + */ + + var _MediaError = window.MediaError; + + +if(!_MediaError) { + window.MediaError = _MediaError = function(code, msg) { + this.code = (typeof code != 'undefined') ? code : null; + this.message = msg || ""; // message is NON-standard! do not use! + }; +} + +_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0; +_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1; +_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2; +_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3; +_MediaError.MEDIA_ERR_NONE_SUPPORTED = _MediaError.MEDIA_ERR_NONE_SUPPORTED || 4; +// TODO: MediaError.MEDIA_ERR_NONE_SUPPORTED is legacy, the W3 spec now defines it as below. +// as defined by http://dev.w3.org/html5/spec-author-view/video.html#error-codes +_MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = _MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED || 4; + +module.exports = _MediaError; + +}); + +// file: lib/common/plugin/MediaFile.js +define("cordova/plugin/MediaFile", function(require, exports, module) { + +var utils = require('cordova/utils'), + exec = require('cordova/exec'), + File = require('cordova/plugin/File'), + CaptureError = require('cordova/plugin/CaptureError'); +/** + * Represents a single file. + * + * name {DOMString} name of the file, without path information + * fullPath {DOMString} the full path of the file, including the name + * type {DOMString} mime type + * lastModifiedDate {Date} last modified date + * size {Number} size of the file in bytes + */ +var MediaFile = function(name, fullPath, type, lastModifiedDate, size){ + MediaFile.__super__.constructor.apply(this, arguments); +}; + +utils.extend(MediaFile, File); + +/** + * Request capture format data for a specific file and type + * + * @param {Function} successCB + * @param {Function} errorCB + */ +MediaFile.prototype.getFormatData = function(successCallback, errorCallback) { + if (typeof this.fullPath === "undefined" || this.fullPath === null) { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); + } else { + exec(successCallback, errorCallback, "Capture", "getFormatData", [this.fullPath, this.type]); + } +}; + +module.exports = MediaFile; + +}); + +// file: lib/common/plugin/MediaFileData.js +define("cordova/plugin/MediaFileData", function(require, exports, module) { + +/** + * MediaFileData encapsulates format information of a media file. + * + * @param {DOMString} codecs + * @param {long} bitrate + * @param {long} height + * @param {long} width + * @param {float} duration + */ +var MediaFileData = function(codecs, bitrate, height, width, duration){ + this.codecs = codecs || null; + this.bitrate = bitrate || 0; + this.height = height || 0; + this.width = width || 0; + this.duration = duration || 0; +}; + +module.exports = MediaFileData; + +}); + +// file: lib/common/plugin/Metadata.js +define("cordova/plugin/Metadata", function(require, exports, module) { + +/** + * Information about the state of the file or directory + * + * {Date} modificationTime (readonly) + */ +var Metadata = function(time) { + this.modificationTime = (typeof time != 'undefined'?new Date(time):null); +}; + +module.exports = Metadata; + +}); + +// file: lib/common/plugin/Position.js +define("cordova/plugin/Position", function(require, exports, module) { + +var Coordinates = require('cordova/plugin/Coordinates'); + +var Position = function(coords, timestamp) { + if (coords) { + this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy); + } else { + this.coords = new Coordinates(); + } + this.timestamp = (timestamp !== undefined) ? timestamp : new Date(); +}; + +module.exports = Position; + +}); + +// file: lib/common/plugin/PositionError.js +define("cordova/plugin/PositionError", function(require, exports, module) { + +/** + * Position error object + * + * @constructor + * @param code + * @param message + */ +var PositionError = function(code, message) { + this.code = code || null; + this.message = message || ''; +}; + +PositionError.PERMISSION_DENIED = 1; +PositionError.POSITION_UNAVAILABLE = 2; +PositionError.TIMEOUT = 3; + +module.exports = PositionError; + +}); + +// file: lib/common/plugin/ProgressEvent.js +define("cordova/plugin/ProgressEvent", function(require, exports, module) { + +// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill +// Feature test: See if we can instantiate a native ProgressEvent; +// if so, use that approach, +// otherwise fill-in with our own implementation. +// +// NOTE: right now we always fill in with our own. Down the road would be nice if we can use whatever is native in the webview. +var ProgressEvent = (function() { + /* + var createEvent = function(data) { + var event = document.createEvent('Events'); + event.initEvent('ProgressEvent', false, false); + if (data) { + for (var i in data) { + if (data.hasOwnProperty(i)) { + event[i] = data[i]; + } + } + if (data.target) { + // TODO: cannot call .dispatchEvent + // need to first figure out how to implement EventTarget + } + } + return event; + }; + try { + var ev = createEvent({type:"abort",target:document}); + return function ProgressEvent(type, data) { + data.type = type; + return createEvent(data); + }; + } catch(e){ + */ + return function ProgressEvent(type, dict) { + this.type = type; + this.bubbles = false; + this.cancelBubble = false; + this.cancelable = false; + this.lengthComputable = false; + this.loaded = dict && dict.loaded ? dict.loaded : 0; + this.total = dict && dict.total ? dict.total : 0; + this.target = dict && dict.target ? dict.target : null; + }; + //} +})(); + +module.exports = ProgressEvent; + +}); + +// file: lib/common/plugin/accelerometer.js +define("cordova/plugin/accelerometer", function(require, exports, module) { + +/** + * This class provides access to device accelerometer data. + * @constructor + */ +var argscheck = require('cordova/argscheck'), + utils = require("cordova/utils"), + exec = require("cordova/exec"), + Acceleration = require('cordova/plugin/Acceleration'); + +// Is the accel sensor running? +var running = false; + +// Keeps reference to watchAcceleration calls. +var timers = {}; + +// Array of listeners; used to keep track of when we should call start and stop. +var listeners = []; + +// Last returned acceleration object from native +var accel = null; + +// Tells native to start. +function start() { + exec(function(a) { + var tempListeners = listeners.slice(0); + accel = new Acceleration(a.x, a.y, a.z, a.timestamp); + for (var i = 0, l = tempListeners.length; i < l; i++) { + tempListeners[i].win(accel); + } + }, function(e) { + var tempListeners = listeners.slice(0); + for (var i = 0, l = tempListeners.length; i < l; i++) { + tempListeners[i].fail(e); + } + }, "Accelerometer", "start", []); + running = true; +} + +// Tells native to stop. +function stop() { + exec(null, null, "Accelerometer", "stop", []); + running = false; +} + +// Adds a callback pair to the listeners array +function createCallbackPair(win, fail) { + return {win:win, fail:fail}; +} + +// Removes a win/fail listener pair from the listeners array +function removeListeners(l) { + var idx = listeners.indexOf(l); + if (idx > -1) { + listeners.splice(idx, 1); + if (listeners.length === 0) { + stop(); + } + } +} + +var accelerometer = { + /** + * Asynchronously acquires the current acceleration. + * + * @param {Function} successCallback The function to call when the acceleration data is available + * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) + * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) + */ + getCurrentAcceleration: function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'accelerometer.getCurrentAcceleration', arguments); + + var p; + var win = function(a) { + removeListeners(p); + successCallback(a); + }; + var fail = function(e) { + removeListeners(p); + errorCallback && errorCallback(e); + }; + + p = createCallbackPair(win, fail); + listeners.push(p); + + if (!running) { + start(); + } + }, + + /** + * Asynchronously acquires the acceleration repeatedly at a given interval. + * + * @param {Function} successCallback The function to call each time the acceleration data is available + * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) + * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) + * @return String The watch id that must be passed to #clearWatch to stop watching. + */ + watchAcceleration: function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'accelerometer.watchAcceleration', arguments); + // Default interval (10 sec) + var frequency = (options && options.frequency && typeof options.frequency == 'number') ? options.frequency : 10000; + + // Keep reference to watch id, and report accel readings as often as defined in frequency + var id = utils.createUUID(); + + var p = createCallbackPair(function(){}, function(e) { + removeListeners(p); + errorCallback && errorCallback(e); + }); + listeners.push(p); + + timers[id] = { + timer:window.setInterval(function() { + if (accel) { + successCallback(accel); + } + }, frequency), + listeners:p + }; + + if (running) { + // If we're already running then immediately invoke the success callback + // but only if we have retrieved a value, sample code does not check for null ... + if (accel) { + successCallback(accel); + } + } else { + start(); + } + + return id; + }, + + /** + * Clears the specified accelerometer watch. + * + * @param {String} id The id of the watch returned from #watchAcceleration. + */ + clearWatch: function(id) { + // Stop javascript timer & remove from timer list + if (id && timers[id]) { + window.clearInterval(timers[id].timer); + removeListeners(timers[id].listeners); + delete timers[id]; + } + } +}; + +module.exports = accelerometer; + +}); + +// file: lib/common/plugin/accelerometer/symbols.js +define("cordova/plugin/accelerometer/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/Acceleration', 'Acceleration'); +modulemapper.defaults('cordova/plugin/accelerometer', 'navigator.accelerometer'); + +}); + +// file: lib/blackberry/plugin/air/DirectoryEntry.js +define("cordova/plugin/air/DirectoryEntry", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + DirectoryReader = require('cordova/plugin/air/DirectoryReader'), + FileEntry = require('cordova/plugin/FileEntry'), + FileError = require('cordova/plugin/FileError'); + +var validFileRe = new RegExp('^[a-zA-Z][0-9a-zA-Z._ ]*$'); + +module.exports = { + createReader : function() { + return new DirectoryReader(this.fullPath); + }, + /** + * Creates or looks up a directory; override for BlackBerry. + * + * @param path + * {DOMString} either a relative or absolute path from this + * directory in which to look up or create a directory + * @param options + * {Flags} options to create or exclusively create the directory + * @param successCallback + * {Function} called with the new DirectoryEntry + * @param errorCallback + * {Function} called with a FileError + */ + getDirectory : function(path, options, successCallback, errorCallback) { + // create directory if it doesn't exist + var create = (options && options.create === true) ? true : false, + // if true, causes failure if create is true and path already exists + exclusive = (options && options.exclusive === true) ? true : false, + // directory exists + exists, + // create a new DirectoryEntry object and invoke success callback + createEntry = function() { + var path_parts = path.split('/'), + name = path_parts[path_parts.length - 1], + dirEntry = new DirectoryEntry(name, path); + + // invoke success callback + if (typeof successCallback === 'function') { + successCallback(dirEntry); + } + }; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // invalid path + if(!validFileRe.exec(path)){ + fail(FileError.ENCODING_ERR); + return; + } + + // determine if path is relative or absolute + if (!path) { + fail(FileError.ENCODING_ERR); + return; + } else if (path.indexOf(this.fullPath) !== 0) { + // path does not begin with the fullPath of this directory + // therefore, it is relative + path = this.fullPath + '/' + path; + } + + // determine if directory exists + try { + // will return true if path exists AND is a directory + exists = blackberry.io.dir.exists(path); + } catch (e) { + // invalid path + // TODO this will not work on playbook - need to think how to find invalid urls + fail(FileError.ENCODING_ERR); + return; + } + + + // path is a directory + if (exists) { + if (create && exclusive) { + // can't guarantee exclusivity + fail(FileError.PATH_EXISTS_ERR); + } else { + // create entry for existing directory + createEntry(); + } + } + // will return true if path exists AND is a file + else if (blackberry.io.file.exists(path)) { + // the path is a file + fail(FileError.TYPE_MISMATCH_ERR); + } + // path does not exist, create it + else if (create) { + try { + // directory path must have trailing slash + var dirPath = path; + if (dirPath.substr(-1) !== '/') { + dirPath += '/'; + } + console.log('creating dir path at: ' + dirPath); + blackberry.io.dir.createNewDir(dirPath); + createEntry(); + } catch (eone) { + // unable to create directory + fail(FileError.NOT_FOUND_ERR); + } + } + // path does not exist, don't create + else { + // directory doesn't exist + fail(FileError.NOT_FOUND_ERR); + } + }, + + /** + * Create or look up a file. + * + * @param path {DOMString} + * either a relative or absolute path from this directory in + * which to look up or create a file + * @param options {Flags} + * options to create or exclusively create the file + * @param successCallback {Function} + * called with the new FileEntry object + * @param errorCallback {Function} + * called with a FileError object if error occurs + */ + getFile : function(path, options, successCallback, errorCallback) { + // create file if it doesn't exist + var create = (options && options.create === true) ? true : false, + // if true, causes failure if create is true and path already exists + exclusive = (options && options.exclusive === true) ? true : false, + // file exists + exists, + // create a new FileEntry object and invoke success callback + createEntry = function() { + var path_parts = path.split('/'), + name = path_parts[path_parts.length - 1], + fileEntry = new FileEntry(name, path); + + // invoke success callback + if (typeof successCallback === 'function') { + successCallback(fileEntry); + } + }; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // invalid path + if(!validFileRe.exec(path)){ + fail(FileError.ENCODING_ERR); + return; + } + // determine if path is relative or absolute + if (!path) { + fail(FileError.ENCODING_ERR); + return; + } + else if (path.indexOf(this.fullPath) !== 0) { + // path does not begin with the fullPath of this directory + // therefore, it is relative + path = this.fullPath + '/' + path; + } + + // determine if file exists + try { + // will return true if path exists AND is a file + exists = blackberry.io.file.exists(path); + } + catch (e) { + // invalid path + fail(FileError.ENCODING_ERR); + return; + } + + // path is a file + if (exists) { + if (create && exclusive) { + // can't guarantee exclusivity + fail(FileError.PATH_EXISTS_ERR); + } + else { + // create entry for existing file + createEntry(); + } + } + // will return true if path exists AND is a directory + else if (blackberry.io.dir.exists(path)) { + // the path is a directory + fail(FileError.TYPE_MISMATCH_ERR); + } + // path does not exist, create it + else if (create) { + // create empty file + var emptyBlob = blackberry.utils.stringToBlob(''); + blackberry.io.file.saveFile(path,emptyBlob); + createEntry(); + } + // path does not exist, don't create + else { + // file doesn't exist + fail(FileError.NOT_FOUND_ERR); + } + }, + + /** + * Delete a directory and all of it's contents. + * + * @param successCallback {Function} called with no parameters + * @param errorCallback {Function} called with a FileError + */ + removeRecursively : function(successCallback, errorCallback) { + // we're removing THIS directory + var path = this.fullPath; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // attempt to delete directory + if (blackberry.io.dir.exists(path)) { + // it is an error to attempt to remove the file system root + //exec(null, null, "File", "isFileSystemRoot", [ path ]) === true + if (false) { + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + else { + try { + // delete the directory, setting recursive flag to true + blackberry.io.dir.deleteDirectory(path, true); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (e) { + // permissions don't allow deletion + console.log(e); + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + } + } + // it's a file, not a directory + else if (blackberry.io.file.exists(path)) { + fail(FileError.TYPE_MISMATCH_ERR); + } + // not found + else { + fail(FileError.NOT_FOUND_ERR); + } + } +}; + +}); + +// file: lib/blackberry/plugin/air/DirectoryReader.js +define("cordova/plugin/air/DirectoryReader", function(require, exports, module) { + +var FileError = require('cordova/plugin/FileError'); + +/** + * An interface that lists the files and directories in a directory. + */ +function DirectoryReader(path) { + this.path = path || null; +} + +/** + * Returns a list of entries from a directory. + * + * @param {Function} successCallback is called with a list of entries + * @param {Function} errorCallback is called with a FileError + */ +DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) { + var win = typeof successCallback !== 'function' ? null : function(result) { + var retVal = []; + for (var i=0; i=0) || blackberry.io.file.exists(dstPath)){ + // copying directory into child or is file path + fail(FileError.INVALID_MODIFICATION_ERR); + }else{ + recursiveCopy(srcPath, dstPath); + + theEntry.fullPath = dstPath; + theEntry.name = name; + theEntry.isDirectory = true; + theEntry.isFile = false; + success(theEntry); + } + }else{ + // directory onto itself + fail(FileError.INVALID_MODIFICATION_ERR); + } + } + + }, + + remove : function(successCallback, errorCallback) { + var path = this.fullPath, + // directory contents + contents = []; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // file + if (blackberry.io.file.exists(path)) { + try { + blackberry.io.file.deleteFile(path); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (e) { + // permissions don't allow + fail(FileError.INVALID_MODIFICATION_ERR); + } + } + // directory + else if (blackberry.io.dir.exists(path)) { + // it is an error to attempt to remove the file system root + console.log('entry directory'); + // TODO: gotta figure out how to get root dirs on playbook - + // getRootDirs doesn't work + if (false) { + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } else { + // check to see if directory is empty + contents = blackberry.io.dir.listFiles(path); + if (contents.length !== 0) { + fail(FileError.INVALID_MODIFICATION_ERR); + } else { + try { + // delete + blackberry.io.dir.deleteDirectory(path, false); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (eone) { + // permissions don't allow + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + } + } + } + // not found + else { + fail(FileError.NOT_FOUND_ERR); + } + }, + getParent : function(successCallback, errorCallback) { + var that = this; + + try { + // On BlackBerry, the TEMPORARY file system is actually a temporary + // directory that is created on a per-application basis. This is + // to help ensure that applications do not share the same temporary + // space. So we check to see if this is the TEMPORARY file system + // (directory). If it is, we must return this Entry, rather than + // the Entry for its parent. + requestFileSystem(LocalFileSystem.TEMPORARY, 0, + function(fileSystem) { + if (fileSystem.root.fullPath === that.fullPath) { + if (typeof successCallback === 'function') { + successCallback(fileSystem.root); + } + } else { + resolveLocalFileSystemURI(blackberry.io.dir + .getParentDirectory(that.fullPath), + successCallback, errorCallback); + } + }, errorCallback); + } catch (e) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(FileError.NOT_FOUND_ERR)); + } + } + } +}; + + +}); + +// file: lib/blackberry/plugin/air/File.js +define("cordova/plugin/air/File", function(require, exports, module) { + +/** + * Constructor. + * name {DOMString} name of the file, without path information + * fullPath {DOMString} the full path of the file, including the name + * type {DOMString} mime type + * lastModifiedDate {Date} last modified date + * size {Number} size of the file in bytes + */ + +var File = function(name, fullPath, type, lastModifiedDate, size){ + this.name = name || ''; + this.fullPath = fullPath || null; + this.type = type || null; + this.lastModifiedDate = lastModifiedDate || null; + this.size = size || 0; +}; + +module.exports = File; + +}); + +// file: lib/blackberry/plugin/air/FileEntry.js +define("cordova/plugin/air/FileEntry", function(require, exports, module) { + +var FileEntry = require('cordova/plugin/FileEntry'), + Entry = require('cordova/plugin/air/Entry'), + FileWriter = require('cordova/plugin/air/FileWriter'), + File = require('cordova/plugin/air/File'), + FileError = require('cordova/plugin/FileError'); + +module.exports = { + /** + * Creates a new FileWriter associated with the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new FileWriter + * @param {Function} errorCallback is called with a FileError + */ + createWriter : function(successCallback, errorCallback) { + this.file(function(filePointer) { + var writer = new FileWriter(filePointer); + + if (writer.fileName === null || writer.fileName === "") { + if (typeof errorCallback === "function") { + errorCallback(new FileError(FileError.INVALID_STATE_ERR)); + } + } else { + if (typeof successCallback === "function") { + successCallback(writer); + } + } + }, errorCallback); + }, + + /** + * Returns a File that represents the current state of the file that this FileEntry represents. + * + * @param {Function} successCallback is called with the new File object + * @param {Function} errorCallback is called with a FileError + */ + file : function(successCallback, errorCallback) { + var win = typeof successCallback !== 'function' ? null : function(f) { + var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size); + successCallback(file); + }; + var fail = typeof errorCallback !== 'function' ? null : function(code) { + errorCallback(new FileError(code)); + }; + + if(blackberry.io.file.exists(this.fullPath)){ + var theFileProperties = blackberry.io.file.getFileProperties(this.fullPath); + var theFile = {}; + + theFile.fullPath = this.fullPath; + theFile.type = theFileProperties.fileExtension; + theFile.lastModifiedDate = theFileProperties.dateModified; + theFile.size = theFileProperties.size; + win(theFile); + }else{ + fail(FileError.NOT_FOUND_ERR); + } + } +}; + + +}); + +// file: lib/blackberry/plugin/air/FileReader.js +define("cordova/plugin/air/FileReader", function(require, exports, module) { + +var FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +/** + * This class reads the mobile device file system. + * + * For Android: + * The root directory is the root of the file system. + * To read from the SD card, the file name is "sdcard/my_file.txt" + * @constructor + */ +var FileReader = function() { + this.fileName = ""; + + this.readyState = 0; // FileReader.EMPTY + + // File data + this.result = null; + + // Error + this.error = null; + + // Event handlers + this.onloadstart = null; // When the read starts. + this.onprogress = null; // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total) + this.onload = null; // When the read has successfully completed. + this.onerror = null; // When the read has failed (see errors). + this.onloadend = null; // When the request has completed (either in success or failure). + this.onabort = null; // When the read has been aborted. For instance, by invoking the abort() method. +}; + +// States +FileReader.EMPTY = 0; +FileReader.LOADING = 1; +FileReader.DONE = 2; + +/** + * Abort reading file. + */ +FileReader.prototype.abort = function() { + this.result = null; + + if (this.readyState == FileReader.DONE || this.readyState == FileReader.EMPTY) { + return; + } + + this.readyState = FileReader.DONE; + + // If abort callback + if (typeof this.onabort === 'function') { + this.onabort(new ProgressEvent('abort', {target:this})); + } + // If load end callback + if (typeof this.onloadend === 'function') { + this.onloadend(new ProgressEvent('loadend', {target:this})); + } +}; + +/** + * Read text file. + * + * @param file {File} File object containing file properties + * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets) + */ +FileReader.prototype.readAsText = function(file, encoding) { + // Figure out pathing + this.fileName = ''; + if (typeof file.fullPath === 'undefined') { + this.fileName = file; + } else { + this.fileName = file.fullPath; + } + + // Already loading something + if (this.readyState == FileReader.LOADING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // LOADING state + this.readyState = FileReader.LOADING; + + // If loadstart callback + if (typeof this.onloadstart === "function") { + this.onloadstart(new ProgressEvent("loadstart", {target:this})); + } + + // Default encoding is UTF-8 + var enc = encoding ? encoding : "UTF-8"; + + var me = this; + // Read file + if(blackberry.io.file.exists(this.fileName)){ + var theText = ''; + var getFileContents = function(path,blob){ + if(blob){ + + theText = blackberry.utils.blobToString(blob, enc); + me.result = theText; + + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + me.readyState = FileReader.DONE; + + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + } + }; + // setting asynch to off + blackberry.io.file.readFile(this.fileName, getFileContents, false); + + }else{ + // If DONE (cancelled), then don't do anything + if (me.readyState === FileReader.DONE) { + return; + } + + // DONE state + me.readyState = FileReader.DONE; + + me.result = null; + + // Save error + me.error = new FileError(FileError.NOT_FOUND_ERR); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + } +}; + + +/** + * Read file and return data as a base64 encoded data url. + * A data url is of the form: + * data:[][;base64], + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsDataURL = function(file) { + this.fileName = ""; + if (typeof file.fullPath === "undefined") { + this.fileName = file; + } else { + this.fileName = file.fullPath; + } + + // Already loading something + if (this.readyState == FileReader.LOADING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // LOADING state + this.readyState = FileReader.LOADING; + + // If loadstart callback + if (typeof this.onloadstart === "function") { + this.onloadstart(new ProgressEvent("loadstart", {target:this})); + } + + var enc = "BASE64"; + + var me = this; + + // Read file + if(blackberry.io.file.exists(this.fileName)){ + var theText = ''; + var getFileContents = function(path,blob){ + if(blob){ + theText = blackberry.utils.blobToString(blob, enc); + me.result = "data:text/plain;base64," +theText; + + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + me.readyState = FileReader.DONE; + + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + } + }; + // setting asynch to off + blackberry.io.file.readFile(this.fileName, getFileContents, false); + + }else{ + // If DONE (cancelled), then don't do anything + if (me.readyState === FileReader.DONE) { + return; + } + + // DONE state + me.readyState = FileReader.DONE; + + me.result = null; + + // Save error + me.error = new FileError(FileError.NOT_FOUND_ERR); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + } +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsBinaryString = function(file) { + // TODO - Can't return binary data to browser. + console.log('method "readAsBinaryString" is not supported at this time.'); +}; + +/** + * Read file and return data as a binary data. + * + * @param file {File} File object containing file properties + */ +FileReader.prototype.readAsArrayBuffer = function(file) { + // TODO - Can't return binary data to browser. + console.log('This method is not supported at this time.'); +}; + +module.exports = FileReader; + +}); + +// file: lib/blackberry/plugin/air/FileTransfer.js +define("cordova/plugin/air/FileTransfer", function(require, exports, module) { + +var cordova = require('cordova'), +FileTransferError = require('cordova/plugin/FileTransferError'), +FileUploadResult = require('cordova/plugin/FileUploadResult'); + +var validURLProtocol = new RegExp('^(https?|ftp):\/\/'); + +function getParentPath(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(0, pos + 1); +} + +function getFileName(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(pos + 1); +} + +module.exports = { + upload: function (args, win, fail) { + var filePath = args[0], + server = args[1], + fileKey = args[2], + fileName = args[3], + mimeType = args[4], + params = args[5], + trustAllHosts = args[6], + chunkedMode = args[7], + headers = args[8]; + + if(!validURLProtocol.exec(server)){ + return { "status" : cordova.callbackStatus.ERROR, "message" : new FileTransferError(FileTransferError.INVALID_URL_ERR) }; + } + + window.resolveLocalFileSystemURI(filePath, fileWin, fail); + + function fileWin(entryObject){ + blackberry.io.file.readFile(filePath, readWin, false); + } + + function readWin(filePath, blobFile){ + var fd = new FormData(); + + fd.append(fileKey, blobFile, fileName); + for (var prop in params) { + if(params.hasOwnProperty(prop)) { + fd.append(prop, params[prop]); + } + } + + var xhr = new XMLHttpRequest(); + xhr.open("POST", server); + xhr.onload = function(evt) { + if (xhr.status == 200) { + var result = new FileUploadResult(); + result.bytesSent = xhr.response.length; + result.responseCode = xhr.status; + result.response = xhr.response; + win(result); + } else if (xhr.status == 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else if (xhr.status == 403) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + } + }; + xhr.ontimeout = function(evt) { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + }; + + if(headers){ + for(var i in headers){ + xhr.setRequestHeader(i, headers[i]); + } + } + xhr.send(fd); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + + download: function(args, win, fail){ + var url = args[0], + filePath = args[1]; + + if(!validURLProtocol.exec(url)){ + return { "status" : cordova.callbackStatus.ERROR, "message" : new FileTransferError(FileTransferError.INVALID_URL_ERR) }; + } + + var xhr = new XMLHttpRequest(); + + function writeFile(fileEntry) { + fileEntry.createWriter(function(writer) { + writer.onwriteend = function(evt) { + if (!evt.target.error) { + win(new window.FileEntry(fileEntry.name, fileEntry.toURL())); + } else { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + } + }; + + writer.onerror = function(evt) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }; + + var blob = blackberry.utils.stringToBlob(xhr.response); + writer.write(blob); + + }, + function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + } + + xhr.onreadystatechange = function () { + if (xhr.readyState == xhr.DONE) { + if (xhr.status == 200 && xhr.response) { + window.resolveLocalFileSystemURI(getParentPath(filePath), function(dir) { + dir.getFile(getFileName(filePath), {create: true}, writeFile, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + }, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + } else if (xhr.status == 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + } + } + }; + + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.send(); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + } +}; + +}); + +// file: lib/blackberry/plugin/air/FileWriter.js +define("cordova/plugin/air/FileWriter", function(require, exports, module) { + +var FileError = require('cordova/plugin/FileError'), + ProgressEvent = require('cordova/plugin/ProgressEvent'); + +/** + * @constructor + * @param file {File} File object containing file properties + * @param append if true write to the end of the file, otherwise overwrite the file + */ +var FileWriter = function(file) { + this.fileName = ""; + this.length = 0; + if (file) { + this.fileName = file.fullPath || file; + this.length = file.size || 0; + } + // default is to write at the beginning of the file + this.position = 0; + + this.readyState = 0; // EMPTY + + this.result = null; + + // Error + this.error = null; + + // Event handlers + this.onwritestart = null; // When writing starts + this.onprogress = null; // While writing the file, and reporting partial file data + this.onwrite = null; // When the write has successfully completed. + this.onwriteend = null; // When the request has completed (either in success or failure). + this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method. + this.onerror = null; // When the write has failed (see errors). +}; + +// States +FileWriter.INIT = 0; +FileWriter.WRITING = 1; +FileWriter.DONE = 2; + +/** + * Abort writing file. + */ +FileWriter.prototype.abort = function() { + // check for invalid state + if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // set error + this.error = new FileError(FileError.ABORT_ERR); + + this.readyState = FileWriter.DONE; + + // If abort callback + if (typeof this.onabort === "function") { + this.onabort(new ProgressEvent("abort", {"target":this})); + } + + // If write end callback + if (typeof this.onwriteend === "function") { + this.onwriteend(new ProgressEvent("writeend", {"target":this})); + } +}; + +/** + * Writes data to the file + * + * @param text to be written + */ +FileWriter.prototype.write = function(text) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":me})); + } + + var textBlob = blackberry.utils.stringToBlob(text); + + if(blackberry.io.file.exists(this.fileName)){ + + var oldText = ''; + var newText = text; + + var getFileContents = function(path,blob){ + + if(blob){ + oldText = blackberry.utils.blobToString(blob); + if(oldText.length>0){ + newText = oldText.substr(0,me.position) + text; + } + } + + var tempFile = me.fileName+'temp'; + if(blackberry.io.file.exists(tempFile)){ + blackberry.io.file.deleteFile(tempFile); + } + + var newTextBlob = blackberry.utils.stringToBlob(newText); + + // crete a temp file, delete file we are 'overwriting', then rename temp file + blackberry.io.file.saveFile(tempFile, newTextBlob); + blackberry.io.file.deleteFile(me.fileName); + blackberry.io.file.rename(tempFile, me.fileName.split('/').pop()); + + me.position = newText.length; + me.length = me.position; + + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + }; + + // setting asynch to off + blackberry.io.file.readFile(this.fileName, getFileContents, false); + + }else{ + + // file is new so just save it + blackberry.io.file.saveFile(this.fileName, textBlob); + me.position = text.length; + me.length = me.position; + } + + me.readyState = FileWriter.DONE; + + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } +}; + +/** + * Moves the file pointer to the location specified. + * + * If the offset is a negative number the position of the file + * pointer is rewound. If the offset is greater than the file + * size the position is set to the end of the file. + * + * @param offset is the location to move the file pointer to. + */ +FileWriter.prototype.seek = function(offset) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + if (!offset && offset !== 0) { + return; + } + + // See back from end of file. + if (offset < 0) { + this.position = Math.max(offset + this.length, 0); + } + // Offset is bigger than file size so set position + // to the end of the file. + else if (offset > this.length) { + this.position = this.length; + } + // Offset is between 0 and file size so set the position + // to start writing. + else { + this.position = offset; + } +}; + +/** + * Truncates the file to the size specified. + * + * @param size to chop the file at. + */ +FileWriter.prototype.truncate = function(size) { + // Throw an exception if we are already writing a file + if (this.readyState === FileWriter.WRITING) { + throw new FileError(FileError.INVALID_STATE_ERR); + } + + // WRITING state + this.readyState = FileWriter.WRITING; + + var me = this; + + // If onwritestart callback + if (typeof me.onwritestart === "function") { + me.onwritestart(new ProgressEvent("writestart", {"target":this})); + } + + if(blackberry.io.file.exists(this.fileName)){ + + var oldText = ''; + var newText = ''; + + var getFileContents = function(path,blob){ + + if(blob){ + oldText = blackberry.utils.blobToString(blob); + if(oldText.length>0){ + newText = oldText.slice(0,size); + }else{ + // TODO: throw error + } + } + + var tempFile = me.fileName+'temp'; + if(blackberry.io.file.exists(tempFile)){ + blackberry.io.file.deleteFile(tempFile); + } + + var newTextBlob = blackberry.utils.stringToBlob(newText); + + // crete a temp file, delete file we are 'overwriting', then rename temp file + blackberry.io.file.saveFile(tempFile, newTextBlob); + blackberry.io.file.deleteFile(me.fileName); + blackberry.io.file.rename(tempFile, me.fileName.split('/').pop()); + + me.position = newText.length; + me.length = me.position; + + if (typeof me.onwrite === "function") { + me.onwrite(new ProgressEvent("write", {"target":me})); + } + }; + + // setting asynch to off - worry about making this all callbacks later + blackberry.io.file.readFile(this.fileName, getFileContents, false); + + }else{ + + // TODO: file doesn't exist - throw error + + } + + me.readyState = FileWriter.DONE; + + if (typeof me.onwriteend === "function") { + me.onwriteend(new ProgressEvent("writeend", {"target":me})); + } +}; + +module.exports = FileWriter; + +}); + +// file: lib/blackberry/plugin/air/battery.js +define("cordova/plugin/air/battery", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + start: function (args, win, fail) { + // Register one listener to each of the level and state change + // events using WebWorks API. + blackberry.system.event.deviceBatteryStateChange(function(state) { + var me = navigator.battery; + // state is either CHARGING or UNPLUGGED + if (state === 2 || state === 3) { + var info = { + "level" : me._level, + "isPlugged" : state === 2 + }; + + if (me._isPlugged !== info.isPlugged && typeof win === 'function') { + win(info); + } + } + }); + blackberry.system.event.deviceBatteryLevelChange(function(level) { + var me = navigator.battery; + if (level != me._level && typeof win === 'function') { + win({'level' : level, 'isPlugged' : me._isPlugged}); + } + }); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + stop: function (args, win, fail) { + // Unregister battery listeners. + blackberry.system.event.deviceBatteryStateChange(null); + blackberry.system.event.deviceBatteryLevelChange(null); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + } +}; + +}); + +// file: lib/blackberry/plugin/air/camera.js +define("cordova/plugin/air/camera", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + takePicture: function (args, win, fail) { + var onCaptured = blackberry.events.registerEventHandler("onCaptured", win), + onCameraClosed = blackberry.events.registerEventHandler("onCameraClosed", function () {}), + onError = blackberry.events.registerEventHandler("onError", fail), + request = new blackberry.transport.RemoteFunctionCall('blackberry/media/camera/takePicture'); + + request.addParam("onCaptured", onCaptured); + request.addParam("onCameraClosed", onCameraClosed); + request.addParam("onError", onError); + + //HACK: this is a sync call due to: + //https://github.com/blackberry/WebWorks-TabletOS/issues/51 + request.makeSyncCall(); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + } +}; + +}); + +// file: lib/blackberry/plugin/air/capture.js +define("cordova/plugin/air/capture", function(require, exports, module) { + +var cordova = require('cordova'); + +function capture(action, win, fail) { + var onCaptured = blackberry.events.registerEventHandler("onCaptured", function (path) { + var file = blackberry.io.file.getFileProperties(path); + win([{ + fullPath: path, + lastModifiedDate: file.dateModified, + name: path.replace(file.directory + "/", ""), + size: file.size, + type: file.fileExtension + }]); + }), + onCameraClosed = blackberry.events.registerEventHandler("onCameraClosed", function () {}), + onError = blackberry.events.registerEventHandler("onError", fail), + request = new blackberry.transport.RemoteFunctionCall('blackberry/media/camera/' + action); + + request.addParam("onCaptured", onCaptured); + request.addParam("onCameraClosed", onCameraClosed); + request.addParam("onError", onError); + + //HACK: this is a sync call due to: + //https://github.com/blackberry/WebWorks-TabletOS/issues/51 + request.makeSyncCall(); +} + +module.exports = { + getSupportedAudioModes: function (args, win, fail) { + return {"status": cordova.callbackStatus.OK, "message": []}; + }, + getSupportedImageModes: function (args, win, fail) { + return {"status": cordova.callbackStatus.OK, "message": []}; + }, + getSupportedVideoModes: function (args, win, fail) { + return {"status": cordova.callbackStatus.OK, "message": []}; + }, + captureImage: function (args, win, fail) { + if (args[0].limit > 0) { + capture("takePicture", win, fail); + } + else { + win([]); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + captureVideo: function (args, win, fail) { + if (args[0].limit > 0) { + capture("takeVideo", win, fail); + } + else { + win([]); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + captureAudio: function (args, win, fail) { + var onCaptureAudioWin = function(filePath){ + // for some reason the filePath is coming back as a string between two double quotes + filePath = filePath.slice(1, filePath.length-1); + var file = blackberry.io.file.getFileProperties(filePath); + + win([{ + fullPath: filePath, + lastModifiedDate: file.dateModified, + name: filePath.replace(file.directory + "/", ""), + size: file.size, + type: file.fileExtension + }]); + }; + + var onCaptureAudioFail = function(){ + fail([]); + }; + + if (args[0].limit > 0 && args[0].duration){ + // a sloppy way of creating a uuid since there's no built in date function to get milliseconds since epoch + // might be better to instead check files within directory and then figure out the next file name should be + // ie, img000 -> img001 though that would take awhile and would add a whole bunch of checks + var id = new Date(); + id = (id.getDay()).toString() + (id.getHours()).toString() + (id.getSeconds()).toString() + (id.getMilliseconds()).toString() + (id.getYear()).toString(); + + var fileName = blackberry.io.dir.appDirs.shared.music.path+'/audio'+id+'.wav'; + blackberry.media.microphone.record(fileName, onCaptureAudioWin, onCaptureAudioFail); + // multiple duration by a 1000 since it comes in as seconds + setTimeout(blackberry.media.microphone.stop,args[0].duration*1000); + } + else { + win([]); + } + return {"status": cordova.callbackStatus.NO_RESULT, "message": "WebWorks Is On It"}; + } +}; + +}); + +// file: lib/blackberry/plugin/air/device.js +define("cordova/plugin/air/device", function(require, exports, module) { + +var channel = require('cordova/channel'), + cordova = require('cordova'); + +// Tell cordova channel to wait on the CordovaInfoReady event +channel.waitForInitialization('onCordovaInfoReady'); + +module.exports = { + getDeviceInfo : function(args, win, fail){ + //Register an event handler for the networkChange event + var callback = blackberry.events.registerEventHandler("deviceInfo", function (info) { + win({ + platform: "BlackBerry", + version: info.version, + model: "PlayBook", + name: "PlayBook", // deprecated: please use device.model + uuid: info.uuid, + cordova: "2.5.0" + }); + }), + request = new blackberry.transport.RemoteFunctionCall("org/apache/cordova/getDeviceInfo"); + + request.addParam("id", callback); + request.makeSyncCall(); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "" }; + } +}; + +}); + +// file: lib/blackberry/plugin/air/file/bbsymbols.js +define("cordova/plugin/air/file/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/air/DirectoryReader', 'DirectoryReader'); +modulemapper.clobbers('cordova/plugin/air/File', 'File'); +modulemapper.clobbers('cordova/plugin/air/FileReader', 'FileReader'); +modulemapper.clobbers('cordova/plugin/air/FileWriter', 'FileWriter'); +modulemapper.clobbers('cordova/plugin/air/requestFileSystem', 'requestFileSystem'); +modulemapper.clobbers('cordova/plugin/air/resolveLocalFileSystemURI', 'resolveLocalFileSystemURI'); +modulemapper.merges('cordova/plugin/air/DirectoryEntry', 'DirectoryEntry'); +modulemapper.merges('cordova/plugin/air/Entry', 'Entry'); +modulemapper.merges('cordova/plugin/air/FileEntry', 'FileEntry'); + + +}); + +// file: lib/blackberry/plugin/air/manager.js +define("cordova/plugin/air/manager", function(require, exports, module) { + +var cordova = require('cordova'), + plugins = { + 'Device' : require('cordova/plugin/air/device'), + 'Battery' : require('cordova/plugin/air/battery'), + 'Camera' : require('cordova/plugin/air/camera'), + 'Logger' : require('cordova/plugin/webworks/logger'), + 'Media' : require('cordova/plugin/webworks/media'), + 'Capture' : require('cordova/plugin/air/capture'), + 'Accelerometer' : require('cordova/plugin/webworks/accelerometer'), + 'NetworkStatus' : require('cordova/plugin/air/network'), + 'Notification' : require('cordova/plugin/webworks/notification'), + 'FileTransfer' : require('cordova/plugin/air/FileTransfer') + }; + +module.exports = { + addPlugin: function (key, module) { + plugins[key] = require(module); + }, + exec: function (win, fail, clazz, action, args) { + var result = {"status" : cordova.callbackStatus.CLASS_NOT_FOUND_EXCEPTION, "message" : "Class " + clazz + " cannot be found"}; + + if (plugins[clazz]) { + if (plugins[clazz][action]) { + result = plugins[clazz][action](args, win, fail); + } + else { + result = { "status" : cordova.callbackStatus.INVALID_ACTION, "message" : "Action not found: " + action }; + } + } + + return result; + }, + resume: function () {}, + pause: function () {}, + destroy: function () {} +}; + +}); + +// file: lib/blackberry/plugin/air/network.js +define("cordova/plugin/air/network", function(require, exports, module) { + +var cordova = require('cordova'), + connection = require('cordova/plugin/Connection'); + +module.exports = { + getConnectionInfo: function (args, win, fail) { + var connectionType = connection.NONE, + eventType = "offline", + callbackID, + request; + + /** + * For PlayBooks, we currently only have WiFi connections, so + * return WiFi if there is any access at all. + * TODO: update if/when PlayBook gets other connection types... + */ + if (blackberry.system.hasDataCoverage()) { + connectionType = connection.WIFI; + eventType = "online"; + } + + //Register an event handler for the networkChange event + callbackID = blackberry.events.registerEventHandler("networkChange", function (status) { + win(status.type); + }); + + //pass our callback id down to our network extension + request = new blackberry.transport.RemoteFunctionCall("org/apache/cordova/getConnectionInfo"); + request.addParam("networkStatusChangedID", callbackID); + request.makeSyncCall(); + + return { "status": cordova.callbackStatus.OK, "message": connectionType}; + } +}; + +}); + +// file: lib/blackberry/plugin/air/platform.js +define("cordova/plugin/air/platform", function(require, exports, module) { + +module.exports = { + id: "playbook", + initialize:function() {} +}; + +}); + +// file: lib/blackberry/plugin/air/requestFileSystem.js +define("cordova/plugin/air/requestFileSystem", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'), +FileError = require('cordova/plugin/FileError'), +FileSystem = require('cordova/plugin/FileSystem'), +LocalFileSystem = require('cordova/plugin/LocalFileSystem'); + +/** + * Request a file system in which to store application data. + * @param type local file system type + * @param size indicates how much storage space, in bytes, the application expects to need + * @param successCallback invoked with a FileSystem object + * @param errorCallback invoked if error occurs retrieving file system + */ +var requestFileSystem = function(type, size, successCallback, errorCallback) { + var fail = function(code) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(code)); + } + }; + + if (type < 0 || type > 3) { + fail(FileError.SYNTAX_ERR); + } else { + // if successful, return a FileSystem object + var success = function(file_system) { + if (file_system) { + if (typeof successCallback === 'function') { + successCallback(file_system); + } + } + else { + // no FileSystem object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + + // guessing the max file size is 2GB - 1 bytes? + // https://bdsc.webapps.blackberry.com/native/documentation/com.qnx.doc.neutrino.user_guide/topic/limits_filesystems.html + + if(size>=2147483648){ + fail(FileError.QUOTA_EXCEEDED_ERR); + return; + } + + + var theFileSystem; + try{ + // is there a way to get space for the app that doesn't point to the appDirs folder? + if(type==LocalFileSystem.TEMPORARY){ + theFileSystem = new FileSystem('temporary', new DirectoryEntry('root', blackberry.io.dir.appDirs.app.storage.path)); + }else if(type==LocalFileSystem.PERSISTENT){ + theFileSystem = new FileSystem('persistent', new DirectoryEntry('root', blackberry.io.dir.appDirs.app.storage.path)); + } + success(theFileSystem); + }catch(e){ + fail(FileError.SYNTAX_ERR); + } + } +}; +module.exports = requestFileSystem; + +}); + +// file: lib/blackberry/plugin/air/resolveLocalFileSystemURI.js +define("cordova/plugin/air/resolveLocalFileSystemURI", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + FileEntry = require('cordova/plugin/FileEntry'), + FileError = require('cordova/plugin/FileError'); + +/** + * Look up file system Entry referred to by local URI. + * @param {DOMString} uri URI referring to a local file or directory + * @param successCallback invoked with Entry object corresponding to URI + * @param errorCallback invoked if error occurs retrieving file system entry + */ +module.exports = function(uri, successCallback, errorCallback) { + // error callback + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + // if successful, return either a file or directory entry + var success = function(entry) { + var result; + + if (entry) { + if (typeof successCallback === 'function') { + // create appropriate Entry object + result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath) : new FileEntry(entry.name, entry.fullPath); + try { + successCallback(result); + } + catch (e) { + console.log('Error invoking callback: ' + e); + } + } + } + else { + // no Entry object returned + fail(FileError.NOT_FOUND_ERR); + return; + } + }; + + if(!uri || uri === ""){ + fail(FileError.NOT_FOUND_ERR); + return; + } + + // decode uri if % char found + if(uri.indexOf('%')>=0){ + uri = decodeURI(uri); + } + + // pop the parameters if any + if(uri.indexOf('?')>=0){ + uri = uri.split('?')[0]; + } + + // check for leading / + if(uri.indexOf('/')===0){ + fail(FileError.ENCODING_ERR); + return; + } + + // Entry object is borked - unable to instantiate a new Entry object so just create one + var theEntry = {}; + if(blackberry.io.dir.exists(uri)){ + theEntry.isDirectory = true; + theEntry.name = uri.split('/').pop(); + theEntry.fullPath = uri; + + success(theEntry); + }else if(blackberry.io.file.exists(uri)){ + theEntry.isDirectory = false; + theEntry.name = uri.split('/').pop(); + theEntry.fullPath = uri; + success(theEntry); + return; + }else{ + fail(FileError.NOT_FOUND_ERR); + return; + } + +}; + +}); + +// file: lib/common/plugin/battery.js +define("cordova/plugin/battery", function(require, exports, module) { + +/** + * This class contains information about the current battery status. + * @constructor + */ +var cordova = require('cordova'), + exec = require('cordova/exec'); + +function handlers() { + return battery.channels.batterystatus.numHandlers + + battery.channels.batterylow.numHandlers + + battery.channels.batterycritical.numHandlers; +} + +var Battery = function() { + this._level = null; + this._isPlugged = null; + // Create new event handlers on the window (returns a channel instance) + this.channels = { + batterystatus:cordova.addWindowEventHandler("batterystatus"), + batterylow:cordova.addWindowEventHandler("batterylow"), + batterycritical:cordova.addWindowEventHandler("batterycritical") + }; + for (var key in this.channels) { + this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange; + } +}; +/** + * Event handlers for when callbacks get registered for the battery. + * Keep track of how many handlers we have so we can start and stop the native battery listener + * appropriately (and hopefully save on battery life!). + */ +Battery.onHasSubscribersChange = function() { + // If we just registered the first handler, make sure native listener is started. + if (this.numHandlers === 1 && handlers() === 1) { + exec(battery._status, battery._error, "Battery", "start", []); + } else if (handlers() === 0) { + exec(null, null, "Battery", "stop", []); + } +}; + +/** + * Callback for battery status + * + * @param {Object} info keys: level, isPlugged + */ +Battery.prototype._status = function(info) { + if (info) { + var me = battery; + var level = info.level; + if (me._level !== level || me._isPlugged !== info.isPlugged) { + // Fire batterystatus event + cordova.fireWindowEvent("batterystatus", info); + + // Fire low battery event + if (level === 20 || level === 5) { + if (level === 20) { + cordova.fireWindowEvent("batterylow", info); + } + else { + cordova.fireWindowEvent("batterycritical", info); + } + } + } + me._level = level; + me._isPlugged = info.isPlugged; + } +}; + +/** + * Error callback for battery start + */ +Battery.prototype._error = function(e) { + console.log("Error initializing Battery: " + e); +}; + +var battery = new Battery(); + +module.exports = battery; + +}); + +// file: lib/common/plugin/battery/symbols.js +define("cordova/plugin/battery/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/battery', 'navigator.battery'); + +}); + +// file: lib/common/plugin/camera/symbols.js +define("cordova/plugin/camera/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/Camera', 'navigator.camera'); +modulemapper.defaults('cordova/plugin/CameraConstants', 'Camera'); +modulemapper.defaults('cordova/plugin/CameraPopoverOptions', 'CameraPopoverOptions'); + +}); + +// file: lib/common/plugin/capture.js +define("cordova/plugin/capture", function(require, exports, module) { + +var exec = require('cordova/exec'), + MediaFile = require('cordova/plugin/MediaFile'); + +/** + * Launches a capture of different types. + * + * @param (DOMString} type + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureVideoOptions} options + */ +function _capture(type, successCallback, errorCallback, options) { + var win = function(pluginResult) { + var mediaFiles = []; + var i; + for (i = 0; i < pluginResult.length; i++) { + var mediaFile = new MediaFile(); + mediaFile.name = pluginResult[i].name; + mediaFile.fullPath = pluginResult[i].fullPath; + mediaFile.type = pluginResult[i].type; + mediaFile.lastModifiedDate = pluginResult[i].lastModifiedDate; + mediaFile.size = pluginResult[i].size; + mediaFiles.push(mediaFile); + } + successCallback(mediaFiles); + }; + exec(win, errorCallback, "Capture", type, [options]); +} +/** + * The Capture interface exposes an interface to the camera and microphone of the hosting device. + */ +function Capture() { + this.supportedAudioModes = []; + this.supportedImageModes = []; + this.supportedVideoModes = []; +} + +/** + * Launch audio recorder application for recording audio clip(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureAudioOptions} options + */ +Capture.prototype.captureAudio = function(successCallback, errorCallback, options){ + _capture("captureAudio", successCallback, errorCallback, options); +}; + +/** + * Launch camera application for taking image(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureImageOptions} options + */ +Capture.prototype.captureImage = function(successCallback, errorCallback, options){ + _capture("captureImage", successCallback, errorCallback, options); +}; + +/** + * Launch device camera application for recording video(s). + * + * @param {Function} successCB + * @param {Function} errorCB + * @param {CaptureVideoOptions} options + */ +Capture.prototype.captureVideo = function(successCallback, errorCallback, options){ + _capture("captureVideo", successCallback, errorCallback, options); +}; + + +module.exports = new Capture(); + +}); + +// file: lib/common/plugin/capture/symbols.js +define("cordova/plugin/capture/symbols", function(require, exports, module) { + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/CaptureError', 'CaptureError'); +modulemapper.clobbers('cordova/plugin/CaptureAudioOptions', 'CaptureAudioOptions'); +modulemapper.clobbers('cordova/plugin/CaptureImageOptions', 'CaptureImageOptions'); +modulemapper.clobbers('cordova/plugin/CaptureVideoOptions', 'CaptureVideoOptions'); +modulemapper.clobbers('cordova/plugin/ConfigurationData', 'ConfigurationData'); +modulemapper.clobbers('cordova/plugin/MediaFile', 'MediaFile'); +modulemapper.clobbers('cordova/plugin/MediaFileData', 'MediaFileData'); +modulemapper.clobbers('cordova/plugin/capture', 'navigator.device.capture'); + +}); + +// file: lib/common/plugin/compass.js +define("cordova/plugin/compass", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + utils = require('cordova/utils'), + CompassHeading = require('cordova/plugin/CompassHeading'), + CompassError = require('cordova/plugin/CompassError'), + timers = {}, + compass = { + /** + * Asynchronously acquires the current heading. + * @param {Function} successCallback The function to call when the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {CompassOptions} options The options for getting the heading data (not used). + */ + getCurrentHeading:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'compass.getCurrentHeading', arguments); + + var win = function(result) { + var ch = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp); + successCallback(ch); + }; + var fail = errorCallback && function(code) { + var ce = new CompassError(code); + errorCallback(ce); + }; + + // Get heading + exec(win, fail, "Compass", "getHeading", [options]); + }, + + /** + * Asynchronously acquires the heading repeatedly at a given interval. + * @param {Function} successCallback The function to call each time the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {HeadingOptions} options The options for getting the heading data + * such as timeout and the frequency of the watch. For iOS, filter parameter + * specifies to watch via a distance filter rather than time. + */ + watchHeading:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'compass.watchHeading', arguments); + // Default interval (100 msec) + var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100; + var filter = (options !== undefined && options.filter !== undefined) ? options.filter : 0; + + var id = utils.createUUID(); + if (filter > 0) { + // is an iOS request for watch by filter, no timer needed + timers[id] = "iOS"; + compass.getCurrentHeading(successCallback, errorCallback, options); + } else { + // Start watch timer to get headings + timers[id] = window.setInterval(function() { + compass.getCurrentHeading(successCallback, errorCallback); + }, frequency); + } + + return id; + }, + + /** + * Clears the specified heading watch. + * @param {String} watchId The ID of the watch returned from #watchHeading. + */ + clearWatch:function(id) { + // Stop javascript timer & remove from timer list + if (id && timers[id]) { + if (timers[id] != "iOS") { + clearInterval(timers[id]); + } else { + // is iOS watch by filter so call into device to stop + exec(null, null, "Compass", "stopHeading", []); + } + delete timers[id]; + } + } + }; + +module.exports = compass; + +}); + +// file: lib/common/plugin/compass/symbols.js +define("cordova/plugin/compass/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/CompassHeading', 'CompassHeading'); +modulemapper.clobbers('cordova/plugin/CompassError', 'CompassError'); +modulemapper.clobbers('cordova/plugin/compass', 'navigator.compass'); + +}); + +// file: lib/common/plugin/console-via-logger.js +define("cordova/plugin/console-via-logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ + +var logger = require("cordova/plugin/logger"); +var utils = require("cordova/utils"); + +//------------------------------------------------------------------------------ +// object that we're exporting +//------------------------------------------------------------------------------ +var console = module.exports; + +//------------------------------------------------------------------------------ +// copy of the original console object +//------------------------------------------------------------------------------ +var WinConsole = window.console; + +//------------------------------------------------------------------------------ +// whether to use the logger +//------------------------------------------------------------------------------ +var UseLogger = false; + +//------------------------------------------------------------------------------ +// Timers +//------------------------------------------------------------------------------ +var Timers = {}; + +//------------------------------------------------------------------------------ +// used for unimplemented methods +//------------------------------------------------------------------------------ +function noop() {} + +//------------------------------------------------------------------------------ +// used for unimplemented methods +//------------------------------------------------------------------------------ +console.useLogger = function (value) { + if (arguments.length) UseLogger = !!value; + + if (UseLogger) { + if (logger.useConsole()) { + throw new Error("console and logger are too intertwingly"); + } + } + + return UseLogger; +}; + +//------------------------------------------------------------------------------ +console.log = function() { + if (logger.useConsole()) return; + logger.log.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.error = function() { + if (logger.useConsole()) return; + logger.error.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.warn = function() { + if (logger.useConsole()) return; + logger.warn.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.info = function() { + if (logger.useConsole()) return; + logger.info.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.debug = function() { + if (logger.useConsole()) return; + logger.debug.apply(logger, [].slice.call(arguments)); +}; + +//------------------------------------------------------------------------------ +console.assert = function(expression) { + if (expression) return; + + var message = utils.vformat(arguments[1], [].slice.call(arguments, 2)); + console.log("ASSERT: " + message); +}; + +//------------------------------------------------------------------------------ +console.clear = function() {}; + +//------------------------------------------------------------------------------ +console.dir = function(object) { + console.log("%o", object); +}; + +//------------------------------------------------------------------------------ +console.dirxml = function(node) { + console.log(node.innerHTML); +}; + +//------------------------------------------------------------------------------ +console.trace = noop; + +//------------------------------------------------------------------------------ +console.group = console.log; + +//------------------------------------------------------------------------------ +console.groupCollapsed = console.log; + +//------------------------------------------------------------------------------ +console.groupEnd = noop; + +//------------------------------------------------------------------------------ +console.time = function(name) { + Timers[name] = new Date().valueOf(); +}; + +//------------------------------------------------------------------------------ +console.timeEnd = function(name) { + var timeStart = Timers[name]; + if (!timeStart) { + console.warn("unknown timer: " + name); + return; + } + + var timeElapsed = new Date().valueOf() - timeStart; + console.log(name + ": " + timeElapsed + "ms"); +}; + +//------------------------------------------------------------------------------ +console.timeStamp = noop; + +//------------------------------------------------------------------------------ +console.profile = noop; + +//------------------------------------------------------------------------------ +console.profileEnd = noop; + +//------------------------------------------------------------------------------ +console.count = noop; + +//------------------------------------------------------------------------------ +console.exception = console.log; + +//------------------------------------------------------------------------------ +console.table = function(data, columns) { + console.log("%o", data); +}; + +//------------------------------------------------------------------------------ +// return a new function that calls both functions passed as args +//------------------------------------------------------------------------------ +function wrappedOrigCall(orgFunc, newFunc) { + return function() { + var args = [].slice.call(arguments); + try { orgFunc.apply(WinConsole, args); } catch (e) {} + try { newFunc.apply(console, args); } catch (e) {} + }; +} + +//------------------------------------------------------------------------------ +// For every function that exists in the original console object, that +// also exists in the new console object, wrap the new console method +// with one that calls both +//------------------------------------------------------------------------------ +for (var key in console) { + if (typeof WinConsole[key] == "function") { + console[key] = wrappedOrigCall(WinConsole[key], console[key]); + } +} + +}); + +// file: lib/common/plugin/contacts.js +define("cordova/plugin/contacts", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + ContactError = require('cordova/plugin/ContactError'), + utils = require('cordova/utils'), + Contact = require('cordova/plugin/Contact'); + +/** +* Represents a group of Contacts. +* @constructor +*/ +var contacts = { + /** + * Returns an array of Contacts matching the search criteria. + * @param fields that should be searched + * @param successCB success callback + * @param errorCB error callback + * @param {ContactFindOptions} options that can be applied to contact searching + * @return array of Contacts matching search criteria + */ + find:function(fields, successCB, errorCB, options) { + argscheck.checkArgs('afFO', 'contacts.find', arguments); + if (!fields.length) { + errorCB && errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR)); + } else { + var win = function(result) { + var cs = []; + for (var i = 0, l = result.length; i < l; i++) { + cs.push(contacts.create(result[i])); + } + successCB(cs); + }; + exec(win, errorCB, "Contacts", "search", [fields, options]); + } + }, + + /** + * This function creates a new contact, but it does not persist the contact + * to device storage. To persist the contact to device storage, invoke + * contact.save(). + * @param properties an object whose properties will be examined to create a new Contact + * @returns new Contact object + */ + create:function(properties) { + argscheck.checkArgs('O', 'contacts.create', arguments); + var contact = new Contact(); + for (var i in properties) { + if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) { + contact[i] = properties[i]; + } + } + return contact; + } +}; + +module.exports = contacts; + +}); + +// file: lib/common/plugin/contacts/symbols.js +define("cordova/plugin/contacts/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/contacts', 'navigator.contacts'); +modulemapper.clobbers('cordova/plugin/Contact', 'Contact'); +modulemapper.clobbers('cordova/plugin/ContactAddress', 'ContactAddress'); +modulemapper.clobbers('cordova/plugin/ContactError', 'ContactError'); +modulemapper.clobbers('cordova/plugin/ContactField', 'ContactField'); +modulemapper.clobbers('cordova/plugin/ContactFindOptions', 'ContactFindOptions'); +modulemapper.clobbers('cordova/plugin/ContactName', 'ContactName'); +modulemapper.clobbers('cordova/plugin/ContactOrganization', 'ContactOrganization'); + +}); + +// file: lib/common/plugin/device.js +define("cordova/plugin/device", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + channel = require('cordova/channel'), + utils = require('cordova/utils'), + exec = require('cordova/exec'); + +// Tell cordova channel to wait on the CordovaInfoReady event +channel.waitForInitialization('onCordovaInfoReady'); + +/** + * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the + * phone, etc. + * @constructor + */ +function Device() { + this.available = false; + this.platform = null; + this.version = null; + this.name = null; + this.uuid = null; + this.cordova = null; + this.model = null; + + var me = this; + + channel.onCordovaReady.subscribe(function() { + me.getInfo(function(info) { + me.available = true; + me.platform = info.platform; + me.version = info.version; + me.name = info.name; + me.uuid = info.uuid; + me.cordova = info.cordova; + me.model = info.model; + channel.onCordovaInfoReady.fire(); + },function(e) { + me.available = false; + utils.alert("[ERROR] Error initializing Cordova: " + e); + }); + }); +} + +/** + * Get device info + * + * @param {Function} successCallback The function to call when the heading data is available + * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) + */ +Device.prototype.getInfo = function(successCallback, errorCallback) { + argscheck.checkArgs('fF', 'Device.getInfo', arguments); + exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); +}; + +module.exports = new Device(); + +}); + +// file: lib/common/plugin/device/symbols.js +define("cordova/plugin/device/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/device', 'device'); + +}); + +// file: lib/common/plugin/echo.js +define("cordova/plugin/echo", function(require, exports, module) { + +var exec = require('cordova/exec'), + utils = require('cordova/utils'); + +/** + * Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback. + * @param successCallback invoked with a FileSystem object + * @param errorCallback invoked if error occurs retrieving file system + * @param message The string to be echoed. + * @param forceAsync Whether to force an async return value (for testing native->js bridge). + */ +module.exports = function(successCallback, errorCallback, message, forceAsync) { + var action = 'echo'; + var messageIsMultipart = (utils.typeName(message) == "Array"); + var args = messageIsMultipart ? message : [message]; + + if (utils.typeName(message) == 'ArrayBuffer') { + if (forceAsync) { + console.warn('Cannot echo ArrayBuffer with forced async, falling back to sync.'); + } + action += 'ArrayBuffer'; + } else if (messageIsMultipart) { + if (forceAsync) { + console.warn('Cannot echo MultiPart Array with forced async, falling back to sync.'); + } + action += 'MultiPart'; + } else if (forceAsync) { + action += 'Async'; + } + + exec(successCallback, errorCallback, "Echo", action, args); +}; + + +}); + +// file: lib/common/plugin/file/symbols.js +define("cordova/plugin/file/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'), + symbolshelper = require('cordova/plugin/file/symbolshelper'); + +symbolshelper(modulemapper.defaults); + +}); + +// file: lib/common/plugin/file/symbolshelper.js +define("cordova/plugin/file/symbolshelper", function(require, exports, module) { + +module.exports = function(exportFunc) { + exportFunc('cordova/plugin/DirectoryEntry', 'DirectoryEntry'); + exportFunc('cordova/plugin/DirectoryReader', 'DirectoryReader'); + exportFunc('cordova/plugin/Entry', 'Entry'); + exportFunc('cordova/plugin/File', 'File'); + exportFunc('cordova/plugin/FileEntry', 'FileEntry'); + exportFunc('cordova/plugin/FileError', 'FileError'); + exportFunc('cordova/plugin/FileReader', 'FileReader'); + exportFunc('cordova/plugin/FileSystem', 'FileSystem'); + exportFunc('cordova/plugin/FileUploadOptions', 'FileUploadOptions'); + exportFunc('cordova/plugin/FileUploadResult', 'FileUploadResult'); + exportFunc('cordova/plugin/FileWriter', 'FileWriter'); + exportFunc('cordova/plugin/Flags', 'Flags'); + exportFunc('cordova/plugin/LocalFileSystem', 'LocalFileSystem'); + exportFunc('cordova/plugin/Metadata', 'Metadata'); + exportFunc('cordova/plugin/ProgressEvent', 'ProgressEvent'); + exportFunc('cordova/plugin/requestFileSystem', 'requestFileSystem'); + exportFunc('cordova/plugin/resolveLocalFileSystemURI', 'resolveLocalFileSystemURI'); +}; + +}); + +// file: lib/common/plugin/filetransfer/symbols.js +define("cordova/plugin/filetransfer/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/FileTransfer', 'FileTransfer'); +modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError'); + +}); + +// file: lib/common/plugin/geolocation.js +define("cordova/plugin/geolocation", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + utils = require('cordova/utils'), + exec = require('cordova/exec'), + PositionError = require('cordova/plugin/PositionError'), + Position = require('cordova/plugin/Position'); + +var timers = {}; // list of timers in use + +// Returns default params, overrides if provided with values +function parseParameters(options) { + var opt = { + maximumAge: 0, + enableHighAccuracy: false, + timeout: Infinity + }; + + if (options) { + if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) { + opt.maximumAge = options.maximumAge; + } + if (options.enableHighAccuracy !== undefined) { + opt.enableHighAccuracy = options.enableHighAccuracy; + } + if (options.timeout !== undefined && !isNaN(options.timeout)) { + if (options.timeout < 0) { + opt.timeout = 0; + } else { + opt.timeout = options.timeout; + } + } + } + + return opt; +} + +// Returns a timeout failure, closed over a specified timeout value and error callback. +function createTimeout(errorCallback, timeout) { + var t = setTimeout(function() { + clearTimeout(t); + t = null; + errorCallback({ + code:PositionError.TIMEOUT, + message:"Position retrieval timed out." + }); + }, timeout); + return t; +} + +var geolocation = { + lastPosition:null, // reference to last known (cached) position returned + /** + * Asynchronously acquires the current position. + * + * @param {Function} successCallback The function to call when the position data is available + * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL) + * @param {PositionOptions} options The options for getting the position data. (OPTIONAL) + */ + getCurrentPosition:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); + options = parseParameters(options); + + // Timer var that will fire an error callback if no position is retrieved from native + // before the "timeout" param provided expires + var timeoutTimer = {timer:null}; + + var win = function(p) { + clearTimeout(timeoutTimer.timer); + if (!(timeoutTimer.timer)) { + // Timeout already happened, or native fired error callback for + // this geo request. + // Don't continue with success callback. + return; + } + var pos = new Position( + { + latitude:p.latitude, + longitude:p.longitude, + altitude:p.altitude, + accuracy:p.accuracy, + heading:p.heading, + velocity:p.velocity, + altitudeAccuracy:p.altitudeAccuracy + }, + (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp))) + ); + geolocation.lastPosition = pos; + successCallback(pos); + }; + var fail = function(e) { + clearTimeout(timeoutTimer.timer); + timeoutTimer.timer = null; + var err = new PositionError(e.code, e.message); + if (errorCallback) { + errorCallback(err); + } + }; + + // Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just + // fire the success callback with the cached position. + if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) { + successCallback(geolocation.lastPosition); + // If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object. + } else if (options.timeout === 0) { + fail({ + code:PositionError.TIMEOUT, + message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter." + }); + // Otherwise we have to call into native to retrieve a position. + } else { + if (options.timeout !== Infinity) { + // If the timeout value was not set to Infinity (default), then + // set up a timeout function that will fire the error callback + // if no successful position was retrieved before timeout expired. + timeoutTimer.timer = createTimeout(fail, options.timeout); + } else { + // This is here so the check in the win function doesn't mess stuff up + // may seem weird but this guarantees timeoutTimer is + // always truthy before we call into native + timeoutTimer.timer = true; + } + exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]); + } + return timeoutTimer; + }, + /** + * Asynchronously watches the geolocation for changes to geolocation. When a change occurs, + * the successCallback is called with the new location. + * + * @param {Function} successCallback The function to call each time the location data is available + * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL) + * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL) + * @return String The watch id that must be passed to #clearWatch to stop watching. + */ + watchPosition:function(successCallback, errorCallback, options) { + argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); + options = parseParameters(options); + + var id = utils.createUUID(); + + // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition + timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options); + + var fail = function(e) { + clearTimeout(timers[id].timer); + var err = new PositionError(e.code, e.message); + if (errorCallback) { + errorCallback(err); + } + }; + + var win = function(p) { + clearTimeout(timers[id].timer); + if (options.timeout !== Infinity) { + timers[id].timer = createTimeout(fail, options.timeout); + } + var pos = new Position( + { + latitude:p.latitude, + longitude:p.longitude, + altitude:p.altitude, + accuracy:p.accuracy, + heading:p.heading, + velocity:p.velocity, + altitudeAccuracy:p.altitudeAccuracy + }, + (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp))) + ); + geolocation.lastPosition = pos; + successCallback(pos); + }; + + exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]); + + return id; + }, + /** + * Clears the specified heading watch. + * + * @param {String} id The ID of the watch returned from #watchPosition + */ + clearWatch:function(id) { + if (id && timers[id] !== undefined) { + clearTimeout(timers[id].timer); + timers[id].timer = false; + exec(null, null, "Geolocation", "clearWatch", [id]); + } + } +}; + +module.exports = geolocation; + +}); + +// file: lib/common/plugin/geolocation/symbols.js +define("cordova/plugin/geolocation/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/geolocation', 'navigator.geolocation'); +modulemapper.clobbers('cordova/plugin/PositionError', 'PositionError'); +modulemapper.clobbers('cordova/plugin/Position', 'Position'); +modulemapper.clobbers('cordova/plugin/Coordinates', 'Coordinates'); + +}); + +// file: lib/common/plugin/globalization.js +define("cordova/plugin/globalization", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + exec = require('cordova/exec'), + GlobalizationError = require('cordova/plugin/GlobalizationError'); + +var globalization = { + +/** +* Returns the string identifier for the client's current language. +* It returns the language identifier string to the successCB callback with a +* properties object as a parameter. If there is an error getting the language, +* then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {String}: The language identifier +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getPreferredLanguage(function (language) {alert('language:' + language.value + '\n');}, +* function () {}); +*/ +getPreferredLanguage:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getPreferredLanguage', arguments); + exec(successCB, failureCB, "Globalization","getPreferredLanguage", []); +}, + +/** +* Returns the string identifier for the client's current locale setting. +* It returns the locale identifier string to the successCB callback with a +* properties object as a parameter. If there is an error getting the locale, +* then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {String}: The locale identifier +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getLocaleName(function (locale) {alert('locale:' + locale.value + '\n');}, +* function () {}); +*/ +getLocaleName:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getLocaleName', arguments); + exec(successCB, failureCB, "Globalization","getLocaleName", []); +}, + + +/** +* Returns a date formatted as a string according to the client's user preferences and +* calendar using the time zone of the client. It returns the formatted date string to the +* successCB callback with a properties object as a parameter. If there is an error +* formatting the date, then the errorCB callback is invoked. +* +* The defaults are: formatLenght="short" and selector="date and time" +* +* @param {Date} date +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.value {String}: The localized date string +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.dateToString(new Date(), +* function (date) {alert('date:' + date.value + '\n');}, +* function (errorCode) {alert(errorCode);}, +* {formatLength:'short'}); +*/ +dateToString:function(date, successCB, failureCB, options) { + argscheck.checkArgs('dfFO', 'Globalization.dateToString', arguments); + var dateValue = date.valueOf(); + exec(successCB, failureCB, "Globalization", "dateToString", [{"date": dateValue, "options": options}]); +}, + + +/** +* Parses a date formatted as a string according to the client's user +* preferences and calendar using the time zone of the client and returns +* the corresponding date object. It returns the date to the successCB +* callback with a properties object as a parameter. If there is an error +* parsing the date string, then the errorCB callback is invoked. +* +* The defaults are: formatLength="short" and selector="date and time" +* +* @param {String} dateString +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.year {Number}: The four digit year +* Object.month {Number}: The month from (0 - 11) +* Object.day {Number}: The day from (1 - 31) +* Object.hour {Number}: The hour from (0 - 23) +* Object.minute {Number}: The minute from (0 - 59) +* Object.second {Number}: The second from (0 - 59) +* Object.millisecond {Number}: The milliseconds (from 0 - 999), +* not available on all platforms +* +* @error GlobalizationError.PARSING_ERROR +* +* Example +* globalization.stringToDate('4/11/2011', +* function (date) { alert('Month:' + date.month + '\n' + +* 'Day:' + date.day + '\n' + +* 'Year:' + date.year + '\n');}, +* function (errorCode) {alert(errorCode);}, +* {selector:'date'}); +*/ +stringToDate:function(dateString, successCB, failureCB, options) { + argscheck.checkArgs('sfFO', 'Globalization.stringToDate', arguments); + exec(successCB, failureCB, "Globalization", "stringToDate", [{"dateString": dateString, "options": options}]); +}, + + +/** +* Returns a pattern string for formatting and parsing dates according to the client's +* user preferences. It returns the pattern to the successCB callback with a +* properties object as a parameter. If there is an error obtaining the pattern, +* then the errorCB callback is invoked. +* +* The defaults are: formatLength="short" and selector="date and time" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* formatLength {String}: 'short', 'medium', 'long', or 'full' +* selector {String}: 'date', 'time', or 'date and time' +* +* @return Object.pattern {String}: The date and time pattern for formatting and parsing dates. +* The patterns follow Unicode Technical Standard #35 +* http://unicode.org/reports/tr35/tr35-4.html +* Object.timezone {String}: The abbreviated name of the time zone on the client +* Object.utc_offset {Number}: The current difference in seconds between the client's +* time zone and coordinated universal time. +* Object.dst_offset {Number}: The current daylight saving time offset in seconds +* between the client's non-daylight saving's time zone +* and the client's daylight saving's time zone. +* +* @error GlobalizationError.PATTERN_ERROR +* +* Example +* globalization.getDatePattern( +* function (date) {alert('pattern:' + date.pattern + '\n');}, +* function () {}, +* {formatLength:'short'}); +*/ +getDatePattern:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getDatePattern', arguments); + exec(successCB, failureCB, "Globalization", "getDatePattern", [{"options": options}]); +}, + + +/** +* Returns an array of either the names of the months or days of the week +* according to the client's user preferences and calendar. It returns the array of names to the +* successCB callback with a properties object as a parameter. If there is an error obtaining the +* names, then the errorCB callback is invoked. +* +* The defaults are: type="wide" and item="months" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'narrow' or 'wide' +* item {String}: 'months', or 'days' +* +* @return Object.value {Array{String}}: The array of names starting from either +* the first month in the year or the +* first day of the week. +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getDateNames(function (names) { +* for(var i = 0; i < names.value.length; i++) { +* alert('Month:' + names.value[i] + '\n');}}, +* function () {}); +*/ +getDateNames:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getDateNames', arguments); + exec(successCB, failureCB, "Globalization", "getDateNames", [{"options": options}]); +}, + +/** +* Returns whether daylight savings time is in effect for a given date using the client's +* time zone and calendar. It returns whether or not daylight savings time is in effect +* to the successCB callback with a properties object as a parameter. If there is an error +* reading the date, then the errorCB callback is invoked. +* +* @param {Date} date +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.dst {Boolean}: The value "true" indicates that daylight savings time is +* in effect for the given date and "false" indicate that it is not. +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.isDayLightSavingsTime(new Date(), +* function (date) {alert('dst:' + date.dst + '\n');} +* function () {}); +*/ +isDayLightSavingsTime:function(date, successCB, failureCB) { + argscheck.checkArgs('dfF', 'Globalization.isDayLightSavingsTime', arguments); + var dateValue = date.valueOf(); + exec(successCB, failureCB, "Globalization", "isDayLightSavingsTime", [{"date": dateValue}]); +}, + +/** +* Returns the first day of the week according to the client's user preferences and calendar. +* The days of the week are numbered starting from 1 where 1 is considered to be Sunday. +* It returns the day to the successCB callback with a properties object as a parameter. +* If there is an error obtaining the pattern, then the errorCB callback is invoked. +* +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.value {Number}: The number of the first day of the week. +* +* @error GlobalizationError.UNKNOWN_ERROR +* +* Example +* globalization.getFirstDayOfWeek(function (day) +* { alert('Day:' + day.value + '\n');}, +* function () {}); +*/ +getFirstDayOfWeek:function(successCB, failureCB) { + argscheck.checkArgs('fF', 'Globalization.getFirstDayOfWeek', arguments); + exec(successCB, failureCB, "Globalization", "getFirstDayOfWeek", []); +}, + + +/** +* Returns a number formatted as a string according to the client's user preferences. +* It returns the formatted number string to the successCB callback with a properties object as a +* parameter. If there is an error formatting the number, then the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {Number} number +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.value {String}: The formatted number string. +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.numberToString(3.25, +* function (number) {alert('number:' + number.value + '\n');}, +* function () {}, +* {type:'decimal'}); +*/ +numberToString:function(number, successCB, failureCB, options) { + argscheck.checkArgs('nfFO', 'Globalization.numberToString', arguments); + exec(successCB, failureCB, "Globalization", "numberToString", [{"number": number, "options": options}]); +}, + +/** +* Parses a number formatted as a string according to the client's user preferences and +* returns the corresponding number. It returns the number to the successCB callback with a +* properties object as a parameter. If there is an error parsing the number string, then +* the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {String} numberString +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.value {Number}: The parsed number. +* +* @error GlobalizationError.PARSING_ERROR +* +* Example +* globalization.stringToNumber('1234.56', +* function (number) {alert('Number:' + number.value + '\n');}, +* function () { alert('Error parsing number');}); +*/ +stringToNumber:function(numberString, successCB, failureCB, options) { + argscheck.checkArgs('sfFO', 'Globalization.stringToNumber', arguments); + exec(successCB, failureCB, "Globalization", "stringToNumber", [{"numberString": numberString, "options": options}]); +}, + +/** +* Returns a pattern string for formatting and parsing numbers according to the client's user +* preferences. It returns the pattern to the successCB callback with a properties object as a +* parameter. If there is an error obtaining the pattern, then the errorCB callback is invoked. +* +* The defaults are: type="decimal" +* +* @param {Function} successCB +* @param {Function} errorCB +* @param {Object} options {optional} +* type {String}: 'decimal', "percent", or 'currency' +* +* @return Object.pattern {String}: The number pattern for formatting and parsing numbers. +* The patterns follow Unicode Technical Standard #35. +* http://unicode.org/reports/tr35/tr35-4.html +* Object.symbol {String}: The symbol to be used when formatting and parsing +* e.g., percent or currency symbol. +* Object.fraction {Number}: The number of fractional digits to use when parsing and +* formatting numbers. +* Object.rounding {Number}: The rounding increment to use when parsing and formatting. +* Object.positive {String}: The symbol to use for positive numbers when parsing and formatting. +* Object.negative: {String}: The symbol to use for negative numbers when parsing and formatting. +* Object.decimal: {String}: The decimal symbol to use for parsing and formatting. +* Object.grouping: {String}: The grouping symbol to use for parsing and formatting. +* +* @error GlobalizationError.PATTERN_ERROR +* +* Example +* globalization.getNumberPattern( +* function (pattern) {alert('Pattern:' + pattern.pattern + '\n');}, +* function () {}); +*/ +getNumberPattern:function(successCB, failureCB, options) { + argscheck.checkArgs('fFO', 'Globalization.getNumberPattern', arguments); + exec(successCB, failureCB, "Globalization", "getNumberPattern", [{"options": options}]); +}, + +/** +* Returns a pattern string for formatting and parsing currency values according to the client's +* user preferences and ISO 4217 currency code. It returns the pattern to the successCB callback with a +* properties object as a parameter. If there is an error obtaining the pattern, then the errorCB +* callback is invoked. +* +* @param {String} currencyCode +* @param {Function} successCB +* @param {Function} errorCB +* +* @return Object.pattern {String}: The currency pattern for formatting and parsing currency values. +* The patterns follow Unicode Technical Standard #35 +* http://unicode.org/reports/tr35/tr35-4.html +* Object.code {String}: The ISO 4217 currency code for the pattern. +* Object.fraction {Number}: The number of fractional digits to use when parsing and +* formatting currency. +* Object.rounding {Number}: The rounding increment to use when parsing and formatting. +* Object.decimal: {String}: The decimal symbol to use for parsing and formatting. +* Object.grouping: {String}: The grouping symbol to use for parsing and formatting. +* +* @error GlobalizationError.FORMATTING_ERROR +* +* Example +* globalization.getCurrencyPattern('EUR', +* function (currency) {alert('Pattern:' + currency.pattern + '\n');} +* function () {}); +*/ +getCurrencyPattern:function(currencyCode, successCB, failureCB) { + argscheck.checkArgs('sfF', 'Globalization.getCurrencyPattern', arguments); + exec(successCB, failureCB, "Globalization", "getCurrencyPattern", [{"currencyCode": currencyCode}]); +} + +}; + +module.exports = globalization; + +}); + +// file: lib/common/plugin/globalization/symbols.js +define("cordova/plugin/globalization/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/globalization', 'navigator.globalization'); +modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError'); + +}); + +// file: lib/blackberry/plugin/java/Contact.js +define("cordova/plugin/java/Contact", function(require, exports, module) { + +var ContactError = require('cordova/plugin/ContactError'), + ContactUtils = require('cordova/plugin/java/ContactUtils'), + utils = require('cordova/utils'), + ContactAddress = require('cordova/plugin/ContactAddress'), + exec = require('cordova/exec'); + +// ------------------ +// Utility functions +// ------------------ + +/** + * Retrieves a BlackBerry contact from the device by unique id. + * + * @param uid + * Unique id of the contact on the device + * @return {blackberry.pim.Contact} BlackBerry contact or null if contact with + * specified id is not found + */ +var findByUniqueId = function(uid) { + if (!uid) { + return null; + } + var bbContacts = blackberry.pim.Contact.find(new blackberry.find.FilterExpression("uid", "==", uid)); + return bbContacts[0] || null; +}; + +/** + * Creates a BlackBerry contact object from the W3C Contact object and persists + * it to device storage. + * + * @param {Contact} + * contact The contact to save + * @return a new contact object with all properties set + */ +var saveToDevice = function(contact) { + + if (!contact) { + return; + } + + var bbContact = null; + var update = false; + + // if the underlying BlackBerry contact already exists, retrieve it for + // update + if (contact.id) { + // we must attempt to retrieve the BlackBerry contact from the device + // because this may be an update operation + bbContact = findByUniqueId(contact.id); + } + + // contact not found on device, create a new one + if (!bbContact) { + bbContact = new blackberry.pim.Contact(); + } + // update the existing contact + else { + update = true; + } + + // NOTE: The user may be working with a partial Contact object, because only + // user-specified Contact fields are returned from a find operation (blame + // the W3C spec). If this is an update to an existing Contact, we don't + // want to clear an attribute from the contact database simply because the + // Contact object that the user passed in contains a null value for that + // attribute. So we only copy the non-null Contact attributes to the + // BlackBerry contact object before saving. + // + // This means that a user must explicitly set a Contact attribute to a + // non-null value in order to update it in the contact database. + // + // name + if (contact.name !== null) { + if (contact.name.givenName) { + bbContact.firstName = contact.name.givenName; + } + if (contact.name.familyName) { + bbContact.lastName = contact.name.familyName; + } + if (contact.name.honorificPrefix) { + bbContact.title = contact.name.honorificPrefix; + } + } + + // display name + if (contact.displayName !== null) { + bbContact.user1 = contact.displayName; + } + + // note + if (contact.note !== null) { + bbContact.note = contact.note; + } + + // birthday + // + // user may pass in Date object or a string representation of a date + // if it is a string, we don't know the date format, so try to create a + // new Date with what we're given + // + // NOTE: BlackBerry's Date.parse() does not work well, so use new Date() + // + if (contact.birthday !== null) { + if (utils.isDate(contact.birthday)) { + bbContact.birthday = contact.birthday; + } else { + var bday = contact.birthday.toString(); + bbContact.birthday = (bday.length > 0) ? new Date(bday) : ""; + } + } + + // BlackBerry supports three email addresses + if (contact.emails && utils.isArray(contact.emails)) { + + // if this is an update, re-initialize email addresses + if (update) { + bbContact.email1 = ""; + bbContact.email2 = ""; + bbContact.email3 = ""; + } + + // copy the first three email addresses found + var email = null; + for ( var i = 0; i < contact.emails.length; i += 1) { + email = contact.emails[i]; + if (!email || !email.value) { + continue; + } + if (bbContact.email1 === "") { + bbContact.email1 = email.value; + } else if (bbContact.email2 === "") { + bbContact.email2 = email.value; + } else if (bbContact.email3 === "") { + bbContact.email3 = email.value; + } + } + } + + // BlackBerry supports a finite number of phone numbers + // copy into appropriate fields based on type + if (contact.phoneNumbers && utils.isArray(contact.phoneNumbers)) { + + // if this is an update, re-initialize phone numbers + if (update) { + bbContact.homePhone = ""; + bbContact.homePhone2 = ""; + bbContact.workPhone = ""; + bbContact.workPhone2 = ""; + bbContact.mobilePhone = ""; + bbContact.faxPhone = ""; + bbContact.pagerPhone = ""; + bbContact.otherPhone = ""; + } + + var type = null; + var number = null; + for ( var j = 0; j < contact.phoneNumbers.length; j += 1) { + if (!contact.phoneNumbers[j] || !contact.phoneNumbers[j].value) { + continue; + } + type = contact.phoneNumbers[j].type; + number = contact.phoneNumbers[j].value; + if (type === 'home') { + if (bbContact.homePhone === "") { + bbContact.homePhone = number; + } else if (bbContact.homePhone2 === "") { + bbContact.homePhone2 = number; + } + } else if (type === 'work') { + if (bbContact.workPhone === "") { + bbContact.workPhone = number; + } else if (bbContact.workPhone2 === "") { + bbContact.workPhone2 = number; + } + } else if (type === 'mobile' && bbContact.mobilePhone === "") { + bbContact.mobilePhone = number; + } else if (type === 'fax' && bbContact.faxPhone === "") { + bbContact.faxPhone = number; + } else if (type === 'pager' && bbContact.pagerPhone === "") { + bbContact.pagerPhone = number; + } else if (bbContact.otherPhone === "") { + bbContact.otherPhone = number; + } + } + } + + // BlackBerry supports two addresses: home and work + // copy the first two addresses found from Contact + if (contact.addresses && utils.isArray(contact.addresses)) { + + // if this is an update, re-initialize addresses + if (update) { + bbContact.homeAddress = null; + bbContact.workAddress = null; + } + + var address = null; + var bbHomeAddress = null; + var bbWorkAddress = null; + for ( var k = 0; k < contact.addresses.length; k += 1) { + address = contact.addresses[k]; + if (!address || address.id === undefined || address.pref === undefined || address.type === undefined || address.formatted === undefined) { + continue; + } + + if (bbHomeAddress === null && (!address.type || address.type === "home")) { + bbHomeAddress = createBlackBerryAddress(address); + bbContact.homeAddress = bbHomeAddress; + } else if (bbWorkAddress === null && (!address.type || address.type === "work")) { + bbWorkAddress = createBlackBerryAddress(address); + bbContact.workAddress = bbWorkAddress; + } + } + } + + // copy first url found to BlackBerry 'webpage' field + if (contact.urls && utils.isArray(contact.urls)) { + + // if this is an update, re-initialize web page + if (update) { + bbContact.webpage = ""; + } + + var url = null; + for ( var m = 0; m < contact.urls.length; m += 1) { + url = contact.urls[m]; + if (!url || !url.value) { + continue; + } + if (bbContact.webpage === "") { + bbContact.webpage = url.value; + break; + } + } + } + + // copy fields from first organization to the + // BlackBerry 'company' and 'jobTitle' fields + if (contact.organizations && utils.isArray(contact.organizations)) { + + // if this is an update, re-initialize org attributes + if (update) { + bbContact.company = ""; + } + + var org = null; + for ( var n = 0; n < contact.organizations.length; n += 1) { + org = contact.organizations[n]; + if (!org) { + continue; + } + if (bbContact.company === "") { + bbContact.company = org.name || ""; + bbContact.jobTitle = org.title || ""; + break; + } + } + } + + // categories + if (contact.categories && utils.isArray(contact.categories)) { + bbContact.categories = []; + var category = null; + for ( var o = 0; o < contact.categories.length; o += 1) { + category = contact.categories[o]; + if (typeof category == "string") { + bbContact.categories.push(category); + } + } + } + + // save to device + bbContact.save(); + + // invoke native side to save photo + // fail gracefully if photo URL is no good, but log the error + if (contact.photos && utils.isArray(contact.photos)) { + var photo = null; + for ( var p = 0; p < contact.photos.length; p += 1) { + photo = contact.photos[p]; + if (!photo || !photo.value) { + continue; + } + exec( + // success + function() { + }, + // fail + function(e) { + console.log('Contact.setPicture failed:' + e); + }, "Contacts", "setPicture", [ bbContact.uid, photo.type, + photo.value ]); + break; + } + } + + // Use the fully populated BlackBerry contact object to create a + // corresponding W3C contact object. + return ContactUtils.createContact(bbContact, [ "*" ]); +}; + +/** + * Creates a BlackBerry Address object from a W3C ContactAddress. + * + * @return {blackberry.pim.Address} a BlackBerry address object + */ +var createBlackBerryAddress = function(address) { + var bbAddress = new blackberry.pim.Address(); + + if (!address) { + return bbAddress; + } + + bbAddress.address1 = address.streetAddress || ""; + bbAddress.city = address.locality || ""; + bbAddress.stateProvince = address.region || ""; + bbAddress.zipPostal = address.postalCode || ""; + bbAddress.country = address.country || ""; + + return bbAddress; +}; + +module.exports = { + /** + * Persists contact to device storage. + */ + save : function(success, fail) { + try { + // save the contact and store it's unique id + var fullContact = saveToDevice(this); + this.id = fullContact.id; + + // This contact object may only have a subset of properties + // if the save was an update of an existing contact. This is + // because the existing contact was likely retrieved using a + // subset of properties, so only those properties were set in the + // object. For this reason, invoke success with the contact object + // returned by saveToDevice since it is fully populated. + if (typeof success === 'function') { + success(fullContact); + } + } catch (e) { + console.log('Error saving contact: ' + e); + if (typeof fail === 'function') { + fail(new ContactError(ContactError.UNKNOWN_ERROR)); + } + } + }, + + /** + * Removes contact from device storage. + * + * @param success + * success callback + * @param fail + * error callback + */ + remove : function(success, fail) { + try { + // retrieve contact from device by id + var bbContact = null; + if (this.id) { + bbContact = findByUniqueId(this.id); + } + + // if contact was found, remove it + if (bbContact) { + console.log('removing contact: ' + bbContact.uid); + bbContact.remove(); + if (typeof success === 'function') { + success(this); + } + } + // attempting to remove a contact that hasn't been saved + else if (typeof fail === 'function') { + fail(new ContactError(ContactError.UNKNOWN_ERROR)); + } + } catch (e) { + console.log('Error removing contact ' + this.id + ": " + e); + if (typeof fail === 'function') { + fail(new ContactError(ContactError.UNKNOWN_ERROR)); + } + } + } +}; + +}); + +// file: lib/blackberry/plugin/java/ContactUtils.js +define("cordova/plugin/java/ContactUtils", function(require, exports, module) { + +var ContactAddress = require('cordova/plugin/ContactAddress'), + ContactName = require('cordova/plugin/ContactName'), + ContactField = require('cordova/plugin/ContactField'), + ContactOrganization = require('cordova/plugin/ContactOrganization'), + utils = require('cordova/utils'), + Contact = require('cordova/plugin/Contact'); + +/** + * Mappings for each Contact field that may be used in a find operation. Maps + * W3C Contact fields to one or more fields in a BlackBerry contact object. + * + * Example: user searches with a filter on the Contact 'name' field: + * + * Contacts.find(['name'], onSuccess, onFail, {filter:'Bob'}); + * + * The 'name' field does not exist in a BlackBerry contact. Instead, a filter + * expression will be built to search the BlackBerry contacts using the + * BlackBerry 'title', 'firstName' and 'lastName' fields. + */ +var fieldMappings = { + "id" : "uid", + "displayName" : "user1", + "name" : [ "title", "firstName", "lastName" ], + "name.formatted" : [ "title", "firstName", "lastName" ], + "name.givenName" : "firstName", + "name.familyName" : "lastName", + "name.honorificPrefix" : "title", + "phoneNumbers" : [ "faxPhone", "homePhone", "homePhone2", "mobilePhone", + "pagerPhone", "otherPhone", "workPhone", "workPhone2" ], + "phoneNumbers.value" : [ "faxPhone", "homePhone", "homePhone2", + "mobilePhone", "pagerPhone", "otherPhone", "workPhone", + "workPhone2" ], + "emails" : [ "email1", "email2", "email3" ], + "addresses" : [ "homeAddress.address1", "homeAddress.address2", + "homeAddress.city", "homeAddress.stateProvince", + "homeAddress.zipPostal", "homeAddress.country", + "workAddress.address1", "workAddress.address2", "workAddress.city", + "workAddress.stateProvince", "workAddress.zipPostal", + "workAddress.country" ], + "addresses.formatted" : [ "homeAddress.address1", "homeAddress.address2", + "homeAddress.city", "homeAddress.stateProvince", + "homeAddress.zipPostal", "homeAddress.country", + "workAddress.address1", "workAddress.address2", "workAddress.city", + "workAddress.stateProvince", "workAddress.zipPostal", + "workAddress.country" ], + "addresses.streetAddress" : [ "homeAddress.address1", + "homeAddress.address2", "workAddress.address1", + "workAddress.address2" ], + "addresses.locality" : [ "homeAddress.city", "workAddress.city" ], + "addresses.region" : [ "homeAddress.stateProvince", + "workAddress.stateProvince" ], + "addresses.country" : [ "homeAddress.country", "workAddress.country" ], + "organizations" : [ "company", "jobTitle" ], + "organizations.name" : "company", + "organizations.title" : "jobTitle", + "birthday" : "birthday", + "note" : "note", + "categories" : "categories", + "urls" : "webpage", + "urls.value" : "webpage" +}; + +/* + * Build an array of all of the valid W3C Contact fields. This is used to + * substitute all the fields when ["*"] is specified. + */ +var allFields = []; +for ( var key in fieldMappings) { + if (fieldMappings.hasOwnProperty(key)) { + allFields.push(key); + } +} + +/** + * Create a W3C ContactAddress object from a BlackBerry Address object. + * + * @param {String} + * type the type of address (e.g. work, home) + * @param {blackberry.pim.Address} + * bbAddress a BlackBerry Address object + * @return {ContactAddress} a contact address object or null if the specified + * address is null + */ +var createContactAddress = function(type, bbAddress) { + + if (!bbAddress) { + return null; + } + + var address1 = bbAddress.address1 || ""; + var address2 = bbAddress.address2 || ""; + var streetAddress = address1 + ", " + address2; + var locality = bbAddress.city || ""; + var region = bbAddress.stateProvince || ""; + var postalCode = bbAddress.zipPostal || ""; + var country = bbAddress.country || ""; + var formatted = streetAddress + ", " + locality + ", " + region + ", " + postalCode + ", " + country; + + return new ContactAddress(null, type, formatted, streetAddress, locality, + region, postalCode, country); +}; + +module.exports = { + /** + * Builds a BlackBerry filter expression for contact search using the + * contact fields and search filter provided. + * + * @param {String[]} + * fields Array of Contact fields to search + * @param {String} + * filter Filter, or search string + * @return filter expression or null if fields is empty or filter is null or + * empty + */ + buildFilterExpression : function(fields, filter) { + + // ensure filter exists + if (!filter || filter === "") { + return null; + } + + if (fields.length == 1 && fields[0] === "*") { + // Cordova enhancement to allow fields value of ["*"] to indicate + // all supported fields. + fields = allFields; + } + + // BlackBerry API uses specific operators to build filter expressions + // for + // querying Contact lists. The operators are + // ["!=","==","<",">","<=",">="]. + // Use of regex is also an option, and the only one we can use to + // simulate + // an SQL '%LIKE%' clause. + // + // Note: The BlackBerry regex implementation doesn't seem to support + // conventional regex switches that would enable a case insensitive + // search. + // It does not honor the (?i) switch (which causes Contact.find() to + // fail). + // We need case INsensitivity to match the W3C Contacts API spec. + // So the guys at RIM proposed this method: + // + // original filter = "norm" + // case insensitive filter = "[nN][oO][rR][mM]" + // + var ciFilter = ""; + for ( var i = 0; i < filter.length; i++) { + ciFilter = ciFilter + "[" + filter[i].toLowerCase() + filter[i].toUpperCase() + "]"; + } + + // match anything that contains our filter string + filter = ".*" + ciFilter + ".*"; + + // build a filter expression using all Contact fields provided + var filterExpression = null; + if (fields && utils.isArray(fields)) { + var fe = null; + for (var f = 0; f < fields.length; f++) { + if (!fields[f]) { + continue; + } + + // retrieve the BlackBerry contact fields that map to the one + // specified + var bbFields = fieldMappings[fields[f]]; + + // BlackBerry doesn't support the field specified + if (!bbFields) { + continue; + } + + if (!utils.isArray(bbFields)) { + bbFields = [bbFields]; + } + + // construct the filter expression using the BlackBerry fields + for (var j = 0; j < bbFields.length; j++) { + fe = new blackberry.find.FilterExpression(bbFields[j], + "REGEX", filter); + if (filterExpression === null) { + filterExpression = fe; + } else { + // combine the filters + filterExpression = new blackberry.find.FilterExpression( + filterExpression, "OR", fe); + } + } + } + } + + return filterExpression; + }, + + /** + * Creates a Contact object from a BlackBerry Contact object, copying only + * the fields specified. + * + * This is intended as a privately used function but it is made globally + * available so that a Contact.save can convert a BlackBerry contact object + * into its W3C equivalent. + * + * @param {blackberry.pim.Contact} + * bbContact BlackBerry Contact object + * @param {String[]} + * fields array of contact fields that should be copied + * @return {Contact} a contact object containing the specified fields or + * null if the specified contact is null + */ + createContact : function(bbContact, fields) { + + if (!bbContact) { + return null; + } + + // construct a new contact object + // always copy the contact id and displayName fields + var contact = new Contact(bbContact.uid, bbContact.user1); + + // nothing to do + if (!fields || !(utils.isArray(fields)) || fields.length === 0) { + return contact; + } else if (fields.length == 1 && fields[0] === "*") { + // Cordova enhancement to allow fields value of ["*"] to indicate + // all supported fields. + fields = allFields; + } + + // add the fields specified + for (var i = 0; i < fields.length; i++) { + var field = fields[i]; + + if (!field) { + continue; + } + + // name + if (field.indexOf('name') === 0) { + var formattedName = bbContact.title + ' ' + bbContact.firstName + ' ' + bbContact.lastName; + contact.name = new ContactName(formattedName, + bbContact.lastName, bbContact.firstName, null, + bbContact.title, null); + } + // phone numbers + else if (field.indexOf('phoneNumbers') === 0) { + var phoneNumbers = []; + if (bbContact.homePhone) { + phoneNumbers.push(new ContactField('home', + bbContact.homePhone)); + } + if (bbContact.homePhone2) { + phoneNumbers.push(new ContactField('home', + bbContact.homePhone2)); + } + if (bbContact.workPhone) { + phoneNumbers.push(new ContactField('work', + bbContact.workPhone)); + } + if (bbContact.workPhone2) { + phoneNumbers.push(new ContactField('work', + bbContact.workPhone2)); + } + if (bbContact.mobilePhone) { + phoneNumbers.push(new ContactField('mobile', + bbContact.mobilePhone)); + } + if (bbContact.faxPhone) { + phoneNumbers.push(new ContactField('fax', + bbContact.faxPhone)); + } + if (bbContact.pagerPhone) { + phoneNumbers.push(new ContactField('pager', + bbContact.pagerPhone)); + } + if (bbContact.otherPhone) { + phoneNumbers.push(new ContactField('other', + bbContact.otherPhone)); + } + contact.phoneNumbers = phoneNumbers.length > 0 ? phoneNumbers + : null; + } + // emails + else if (field.indexOf('emails') === 0) { + var emails = []; + if (bbContact.email1) { + emails.push(new ContactField(null, bbContact.email1, null)); + } + if (bbContact.email2) { + emails.push(new ContactField(null, bbContact.email2, null)); + } + if (bbContact.email3) { + emails.push(new ContactField(null, bbContact.email3, null)); + } + contact.emails = emails.length > 0 ? emails : null; + } + // addresses + else if (field.indexOf('addresses') === 0) { + var addresses = []; + if (bbContact.homeAddress) { + addresses.push(createContactAddress("home", + bbContact.homeAddress)); + } + if (bbContact.workAddress) { + addresses.push(createContactAddress("work", + bbContact.workAddress)); + } + contact.addresses = addresses.length > 0 ? addresses : null; + } + // birthday + else if (field.indexOf('birthday') === 0) { + if (bbContact.birthday) { + contact.birthday = bbContact.birthday; + } + } + // note + else if (field.indexOf('note') === 0) { + if (bbContact.note) { + contact.note = bbContact.note; + } + } + // organizations + else if (field.indexOf('organizations') === 0) { + var organizations = []; + if (bbContact.company || bbContact.jobTitle) { + organizations.push(new ContactOrganization(null, null, + bbContact.company, null, bbContact.jobTitle)); + } + contact.organizations = organizations.length > 0 ? organizations + : null; + } + // categories + else if (field.indexOf('categories') === 0) { + if (bbContact.categories && bbContact.categories.length > 0) { + contact.categories = bbContact.categories; + } else { + contact.categories = null; + } + } + // urls + else if (field.indexOf('urls') === 0) { + var urls = []; + if (bbContact.webpage) { + urls.push(new ContactField(null, bbContact.webpage)); + } + contact.urls = urls.length > 0 ? urls : null; + } + // photos + else if (field.indexOf('photos') === 0) { + var photos = []; + // The BlackBerry Contact object will have a picture attribute + // with Base64 encoded image + if (bbContact.picture) { + photos.push(new ContactField('base64', bbContact.picture)); + } + contact.photos = photos.length > 0 ? photos : null; + } + } + + return contact; + } +}; + +}); + +// file: lib/blackberry/plugin/java/DirectoryEntry.js +define("cordova/plugin/java/DirectoryEntry", function(require, exports, module) { + +var DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + FileEntry = require('cordova/plugin/FileEntry'), + FileError = require('cordova/plugin/FileError'), + exec = require('cordova/exec'); + +module.exports = { + /** + * Creates or looks up a directory; override for BlackBerry. + * + * @param path + * {DOMString} either a relative or absolute path from this + * directory in which to look up or create a directory + * @param options + * {Flags} options to create or exclusively create the directory + * @param successCallback + * {Function} called with the new DirectoryEntry + * @param errorCallback + * {Function} called with a FileError + */ + getDirectory : function(path, options, successCallback, errorCallback) { + // create directory if it doesn't exist + var create = (options && options.create === true) ? true : false, + // if true, causes failure if create is true and path already exists + exclusive = (options && options.exclusive === true) ? true : false, + // directory exists + exists, + // create a new DirectoryEntry object and invoke success callback + createEntry = function() { + var path_parts = path.split('/'), + name = path_parts[path_parts.length - 1], + dirEntry = new DirectoryEntry(name, path); + + // invoke success callback + if (typeof successCallback === 'function') { + successCallback(dirEntry); + } + }; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // determine if path is relative or absolute + if (!path) { + fail(FileError.ENCODING_ERR); + return; + } else if (path.indexOf(this.fullPath) !== 0) { + // path does not begin with the fullPath of this directory + // therefore, it is relative + path = this.fullPath + '/' + path; + } + + // determine if directory exists + try { + // will return true if path exists AND is a directory + exists = blackberry.io.dir.exists(path); + } catch (e) { + // invalid path + fail(FileError.ENCODING_ERR); + return; + } + + // path is a directory + if (exists) { + if (create && exclusive) { + // can't guarantee exclusivity + fail(FileError.PATH_EXISTS_ERR); + } else { + // create entry for existing directory + createEntry(); + } + } + // will return true if path exists AND is a file + else if (blackberry.io.file.exists(path)) { + // the path is a file + fail(FileError.TYPE_MISMATCH_ERR); + } + // path does not exist, create it + else if (create) { + try { + // directory path must have trailing slash + var dirPath = path; + if (dirPath.substr(-1) !== '/') { + dirPath += '/'; + } + blackberry.io.dir.createNewDir(dirPath); + createEntry(); + } catch (eone) { + // unable to create directory + fail(FileError.NOT_FOUND_ERR); + } + } + // path does not exist, don't create + else { + // directory doesn't exist + fail(FileError.NOT_FOUND_ERR); + } + }, + /** + * Create or look up a file. + * + * @param path {DOMString} + * either a relative or absolute path from this directory in + * which to look up or create a file + * @param options {Flags} + * options to create or exclusively create the file + * @param successCallback {Function} + * called with the new FileEntry object + * @param errorCallback {Function} + * called with a FileError object if error occurs + */ + getFile:function(path, options, successCallback, errorCallback) { + // create file if it doesn't exist + var create = (options && options.create === true) ? true : false, + // if true, causes failure if create is true and path already exists + exclusive = (options && options.exclusive === true) ? true : false, + // file exists + exists, + // create a new FileEntry object and invoke success callback + createEntry = function() { + var path_parts = path.split('/'), + name = path_parts[path_parts.length - 1], + fileEntry = new FileEntry(name, path); + + // invoke success callback + if (typeof successCallback === 'function') { + successCallback(fileEntry); + } + }; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // determine if path is relative or absolute + if (!path) { + fail(FileError.ENCODING_ERR); + return; + } + else if (path.indexOf(this.fullPath) !== 0) { + // path does not begin with the fullPath of this directory + // therefore, it is relative + path = this.fullPath + '/' + path; + } + + // determine if file exists + try { + // will return true if path exists AND is a file + exists = blackberry.io.file.exists(path); + } + catch (e) { + // invalid path + fail(FileError.ENCODING_ERR); + return; + } + + // path is a file + if (exists) { + if (create && exclusive) { + // can't guarantee exclusivity + fail(FileError.PATH_EXISTS_ERR); + } + else { + // create entry for existing file + createEntry(); + } + } + // will return true if path exists AND is a directory + else if (blackberry.io.dir.exists(path)) { + // the path is a directory + fail(FileError.TYPE_MISMATCH_ERR); + } + // path does not exist, create it + else if (create) { + // create empty file + exec( + function(result) { + // file created + createEntry(); + }, + fail, "File", "write", [ path, "", 0 ]); + } + // path does not exist, don't create + else { + // file doesn't exist + fail(FileError.NOT_FOUND_ERR); + } + }, + + /** + * Delete a directory and all of it's contents. + * + * @param successCallback {Function} called with no parameters + * @param errorCallback {Function} called with a FileError + */ + removeRecursively : function(successCallback, errorCallback) { + // we're removing THIS directory + var path = this.fullPath; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // attempt to delete directory + if (blackberry.io.dir.exists(path)) { + // it is an error to attempt to remove the file system root + if (exec(null, null, "File", "isFileSystemRoot", [ path ]) === true) { + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + else { + try { + // delete the directory, setting recursive flag to true + blackberry.io.dir.deleteDirectory(path, true); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (e) { + // permissions don't allow deletion + console.log(e); + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + } + } + // it's a file, not a directory + else if (blackberry.io.file.exists(path)) { + fail(FileError.TYPE_MISMATCH_ERR); + } + // not found + else { + fail(FileError.NOT_FOUND_ERR); + } + } +}; + +}); + +// file: lib/blackberry/plugin/java/Entry.js +define("cordova/plugin/java/Entry", function(require, exports, module) { + +var FileError = require('cordova/plugin/FileError'), + LocalFileSystem = require('cordova/plugin/LocalFileSystem'), + resolveLocalFileSystemURI = require('cordova/plugin/resolveLocalFileSystemURI'), + requestFileSystem = require('cordova/plugin/requestFileSystem'), + exec = require('cordova/exec'); + +module.exports = { + remove : function(successCallback, errorCallback) { + var path = this.fullPath, + // directory contents + contents = []; + + var fail = function(error) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(error)); + } + }; + + // file + if (blackberry.io.file.exists(path)) { + try { + blackberry.io.file.deleteFile(path); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (e) { + // permissions don't allow + fail(FileError.INVALID_MODIFICATION_ERR); + } + } + // directory + else if (blackberry.io.dir.exists(path)) { + // it is an error to attempt to remove the file system root + if (exec(null, null, "File", "isFileSystemRoot", [ path ]) === true) { + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } else { + // check to see if directory is empty + contents = blackberry.io.dir.listFiles(path); + if (contents.length !== 0) { + fail(FileError.INVALID_MODIFICATION_ERR); + } else { + try { + // delete + blackberry.io.dir.deleteDirectory(path, false); + if (typeof successCallback === "function") { + successCallback(); + } + } catch (eone) { + // permissions don't allow + fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + } + } + } + } + // not found + else { + fail(FileError.NOT_FOUND_ERR); + } + }, + getParent : function(successCallback, errorCallback) { + var that = this; + + try { + // On BlackBerry, the TEMPORARY file system is actually a temporary + // directory that is created on a per-application basis. This is + // to help ensure that applications do not share the same temporary + // space. So we check to see if this is the TEMPORARY file system + // (directory). If it is, we must return this Entry, rather than + // the Entry for its parent. + requestFileSystem(LocalFileSystem.TEMPORARY, 0, + function(fileSystem) { + if (fileSystem.root.fullPath === that.fullPath) { + if (typeof successCallback === 'function') { + successCallback(fileSystem.root); + } + } else { + resolveLocalFileSystemURI(blackberry.io.dir + .getParentDirectory(that.fullPath), + successCallback, errorCallback); + } + }, errorCallback); + } catch (e) { + if (typeof errorCallback === 'function') { + errorCallback(new FileError(FileError.NOT_FOUND_ERR)); + } + } + } +}; + +}); + +// file: lib/blackberry/plugin/java/MediaError.js +define("cordova/plugin/java/MediaError", function(require, exports, module) { + + +// The MediaError object exists on BB OS 6+ which prevents the Cordova version +// from being defined. This object is used to merge in differences between the BB +// MediaError object and the Cordova version. +module.exports = { + MEDIA_ERR_NONE_ACTIVE : 0, + MEDIA_ERR_NONE_SUPPORTED : 4 +}; + +}); + +// file: lib/blackberry/plugin/java/app.js +define("cordova/plugin/java/app", function(require, exports, module) { + +var exec = require('cordova/exec'), + platform = require('cordova/platform'), + manager = require('cordova/plugin/' + platform.runtime() + '/manager'); + +module.exports = { + /** + * Clear the resource cache. + */ + clearCache:function() { + if (typeof blackberry.widgetcache === "undefined" || blackberry.widgetcache === null) { + console.log("blackberry.widgetcache permission not found. Cache clear request denied."); + return; + } + blackberry.widgetcache.clearAll(); + }, + + /** + * Clear web history in this web view. + * Instead of BACK button loading the previous web page, it will exit the app. + */ + clearHistory:function() { + exec(null, null, "App", "clearHistory", []); + }, + + /** + * Go to previous page displayed. + * This is the same as pressing the backbutton on Android device. + */ + backHistory:function() { + // window.history.back() behaves oddly on BlackBerry, so use + // native implementation. + exec(null, null, "App", "backHistory", []); + }, + + /** + * Exit and terminate the application. + */ + exitApp:function() { + // Call onunload if it is defined since BlackBerry does not invoke + // on application exit. + if (typeof window.onunload === "function") { + window.onunload(); + } + + // allow Cordova JavaScript Extension opportunity to cleanup + manager.destroy(); + + // exit the app + blackberry.app.exit(); + } +}; + +}); + +// file: lib/blackberry/plugin/java/app/bbsymbols.js +define("cordova/plugin/java/app/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/java/app', 'navigator.app'); + +}); + +// file: lib/blackberry/plugin/java/contacts.js +define("cordova/plugin/java/contacts", function(require, exports, module) { + +var ContactError = require('cordova/plugin/ContactError'), + utils = require('cordova/utils'), + ContactUtils = require('cordova/plugin/java/ContactUtils'); + +module.exports = { + /** + * Returns an array of Contacts matching the search criteria. + * + * @return array of Contacts matching search criteria + */ + find : function(fields, success, fail, options) { + // Success callback is required. Throw exception if not specified. + if (typeof success !== 'function') { + throw new TypeError( + "You must specify a success callback for the find command."); + } + + // Search qualifier is required and cannot be empty. + if (!fields || !(utils.isArray(fields)) || fields.length === 0) { + if (typeof fail == 'function') { + fail(new ContactError(ContactError.INVALID_ARGUMENT_ERROR)); + } + return; + } + + // default is to return a single contact match + var numContacts = 1; + + // search options + var filter = null; + if (options) { + // return multiple objects? + if (options.multiple === true) { + // -1 on BlackBerry will return all contact matches. + numContacts = -1; + } + filter = options.filter; + } + + // build the filter expression to use in find operation + var filterExpression = ContactUtils.buildFilterExpression(fields, filter); + + // find matching contacts + // Note: the filter expression can be null here, in which case, the find + // won't filter + var bbContacts = blackberry.pim.Contact.find(filterExpression, null, numContacts); + + // convert to Contact from blackberry.pim.Contact + var contacts = []; + for (var i = 0; i < bbContacts.length; i++) { + if (bbContacts[i]) { + // W3C Contacts API specification states that only the fields + // in the search filter should be returned, so we create + // a new Contact object, copying only the fields specified + contacts.push(ContactUtils.createContact(bbContacts[i], fields)); + } + } + + // return results + success(contacts); + } + +}; + +}); + +// file: lib/blackberry/plugin/java/contacts/bbsymbols.js +define("cordova/plugin/java/contacts/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.merges('cordova/plugin/java/contacts', 'navigator.contacts'); +modulemapper.merges('cordova/plugin/java/Contact', 'Contact'); + +}); + +// file: lib/blackberry/plugin/java/file/bbsymbols.js +define("cordova/plugin/java/file/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/File', 'File'); +modulemapper.merges('cordova/plugin/java/DirectoryEntry', 'DirectoryEntry'); +modulemapper.merges('cordova/plugin/java/Entry', 'Entry'); + + +}); + +// file: lib/blackberry/plugin/java/manager.js +define("cordova/plugin/java/manager", function(require, exports, module) { + +var cordova = require('cordova'); + +function _exec(win, fail, clazz, action, args) { + var callbackId = clazz + cordova.callbackId++, + origResult, + evalResult, + execResult; + + try { + if (win || fail) { + cordova.callbacks[callbackId] = {success: win, fail: fail}; + } + + // Note: Device returns string, but for some reason emulator returns object - so convert to string. + origResult = "" + org.apache.cordova.JavaPluginManager.exec(clazz, action, callbackId, JSON.stringify(args), true); + + // If a result was returned + if (origResult.length > 0) { + evalResult = JSON.parse(origResult); + + // If status is OK, then return evalResult value back to caller + if (evalResult.status === cordova.callbackStatus.OK) { + + // If there is a success callback, then call it now with returned evalResult value + if (win) { + // Clear callback if not expecting any more results + if (!evalResult.keepCallback) { + delete cordova.callbacks[callbackId]; + } + } + } else if (evalResult.status === cordova.callbackStatus.NO_RESULT) { + + // Clear callback if not expecting any more results + if (!evalResult.keepCallback) { + delete cordova.callbacks[callbackId]; + } + } else { + // If there is a fail callback, then call it now with returned evalResult value + if (fail) { + + // Clear callback if not expecting any more results + if (!evalResult.keepCallback) { + delete cordova.callbacks[callbackId]; + } + } + } + execResult = evalResult; + } else { + // Asynchronous calls return an empty string. Return a NO_RESULT + // status for those executions. + execResult = {"status" : cordova.callbackStatus.NO_RESULT, + "message" : ""}; + } + } catch (e) { + console.log("BlackBerryPluginManager Error: " + e); + execResult = {"status" : cordova.callbackStatus.ERROR, + "message" : e.message}; + } + + return execResult; +} + +module.exports = { + exec: function (win, fail, clazz, action, args) { + return _exec(win, fail, clazz, action, args); + }, + resume: org.apache.cordova.JavaPluginManager.resume, + pause: org.apache.cordova.JavaPluginManager.pause, + destroy: org.apache.cordova.JavaPluginManager.destroy +}; + +}); + +// file: lib/blackberry/plugin/java/media/bbsymbols.js +define("cordova/plugin/java/media/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.defaults('cordova/plugin/Media', 'Media'); +modulemapper.defaults('cordova/plugin/MediaError', 'MediaError'); +// Exists natively on BB OS 6+, merge in Cordova specifics +modulemapper.merges('cordova/plugin/java/MediaError', 'MediaError'); + +}); + +// file: lib/blackberry/plugin/java/notification.js +define("cordova/plugin/java/notification", function(require, exports, module) { + +var exec = require('cordova/exec'); + +/** + * Provides BlackBerry enhanced notification API. + */ +module.exports = { + activityStart : function(title, message) { + // If title and message not specified then mimic Android behavior of + // using default strings. + if (typeof title === "undefined" && typeof message == "undefined") { + title = "Busy"; + message = 'Please wait...'; + } + + exec(null, null, 'Notification', 'activityStart', [ title, message ]); + }, + + /** + * Close an activity dialog + */ + activityStop : function() { + exec(null, null, 'Notification', 'activityStop', []); + }, + + /** + * Display a progress dialog with progress bar that goes from 0 to 100. + * + * @param {String} + * title Title of the progress dialog. + * @param {String} + * message Message to display in the dialog. + */ + progressStart : function(title, message) { + exec(null, null, 'Notification', 'progressStart', [ title, message ]); + }, + + /** + * Close the progress dialog. + */ + progressStop : function() { + exec(null, null, 'Notification', 'progressStop', []); + }, + + /** + * Set the progress dialog value. + * + * @param {Number} + * value 0-100 + */ + progressValue : function(value) { + exec(null, null, 'Notification', 'progressValue', [ value ]); + } +}; + +}); + +// file: lib/blackberry/plugin/java/notification/bbsymbols.js +define("cordova/plugin/java/notification/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.merges('cordova/plugin/java/notification', 'navigator.notification'); + +}); + +// file: lib/blackberry/plugin/java/platform.js +define("cordova/plugin/java/platform", function(require, exports, module) { + +module.exports = { + id: "blackberry", + initialize:function() { + var cordova = require('cordova'), + exec = require('cordova/exec'), + channel = require('cordova/channel'), + platform = require('cordova/platform'), + manager = require('cordova/plugin/' + platform.runtime() + '/manager'), + app = require('cordova/plugin/java/app'); + + // BB OS 5 does not define window.console. + if (typeof window.console === 'undefined') { + window.console = {}; + } + + // Override console.log with native logging ability. + // BB OS 7 devices define console.log for use with web inspector + // debugging. If console.log is already defined, invoke it in addition + // to native logging. + var origLog = window.console.log; + window.console.log = function(msg) { + if (typeof origLog === 'function') { + origLog.call(window.console, msg); + } + org.apache.cordova.Logger.log(''+msg); + }; + + // Mapping of button events to BlackBerry key identifier. + var buttonMapping = { + 'backbutton' : blackberry.system.event.KEY_BACK, + 'conveniencebutton1' : blackberry.system.event.KEY_CONVENIENCE_1, + 'conveniencebutton2' : blackberry.system.event.KEY_CONVENIENCE_2, + 'endcallbutton' : blackberry.system.event.KEY_ENDCALL, + 'menubutton' : blackberry.system.event.KEY_MENU, + 'startcallbutton' : blackberry.system.event.KEY_STARTCALL, + 'volumedownbutton' : blackberry.system.event.KEY_VOLUMEDOWN, + 'volumeupbutton' : blackberry.system.event.KEY_VOLUMEUP + }; + + // Generates a function which fires the specified event. + var fireEvent = function(event) { + return function() { + cordova.fireDocumentEvent(event, null); + }; + }; + + var eventHandler = function(event) { + return function() { + // If we just attached the first handler, let native know we + // need to override the hardware button. + if (this.numHandlers) { + blackberry.system.event.onHardwareKey( + buttonMapping[event], fireEvent(event)); + } + // If we just detached the last handler, let native know we + // no longer override the hardware button. + else { + blackberry.system.event.onHardwareKey( + buttonMapping[event], null); + } + }; + }; + + // Inject listeners for buttons on the document. + for (var button in buttonMapping) { + if (buttonMapping.hasOwnProperty(button)) { + var buttonChannel = cordova.addDocumentEventHandler(button); + buttonChannel.onHasSubscribersChange = eventHandler(button); + } + } + + // Fires off necessary code to pause/resume app + var resume = function() { + cordova.fireDocumentEvent('resume'); + manager.resume(); + }; + var pause = function() { + cordova.fireDocumentEvent('pause'); + manager.pause(); + }; + + /************************************************ + * Patch up the generic pause/resume listeners. * + ************************************************/ + + // Unsubscribe handler - turns off native backlight change + // listener + var onHasSubscribersChange = function() { + // If we just attached the first handler and there are + // no pause handlers, start the backlight system + // listener on the native side. + if (this.numHandlers && (channel.onResume.numHandlers + channel.onPause.numHandlers === 1)) { + exec(backlightWin, backlightFail, "App", "detectBacklight", []); + } else if (channel.onResume.numHandlers === 0 && channel.onPause.numHandlers === 0) { + exec(null, null, 'App', 'ignoreBacklight', []); + } + }; + + // Native backlight detection win/fail callbacks + var backlightWin = function(isOn) { + if (isOn === true) { + resume(); + } else { + pause(); + } + }; + var backlightFail = function(e) { + console.log("Error detecting backlight on/off."); + }; + + // Override stock resume and pause listeners so we can trigger + // some native methods during attach/remove + channel.onResume = cordova.addDocumentEventHandler('resume'); + channel.onResume.onHasSubscribersChange = onHasSubscribersChange; + channel.onPause = cordova.addDocumentEventHandler('pause'); + channel.onPause.onHasSubscribersChange = onHasSubscribersChange; + + // Fire resume event when application brought to foreground. + blackberry.app.event.onForeground(resume); + + // Fire pause event when application sent to background. + blackberry.app.event.onBackground(pause); + + // Trap BlackBerry WebWorks exit. Allow plugins to clean up before exiting. + blackberry.app.event.onExit(app.exitApp); + } +}; + +}); + +// file: lib/common/plugin/logger.js +define("cordova/plugin/logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ +// The logger module exports the following properties/functions: +// +// LOG - constant for the level LOG +// ERROR - constant for the level ERROR +// WARN - constant for the level WARN +// INFO - constant for the level INFO +// DEBUG - constant for the level DEBUG +// logLevel() - returns current log level +// logLevel(value) - sets and returns a new log level +// useConsole() - returns whether logger is using console +// useConsole(value) - sets and returns whether logger is using console +// log(message,...) - logs a message at level LOG +// error(message,...) - logs a message at level ERROR +// warn(message,...) - logs a message at level WARN +// info(message,...) - logs a message at level INFO +// debug(message,...) - logs a message at level DEBUG +// logLevel(level,message,...) - logs a message specified level +// +//------------------------------------------------------------------------------ + +var logger = exports; + +var exec = require('cordova/exec'); +var utils = require('cordova/utils'); + +var UseConsole = true; +var Queued = []; +var DeviceReady = false; +var CurrentLevel; + +/** + * Logging levels + */ + +var Levels = [ + "LOG", + "ERROR", + "WARN", + "INFO", + "DEBUG" +]; + +/* + * add the logging levels to the logger object and + * to a separate levelsMap object for testing + */ + +var LevelsMap = {}; +for (var i=0; i CurrentLevel) return; + + // queue the message if not yet at deviceready + if (!DeviceReady && !UseConsole) { + Queued.push([level, message]); + return; + } + + // if not using the console, use the native logger + if (!UseConsole) { + exec(null, null, "Logger", "logLevel", [level, message]); + return; + } + + // make sure console is not using logger + if (console.__usingCordovaLogger) { + throw new Error("console and logger are too intertwingly"); + } + + // log to the console + switch (level) { + case logger.LOG: console.log(message); break; + case logger.ERROR: console.log("ERROR: " + message); break; + case logger.WARN: console.log("WARN: " + message); break; + case logger.INFO: console.log("INFO: " + message); break; + case logger.DEBUG: console.log("DEBUG: " + message); break; + } +}; + +// when deviceready fires, log queued messages +logger.__onDeviceReady = function() { + if (DeviceReady) return; + + DeviceReady = true; + + for (var i=0; i 0) { + capture("photo", win, fail); + } + else { + win([]); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + captureVideo: function (args, win, fail) { + if (args[0].limit > 0) { + capture("video", win, fail); + } + else { + win([]); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + captureAudio: function (args, win, fail) { + fail("Capturing Audio not supported"); + return {"status": cordova.callbackStatus.NO_RESULT, "message": "WebWorks Is On It"}; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/compass.js +define("cordova/plugin/qnx/compass", function(require, exports, module) { + +var exec = require('cordova/exec'), + utils = require('cordova/utils'), + CompassHeading = require('cordova/plugin/CompassHeading'), + CompassError = require('cordova/plugin/CompassError'), + timers = {}, + listeners = [], + heading = null, + running = false, + start = function () { + exec(function (result) { + heading = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp); + listeners.forEach(function (l) { + l.win(heading); + }); + }, function (e) { + listeners.forEach(function (l) { + l.fail(e); + }); + }, + "Compass", "start", []); + running = true; + }, + stop = function () { + exec(null, null, "Compass", "stop", []); + running = false; + }, + createCallbackPair = function (win, fail) { + return {win:win, fail:fail}; + }, + removeListeners = function (l) { + var idx = listeners.indexOf(l); + if (idx > -1) { + listeners.splice(idx, 1); + if (listeners.length === 0) { + stop(); + } + } + }, + compass = { + /** + * Asynchronously acquires the current heading. + * @param {Function} successCallback The function to call when the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {CompassOptions} options The options for getting the heading data (not used). + */ + getCurrentHeading:function(successCallback, errorCallback, options) { + if (typeof successCallback !== "function") { + throw "getCurrentHeading must be called with at least a success callback function as first parameter."; + } + + var p; + var win = function(a) { + removeListeners(p); + successCallback(a); + }; + var fail = function(e) { + removeListeners(p); + errorCallback(e); + }; + + p = createCallbackPair(win, fail); + listeners.push(p); + + if (!running) { + start(); + } + }, + + /** + * Asynchronously acquires the heading repeatedly at a given interval. + * @param {Function} successCallback The function to call each time the heading + * data is available + * @param {Function} errorCallback The function to call when there is an error + * getting the heading data. + * @param {HeadingOptions} options The options for getting the heading data + * such as timeout and the frequency of the watch. For iOS, filter parameter + * specifies to watch via a distance filter rather than time. + */ + watchHeading:function(successCallback, errorCallback, options) { + var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100; + var filter = (options !== undefined && options.filter !== undefined) ? options.filter : 0; + + // successCallback required + if (typeof successCallback !== "function") { + console.log("Compass Error: successCallback is not a function"); + return; + } + + // errorCallback optional + if (errorCallback && (typeof errorCallback !== "function")) { + console.log("Compass Error: errorCallback is not a function"); + return; + } + // Keep reference to watch id, and report heading readings as often as defined in frequency + var id = utils.createUUID(); + + var p = createCallbackPair(function(){}, function(e) { + removeListeners(p); + errorCallback(e); + }); + listeners.push(p); + + timers[id] = { + timer:window.setInterval(function() { + if (heading) { + successCallback(heading); + } + }, frequency), + listeners:p + }; + + if (running) { + // If we're already running then immediately invoke the success callback + // but only if we have retrieved a value, sample code does not check for null ... + if(heading) { + successCallback(heading); + } + } else { + start(); + } + + return id; + }, + + /** + * Clears the specified heading watch. + * @param {String} watchId The ID of the watch returned from #watchHeading. + */ + clearWatch:function(id) { + // Stop javascript timer & remove from timer list + if (id && timers[id]) { + window.clearInterval(timers[id].timer); + removeListeners(timers[id].listeners); + delete timers[id]; + } + } + }; + +module.exports = compass; + +}); + +// file: lib/blackberry/plugin/qnx/compass/bbsymbols.js +define("cordova/plugin/qnx/compass/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.merges('cordova/plugin/qnx/compass', 'navigator.compass'); + +}); + +// file: lib/blackberry/plugin/qnx/device.js +define("cordova/plugin/qnx/device", function(require, exports, module) { + +var channel = require('cordova/channel'), + cordova = require('cordova'); + +// Tell cordova channel to wait on the CordovaInfoReady event +channel.waitForInitialization('onCordovaInfoReady'); + +module.exports = { + getDeviceInfo : function(args, win, fail){ + win({ + platform: "BlackBerry", + version: blackberry.system.softwareVersion, + model: "Dev Alpha", + name: "Dev Alpha", // deprecated: please use device.model + uuid: blackberry.identity.uuid, + cordova: "2.5.0" + }); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "Device info returned" }; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/file.js +define("cordova/plugin/qnx/file", function(require, exports, module) { + +/*global WebKitBlobBuilder:false */ +var cordova = require('cordova'), + FileError = require('cordova/plugin/FileError'), + DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + FileEntry = require('cordova/plugin/FileEntry'), + File = require('cordova/plugin/File'), + FileSystem = require('cordova/plugin/FileSystem'), + FileReader = require('cordova/plugin/FileReader'), + nativeRequestFileSystem = window.webkitRequestFileSystem, + nativeResolveLocalFileSystemURI = function(uri, success, fail) { + if (uri.substring(0,11) !== "filesystem:") { + uri = "filesystem:" + uri; + } + window.webkitResolveLocalFileSystemURL(uri, success, fail); + }, + NativeFileReader = window.FileReader; + +window.FileReader = FileReader; +window.File = File; + +function getFileSystemName(nativeFs) { + return (nativeFs.name.indexOf("Persistent") != -1) ? "persistent" : "temporary"; +} + +function makeEntry(entry) { + if (entry.isDirectory) { + return new DirectoryEntry(entry.name, decodeURI(entry.toURL()).substring(11)); + } + else { + return new FileEntry(entry.name, decodeURI(entry.toURL()).substring(11)); + } +} + +module.exports = { + /* requestFileSystem */ + requestFileSystem: function(args, successCallback, errorCallback) { + var type = args[0], + size = args[1]; + + nativeRequestFileSystem(type, size, function(nativeFs) { + successCallback(new FileSystem(getFileSystemName(nativeFs), makeEntry(nativeFs.root))); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* resolveLocalFileSystemURI */ + resolveLocalFileSystemURI: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + var code = error.code; + switch (code) { + case 5: + code = FileError.NOT_FOUND_ERR; + break; + + case 2: + code = FileError.ENCODING_ERR; + break; + } + errorCallback(code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* DirectoryReader */ + readEntries: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(dirEntry) { + var reader = dirEntry.createReader(); + reader.readEntries(function(entries) { + var retVal = []; + for (var i = 0; i < entries.length; i++) { + retVal.push(makeEntry(entries[i])); + } + successCallback(retVal); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* Entry */ + getMetadata: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + entry.getMetadata(function(metaData) { + successCallback(metaData.modificationTime); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + moveTo: function(args, successCallback, errorCallback) { + var srcUri = args[0], + parentUri = args[1], + name = args[2]; + + nativeResolveLocalFileSystemURI(srcUri, function(source) { + nativeResolveLocalFileSystemURI(parentUri, function(parent) { + source.moveTo(parent, name, function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + copyTo: function(args, successCallback, errorCallback) { + var srcUri = args[0], + parentUri = args[1], + name = args[2]; + + nativeResolveLocalFileSystemURI(srcUri, function(source) { + nativeResolveLocalFileSystemURI(parentUri, function(parent) { + source.copyTo(parent, name, function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + remove: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + if (entry.fullPath === "/") { + errorCallback(FileError.NO_MODIFICATION_ALLOWED_ERR); + } else { + entry.remove( + function (success) { + if (successCallback) { + successCallback(success); + } + }, + function(error) { + if (errorCallback) { + errorCallback(error.code); + } + } + ); + } + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + getParent: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + entry.getParent(function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* FileEntry */ + getFileMetadata: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + entry.file(function(file) { + var retVal = new File(file.name, decodeURI(entry.toURL()), file.type, file.lastModifiedDate, file.size); + successCallback(retVal); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* DirectoryEntry */ + getDirectory: function(args, successCallback, errorCallback) { + var uri = args[0], + path = args[1], + options = args[2]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + entry.getDirectory(path, options, function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + if (error.code === FileError.INVALID_MODIFICATION_ERR) { + if (options.create) { + errorCallback(FileError.PATH_EXISTS_ERR); + } else { + errorCallback(FileError.ENCODING_ERR); + } + } else { + errorCallback(error.code); + } + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + removeRecursively: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + if (entry.fullPath === "/") { + errorCallback(FileError.NO_MODIFICATION_ALLOWED_ERR); + } else { + entry.removeRecursively( + function (success) { + if (successCallback) { + successCallback(success); + } + }, + function(error) { + errorCallback(error.code); + } + ); + } + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + getFile: function(args, successCallback, errorCallback) { + var uri = args[0], + path = args[1], + options = args[2]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + entry.getFile(path, options, function(entry) { + successCallback(makeEntry(entry)); + }, function(error) { + if (error.code === FileError.INVALID_MODIFICATION_ERR) { + if (options.create) { + errorCallback(FileError.PATH_EXISTS_ERR); + } else { + errorCallback(FileError.NOT_FOUND_ERR); + } + } else { + errorCallback(error.code); + } + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* FileReader */ + readAsText: function(args, successCallback, errorCallback) { + var uri = args[0], + encoding = args[1]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + var onLoadEnd = function(evt) { + if (!evt.target.error) { + successCallback(evt.target.result); + } + }, + onError = function(evt) { + errorCallback(evt.target.error.code); + }; + + var reader = new NativeFileReader(); + + reader.onloadend = onLoadEnd; + reader.onerror = onError; + entry.file(function(file) { + reader.readAsText(file, encoding); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + readAsDataURL: function(args, successCallback, errorCallback) { + var uri = args[0]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + var onLoadEnd = function(evt) { + if (!evt.target.error) { + successCallback(evt.target.result); + } + }, + onError = function(evt) { + errorCallback(evt.target.error.code); + }; + + var reader = new NativeFileReader(); + + reader.onloadend = onLoadEnd; + reader.onerror = onError; + entry.file(function(file) { + reader.readAsDataURL(file); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + /* FileWriter */ + write: function(args, successCallback, errorCallback) { + var uri = args[0], + text = args[1], + position = args[2]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + var onWriteEnd = function(evt) { + if(!evt.target.error) { + successCallback(evt.target.position - position); + } else { + errorCallback(evt.target.error.code); + } + }, + onError = function(evt) { + errorCallback(evt.target.error.code); + }; + + entry.createWriter(function(writer) { + writer.onwriteend = onWriteEnd; + writer.onerror = onError; + + writer.seek(position); + writer.write(new Blob([text], {type: "text/plain"})); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + truncate: function(args, successCallback, errorCallback) { + var uri = args[0], + size = args[1]; + + nativeResolveLocalFileSystemURI(uri, function(entry) { + var onWriteEnd = function(evt) { + if(!evt.target.error) { + successCallback(evt.target.length); + } else { + errorCallback(evt.target.error.code); + } + }, + onError = function(evt) { + errorCallback(evt.target.error.code); + }; + + entry.createWriter(function(writer) { + writer.onwriteend = onWriteEnd; + writer.onerror = onError; + + writer.truncate(size); + }, function(error) { + errorCallback(error.code); + }); + }, function(error) { + errorCallback(error.code); + }); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/fileTransfer.js +define("cordova/plugin/qnx/fileTransfer", function(require, exports, module) { + +var cordova = require('cordova'), + FileEntry = require('cordova/plugin/FileEntry'), + FileTransferError = require('cordova/plugin/FileTransferError'), + FileUploadResult = require('cordova/plugin/FileUploadResult'), + ProgressEvent = require('cordova/plugin/ProgressEvent'), + nativeResolveLocalFileSystemURI = function(uri, success, fail) { + if (uri.substring(0,11) !== "filesystem:") { + uri = "filesystem:" + uri; + } + window.webkitResolveLocalFileSystemURL(uri, success, fail); + }, + xhr; + +function getParentPath(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(0, pos + 1); +} + +function getFileName(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(pos + 1); +} + +function cleanUpPath(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(0, pos) + filePath.substring(pos + 1, filePath.length); +} + +function checkURL(url) { + return url.indexOf(' ') === -1 ? true : false; +} + +module.exports = { + abort: function () { + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + upload: function(args, win, fail) { + var filePath = args[0], + server = args[1], + fileKey = args[2], + fileName = args[3], + mimeType = args[4], + params = args[5], + /*trustAllHosts = args[6],*/ + chunkedMode = args[7], + headers = args[8]; + + if (!checkURL(server)) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR)); + } + + nativeResolveLocalFileSystemURI(filePath, function(entry) { + entry.file(function(file) { + function uploadFile(blobFile) { + var fd = new FormData(); + + fd.append(fileKey, blobFile, fileName); + for (var prop in params) { + if(params.hasOwnProperty(prop)) { + fd.append(prop, params[prop]); + } + } + + xhr = new XMLHttpRequest(); + xhr.open("POST", server); + xhr.onload = function(evt) { + if (xhr.status == 200) { + var result = new FileUploadResult(); + result.bytesSent = file.size; + result.responseCode = xhr.status; + result.response = xhr.response; + win(result); + } else if (xhr.status == 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status)); + } + }; + xhr.ontimeout = function(evt) { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status)); + }; + xhr.onerror = function () { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, this.status)); + }; + xhr.onprogress = function (evt) { + win(evt); + }; + + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + xhr.setRequestHeader(header, headers[header]); + } + } + + xhr.send(fd); + } + + var bytesPerChunk; + if (chunkedMode === true) { + bytesPerChunk = 1024 * 1024; // 1MB chunk sizes. + } else { + bytesPerChunk = file.size; + } + var start = 0; + var end = bytesPerChunk; + while (start < file.size) { + var chunk = file.slice(start, end, mimeType); + uploadFile(chunk); + start = end; + end = start + bytesPerChunk; + } + }, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + }, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + }, + + download: function (args, win, fail) { + var source = args[0], + target = cleanUpPath(args[1]), + fileWriter; + + if (!checkURL(source)) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR)); + } + + xhr = new XMLHttpRequest(); + + function writeFile(entry) { + entry.createWriter(function (writer) { + fileWriter = writer; + fileWriter.onwriteend = function (evt) { + if (!evt.target.error) { + win(new FileEntry(entry.name, entry.toURL())); + } else { + fail(evt.target.error); + } + }; + fileWriter.onerror = function (evt) { + fail(evt.target.error); + }; + fileWriter.write(new Blob([xhr.response])); + }, function (error) { + fail(error); + }); + } + + xhr.onerror = function (e) { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status)); + }; + + xhr.onload = function () { + if (xhr.readyState === xhr.DONE) { + if (xhr.status === 200 && xhr.response) { + nativeResolveLocalFileSystemURI(getParentPath(target), function (dir) { + dir.getFile(getFileName(target), {create: true}, writeFile, function (error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + }, function (error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + } else if (xhr.status === 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status)); + } + } + }; + xhr.onprogress = function (evt) { + win(evt); + }; + + xhr.responseType = "blob"; + xhr.open("GET", source, true); + xhr.send(); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"}; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/inappbrowser/bbsymbols.js +define("cordova/plugin/qnx/inappbrowser/bbsymbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/InAppBrowser', 'open'); + +}); + +// file: lib/blackberry/plugin/qnx/magnetometer.js +define("cordova/plugin/qnx/magnetometer", function(require, exports, module) { + +var cordova = require('cordova'), + callback; + +module.exports = { + start: function (args, win, fail) { + window.removeEventListener("deviceorientation", callback); + callback = function (orientation) { + var heading = 360 - orientation.alpha; + win({ + magneticHeading: heading, + trueHeading: heading, + headingAccuracy: 0, + timestamp: orientation.timeStamp + }); + }; + + window.addEventListener("deviceorientation", callback); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + stop: function (args, win, fail) { + window.removeEventListener("deviceorientation", callback); + return { "status" : cordova.callbackStatus.OK, "message" : "removed" }; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/manager.js +define("cordova/plugin/qnx/manager", function(require, exports, module) { + +var cordova = require('cordova'), + plugins = { + 'NetworkStatus' : require('cordova/plugin/qnx/network'), + 'Accelerometer' : require('cordova/plugin/webworks/accelerometer'), + 'Device' : require('cordova/plugin/qnx/device'), + 'Battery' : require('cordova/plugin/qnx/battery'), + 'Compass' : require('cordova/plugin/qnx/magnetometer'), + 'Camera' : require('cordova/plugin/qnx/camera'), + 'Capture' : require('cordova/plugin/qnx/capture'), + 'Logger' : require('cordova/plugin/webworks/logger'), + 'Notification' : require('cordova/plugin/webworks/notification'), + 'Media': require('cordova/plugin/webworks/media'), + 'File' : require('cordova/plugin/qnx/file'), + 'InAppBrowser' : require('cordova/plugin/qnx/InAppBrowser'), + 'FileTransfer': require('cordova/plugin/qnx/fileTransfer') + }; + +module.exports = { + addPlugin: function (key, module) { + plugins[key] = require(module); + }, + exec: function (win, fail, clazz, action, args) { + var result = {"status" : cordova.callbackStatus.CLASS_NOT_FOUND_EXCEPTION, "message" : "Class " + clazz + " cannot be found"}; + + if (plugins[clazz]) { + if (plugins[clazz][action]) { + result = plugins[clazz][action](args, win, fail); + } + else { + result = { "status" : cordova.callbackStatus.INVALID_ACTION, "message" : "Action not found: " + action }; + } + } + + return result; + }, + resume: function () {}, + pause: function () {}, + destroy: function () {} +}; + +}); + +// file: lib/blackberry/plugin/qnx/network.js +define("cordova/plugin/qnx/network", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + getConnectionInfo: function (args, win, fail) { + return { "status": cordova.callbackStatus.OK, "message": blackberry.connection.type}; + } +}; + +}); + +// file: lib/blackberry/plugin/qnx/platform.js +define("cordova/plugin/qnx/platform", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + id: "qnx", + initialize: function () { + document.addEventListener("deviceready", function () { + blackberry.event.addEventListener("pause", function () { + cordova.fireDocumentEvent("pause"); + }); + blackberry.event.addEventListener("resume", function () { + cordova.fireDocumentEvent("resume"); + }); + + window.addEventListener("online", function () { + cordova.fireDocumentEvent("online"); + }); + + window.addEventListener("offline", function () { + cordova.fireDocumentEvent("offline"); + }); + }); + } +}; + +}); + +// file: lib/common/plugin/requestFileSystem.js +define("cordova/plugin/requestFileSystem", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + FileError = require('cordova/plugin/FileError'), + FileSystem = require('cordova/plugin/FileSystem'), + exec = require('cordova/exec'); + +/** + * Request a file system in which to store application data. + * @param type local file system type + * @param size indicates how much storage space, in bytes, the application expects to need + * @param successCallback invoked with a FileSystem object + * @param errorCallback invoked if error occurs retrieving file system + */ +var requestFileSystem = function(type, size, successCallback, errorCallback) { + argscheck.checkArgs('nnFF', 'requestFileSystem', arguments); + var fail = function(code) { + errorCallback && errorCallback(new FileError(code)); + }; + + if (type < 0 || type > 3) { + fail(FileError.SYNTAX_ERR); + } else { + // if successful, return a FileSystem object + var success = function(file_system) { + if (file_system) { + if (successCallback) { + // grab the name and root from the file system object + var result = new FileSystem(file_system.name, file_system.root); + successCallback(result); + } + } + else { + // no FileSystem object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + exec(success, fail, "File", "requestFileSystem", [type, size]); + } +}; + +module.exports = requestFileSystem; + +}); + +// file: lib/common/plugin/resolveLocalFileSystemURI.js +define("cordova/plugin/resolveLocalFileSystemURI", function(require, exports, module) { + +var argscheck = require('cordova/argscheck'), + DirectoryEntry = require('cordova/plugin/DirectoryEntry'), + FileEntry = require('cordova/plugin/FileEntry'), + FileError = require('cordova/plugin/FileError'), + exec = require('cordova/exec'); + +/** + * Look up file system Entry referred to by local URI. + * @param {DOMString} uri URI referring to a local file or directory + * @param successCallback invoked with Entry object corresponding to URI + * @param errorCallback invoked if error occurs retrieving file system entry + */ +module.exports = function(uri, successCallback, errorCallback) { + argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments); + // error callback + var fail = function(error) { + errorCallback && errorCallback(new FileError(error)); + }; + // sanity check for 'not:valid:filename' + if(!uri || uri.split(":").length > 2) { + setTimeout( function() { + fail(FileError.ENCODING_ERR); + },0); + return; + } + // if successful, return either a file or directory entry + var success = function(entry) { + var result; + if (entry) { + if (successCallback) { + // create appropriate Entry object + result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath) : new FileEntry(entry.name, entry.fullPath); + successCallback(result); + } + } + else { + // no Entry object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + + exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]); +}; + +}); + +// file: lib/common/plugin/splashscreen.js +define("cordova/plugin/splashscreen", function(require, exports, module) { + +var exec = require('cordova/exec'); + +var splashscreen = { + show:function() { + exec(null, null, "SplashScreen", "show", []); + }, + hide:function() { + exec(null, null, "SplashScreen", "hide", []); + } +}; + +module.exports = splashscreen; + +}); + +// file: lib/common/plugin/splashscreen/symbols.js +define("cordova/plugin/splashscreen/symbols", function(require, exports, module) { + + +var modulemapper = require('cordova/modulemapper'); + +modulemapper.clobbers('cordova/plugin/splashscreen', 'navigator.splashscreen'); + +}); + +// file: lib/blackberry/plugin/webworks/accelerometer.js +define("cordova/plugin/webworks/accelerometer", function(require, exports, module) { + +var cordova = require('cordova'), + callback; + +module.exports = { + start: function (args, win, fail) { + window.removeEventListener("devicemotion", callback); + callback = function (motion) { + win({ + x: motion.accelerationIncludingGravity.x, + y: motion.accelerationIncludingGravity.y, + z: motion.accelerationIncludingGravity.z, + timestamp: motion.timestamp + }); + }; + window.addEventListener("devicemotion", callback); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + stop: function (args, win, fail) { + window.removeEventListener("devicemotion", callback); + return { "status" : cordova.callbackStatus.OK, "message" : "removed" }; + } +}; + +}); + +// file: lib/blackberry/plugin/webworks/logger.js +define("cordova/plugin/webworks/logger", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + log: function (args, win, fail) { + console.log(args); + return {"status" : cordova.callbackStatus.OK, + "message" : 'Message logged to console: ' + args}; + } +}; + +}); + +// file: lib/blackberry/plugin/webworks/media.js +define("cordova/plugin/webworks/media", function(require, exports, module) { + +var cordova = require('cordova'), + audioObjects = {}; + +module.exports = { + create: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + src = args[1]; + + if (typeof src == "undefined"){ + audioObjects[id] = new Audio(); + } else { + audioObjects[id] = new Audio(src); + } + + return {"status" : 1, "message" : "Audio object created" }; + }, + startPlayingAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (args.length === 1 || typeof args[1] == "undefined" ) { + return {"status" : 9, "message" : "Media source argument not found"}; + } + + if (audio) { + audio.pause(); + audioObjects[id] = undefined; + } + + audio = audioObjects[id] = new Audio(args[1]); + audio.play(); + return {"status" : 1, "message" : "Audio play started" }; + }, + stopPlayingAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (!audio) { + return {"status" : 2, "message" : "Audio Object has not been initialized"}; + } + + audio.pause(); + audioObjects[id] = undefined; + + return {"status" : 1, "message" : "Audio play stopped" }; + }, + seekToAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (!audio) { + result = {"status" : 2, "message" : "Audio Object has not been initialized"}; + } else if (args.length === 1) { + result = {"status" : 9, "message" : "Media seek time argument not found"}; + } else { + try { + audio.currentTime = args[1]; + } catch (e) { + console.log('Error seeking audio: ' + e); + return {"status" : 3, "message" : "Error seeking audio: " + e}; + } + + result = {"status" : 1, "message" : "Seek to audio succeeded" }; + } + return result; + }, + pausePlayingAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (!audio) { + return {"status" : 2, "message" : "Audio Object has not been initialized"}; + } + + audio.pause(); + + return {"status" : 1, "message" : "Audio paused" }; + }, + getCurrentPositionAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (!audio) { + return {"status" : 2, "message" : "Audio Object has not been initialized"}; + } + + return {"status" : 1, "message" : audio.currentTime }; + }, + getDuration: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (!audio) { + return {"status" : 2, "message" : "Audio Object has not been initialized"}; + } + + return {"status" : 1, "message" : audio.duration }; + }, + startRecordingAudio: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + if (args.length <= 1) { + return {"status" : 9, "message" : "Media start recording, insufficient arguments"}; + } + + blackberry.media.microphone.record(args[1], win, fail); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + stopRecordingAudio: function (args, win, fail) { + }, + release: function (args, win, fail) { + if (!args.length) { + return {"status" : 9, "message" : "Media Object id was not sent in arguments"}; + } + + var id = args[0], + audio = audioObjects[id], + result; + + if (audio) { + if(audio.src !== ""){ + audio.src = undefined; + } + audioObjects[id] = undefined; + //delete audio; + } + + result = {"status" : 1, "message" : "Media resources released"}; + + return result; + } +}; + +}); + +// file: lib/blackberry/plugin/webworks/notification.js +define("cordova/plugin/webworks/notification", function(require, exports, module) { + +var cordova = require('cordova'); + +module.exports = { + alert: function (args, win, fail) { + if (args.length !== 3) { + return {"status" : 9, "message" : "Notification action - alert arguments not found"}; + } + + //Unpack and map the args + var msg = args[0], + title = args[1], + btnLabel = args[2]; + + blackberry.ui.dialog.customAskAsync.apply(this, [ msg, [ btnLabel ], win, { "title" : title } ]); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + confirm: function (args, win, fail) { + if (args.length !== 3) { + return {"status" : 9, "message" : "Notification action - confirm arguments not found"}; + } + + //Unpack and map the args + var msg = args[0], + title = args[1], + btnLabel = args[2], + btnLabels = btnLabel.split(","); + + blackberry.ui.dialog.customAskAsync.apply(this, [msg, btnLabels, win, {"title" : title} ]); + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + } +}; + +}); + +// file: lib/common/symbols.js +define("cordova/symbols", function(require, exports, module) { + +var modulemapper = require('cordova/modulemapper'); + +// Use merges here in case others symbols files depend on this running first, +// but fail to declare the dependency with a require(). +modulemapper.merges('cordova', 'cordova'); +modulemapper.clobbers('cordova/exec', 'cordova.exec'); +modulemapper.clobbers('cordova/exec', 'Cordova.exec'); + +}); + +// file: lib/common/utils.js +define("cordova/utils", function(require, exports, module) { + +var utils = exports; + +/** + * Defines a property getter / setter for obj[key]. + */ +utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { + if (Object.defineProperty) { + var desc = { + get: getFunc, + configurable: true + }; + if (opt_setFunc) { + desc.set = opt_setFunc; + } + Object.defineProperty(obj, key, desc); + } else { + obj.__defineGetter__(key, getFunc); + if (opt_setFunc) { + obj.__defineSetter__(key, opt_setFunc); + } + } +}; + +/** + * Defines a property getter for obj[key]. + */ +utils.defineGetter = utils.defineGetterSetter; + +utils.arrayIndexOf = function(a, item) { + if (a.indexOf) { + return a.indexOf(item); + } + var len = a.length; + for (var i = 0; i < len; ++i) { + if (a[i] == item) { + return i; + } + } + return -1; +}; + +/** + * Returns whether the item was found in the array. + */ +utils.arrayRemove = function(a, item) { + var index = utils.arrayIndexOf(a, item); + if (index != -1) { + a.splice(index, 1); + } + return index != -1; +}; + +utils.typeName = function(val) { + return Object.prototype.toString.call(val).slice(8, -1); +}; + +/** + * Returns an indication of whether the argument is an array or not + */ +utils.isArray = function(a) { + return utils.typeName(a) == 'Array'; +}; + +/** + * Returns an indication of whether the argument is a Date or not + */ +utils.isDate = function(d) { + return utils.typeName(d) == 'Date'; +}; + +/** + * Does a deep clone of the object. + */ +utils.clone = function(obj) { + if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { + return obj; + } + + var retVal, i; + + if(utils.isArray(obj)){ + retVal = []; + for(i = 0; i < obj.length; ++i){ + retVal.push(utils.clone(obj[i])); + } + return retVal; + } + + retVal = {}; + for(i in obj){ + if(!(i in retVal) || retVal[i] != obj[i]) { + retVal[i] = utils.clone(obj[i]); + } + } + return retVal; +}; + +/** + * Returns a wrapped version of the function + */ +utils.close = function(context, func, params) { + if (typeof params == 'undefined') { + return function() { + return func.apply(context, arguments); + }; + } else { + return function() { + return func.apply(context, params); + }; + } +}; + +/** + * Create a UUID + */ +utils.createUUID = function() { + return UUIDcreatePart(4) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(2) + '-' + + UUIDcreatePart(6); +}; + +/** + * Extends a child object from a parent object using classical inheritance + * pattern. + */ +utils.extend = (function() { + // proxy used to establish prototype chain + var F = function() {}; + // extend Child from Parent + return function(Child, Parent) { + F.prototype = Parent.prototype; + Child.prototype = new F(); + Child.__super__ = Parent.prototype; + Child.prototype.constructor = Child; + }; +}()); + +/** + * Alerts a message in any available way: alert or console.log. + */ +utils.alert = function(msg) { + if (window.alert) { + window.alert(msg); + } else if (console && console.log) { + console.log(msg); + } +}; + +/** + * Formats a string and arguments following it ala sprintf() + * + * see utils.vformat() for more information + */ +utils.format = function(formatString /* ,... */) { + var args = [].slice.call(arguments, 1); + return utils.vformat(formatString, args); +}; + +/** + * Formats a string and arguments following it ala vsprintf() + * + * format chars: + * %j - format arg as JSON + * %o - format arg as JSON + * %c - format arg as '' + * %% - replace with '%' + * any other char following % will format it's + * arg via toString(). + * + * for rationale, see FireBug's Console API: + * http://getfirebug.com/wiki/index.php/Console_API + */ +utils.vformat = function(formatString, args) { + if (formatString === null || formatString === undefined) return ""; + if (arguments.length == 1) return formatString.toString(); + if (typeof formatString != "string") return formatString.toString(); + + var pattern = /(.*?)%(.)(.*)/; + var rest = formatString; + var result = []; + + while (args.length) { + var arg = args.shift(); + var match = pattern.exec(rest); + + if (!match) break; + + rest = match[3]; + + result.push(match[1]); + + if (match[2] == '%') { + result.push('%'); + args.unshift(arg); + continue; + } + + result.push(formatted(arg, match[2])); + } + + result.push(rest); + + return result.join(''); +}; + +//------------------------------------------------------------------------------ +function UUIDcreatePart(length) { + var uuidpart = ""; + for (var i=0; i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If you fill in the playbook.device.pin value you can use debug tokens! + This means you won't have to worry about having a unique version in config.xml every time. + + + + + + + + + + + + + + + + + + + + + + + + + + This tool will not open the simulator for you + + + + + + + + + + + + + + + + This tool will not open the simulator for you + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +NAME + ${ant.project.name} + +SYNOPSIS + ant TARGET COMMAND [-D<argument>=<value>]... + +DESCRIPTION + You can build and deploy your project to a device or simulator. + +TARGETS + blackberry ........ Builds a cod file and deploys to a device or simulator + + playbook .......... Builds a bar file and deploys to a device or simulator + +COMMANDS + help .............. Show this help menu. + ant, ant help + + load-device ....... Builds and deploys project to a connected USB device. + ant load-device + + load-simulator .... Builds and deploys project to default simulator. + ant load-simulator + + build ............. Compiles and packages the project for deployment. + ant build + + clean ............. Remove all files from the build/ directory. + ant clean + + clean-device ...... Remove this project from the connected USB device. + ant clean-device + + clean-simulator ... Remove this project from the simulator (takes a while). + ant clean-simulator + +GETTING STARTED + 1. Edit project.properties + + 2. <ant <TARGET> load-simulator> to run the project on the simulator + + 3. Customize your project by editing res/config.xml + + 4. To run the project on a BlackBerry device, you will need to obtain + code signing keys from RIM. Once you have the key, a project is + installed by connecting a BlackBerry via USB and running + <ant <TARGET> load-device>. + + + diff --git a/blackberry/project.properties b/blackberry/project.properties new file mode 100644 index 0000000..7867c5d --- /dev/null +++ b/blackberry/project.properties @@ -0,0 +1,137 @@ +# BlackBerry WebWorks Packager Directory +# +# The BlackBerry WebWorks Packager (bbwp) is required for compiling and packaging +# BlackBerry WebWorks applications for deployment to a BlackBerry device +# or simulator. The bbwp utility is installed with the standalone BlackBerry +# WebWorks SDK, and as part of the BlackBerry Web Plugin for Eclipse. +# +# Please specify the location of the BlackBerry WebWorks Packager in your +# environment. +# +# Typical location of bbwp for standalone BlackBerry WebWorks SDK installation: +# C:\Program Files (x86)\Research In Motion\BlackBerry Widget Packager +# +# Typical location of bbwp for BlackBerry Web Plugin for Eclipse installation: +# C:\Eclipse-3.5.2\plugins\net.rim.browser.tools.wcpc_1.0.0.201003191451-126\wcpc +# +# The ANT script is brittle and requires you to escape the backslashes. +# e.g. C:\some\path must be C:\\some\\path +# +# Please remember to: +# - Double escape your backslahses (i.e. \ must be \\) +# - Do not add a trailing slash (e.g. C:\some\path) +# +blackberry.bbwp.dir=/home/mopar/devel/priv/BB10-WebWorks-SDK-Linux +playbook.bbwp.dir=C:\\Program Files\\Research In Motion\\BlackBerry WebWorks SDK for TabletOS 2.1.0.6\\bbwp +qnx.bbwp.dir=/Developer/SDKs/Research In Motion/BlackBerry 10 WebWorks SDK 1.0.4.7 + +# (Optional) Simulator Directory +# +# If sim.dir is not specified, the build script will use the simulator directory +# within the BlackBerry WebWorks Packager. +# +blackberry.sim.dir=C:\\Program Files\\Research In Motion\BlackBerry WebWorks Packager\\simpack\\6.0.0.227 + +# (Optional) Simulator Binary +# +# If sim.bin is not specified, the build script will attempt to use the default +# simulator in the simulator directory. +# +#blackberry.sim.bin=9700.bat + +# (Optional) MDS Directory +# +# If mds.dir is not specified, the build script will attempt to use the MDS that +# is installed with the BlackBerry WebWorks Packager. +# +blackberry.mds.dir=C:\\Program Files\\Research In Motion\\BlackBerry WebWorks Packager\\mds + +# BlackBerry Code Signing Password +# +# If you leave this field blank, then +# the signing tool will prompt you each time +# +blackberry.sigtool.password= + +# Playbook Code Signing Password +# +# If you leave these fields blank, then +# signing will fail +# +playbook.sigtool.csk.password= +playbook.sigtool.p12.password= + +# BB10 Code Signing Password +qnx.sigtool.password= + +# BlackBerry Simulator Password +# +# If you leave this field blank, then +# you cannot deploy to simulator +# +blackberry.sim.password= + +# Playbook Simulator IP +# +# If you leave this field blank, then +# you cannot deploy to simulator +# +playbook.sim.ip= + +# Playbook Simulator Password +# +# If you leave this field blank, then +# you cannot deploy to simulator +# +playbook.sim.password= + +# Playbook Device IP +# +# If you leave this field blank, then +# you cannot deploy to device +# +playbook.device.ip= + +# Playbook Device Password +# +# If you leave this field blank, then +# you cannot deploy to device +# +playbook.device.password= +# PlayBook Device PIN +# +# Fill this value in to use debug tokens when debuging on the device +playbook.device.pin= + +# QNX Simulator IP +# +# If you leave this field blank, then +# you cannot deploy to simulator +# +qnx.sim.ip= + +# QNX Simulator Password +# +# If you leave this field blank, then +# you cannot deploy to simulator +# +qnx.sim.password= + +# QNX Device IP +# +# If you leave this field blank, then +# you cannot deploy to device +# +qnx.device.ip= + +# QNX Device Password +# +# If you leave this field blank, then +# you cannot deploy to device +# +qnx.device.password= + +# QNX Device PIN +# +# Fill this value in to use debug tokens when debuging on the device +qnx.device.pin= diff --git a/blackberry/qnx.xml b/blackberry/qnx.xml new file mode 100644 index 0000000..066af4b --- /dev/null +++ b/blackberry/qnx.xml @@ -0,0 +1,336 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If you fill in the qnx.device.pin value you can use debug tokens! + This means you won't have to worry about having a unique version in config.xml every time. + + + + + + + + + + + + + + + + + + + + + + + + + + This tool will not open the simulator for you + + + + + + + + + + + + + + + + + This tool will not open the simulator for you + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +NAME + ${ant.project.name} + +SYNOPSIS + ant TARGET COMMAND [-D<argument>=<value>]... + +DESCRIPTION + You can build and deploy your project to a device or simulator. + +TARGETS + blackberry ........ Builds a cod file and deploys to a device or simulator + + playbook .......... Builds a bar file and deploys to a device or simulator + +COMMANDS + help .............. Show this help menu. + ant, ant help + + load-device ....... Builds and deploys project to a connected USB device. + ant load-device + + load-simulator .... Builds and deploys project to default simulator. + ant load-simulator + + build ............. Compiles and packages the project for deployment. + ant build + + clean ............. Remove all files from the build/ directory. + ant clean + + clean-device ...... Remove this project from the connected USB device. + ant clean-device + + clean-simulator ... Remove this project from the simulator (takes a while). + ant clean-simulator + +GETTING STARTED + 1. Edit project.properties + + 2. <ant <TARGET> load-simulator> to run the project on the simulator + + 3. Customize your project by editing res/config.xml + + 4. To run the project on a BlackBerry device, you will need to obtain + code signing keys from RIM. Once you have the key, a project is + installed by connecting a BlackBerry via USB and running + <ant <TARGET> load-device>. + + + diff --git a/blackberry/res/config.xml b/blackberry/res/config.xml new file mode 100644 index 0000000..d098dc8 --- /dev/null +++ b/blackberry/res/config.xml @@ -0,0 +1,112 @@ + + + + + + + Points Watcher + + + Points Watcher is the easiest way to keep track of your Weight Watcher's Points Plus system. + + + + Travis Burtrum (moparisthebest) + + + + Copyright (C) 2013 Travis Burtrum (moparisthebest) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + use_camera + read_device_identifying_information + access_shared + read_geolocation + record_audio + access_pimdomain_contacts + + + diff --git a/blackberry/www b/blackberry/www new file mode 120000 index 0000000..cec6c33 --- /dev/null +++ b/blackberry/www @@ -0,0 +1 @@ +../www \ No newline at end of file diff --git a/images/convert.sh b/images/convert.sh new file mode 100755 index 0000000..91d4dc4 --- /dev/null +++ b/images/convert.sh @@ -0,0 +1,71 @@ +#!/bin/bash +cd "$(dirname "$0")" + +# create directory for market images +mkdir -p ./markets +convert -background none -resize 512x512\! ./icon.svg ./markets/512x512.png + +# icons +# create required directories +mkdir -p ../www/res/icon/android ../www/res/icon/blackberry ../www/res/icon/ios ../www/res/icon/webos ../www/res/icon/windows-phone +# default +convert -background none -resize 96x96\! ./icon.svg ../www/icon.png +# android +convert -background none -resize 96x96\! ./icon.svg ../www/res/icon/android/icon-96-xhdpi.png +convert -background none -resize 72x72\! ./icon.svg ../www/res/icon/android/icon-72-hdpi.png +convert -background none -resize 48x48\! ./icon.svg ../www/res/icon/android/icon-48-mdpi.png +convert -background none -resize 36x36\! ./icon.svg ../www/res/icon/android/icon-36-ldpi.png +# blackberry +convert -background none -resize 80x80\! ./icon.svg ../www/res/icon/blackberry/icon-80.png +# ios +convert -background none -resize 57x57\! ./icon.svg ../www/res/icon/ios/icon-57.png +convert -background none -resize 72x72\! ./icon.svg ../www/res/icon/ios/icon-72.png +convert -background none -resize 114x114\! ./icon.svg ../www/res/icon/ios/icon-57-2x.png +convert -background none -resize 144x144\! ./icon.svg ../www/res/icon/ios/icon-72-2x.png +# webos +convert -background none -resize 64x64\! ./icon.svg ../www/res/icon/webos/icon-64.png +# windows phone +convert -background none -resize 48x48\! ./icon.svg ../www/res/icon/windows-phone/icon-48.png +convert -background none -resize 173x173\! ./icon.svg ../www/res/icon/windows-phone/icon-173.png + +function splash_screen(){ +x="$1" +y="$2" +in_file="$3" +out_file="$4" + +gradient="gradient:gray-white" +gradient="gradient:#A7A7A7-#E4E4E4" +#gradient="radial-gradient:#555555-#222222" + +convert -background none "$in_file" -resize 96x96\! \ +\( -size 1x10 xc:none \) \ +\( -size "${x}x" -background none -font Arial -pointsize 36 -fill "black" -gravity center caption:"Points Watcher" \) \ +-gravity center -append \ +\( -size "${x}x${y}" "$gradient" \) \ ++swap -gravity center -compose over -composite "$out_file" +} + +# splash screens +# create required directories +mkdir -p ../www/res/screen/android ../www/res/screen/blackberry ../www/res/screen/ios ../www/res/screen/windows-phone +# default +splash_screen 480 800 ./icon.svg ../www/screen.png +# android +splash_screen 200 320 ./icon.svg ../www/res/screen/android/screen-ldpi-portrait.png +splash_screen 320 480 ./icon.svg ../www/res/screen/android/screen-mdpi-portrait.png +splash_screen 480 800 ./icon.svg ../www/res/screen/android/screen-hdpi-portrait.png +splash_screen 720 1280 ./icon.svg ../www/res/screen/android/screen-xhdpi-portrait.png +splash_screen 200 320 ./icon.svg ../www/res/screen/android/screen-ldpi-portrait.png +# blackberry (appears to be just the icon) +#splash_screen 225 225 ./icon.svg ../www/res/screen/blackberry/screen-225.png +convert -background none -resize 225x225\! ./icon.svg ../www/res/screen/blackberry/screen-225.png +# ios +splash_screen 320 480 ./icon.svg ../www/res/screen/ios/screen-iphone-portrait.png +splash_screen 640 960 ./icon.svg ../www/res/screen/ios/screen-iphone-portrait-2x.png +splash_screen 768 1024 ./icon.svg ../www/res/screen/ios/screen-ipad-portrait.png +splash_screen 1024 768 ./icon.svg ../www/res/screen/ios/screen-ipad-landscape.png +# windows phone +splash_screen 480 800 ./icon.svg ../www/res/screen/windows-phone/screen-portrait.jpg +# screen shots +#convert -resize 480x854\! ./ss1.png ./markets/ss1.png diff --git a/images/icon.svg b/images/icon.svg new file mode 100644 index 0000000..c57b57e --- /dev/null +++ b/images/icon.svg @@ -0,0 +1,132 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationBoldItalicWebfont.eot b/www/assets/fonts/sansation/SansationBoldItalicWebfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..c36a547021310f4c3da86ef1a4f1e45e2589b7d4 GIT binary patch literal 21056 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 XW)#ib`u=7fn$gm1vt5f+LG=F@j~gji literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationBoldItalicWebfont.svg b/www/assets/fonts/sansation/SansationBoldItalicWebfont.svg new file mode 100755 index 0000000..5237a4c --- /dev/null +++ b/www/assets/fonts/sansation/SansationBoldItalicWebfont.svg @@ -0,0 +1,145 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationBoldItalicWebfont.ttf b/www/assets/fonts/sansation/SansationBoldItalicWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b275b2b7a0df488351225d9babbd274aa0e8ec2f GIT binary patch literal 20852 zcmc(H34B!5+4nhjnSGy0CdnjZCKE_VLJ|@npe!+!fPjbyG!c|V7EuI5u}ZO}ywoKs zZWWjMTCCdFt@hr@Xx$qYEpBgXv`{N5Zh4!!QIR5$x%2&>bMJ%z_Wk;M-|zSP0(0*< zckaFCoacGYv;5Ci{GFa$*9QE~hUu4Cq3l=_D@RW_Qskfkg&m{}5T+M&U2QxP9UfdsFx$u%DrG4Xm zj{5WXe#`1rmtEed)XipW`YhC6U%h6@>Y2TH_b@gC?eVkm3{iu)F z#2#T!uyouNkHib(CGoQOka%5ue*E!7**=!d;{G`9`=z+=*SL?x1Mz}*@rn0kKhAE? zZp(IMU&ub2eRAJL`oIUfLS+nPSzpee;x%19DfBu4n16%ti_hei z+s~cg>p_;~GIw$>5Ap(D%7?QzSTE=72(JPKTi9$iRbw?83s2RmX0&Nju4va-azcS- zt8N?DF0NhO9)DZo;o5>>8n21}Me|e-)1;cIGutL6+Y`eyxn_AmTx*`ume88phiOU; zJ(@@+*0sGCd!s#u``R+GFWO_tgr-)vX{}eZi!a*S@jkW2JMY|Knyp4J|G!hNT3mSO}twS$5Rup)9lsr+T!s^$<~Dz#oOYG7n!f1`@GaL znvQqGCv~(gOm@UOlA^h!#%8u@&A1ceqh__{B~-yPKGD*+-35t6EWWz~WWYmbpl`FS zzM+4(&0mv@@3tCG#@nWz6H92ky{!WSIwRSUjCY*Tkz7bUq2bVx`V$~FgusR%4S))v z69#~eCR>vWFIq5gB=l&w27~ChmdG|`ak9g%#b>mQjdkIhNKGee=FKfFeCpEyb^#Md zx_LHw9`BghmRyA1CtG4T@nj1q-#oJ|#p3LH7qp~!oa3a$FVG5?6pNnXjd?X1u7WN& z3?mWdj6+-aF;g2LwGAriAUit+c7e0%w4ySfQmxtR(p;3d=BU%y?zG}(9$Z%fy2`85 zvZ(1!Ud`%(!Jx-R|q9Mzm2y&yL@I;4+q1?b6hM#=10HK$E*P z7U<+m4OeS&pi`1<;cA60DY;8_x+Lj}y|$KjGA_xr_|uw;IQ6*f@)f|m%1{0t^XeY)>*;JN7*Q&L=#*`cFr5P`B zd#m+eabu&-)LuOtZD>fVin!<>go`RJI=u}IT#MJ~2{1!{6>@M)CA z$DWWA_#`plr1&Z}j^Fm6v1%N@w=>Cxl<70Gh0lMu$w!4F-quqxK=m zGP~_m9+xH6o@^RYQgi>OkL5=$d(r4>ZsKQFvTVgQm)G3?#-9Ah)sOP?o12WT@@(?9 zp1rLr7xQLl%-`?uR8z(1GCm*H`5SVCn3~<4{fGJwbt~l3&BCC5l4gLQK5Ntmsl6#1 zahx~mA++XpFXzPc;0y0DCxMSr0|*!?jBDU$B(CreX)*fVzFyF)GbFYQZDB;#@og=e%kG~ zukRbfM;WggukohqufImfXk|8|o&~xWu`)K1r3yiLy~JsDU3WWr)BZ#u`VD!~{f=HO z3^_^GL8F5K{sagvjnUje-5CTMY$44-QZuS)NK+`$Kva+0ZHZlN{Yn1pr*25F-y7!L6SlcjJ%ns6>pa;Nd$xpP+< zhgM2n{u1A5j5SWhzp;F$=vVeqV-r7=d$&UGX6Cz<-MR{mMDJD=yj!Ms%Pbs{6CqjR zH}kT&b60Zb%DHom_wkOMc=>?Wi!nbhpCy;#-99#qrDU2PE-z^f%>(ZEg{rliY9v5> zl3i%VE#`BysnOmPwMXq0_KK$Gr@t7uciN|+&#&G*`Rk=PK zjU+TtRTcM*>K?^?RmRtJez2SSjIXv{q!QglVLL^@;(KnWX2*gd99b{LS6~oBDI`7k)iyg|+elUef2K$xN~(vANJY z)6}i7hJH4PrED~3T}rPIVckbMGEk=nh0upB4Z=yQpgi|h=||FKx89n$DYKD3w3uJa z7c5?6Y&GtXUXk`>hGvFI?-*WwfPY5wV+9(!TTL^Soo`uPwNaDmpwZH@FzhK=BCgAd zvzlu*G2ckG?fo2HE37RGXuOMTuF@szToL9|SA}(xg>`ETCz}TI6<=@3=g%2?mFF(G z@yIljj>;7nX8>M?Nj?lN<$}Ot>R^uTv!%IAHI!^(;Zcb)d()^! z=u{30SIV`g4Ke!mzEi(vujHLIC9_HzSG$YOx7KK1j^57`nhLQ=~aVT6B!&3u=KeS~#QyG50E( z@*CsO>9D6z?YVy0?D^1(W%2rF_i|r(RhRK#EpOjZ6*s=#ySx7Fy;5{~-G4q-KQq(2 zw_$&4y1S=)YwP~8#=6hjXYV(bLKb-TbI8g?LKkdfDKGk}c^ZWvq?zKCptx1oeaNoc zhbgOwNvhZ|N$sYpunA4q>9N}|Nxg8Gymh(7?NfAKj6{RdO?vHeWC_hG`DCO_;yFoZF<^ydae{Mz?!#hW67H zlYP*FO^|lD9CFm2gv$}BlsPZXMEC;>xO2f({-2FE4vpudcFA}3t>Nz*W!FtHUge`e zgTvt09iTxTTgFlm!7qm;Ctg^vfIZ>@zXCLS^Xv4eIka(q`s!*iG*_)pb9Sk^x9G4> z^K~)ZiN5kqr_0;lXXwy~$zMCU8vWb^8^h!h2@yl3=Gksu(ok!B@!=cY@|>#7=JUs0 zA{DpI%lvUy!`{{-Jq>ca+t`|KOg2W)JU$)$-l%S49+uC_S;|d47e*FND|I$nrx%cL z*~4gDB?TVhQN?by78g^RB*}LAD(T29V?%1=)sm-eQRa=zfAQ6mV4?<(t~K`Gv!zHH zBGvF!f4KjXYP6g$jWX`#1wHkZBtNhqOxX|G*iN{3r!WpSi02*p^>8SLSdJDG@6joOC&GCX;7VR^Wdd9FS95g z?wd;*L&GvXhPZ4_2jM1Qj=&9~xsr@WYyNh3?HQ6oa-31Sb4ShhGk?jv%;#6~QM{nC z%6Qkryrn)M z=v~G%cb%YiUY#xtq_*FU(K-dS$s6Mpa1f#1sofN{H9Kpy>B6LwyL^1S-_yv}f z?2e32kZjL|rU8-%lM#}#4`yxBB&)AOSxQCcsAmJZ^<7~KnNhNa^T?Dgpf?J8s+8iT zoYk-frA+=SWQ~QJxZTU`HACb-He~LQf(`tM7y0@lpT2hle6q3q@>01<(5WbAeJPYv ziBAr=5s*sq^C639%vL3RS(Q1Lj{Cd2`Gvv;?_&+}ZnLe5rePe-#T%sMnZGy4qlYvc zdGFIB#-UxTCw|iTF6fZ3jrmPw8ir~K+sN#NVfM5LI0XsH?>Bj7 zfXQmLa4onXxD@^_E`^~p2gaEZ8CT@rQiQ3f;fTp6lT*6O29flP(fmQp3&Ct8zJ(Jo zCpkMJCG0DR+P`Z9RFthPH@<#xZ`IxxC3$+A;i;vdlt0~*h6`=1GbY2vNvy@#g(*rE6u8)6(GT}xX2Nd6?G zs`_Th_n!Li+aH`T_QtGKEN|*tpP9aIOD(*_tQ4#6yY>{mPfBH`XHMysuQuN0AwHh) zT;YeQmq9jM>{84Bkd?;9l!)V{#6GKDhKtqlL~YF@&p8(+*e24BzPS7chq73A0S zNQFlMF$#P{Eki$j;HHI-=ze%C)KR?@9!o)#da4&tzzK*dvRijW;g7>1i|-EV#V8lo z=}NSh;{W4t5{PlB5Mw{IOld&pp~Esj5PzxFQN5V#q60=e>KDw@3WBI=r6ElrLFI{f zUIb`NK8{jiFsaayBdU2*Ih~UU2OlKe$Io}x8y|k+oNb(DJi*s$<@OI}l=0a$@{f)6 z>Xv_0)_t?Q=B0{ZMte^>5qsdVruTxrcCZKfL1yY$;=P( zU+;OP{`a3{ekgq)ZEM{>!x%hgl5x+B{jHLlU|^F6kAVjc7G&qKlmordfC9itG}#cO z4u$G8AEF}2NBCqy2L+*>Aat;w(9U2^BJ`jWz0VOfNaU=5g&Z|9Fq9J+>!sQGcVr&NltT?jc4;Z0`(-IQn>r6|n|%kp}R@g%+Q899U=Sfj~g>cY(uDl0Z;G@HEAdG@u@U=b_snnOZOi4;hXhxymZ! zG$=TKqMX9m0#G?#QbYXK$qUcn&L2E)^kuH?m)3Kq82179~P8_H?fB{ZC~kpiGxTo1y#5h!4g9D|fllmg@@5@e#;1-45d?1}Po419G5 zI%T&6^XCA}>HzZE>7*mx*y*C{awh^x*Kxc;G+;&s;1+jYA#J+?_{&Gep>>%F>(nio zlr;UwMbe_oeGns4jx4-*f+a_Czt+x0-!eKY_YZ+kfPrEpbJIhD^wR92#zgonY=ZPY zWYo^iwB`_pObCESH8E%l;K_MxuN=6e-vR(_MiguV=Vcplo{qxykuMf+0zaj-wY;YM zb?$t9X3tadkv^LN&oQT84x(Kd)+pDq?6ml$OJJ8UKVZ%YBeN_~4*C`&(1T?^z6M}I(aV@t<)?~{M1(ks;i^lg$qoEXz&VWJ?`pPb$Ef2fSY^&2|cY4aB z7Bh+7UZDs)fnLO;)Q)Zo^ywjqPx^}K zV~xX>z&M<2twl3iKj##cIA`gzU@tVPu3#8y@R(}bc3}0uVL-PzFpM1st`b+_SjZTL zkSh#BhLXcDWZUt|j??_%vY@e4@jA=W?8&?jZQCcw22kS2Q6LGhW3#jWu=&-kun|#q zx@pJsK+dY>lM#cSbM4lBdA*u1phwVG1qK#+PLCkqM<_+~%EuC|uDC>Shmc8_D=4bL zWM75RO2n7kD*dN4weZ%=xJ)N65Ao$(TO0xsHIa}g!@cZ>z@qZnR?M4fr1^olQ+O-Q z10fS?0caUyD@|HzLCZ#j&90hrUWk~|2ENAo{mh+CzP848hjGtWFuEU(oM23y_xWjiOA6N? zJx9>gSSM(jj~Kg+rNZPJz-x@TE#Eo;06>>mi^>BWsC&W~ zL?Ebz(09Op6t9uP`I+fOB?#>*R8sx=&_l~aJ&*xAfvyvrhiq43TsE?GgtAlG zQ?<@z8k1efILGo5d>`^1woN-wlT#!%m>W)^9@8ZBQaWbm!-+7&H*pIezE8S?xAd(t zK8DG7MwukQea<#8X8!})^suFtesfv;Q|;6&3?3O+c)pgE>w5klGext6W4gNluO5aq zAd6-b7EQIea*HRX*_S=XTQqnb0A0zb$$Ud2mq$pavFx3E8TV)Y)b~gR{?*ZpBKHlJ z--Vf2bky{*XpO>l9{TAYaB#tmh9QjI2{S@su*gTf9ljgKF3WyTX71x|d_7F?{ zBufJwI3GMwm`T&RGXO^$H1?FBh~ujGC~3= zE;D0vMLp(0gTZzPo&5@akrb*j4jF&r&MIS*J=A^Vwr*3_L1&q;4w=DcmWj?%qY!tj z_T+qK4y(igX<^z*P=l7wy#38DMw0;Md}i`Ah>E{8zOa1eHmtM0EyneI(2T}q7wd=v zvNv>$PLqXhI!P%>wVJJ#f($zb2*eY>C)NZ377rL;6B@HtK~FJ*39W&{NGLaCfMXp>=Jit97Nh4LLzAAD{*oEO-!Uq{ zn}yk0`7*po#!7h#Sy!-m#26HaI=NLu=*eGH$$zctCJd5&quegtENEJ3wyDcl2Nb9b z3Kmsq9TMpv)*GN6lHc$N^Y+1!$dK>gg+5;h9M%JWY!OR2i8ENz3A*4r5FD3Ja2#AR z_io)EITmm3I&h0n3M!O>0#pu^i*&J+B7jBSnL`*w@S*1iF-zTc%ZmWomJ9=U6TU;l zg4&V-S9|5N0)TA$cu8Q5iKdwVT96i9`IzrtI^&d|o9LO8{TBV6jImR{AIPn3Ag{oR z6ih%l&t-Pr3>k>UaLRN$Wb0Vm`~wcyFkBgUSY%QLSYDBh zOKzS5{e7$ud7xr#iDq3Ga$_Y-nVl*i`6;T?yl|D_ufbKuv=;Gu%+jd8J8*%?0)!ZO zX24|c52M^#9)kEh3gYwWn8I-YGn6rqxx9SA3dJr8rUq6?h5_Bc_$h@n-cUZAJvgSiKR{j2A&O310Boa|U`;EB)DZ9~4du4z zG45ITXR@qt89&6YcT6zajl(wn)tk>$J#^TZ!K=CRp{VruUa3&xe=n;rUM?=!N(@~y z?a@m;uDPVgvQ5Sm`Azjz7Gf6zwI{K{iXqnFp%!3z!~#jUj>0lwBVIVrF4TYwH6V4V zx+jD+&H$Jg2z2@b9$+o7(Fk>TT9Q3}6!3?sg7AVCX947jC3URKj%vz*Pi1!U1tt3{ zchzs7!~gt~g;jGe|EPwaT4lU+SM&SEyVrgxzsj}B?#lPOGY(_>F03WJW^58VECPJ` zJ}agygdm1#g+WI5eKd|iB#A($5nM(wJx+k4eH7sqcj-ZBvH-cLoi?=?QWv9R3grP( z7aPN#RBeG^tXK@FmLFFWsvt^1MVLGQT3gL6+|v>?Ez_IoPk8C@8_U9QA}u{Qvg+n- zys~T*slj|xCr-<}vHh)_LNuQ0Zg|uZ#8tGo5QI&?x?e8}{{guLTaYid!}K3gE_XPG zyOGTmD{TRyMMQX*Vfe~eKpKFxQR zVu$M_6s8;5$pDdV{v98Dh%{HRfU`p1nEGN($rLVmaItkA zx6mdMI%Sx^fer+c8r`&(80_ZG?mT!ARZ7v(9%U!&xI}YK^wAD)7b`(dID49_QFp*) zaW|NAPZ3V9$az9naw$%^>F2bjpNpoSis>gIc|vjm^Mo9`RhKyr;jr;1X%)zH*v*+} z&OMrN6ok>F6lR%i9ePUo0sbj+3bw$@dCc-pJq1>5-Y;EwB?A=6#b6mR$XBF<|t~l<9s97&Nw}U{lK2w|n{bt3fv4lMv3z))qNb6J3hsuyDFmJ}9Y>c%j2Ljvd_7|k2$?F@J$5Nd&0 z)#(9n0m#qs&b|p{mIbtgu)$)rS<#9DS_~m)VL&VBdUitj!OcSJi&X}wdaO9Gv_Di3 zO9*|)(;OAEEI3pI>_V53ilLPRwbC(KAuT%S5twK#UmzH6@TwHN>XhwHFZc(BAt^Z2 z*Z>C^x>3>WQbbmG^{mD1pS3crWV54zplVk3~8e*zVj&|+Q#Y&O!D4+B3h|_pm zmNlQ1Su5R9S$d(N86N4jq4DKZ=$GdUKC{QLN# zll38sWDhALlyYdADE4%SbwtWsvYdUIxEB5jXDx@nnts2DzdFE16MsFnlrGSvoI7u- z=^+<$ga3+$E;b}%E-&_NJJ{mgeo*pCQRB8V=VkuJS52GW+VnarO8lqV2QHWs7VLGNz9x!IOC7p`hOaVctW|hQDwNbd@ zB)3eL^1*1!Wd?rp-2t2NnQ>_2cZ6(5?vOf82-!@XDPwB@u#GvECC2(|j=?rJWY1cs z!0<511V2xhOk#0DB>f><)|@f`qK=y!jds%O-JcCky*}*aCzoI*r1GYYiS zDbP~nPTLwNG{)WxS`jv}O_5bk_~xnHo-7+VqVl<&wr{HTEL4}ZRsH!L9+Mw=wA(0& zMHhDet_od1A1dG*+#_`9Z&(W3J5A@2f^z86ltfr9q#16fL{w5@9N?Vp z3(>q5NG?TER6ul?z<3)sbLVD-Uj^?HJ{vTw@$Ml$TY4!o8vZ3elOHd z?;q^}O%cPWAK|^_>?xK?5KT)&)`u2CZUB+hD(2qz7n= zOny)gMR6_)X$2UYgjFrQG-<}%O$i%`kx5)p2#*?4k;u1EYO*X8OLfz&+<9wL-n?g; z7jx(0!1dQQ7xNf*;;_DI(KGKo- z3r`py@R{ckFS2VaUL21d6FdGJ>=--%L@V>n{A)s>I+4;h-0<^KU1V*bf=<~t{b3xXj?GRlB zQSvvCEhAP%!KxCARsB*ACLz9pE%P69%6wYB2tcCblbP{qJ`{eQiX-CH{9|m?@Aj#xEiE6k67FXu7-=iRYa{txO8&VO4FhV{&PP!!9dlFSSQi+@Q5ix z@fcOogoD#w+q8aV^u|LLyF37AkA>WS#Q&RI~DVi7(4pr86k019C zAd+#d#-Yzz$IUkm%^x?O-_yfK^IAE6Z3wR_a zg(khZJLrU5iGPv>A|nDgonHj-37E1y1Vou<3Df>buKx~-2x)&$fB)rC=sr4)X(UUq zc!=K~M#rD|Ir`0==y$gmjj@UPx?t*5zQ7v8t{!6-h9Gp-5WZe+m3{%6QO_tN3jm@P zpo~31{ZO505(0o~bQc5sM5`G(H<2`KduWKl{UPA6tOCiBL#kRYoO8(~=U#GluE1~U z9yhddZ1>p8p<=#Z=N*&(gfT_gcr)KA?KAh_<@Ok1KOT8ID#Z3C4KS7?EA{Q>Q-c`o{f1-OD#z27l9SF*&)oTAet1R5W%(=5==8a zmFa^jh#*jedW0rS9Ge8mS0uNQHVsm)DfWjnjgly@8~fD~*sm4^yp?aa!Hqnge)Uza z#G|uH&cS+~@A~>p#^=VDl_dpyW0mo8C=#2TADea6un||^S9|?~=P&u;+Peq6J@wwT zeBK@W-xu%S_{uF!-4`yteyCC%T+}nGI1c%5f!$~Zt@GLUSSk;8L+on-M2j7pdDyO? z1;oA$m=SEJ6&Ik2XpzK+m@>C9z(qSXDODY*&`tP zi~JT|k@t2eKQkn5WLBW~)mK>IxEnbjOF?hiUzA|8OnaGj znOlA+8#wJV%TcI;bV!ub@t7^-txm^9?bt5OSR7p(G)9XC^*k~}p^z3qhbdbDk`ad~ z7yFWO=weP>lJUE5mOht0y!rM_X(n=XgS1Mzal?-?*JZ9=bPnJ8&}ETJ?=+q}Z4#e& z=k<|mA2Jq5Z%J=t8Z$}hoy`&4HWrX^u zphq0IEBtjH+{sh-&pJSY5oPWz?zJy;m zd5UqD@$*p^e|mRO-qvg8{?Pf0uy4-Y^W`jm%$RK~7u z{Kdg9a$8kF+yCA35;746$;&!Dh|1NWj2*jJI;Yfe3QroR`~Ui1Gq@8N72H>5oI zam=X-F`p!{Hxmg?v=}OIUi!fRb7|Dv?h%GYCS$g&de5F}e560^*|P_7C)0jQSM#zqBV4qO{(z`&&QhZtXVq zV@Dv9c!6}#M)t%Ge+sB1@i&DnYzRGQ|0aHp!OHzXYL;zxS~Y)(0XaAbdD0QHhFmQ_ zYCcnM<;Ei|GjqZ@Ag1*nx?Aak>90 z6r~=))@&1s!@igxfgyz8ClMd=a3dD;semj^Uf|=voB#W1;3M^zMtK#HnB?n0((x{z$Qo=vX^47)bsLF(7$hH z+wprtbl$C$XKzp+VsoVwTcO;G`rPb3WoPzt<+|))rsYlpS^{?y}`y#dhW4S?%ut$`S(Eh{O4$%4$ zoZE1&SBkO=r8|*B@c{EG_hi3?uCR&n7-pB!*(T+I>}$$fcup3dCgnM^Y_HCKMb|OD z2%dX@o{|27IV&gMrNOv4rJRvgCRtF zwArj|%l;AcYOx(=cN1-u8{iMz$+{$P8r)^MGe@2YM`X(mS)XT6uS9t!?!j}p4^rl; zY!8A*U$KknBmcYkfjwEKK9k)|&(M3+K*O9&3nXmu5XuL@~`wi?C%TI2d)hKD)31#6r2^j zJh&OTjGoYSq1VGR!cRv+k-PHZd28}^ zO^q>uCnl632^jrM; zR7-rd__s5$GO=FFn4hwt&}#H2p)SFTrpw4V5q}Qk&dJz{LMx0z@G;9AvE~q~Oizrq z$}%wR=~h|6ZywCE$|~-;#wy$Jn%905ci!S?pcBB7qB1T`9e2M7qB6bz-y&O+1!MWAyYaFdz zioEva82=i4vjX2u!uiA&>bw4aii^Zc83`LIa5_8mrW3mz+{hvF zf=7P*4nPn*48y|Zfj3duqAr_AHPUnXD zdQr!DxK(ek&W+Z2gmoTiokv;cChI)fI*+l=r`yg*6Mk^aF{2Hs37gyXR{E_lEr1^yi_An}LwgB+*lS)J z!xqDdnp}Ol=8jKHDIZIKTv2hM;=anNI8kwZ&#E|3ah_sT?5H>@t%?m5`-@gZMa34i zDjrmnUt1L~DxOtlg=;>m^$@Q5o{#`swO)btgQ$j9_g4d`2GOYXtsm7uq`w-DPkfg7 wew=0fS0Z#J%!`g)$-^U&Yx{4=M>X&4{%RD}{D%H&0jklmT(w<`R73Rt58SN|`~Uy| literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationBoldItalicWebfont.woff b/www/assets/fonts/sansation/SansationBoldItalicWebfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..980def9a2248556862a5db354266be2a6b10a491 GIT binary patch literal 12904 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 literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationBoldWebfont.svg b/www/assets/fonts/sansation/SansationBoldWebfont.svg new file mode 100755 index 0000000..9f74046 --- /dev/null +++ b/www/assets/fonts/sansation/SansationBoldWebfont.svg @@ -0,0 +1,145 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationBoldWebfont.ttf b/www/assets/fonts/sansation/SansationBoldWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d8463bcf4799620546ea9be3de4d61ca57e077de GIT binary patch literal 18188 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 PaWrEi3eDL@yq5hx9M!CC literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationItalicWebfont.svg b/www/assets/fonts/sansation/SansationItalicWebfont.svg new file mode 100755 index 0000000..34583c9 --- /dev/null +++ b/www/assets/fonts/sansation/SansationItalicWebfont.svg @@ -0,0 +1,145 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationItalicWebfont.ttf b/www/assets/fonts/sansation/SansationItalicWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..64a05775b0cdec85735b8f6ef02c12b0ffd76de3 GIT binary patch literal 21228 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 literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationItalicWebfont.woff b/www/assets/fonts/sansation/SansationItalicWebfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..6e14ff33973e5b37b423dc90708cff6d88865f08 GIT binary patch literal 13004 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 Irrh{{03vXT`Tzg` literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationLightItalicWebfont.eot b/www/assets/fonts/sansation/SansationLightItalicWebfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..3dfb0f6e717942a8b402295527fe02381558a960 GIT binary patch literal 21640 zcmc(H37izw)$hHvbanT1_jFhHbk71a-P5ejFay)TFbFszi+}>6AT)$Uhh>mW5G5*z z1Ql_M8!kx-p%br+j>F!7+QTIO1{kK5-?0 z7WJIOfxfvFThL7iha&%-S2L9{^-dLR;brz-ewi(ibo(px!|(o`dRjcrE@$y}rvAk` zgQv7HJhPKA2oso6s_wupE}jNH5HDCS(PC^rTGWeP=mW;j`r&&DbFod3!h6{+_FJ}_ zwZ^^iNW3K8J6;*@7q5*kh(DO9Y-hO~z8}Z;?h)Vn9lpon!FX}J*YV%W{WG^Ow>Q_8 z`>))d+(Yfl+ZVT=)4s5MUi+N(GukWPI`r0}I8ot0{NpZ%#P~j^Db+o#>^tC2vZA^) zx5r!H^9KrpAw3)^ipGjdO3QlnF0Y6uDwBQs_Uk`j;0aaLgKBCA52;HH9X7mvM8n7v zM~xnHQsc>EPl41|&EL`*-^z_^&(2y-# z@{{KLmlx*`dhRbfN3=Hl_|lCRUm^~-^t}AT$JSPdvuQSw&1Q4hkJx;+kTpRKY{2xc zgBqC07GT;pLq)8|xh0UawQLO=%b3Bc4HlkaoG^X1G5Nwd21}k)Y`CgskDepWZJZN7 zXz*}N@gRd&$KNn~Rf7zvddiI1=(xUTbJo^Jd566O$7bEsxKRH=SeOg1+acC*#ra?eU4* zCoD>Ck8e+k$0ZFmW46(VZ(@A(Sfg<sc${Nr#LqQK7WWc8#T|>P4V(pCuo*<6 z%Nd83D8vk{gS6JEqt6F8z zGCjPC4IYvTB|?1@p+ud+I^%L%XQRr#WpSkq&ypB4B)%G7X55)U<9fy4AfV|eMFG5b2!v7#!kVz6L~ z!qjk;AqQJD*%hvmOhv1yF&axbb*(<7$>Ef&7d01E9Be+=+|1W1eZGB@=peDD<$p>y zJAJET8BU#1Q?1O;yfoCh{McPF=25EX*`|wybW>6q8gTP6o|03z`O^*S*8dA1`JcSS zI-NeacUA6N?L^$Wj8(8HEQ8)u8AYi~0iMyycxi#Z$_({NrA+2IY=&cXb*-u*P8OEq zq>7Use;qmyuQd}OvRR;pbVF+xJS1G72q*AK$>O6W2H%N^;e7t^eEwVOY`)u?G2faz-@1Zd zLLZzbIjMnYyn!(!*y}7)K_e(nW&A{?K+5c05sbIh8u64VyAHRyi!1yXlDptAH!5q5 zibH0(e%L4vntl*1pdU7q4&x4V+)RwibFjdu2)6ht{9s^tu%)m(5Ux^Ndee?B#OXo? zmr3@Mu0Tj{$lyEJG1FIAQ^Q+)g}vi7_#=LsD{TB4Q^Y+NSzp+|R==1g#K7aTyYiIuj{qFm;Y1AwC^I{%}wmqTLpwVi5 zZhhH%-xDx>YOX!^m3o1?6Z4>eg&`G5nsGuZSjsGS9nQFjt~_Pxpk`&X)CFo*;xOP9 zhXEG|+o#s-D`s4hr+8RTpofWg*p;fQAD*n_$F<{XY~#_xtB3L^*M|Re5uK0)ez*NlvT37u}ldh!tCv~yKWXJ zhg%C1CDiX|95P&}95#dDy1GnZ!dunSSQzqD89F37SqqzT%p^AAH36f%O*NywBLSnh zZO=)seS0kliE0FE486t(2FT z7low6Dj+G3ki!v;RS0RxOAIp$6OaR`!6*nBo(99E8*Z9o!|VIi>xnuc3bHhiLoQNU zQX^{9r#=y{sr&Sm)al%MY?uD~2d!lzNAPLvF8 zWIN$~jLKYb(S!5o_qPH%?8MU~K7AbpQt>HandcubdPtcU1 zx0LW<(qBCdj^PcqNM0F2=Lxo`9wl7W;-)Q~FQD^si=?^>903EnNGU^C3mx64^T}hI z#_~qpYNLI7noqVKPFoN2$wZ^voScjOo;?N~5vRVla$$&iNP(|Q3N+mGzK@zeIx5T! zjhnYi6Qq&&Z9tD#qS;j>=!>b$? zVrmAcgTY!e95&=*+J6l z*~_KNq>G4l>_Q?So};oEj+ddPG9SF zodh}n#{q`NP(!BXZh(?W)?@x8Dz*CIDd=&Y(BiuM-zSf?=DqoP49)MU-GuFt+i{Q4mGl`Qw0a!R6KcVK$n?Pj^aV{9CL}2{ zs0T42+d7sJ%M`;OG+b@?hM~2oXtbz)c!7Jy?Cn@7tb{Mv;`V9eRus^Vz7e2rWN^0I zSU@s0H)btw!R!s>?Stv_3-e%VF6?Fa5sF8!aqtki9+FN|JEkS!dIfa3VQuF#($j03 z*WOle*SO|!{H(P6erK^XB730EaO*)1AcExO6Yy>&Xi)@kC=+pbXUmHp91Cg@FE|z? zjzw$Dm_69h?VtQg$fp;U(gREBS70dvZQv&Q%3C~Me^;NOJ0s{LYcMqObh>y8Q45nA z65^Jq3`O?5!hd<{80);ZU)T>h%f`1qc{#VHr?VdmUM}Oq>!df**{`D38fy&oU1C$w z_o?b$<^yQehh++=_b~HDxYpFD!?9Ykm_$qqqXQ}#Qk}<`^F-TplEk~Fu9n^`w~FrG z_j}2gUYN~gKYM8be~jNe^;9c;=+U84KdG9pKHWNEeRz^J#)?bBtv>upzHHnC%yVEm z$^p>N1s_DHC}B+ClH>Ur)IB|4qPa%T2Zx~Q_|N1AJ9p{wvwG)zbyPZil<<{d7|Txe zSI|l^c<8W60UC{t(SYow*p=6sE)Q;+_rOcxOqgDYrfzt6U-A#)vP+A0IR$77=K%X* zgSqdix=Fm9w@<43;IqMJXTQmQ^W-@GD}Lv=5!M{5dChQsDPKE$q;P5BosPj}WEWoHe zg6gD4d4CpmC8>&j9`SD#ce3{V&!H;ho7Fhue% zV2nskbGvgc{cM9FL7g<@MR#QF(B*ZWV9l=dZHn z(IX)vcVS+fB5ZIGyQK$z>^NH^ix7d4P_+n*gaS?DD`XlpjStq!S4e)4&ksK+0Omz& zjldyzM5Z56xa1FzRe=uXkhdQ3d0sc=LvgUpC~QL*Zunq3DLMnA5Xg(E=rBySja`B? zCfS=rw?OS4nkjiZuB3RQJB-y+SHPv|_GWzB^+D$ zWNH%f;LW2h@DWle8{?2ttuBpm7+!bEbV1jt;Cex=0ry^x9yWb8f%ZQ8>DM-alpq-$ zVy)D6oZl-m!vg~ZpV!kpH^~W1%22&Be8F8C`HBlK$lfrTID~M|sL&0?wiWTBh~`oiY^6kBsPo~& zh9;8reP}%3e#htKy6ww~h5bEb8&Rl{HB=|;`Ee0qRqM`+g9RzThH)qvVBng_kq zui82{%^MTF|2}aLFG-d^Mmi)7UwAEKw}_2q8J+A6Oup?23;T(Qhv5}qOtAaR^y}y* zd^9bTQ41pkW=M8dg-{VpA-jr#kR}a+78<(lI_cvV9?>6pEW7lQs8s#fi~5T%WUrUr zlJ<^DkILS$B5l>8}15ba%55OFMLjpJ>xPL{mj4HDD?bi12qQ91;}vfWo0J z3VT9b6b_M_l&5N_o1Q^IM{Y?|qPJy7T37LFq%*GwTZPtob%)h=-pXtsE#1EG41Ndt z$c1eD4Sg&CUT%jYT|FcXrn-e>2shhT`<+M)a-eke61XMg;CSJEh;hY{+%CHUPu#}T z5*k=8KcII$u~v@jo$VLO({*)6I{QpIn;`|=-9Hao=xAJzJ;Q{8?b$uV;)pmrcIf|Z+WbI71tV3$QP7&L6H1t zGlUM6ILv*ju(oiMB4BcCN(A82mAX#auirY;FxHP1S+S_))$kCnVj9Qvv+3;yr4>6_6goVRJ5 zkyICsTV=1%WFFv<&}2>=4`MsRxUx&j%Odu5A+C^J#BbU<;%u_Q2plgSA04 z3>hv9le={Q0tcG?&DIz4C`|gJ`!V6ge0LEZ?qk2UpVQ*fyuLm$XVOb54bm^Bx)10# zf>u1xbOHSibWO4iL~Qbvcw2yi)`GS@`)>c}D>|zh-WtZgJk=q7 z5-_x&;f57<1r4=L28Je3CjKy7W7X{yh!eyS+%h#E=A(x)6e*$~Y;l+;xe!afSw3fh z_0EE?J71n<{p<)v_O4n6;P=&UtCY9CP1s`;bIybOq^)yZU0hVe03BV10RkpdFhCUp z1jH!h)9Gz~fY57hjA37g4X?nFkTC?{D=rMdl%e2w3zuETC_1~#9x}M=;6&%p-!`ZpTSe(Sx?GJPZMS9a?A%wb5_Ko+Lkx2&<0gxW$l122QLvq(oqcFiBV|nA3W)t>gn>3nc2#(v*@Lv!k;QTpQ(|Nz*q+ zt>Wx1LZYmKrI%y}@h_HKwq~Anx^&sobfBFJW*$7&gY*xP0L>g!%(tKl(>8k7rpIyNW^62r$UGEE57v$xAFj zhJuh~a>)SK5`@Q%M6D4%WX3?qb=d{g{Dh`i`m84Fyt3?PAphsm^vj}Fi9>$>vP-j# zVe1{GJYCK=_2!2bU$%Olbs88kk3UFqV%urL3?j(HJAOnYubIMb45UcR*$7w=u?-_w zU`D${x+mQuK_g6b58HDs2&@GdGs#hyPzOpMKzYPt@Of0sI-3c}gkZu{K8Y7JS`+#F zORf6@+#KQl(yAs-d|f@%+P5^jM7nL#NxZm!Vh=F`{f0dcfEP)&oMkFWx?$onL1IG@ z{GT#!We}cm8Rgvi)Ed4+W=YXuqr}!aF9=26(%L+b4UU*UG>Rqr4e^AE*zvsXbn07Uu=R;YW zt;f6$k5tVucVt|VG$AuexqF6bgv1NXeBSJ}J^9rb(F=kv3))N<*)}p_rVDlpkgLnK zU*yx6oTiaX(}?hxR9M84{FaJyW72EQFG>}2vwLrUGCLeyd{G^8be}o~7NPX$d!P;F zA=F#Z*8)^b*?o1}IJ0nl>=4052TjE*FnCx;@jvO|=Slmlc^mk8Y2B9WN&Mc6tZTB@ zNzX~oWw%O~W`|{mVN3N;puai|&v3J|SVkl5=t>C|psIlz9u%+~5`_v7m!1xrW4>+c z%}jFbx!4N#%48%Q5(aIv0`N%7Mm|vb$+~P!Q*)ELqjR4;rgOgK<6qD?k6_;9&<78z zcJvv^u#@b7GVs=ll%J_NIR`mpxNz@ey$y#ZG%cvC>D;Ny2la37m8a>`l@HVDZ_CNY z$vuNy;yt*xMpX-#rXr1D&kw|0G#|f<=j8(})qR8tM7Uc7+=|-m9?KL};WLsi=WBKA zBWn-x*FbXg^pSh)SPFEN{(|QUpI9ckN)BBi0CpbKMxpG~99;UmPrUEtk4BJmxTJtjjFIl&$kC={_7vd}l*8J|>RxN1lRXc!+*OPR(8 zs8ZmOB(sza!07OKMCV~X!TLz&YposD*0gJW`kRlb4{W6LxJ)<);fIjwq|8T3l{>6e zA6P-@ap{e0Kk4r50`&DKxnIi!W6G=)xnR=y(1qfFsNm#)HK2wYb@_cgP5C?ag>s*y z3EJiJ$FiU4N>z`{U13+|E}V)bzxd?^XQ?|rA-{bHWJv;6>VprpiDf)Qd8A`PfYc-c z(4vHa!;LC9WENs#7uty!HPjtAKHc#XTM>%1nHffy9cg13B^;rc(b)@a=z=5AB6&hl zSRy3CP|pJID+CQ$pgGg^R!PK=nG>i1NlA&J!njKqv|}3`@|W78Dio~TDh+S8s}6*lMx0}4z*t&6QlU=M1)c>smI1>6xtP6? zi^^jy!X+EXDO$-Rfk@)klNiOpyVvt*YrEBVE|puh5^b&pgc z@t4b!)_+eNX?;RmTsr;cy+z?0poeB#Kb3!~K8sqVmB`tW7$LGE%Oc>mNUd4q@aBn* z`S$b|VKkveaD>zrf5-<01!*fYXiJ{}2l+!d@(0DS6S#N@Jpv3X^Z_*K@G?{~Ii)um zVR4f7o9jnCe;U8w@0GP z2J1KMrn~)};)CM2m><9>dV`;bS~s#P+5aXMwpBj^V2_HF(FKx-JoLJn}B|OtHOT`~aSD z{%is6+9HQZb?UUuVB3R+q&j7f&jA|cJkVGGwMiJbHw1){nL+YsNN)n!kU=hlBk+}k ztQSy-)qKs@TznE?EJ)$|gCs{(P6Py``)fL}t63sf)7Nfbnpq*CT4j~>|_qZtUG52?wN zcFXmn_BHQoe28yA5AEspZ0B&yGS~I!DfuKe<>~T-s)0#m9+_DZ}0ZtHf4lddJcR983FM ziE-J1xloanTy{fjwjSYuuRJx@Hs1Gg>uWz>F~F7S$gwLRKg)UP-agguU1^=muQ_S; zAA6T7hJGhx=>Gqh zFU<_#hDM@m4kJ5I8Z^ofNR|YtP%{tODg;OAZMYpW2U2UHUR;(SNe5esaUj?taZFvg z!6*$G6#@lP8_b|^{-P8fSAb6$+2eSO;6%{O>=Sl0ean{V*^;;UCKRZ6V`e8fxDL;2u;q{bk2du~YoJ1ir6i}YM=zn{~A z;GYgVodb=-SWzQnH?JGXL8MyTA5e=nasRDaZ0l&YEn}F7(}P$7E3mbrl(BUlaED{b zgo0F3dz4tQ)t)H}Cz;g7cNE_%Gpml(dmz9w->>(E=e|}vN}ppfQ!Vf8(?oSJQ%FZ1 zGlhof!c5($fN?NWJBCKO=X){JN$2rH{IbY-)(O^@jXLkkSEfTii*Afgj{M-s|}7A^7cicEkz@SwQi*@Eie}2JB9XB#F%w zcqPJz&wGwfb~M>M2n3CiwibV&1oo$pwiz7vus?-x8~uePB(u)`7^y7^!FdnGgeMk* z)CzBQbo6*fI#%DESNrO(NFQ=&5pEtFvt>KKaG7;$7HN9hrpc}7&vCdbIgNz7ddmdv>ixftyV630VMDPL zVOTfrs=*h;S_FZ+R=Vw_2+Ci#Sns(<@rQo1%U*||?%Tp^wNch-zpcZ%gChMWFC+)> zYC0|{y7IY-KGs1ouF-IOnw0&>NgzWf>fKPZFZ>Cr0?9+4$WrI2>?)+{E)f{JZ1qi$ z9VqGGn8H7I#n3@5SvhRz#6L6^@*%qQ&J`Yh(UtnvmwB1|+xyem=IZ3;^naZo`heW0 zGDPUy`&cGOXoD|hY80Gp?>I4oe*THScXF|!WQIf=m`Hloz9+k~U zBVFr)dZhMf#ek!Ug+~e*lc`z-a9y{Qm|75lm8ka&K*|ZN#kv(TMgp$|7$NZ5BK-T=0jW%?3* zD^gSd3>z;3?~Kn6{|qD^SZnkb%LB+CK=5M*gTfy`K9&l<0CZ3>rxB?W9z^dtBTC?I z88poaj;H3(TBI?(gp8mf6;=&(@Cf=c*mmm}EMN+dH$YpVSQ4Nw5=wn3nk_~IXzCSY zR{##_EoF&he<)hgF!d=HuyTj?E-h%|BmGlRI}d^U1hNsKp)*F`*nH#YD1U+vnFqYI zi2sY_X2naJOXJI|+pWLx3#}Ke!;+g1dHZea#T7F?<!cil(JV#TJomw3}^4k%(-4g+;}fFZd&@ z-aZyw3=rqsr7#ZB5VR|z+)^lqe3a`%w`Hh!!<4C~I*|M{!Wpj}*`7p`M+9unbfWOq z4r=W=G~$?fg%!49y@Jrs$Kl^JuMpk;2lzKi?NiwssNk~mIcc4qmY1Z{op%!7StGFG zKftHg85{x;4btM2T6--;nEdQkl(o`26*$h!WCY|PtI0!DP^LNsxb=0m=t@*TA4~QN z>y7#=r;Xm#yleD?7k)os^n&IEqfevdADeiMVOXzNJEu&sc3Q6(2Cv~*p^P!Y7jo83 zqE<|-Oq5dO{7{xbtO`0l82y0?5%?$^sCzTP(V9+Rw7|pp{`?r-6kU>6g$gPno;^l? zk1>j+3-H|iRNrH`b&*VvhhvBs80MlZ!JZ;ue5B{-UJ(Pfw$g|ePMN|NIwReZwzgoP z!WN9;kILhub77B$Fq%>TDqDh@5A~*kje0Fv9(cc~XE41CnnEV6%x%C9rKEMSC?I0M zl$HJaB`Zhi6PC?dxiY=-jQjzAK0SKi02I9q7$}~H$~XC0j6232XPF|>jggcnA4fQC zhKs~{#%RhEYwh4;6&*4o$ZaDfEEWUVl>=gWJ=byXu`wzTNvVid1x2v_AcFNkYD<`Q z1XV`qLI#(+=T!#Z5lhoV436r_FyWQ9W{ea;q5=)3B4h8xoC*+f1kh3rAzrev%I<}V zC@Cch6au*HvvdK!x8J&cTUOX$?HoQ0VC|1@9*H8d3D+>AdXWu>^2WlJ@NkI=&#{ayfl|d7z`UsDg2#L;-}>o)8WB6I_nA^D zue`c=tM!gGyRmniKcQRalt#)H4y?ZV_J&b6-W9$2SMwKNvi^?pc~f{~J)d_g|3%Y= zE!LAiU6=k<)75t?RiSfMoz*K&b9gOsbd$m7DBgk4#b;WQ10))YZ;NP!g%m{mOljtD z6pL>al}?f?f;^BZ7gFXqW=jAJ9@#F3txdh2&z>wu|vH z5YNJ(&0oP`Q!v;C#(HT@uPE5BNA3vOBawy$m4sWB46oJs6_wT{I-hGjwvi8)#$A=Y zim%tLg_V3Kwx>0p#xF@fkd_|Lo+sU!9fw0&yNk@x9jJ?00-n;Es{}jM&J!QA>M9c> zWr@`et?@FK4syhavz4{9OqZEuadfP_!H9*-qTW#MI<27<4nLJJcP(=e0e~n&wS_Pl zzvBk!L+R}sZq8O@Bj0Y8R!i4z-jv;z-FVKKeCMupk@Ih}{&4a{KK{0=BUkOR7D|7S zUdX1h$^1I5>`i=U>YS0*AFQ1t&qA4zo0=J?_WUd)atdDfK}AC zhU}w2ep#5PWkK3M9z2YfAlTggW5;#GZ7PUVQ5mk7@m@$OE)#=dlhlA4~SfA`GlDmfxDmcXM;*nbtIG{!dTki}|usC&Nei+3@q; zy`!{f=aq9W@%%Czn03bjImaKcW?GB*-PUbX>Yv>r6>n~?%YHVfWd39;L2|wydB1wd zxeSy@*a%uTdTidWpgZqZpHlZ9{H67_a^EM&{L%0K=k)#m`dekBSmzkaudK+gb99oU z_Uc9?N5$$!XPmB@|KK<3o87;m^|h}aPg}eephr%%do?D72ZzwlUgcanHlxHkRYJz| zYgH9Dt?>1u9>613_)>I5i+vm)o$4O2eB1fZn$^ELpN--V^I)A*H(ku8vrLRIY-q-= zy8PClKStR)r##cptvseUTbfKV2#?<5i@T6*sPUa3vB%Dk0pqXYUK2en?lSSXC7BM8a+}91^ACJ$_b*i$VM>5X24r z(3y>1)rFOng+aXbhkPCTk2iW04fzK@PUp{&PBkM~rE1E+8jZpbR;WTQIBFhf-4G9_ z5dG3YvVil-0M7*uZa8}b_g%Sa8$W0Hl~Y$(yT)I&LY+2oV)oZk8lStfFG@qQ3#5wd z+w>tia@r`Rh`nUS@cNPjWnbvyT*LLY?S*p}6ps3mRUpNIKfE)F-kl}(s3^G@tB{^W z9?6Z5{fFOZW2~v{6!*oreo%YVeu{IIc2_7(n9C8c@qTpS3w(adbm@Hdw6>a6DK1u{ z&d9Z^g{+28V^3qoOp^S$TjViVJO3$zLiU2L`VBX*(k=Ult8 zE%$-4Kli!v38J8Y`5n*B`qkPTDzu)Fy+%q=ByyOo7(4DM5@EW~$Lv%B0EvrXzj z+^3G|>PD7UpMdFT#|NAZyW1XSb*Wa<`%{Ey`E9Bhs+kGxCc_0}snhQfk;pr6%_isQ`5=OW6=* z87o7-hKu7A8zD92W-Ci`FDchCoxjZb@t1Qel(U(ejS zb_dZ``6c{@0=8dz7aruZ;FGiG6gI)DWM4ZU;Dmetj%VOI_+9=3Y^~AtD4sQ+t>+i9 z_0o3da}HjfQ;}<@-_U(P-*v7uuY~;3U!C)BGuzFB{9&nB+AsaL?30Jf%jE;|dy1m; zQR%00@P>QHr$tJsxxZE_vN;?ot{4(&nhCG93zRodcorb zANczDntZqWz5a#%-2rdlg1}3KjfEE%z7f=e%Yt_X-wb&}6G9h+9u7Sl`fpv*SLpAB zPY6F42}D*zJ}=r-^nA23x-_%@UJ{RDxQvC5WhaYJO1Z*XX1p!?8H{_?~Te$ zmDh?Ha|IiSN`Cs2(3arE)9KH}8N6E#@65v6(G(Bb$iF$q9P0u5ImZ%mk>i|W8M%ac z&ar~JjOEU;io4$99J^pi9(9fnpjx{f*`PQ$G8j?m5FCvaujgBZ+Tl1m9aWI4#OwQ( z{+pNcb-(`a*jMvigu9)CG1&Jx6NvW@zc}!RU-0++uMGU|-MV|x^QD7l!5?nM3kTy} z{fM)R&=Wed6#ZKzMocd=Tr5U?4*M~#T!3FK#(sj+_c$nUK2`}dBi>qzD=TnqBKFR zA0pJO7wZkaSKzq`c)&@lN$(3O=nsAlWGApHR7VcN^J@hs>+nj&p==nul6uHN1Kz%K zA{&Kucw?{zr;(iuE}sIa8IRFTM8q@+70FZZwzks|6;Fd#a0X`jnW*@jiI+8=E#B;w zMs@r=@qV`jY$033CA`V)3bun?1FU8{yN)Yd>+j)djN$CVIE=E@*-{hs^-CiPaf>-$I-rS@L{^o<19h{PlCp3G|*hBZ!yOMP}e&^PJvzDcro-%uwRv4Y_KZp~c7VVTw}8B)p>w zZ5OpQ7)__G#>Zz|4Nk)?z6{mrv^~^z^IrM37hm?YITs7i@Lu9Hd}tI*a~gg$d_(O9 zHv&#i!Z;h)BLQ8Sa3MOPqZz)es~JL5AK%psq8S>})ht9aSl-o)P`?6~< + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationLightItalicWebfont.ttf b/www/assets/fonts/sansation/SansationLightItalicWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..23a61350e10025894bde2227a4c066baed4d039c GIT binary patch literal 21408 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationLightItalicWebfont.woff b/www/assets/fonts/sansation/SansationLightItalicWebfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..5e32f49206bcd27831b6b33792ad2f40d2bb9344 GIT binary patch literal 13060 zcmY*b2b!B_#o1fUk`m5`g;OQ8n*>?f=UE|0XG^CJz9B*?zGEUm!I2lO`o4E+P5F zMSR&rUmyiE03Z}qS=hd~vM*cq3x;C*ySFBGMvh!05D;G`F#5V*PFSMw&fT3#eKE+b#4FvC2}Y9x%j_mbDr?Bag4VthoOdOA1y1Mq+PdXZFSMd~xeveoYjH!j_H> z&Msdmzw(07eqn+gl6lkdm)Tb=8~>Nz@E0dLD>Rbjv1VduXlM!u`VD*zBYkNKfu%|Q z2L|A9gm?t}S7&NyxC3Df2aRfI47k<_phQRq0RV8vfR?XD{;N0Y9xof{9qaAojb2O- z3{=J!Wj8RDHbFNwG&Jso;`hPC#Kp(MBxbGC|G*isoUjMAS%EYP58m!2}8q5pt=B~Zv!e}DTt@IEwqkw z5wz0uBlNU%WpqajgA7&5YF@oppF&Dq;7Xh1b?wc>C@LhB0@5C+x1={BI}pXM%NI2CO~RXEkcOrv0SxA*;OKHk@B#X!MrJ05 zI|qCJcK`0R8mvXP*zu6o>`b%nq8ddX60bx`o_uLTG!Oj zQs3O@?&$K%&B@jI@#^m8;rjj-1r`w=84d{{J|ZS6E;2S+QJS(pWt6U$)pSJKW-27I z$XHb)7qWz&-p0DJqHluQxE}y0JCz9me1v?BGJL31z)ye_KntJ^&;#fL3<0J9OMnN! z3cv=C1E>QG0485$dw}Z~XATGf`~o-vME~m_J>?Ds9TC(`Bov6i!4=Z)YnY803E-EZ zT+*a9%>5&7Cf`NZVs#IUb$elyNR@*hY@jV^Rg2_<6A&l`0~I5ZGdLp)IQaM)ou@L` zWycaL+^xC}%bl^MckP4Cv;1g^)+7R8=I&!9CD-~Wn7G)z{XuyC=+5*LA{K{m`VYHd%&~kOdp^xgj=7h^w*XV8T)r@|uP&j29v{mj_3&TeoE)&MlIK zkAynvEy;z(og@s>%!^4S4h)+PlwZ}U@uVdFa8Nlp16CzKP|~@hi{j40<-5}n46-vf z^naEjVjg<7Ga# zB)}kTo2=HzcQRXUjpYsf<}oRVkBLRRp@JZ*RSIIJ|ZF!++Ns zEXrbwE~v;TxTt}=URldzMqiSrZf)tGthCY?>z_2R)vLd` zyh{3rZn?#{hI%AkbQcx?ztEFE8F5i56YVlt4MNG86|qcVVI4z688w&RJLaN@lq(TS z92!z$(pB3jph*A&OOiK-kFkA8uCp(z4v&p&Dk7)zFr&IwQQb?4+d=5TUlgw0no8rG z(P?S6E3EBYcp!f-3S71?^>^4&E}Yz%lw99mo=-D4V7e=Kz8ihMbARJ#&&cJ^Rm_^M z%}d)ss0m(|rU)5^$rFp}RD^de6R~SS6=r~HG?xdap4qY`X{-Knb#G%h0VnNRUzU%3 zp)RZ$uUhPg{W*ykFdO96n&C#+YBF7Y)K&oFD+ye>s6_~XuxWl!vSVeFv8wIkej|@G zz}z`KXdbnhuQAkeVCvoOCHVH9KPc z@iR_AsOV$e^=;J2uxS?|Y}?o3?jzh2L?$MrFLlUGGR4isi2E^f(E`Uul8?oKf9a!d zAA&;kM)J0vSv{>Pn%u4D`RHBWQOHDomd6-KmXii|jUfa zZOX;SnYZhYFa*q>GTS3<#?Q>L&NLmhZy>MlnU{F3TQ9^Xn{<^TotVvnKK(VCoZX5%HUWQFxD+ zDEL^wX~O5Nz|(7lp&5LnuGtw5_JT8Rmq|p1*W8SSKNj^7+3?i@%4n?=r8Qh|iQu3H z=|C2VBFYm|m7KYLFUp)Uj9HZ!T;nhmRG6y8t577x%H266?zsAYsk=;G^c12Z#uRje z5*qTAmU=$TMM<$4n|zHlDj#>$@7JKGg6sVwxfi$h>krV~Ygn$?{ngbx#a6Nw)Nh0ZzNrfI=w0iwLbL#eU zVp1>DU<~|Dq8+HXBh}jj=fby9d&$+E^U>)cgm)=*_ByIpqSBr#PTropNF_O4c<+3z z?|c~Kb$aa9X0j>}nQ%>IRla#K%;Vl1DrvaBT2G!K zP!H2wjo&OL36`TDY0!j$`*pRUcXiin%K7FN0?e1kKVk+ZZx&RzM04;^X?v>wJz2bZ zT_;l{M7@?p%}AB@*0_U4RRXZ5f?dQyY^eT-SV#&&a5zcnkVwxI!Bnzg8&C+~g$-lj zF>qtonZVxgX>_f zULg9`Y>^*f(**3q&Z!h>X_AMQ!RmZ6glb0M&ftZ1L5+Z*Bo>3qs_1COVuIbLQLk;` zun@7yRQcV0w=G5V^*w#^yW2$3-dV8fDwW;8Bh(T07cFJ7v)R9WLR!i?s-1p)7zOpR zhbNf)$j^i)>R69dL-L7yX-7Z97n5^J6%cn^1n z_Q^r(&g?p+)AWkwjo(2)+}V^w!?Q(Pk?Jn}u}GW*KxFQog!Hg3C_o7|F@PBcPRp$| z9Qq_uz5VQ1uO+X(+9mjqK>aKLXukf25-&Ni7ncMpw5$_FaVvo-~{FSK_)Qa$Y5yxs8mJj#tK=9m5}n)YH?;jsbDn1A33EXJkP_PHMh zGZ`P~szmU1H||pbi02o|aQI8|L3{G%{Tgn2HMJylvoLJMFl=VRVRCq9kPgtw=JDL9 zXVX?Hn5LA~VfffdyxmZxlBi)JCaU+lN9=sZ4)IxoX+Cc+ZV~JZp63W@s)7s_zEnPc zBDgG8V7}WJWE=F-tUmigj|hsbioQ`Qge3)`6o+#-h-b=SK`C%#VBs2DLqaP3loLt^os#FY)rwfN+%N zn$qT<*l~)>Y;rkkw;xn}6U5nJzi#BdJS9fn!Iclz4sq^u#I4U2sxZ-e%AM9FwVs#6 zC9qa*=N z^JBDlc#*A_zMI4k_ugTgP|4`dazOMAYGIs&s`A@G`;hTka=9};(6=g z_q``Wu+w7r?DAN}Z~U>*;%t}w$i#X}|w0Ll1t zTFb27Qr6P?+dqtQnL??#>bEI6)!Gt;>VvSI_i|k->tciCMJKS1IFo`ncC)9l)Ma_U z4tx9rQ8?4(vG*{93SN(3@HlJ)o-n8l6j|P5xG_p?W!b^W@-yi6$0}-uKpm$TrTgTjY^yo6g*={V4*(3PSt@10v zD}L|Id0%hYtdu&fH75(!C2x;hYSG)OE0+GaUCr8iRv)rO)Lxi^y`V0&ALc*|s9ZWd zW7y0Ll;UMdD=Z|VL#TSnHZ6KQv*2p-pylTxPSg0w>2zG@VNN$WkC1lbDQow+0kOYF zLk;czF^V34R0H5$QwRi$gmDmo$aWgSQAI zHOJ~TT;s?SWHDCF(1}%|d78KqyBIt{B!u#(4KuFCY@L^ZN1Gom^3G!=De-^eH%-Fh zcNuMaYl=U1#USnB&z)w_-x(JQ_s^aE>%u|Abf-J8TAm68Wrh`V%U!Wj`Q7U=fHBabArW8PU4Gr-s)l!bVap0E2!y^M_@6rZFq|eWFK90 z$2I-^Eng;Co;IVg=M}eCuhh=(o6Hw|yGZT?{kMZB=DaV>bEivOF5|FHYYvy|$mU+Q zWUKKyVu=44?J9RYudf`>k#*^H={V1+2QZx-!K3l@jwW*q2Dh%b2J-)&ToXV}J$Eb* z5#4jOkjDur0oQ+o^I{q5kngd}W2!y-nBq#PGMW=vZkQ73)FcmsK}U7eSNvQNM^8@$ zcv0;HWogXcGQVWp&){NvwmkZohW7GOIZQhjt&k+SBiJiRF}qSixnKlkx}uh1!6h$L zDM4Zr%regtTtc_oA&Z0&pGvwAQMyAl^ORamu55>_bez_metVaWx$FkdFjMP zu_k*<0_{iKYNUq?Dr6IPM^pv?V_7I9Su(ANLyw7SrOjt@yxY#W+mexon0}ZJMVIp% zrYQ!34ARw3^q+AsDM+u99OsiHFaNG)->L|K*%i;zCMd-z$7`i%V!wJr)5Ok(N5oZT z%7HiM0qW-=@h8v5#uR|_O%n#&nVL^#S(EqCh~{6@RI-s#@U zORJq(A{%EFd-8j(+g%}EBkVE~vJ5v}_2XK5;Z&!Y*7Tm;>pHSReoWPOlv+Nr$`n!{ zrn5ncAB1BgBOrM9_U|Tz3VdNe`gfED(&M@+hFej#eEhai?4joD=?a~uxJN{-8rPN4 z?Nn>fcelg--$!~u^Cq@$P^Nc@Z-#JaeVDBgh+q{TB_wLrq{X^PD%dK>$Xhh9DZr8Q z(wCu}pE6L&#ZvcMhiS4uy4;r~<{0%>6B_l$v_m%l&-|wO!EHHbeM7fVQ3EE+Q^Cr= z_ws_GOad&=X;=FO@o5(p% zKQ{l(<2z0$mD+|e1elxviv)^7T?5_BrQJR1p>+%M*brs%yukvmp%F+pc*&}XDFqpp zg)*lNI(@^NOEB|g53eaC8}piT7ROuRbNiPs_EY*14EjhoBCLk~B#(Xrjg2 zwLrg!gf)a^z?ZweCUt41@vR#| z1!S`IXb8k(wP{;gxrez2wHHJX%nef}t@n)PD1}+V@pO(J>IWwjvKj3W6AI0-c-Vke zT0wYS<}z{F_+r%^r#B2``}MZzI`_gPjOb?m!2sLV7AS~cnLH924|6#Tva~FbYs*ls zp$DS=`?I6g$ElQVIVX|HE)rLD7fuN#g`mNFmj@I~u$ib1F? zVFV3zvh2wUk(iXTW(A7ioEjVY2L77!YVQT8wD@SjNhRg5vh5nY&S0OWeePWjle;}@ zD4D($YLASm+uvDbK8}PdY$rTNWI(AkNjPTtdBJAwmcK{y@(LaY)<~fQXr2ANB|_4T zLFtep|AzNcWNN^KEuzo*#OuMOT}Vdw)+-JK#=;;PHr5-pemtBtm|Qe<`_{7#r*P|FR7=&y&pWJCH9P4W+4U=6J_5ZXU1>MHr_69B_Guc%Qzwgi+FO;kpjd00;tFsqnw;?=T8t|4UuWDuYUlHH{ zgMJ|2gm1#%t=o0rqz8I3f)=7`Rv;zud1wB~I)G&8Xl!Om*9?^811F7!&)(B;Rm6AQlu=k5Cj0rN_02 zB&IuxVCteaV^Fm9#*i#rC{IS@ZBjgF%@^?eJs9ALGFyj|t^_GuCkx=wgkf;CY*j*Jp3N%>Ub~3pTlUDF1Ju=a zcAO@Qc>zM;2Py~z?E+-xs@qMtP-dh2nOKN;lHtVu(P2labSHivVB2SW8ALs=z@uFE z+XGW~6e0!1o2mNtC+>{m#-s9q6F`3E&!bI@wUV2uum$I(e3R$V7K0k-o=)apiyR&7 zF#Ok;ugX(c@An19E|9)MM#0;F@nQq0U z5jPEoPk^L(gsw|4gc~;wpC6U69MKR(p9e}o89#3Q@oNOGMlYhFLX>$&9$%Ym4HoYF z(1%`955^@{!?NAV>2;za?UxXgps3}%36nflZ?X~0)-$x*b+rv?YI;n~kh&I{dAyo< z!RUH`Y|`dC$SV~8JoQ*NhYD&?g)`HXAXIhiS})(#e;L+8)W_NRHiRCBi)d>4{zt%A z%>LEWrM>BDZ_6x;l!d>N5F#WfX&qL%7VW!3MzD!KNGj^2h)=F2(LPbKo?E!?#|-69 zNQJdiAEWIemDjmtt9I5_BXo8>!P#G~p0e!J)KmqF@B^@~-&P~asE+MiEvQz!pSiU* zb#2ChELxMKdjw$%Ps10U1l+(7BP&Qa5 z7c52%4t~K{C+^>M4K6pn4yI=#KT0V}rKIuF*dFp1p>ueC z$mP#e&%yLe#ME-7m;I-&8xxe9nLqO{<4E`u^YxTep86xvRaIxRY>!hNgE$6@xRL(# z+q?2k`A89(Y!V`B7v9OGQKg}5!&P`pwW$O)n8kQb{2Iv+z#>z7D*6eCGVN!Hfh@e8 zZ0?*@h{9ik6PNGXy~~HXx6a%CRCff^IltYaon%RiC{XA2wcnw;@0@Gu4_9E89NlW0 z0jBQ~+rj89->6h1;FH(1XcfwiNY@(ucZL_+?=o@*p7|Oy{UXXC{>2vqW??1>!(M1U z8zS$vwm;6)%m$XzFG0eL-~PZ4y9ZT~LB+@Ro3Fq;6BAfE#mg7^=$XS#kTlR3Cp-G@ zKJDcgte`RHt;7gt5S>#(eMgt@JLyE=a0yMo_ULyS5f4L$CI*}_AQsM+wqPSj(QT4f z3}H`jyA_`C%;I=^x}9ekT=mpO+R?T2i+?g~%!}z9>SyOZH_yL-11tJ`K2g(CNFOl| z>G+GIdhKCBJ}t&m4HS+JgBeB@gy~Pg?`EQT7^U$=0L*}MIDYIMttFD=pJZ{x!lG*9 z#q9askZd9ydk90~*m0rRfBBVmcitjMf%ix}%E1|}`qd@%Z<+6x%9?NBeiJlOwm+o~ zrxwe<&F z#nMPWeJanv7J;}H*umfI3%2?6tTh#bkhx;M5}w4wN;#S+(8{p&TBT^gnfzg#o`msG zJgLvZ_Mt1$L+2|Pm;E0Xtiw4hDuM8oZEL~lSZEPl0i~GU5rit}Q0y1v<*H8yJ|1DhIAcT>}H6Ub-PM zF#H;T@MdtU%E)k8ps>iOq?Y=hzs4GM9lfv%^iS_hK7`SZ{6bMj*hl%i8Kp@2pPh6%=kTr4{_ zlQ@T*ZT9VlSlYsR8%S|!E0mD;9a5xtbg-to@bj?m*-%Z6{-DV_Xh^%3Yd}KNpUl)f zrJ*n!Rg!L_ejA#ZT)huf--|_`Z8Typ;FKo*@7x`S$&zqsY&`*T?x0UIxtd4nZdW2B zUx%A}@cDuwWKd5T0)vx&HV-Cm#LL23qqi0*b&!xHMYI-y@o6F1q^&!hm~f%>*D&g2 zJgE3u%tgr}Xrj<5ASC<$qBf)8x@<|yUDSv|=AcF+f5Xu;z@j?q^fFi!RpHrveX!52Q!6HB4EDis6FVXPM4#tIRO}win z*MNo_n+P_6(-v}!6qUn=&g(y{7D(jHR*Z_fA@JLd%a(orBgGFbUW4yM7z`U(gCn4W;pBIF-gn`(;@>$ld$H?a|>+vww3# zU#29ehtsPn#c*@r)PCoDX_89;31*-FZ`J#owm(jdILx59c_3S9_<^9-=}9<7mhgpR z=HQ}d!jB0zZMsrKX$L28=clQ+DIEq4%@K8&kCKI&pHSD{#63SoO2B`2q5f*1)M`D3 z&hW_y3Sk=!n!#5|3yALRt+(_DuxL~mx-&-5JXY(CKDYk|W;msK)Kg} z2&dK1KLI0N^ndF0I&z^OJ@KCxT~_|SbpQk$LMrP@<8{HV8`CxH@OWPwG;bP@T&0*_ zP2~SJzd@W5=JO5DTz)RUv<-~EwiPUU=wWauv7LR8P&@4Gv|> z_^1i+S8REzX{}(}T5CW{DCR*E>jLQ>dIqjSp-VH5qVT+i5qlGm&7fH(5&My1)ht#= zYUX0BX(<^vb<0-$zgOXT(QHh?x;Dfm=qm#o5@)KUzuOzBEx1amuasfvkrpp5Kt4yC zc`QIr1#8r1m2#f{d2f` zGvA(){Y&2+9OvzPr{%R`(D*yg&D&LOKyRbY-lUcb>60@j0i7!-mg2x2qF$NNB5&0n zI(nA`CK~8{(}F}{nH^k6!LX7pdT+?Fs_U`9XFSbl*DklPUY_}^vhaFCUz1>oX5J0Ia;AOhvhXbJ~ z(y=BIlS3GtWhQp77K?v;aIM3LOqQM5qChf$NsD?g_IlzagamLwi>3r|tzANFpdmmM zg?3q`x)c!LLv?+nl7ZN@x@g_{7wvi!7tYlEy(d%rQojIUM~=``{I z>E%75_FGVeyHd))#v1HHPxpLcQnC;I)GF-D$wgI&Ui=XnsQfVO(8w*?QLT4 zZblW8YI7_R{dB%GKa@@F8o(d?QlmhBdZiKFUHRzWb(x9PoOX=D5d0Kp-e?_;ze1rFIGFuLD9C zbr5j<;G8ms-KF617@{jdafd#^__T3itOoT#T0F`vh4J|G(gfb`LM9-h0)mZNr~XCHplQ1Uumyfyv>`R90^6H07v(<6Wm6 z_{S?vgslLD!3?_D*ePj{1RKM4sK(azsynZtyo-$zJ00O0wI}31ub09>HO{LjtxG(Y z_GWV>2c`!bvUZ6cE+Q~)LP0lb@^e>?dVg2q`ZWI+G@^m_>cNo(&O7mzv)=6^kB>Q< z@StvX;qB2p2ko9zq>E+hm)B;gi$6P{I~xg2m*ENpw>x^9)#<+#TZKh9$c8A%gkYUy zfN27emV|!RCI>z2Gdj9KoJAEUOlrkIUj#Y)uti%a+|7kk z)>>8+$JP_IcCcYYayi+h&}*~xtzv7gUM|!9dgEa<&~KWp>>f|!Y(YiPgw1&C(9!mf z?QB!^Zu&nF+oPYNEPD=D_Ww#u1V7SyoVG?gj%{369$CIeUY2BW>$iGcC&|`!Ex+W% zAwWJ~TG>n;Q;nn5?f2@lz1DY`j&1*xfMcrK58Z^*Oq+pEr=~Oc_8sNk;MBZY4#R>~sfhMl6 z@vp9pRtGaQ+k$Hn0rZ$yw%iR~osBu29sgTEP=+P%OWH zrN}^Ao}3f*PK)W;3>Lx>#_=wiZ$tNONMzPc7PW%!`*k@6&H;`bKUk}OReo$(pZiVh zeCchhPpQ$2WP2EouZP9E9y_%->_&l}G=}_V>GZ`yEAd*Ss;9NI`u-9fM1k|0x#Y z{!=V8R9jtfgJVe`ZA~RhcXE^zd`k?H(?(|^XZ0W4sv`@{*Kfdc|CE%7jI1$;DA5Va z=?K^o@)^2vJzSk!V?UbsnjwGsokn0G`JkN^Tyokzqx^yQZh50wZUqwgm$M_*Ux{oR z{8dbeO<*x!sSi*lg&(WZK0UX0D3cEss_5KYxy3jIm*O&lCN;N%;H7}FkK8L$Y{>-6 z3xgUu#o)|dnekV)yQ ze`uj0QHc{r=sO9l#<1_E@tcIWo$faMtJi#6GJhn)d+GL))uMj-guq=rA~54N*>zKP zl_9H0lq4?1LL;65?HBi3{@rhw2|FzFoRlMsk1;*9nHwm+mmwEkwIfkP&Ze6r%5$4t zM*#@akgzJ*hfmBlF)mh9t8!<4?8HVQ8yYqly`IC6gSTq&Kc|A|?_<`*$;ZSwYc0CU z?Yf~Vj`Hv2NIkua^74yRIJ_y879y8u&wx6dmcSVP+wBtlKV%LD! zso5u9Be|G9$z?HAIDM`mSj9QpCva#!sX7X5w#Do4JI6n@wz^3;wQIFpp1rH zP$1IxM$pnzm0A%*z-|qVY-a5B{hg`ROWyeo66j%Mj!=tnEVZQ$Khuoi&2Cvrk~Z&m zRY2&NLZBeau@s1iC0#Wm{fBWJmTJCX#^}qDWnc2|O!Y}l@Uvw9Xw_xbX+EIvt-^D( z)LnguOaJ>L`m_T@-*kThp56c~uSX=i4{&f5W>!*7W_aS=kK?0$Za=Tgd`1omgj~Vj#|oneqJOJ)&ke4AC%dDPItS?V>m-7 z--Mob1c3-fjJZ^!qDzb)3d-xW210Htl;y9|Q8f^Me$KU=duyzt9)d@xg6$=<3TJOb zmfLr|#}ag3_i`)S`OieS2sZw`-!#C)sf-%ppN&|L2^mtkZpaPYkwx;uUf2l(>zx?Y zANu{HhcZXWq^0^9anhgORtL(^KtoH8|4dg zN(W61jZ6v+4uEBb+x$O$?pI9f>mg`oLiv9Cb{p$~2vHafa|Rxe77pF&vBs$^FP*H6 zDRAlg=*x~Ob~P)LKO=!C4nZGQgv<ZFWJPY>T>#U9f(Pa0Gpfe^el zA*t7dZ?RjDY@3Miin$R%84=Ug4s=Mz4tMsS?z$Aj6XUZ7Jg^%wM{q*Aq3hIxUqr+w zk6RtpP?!-Lk5ebq!|7emm3gfnvD>|@TqH$4_M@}y(oTEl;xfobTfX#SDaw)QgPYd(1w&d5&0 zypWYKShs0Q;9oN(oZL9o-@Fh`Bbt{=S|-w#G<0)XKRZFd6XkC(AwFbfmRO3n;XJ7~ zIC}Nj=kUrnEd}1E&71?BKN^-gA&~4+-F4bR7KhP&!aEeMkHNg{ z>SK8$w%L8C22UCo!}pp&5ZwJfAhcO|BvBE`?U~Y^W;OZ8Y9foo4=UQ2V?Bv<@z}QV zUulxTxI%eS_`UnTI%(FRe&{gQ81R_&bjtKNRso}bMqDOS#)5rsF`=Onp+gZ=v1VxF zL>d@Ndba4c%C@eynkz#q&MT$$wMIR?A2AeB`$VM}hsaa@x?s8pZTgNdj+eWBLxsb? z``LrjqPYXziAZn^;I^UsU_R(SbihTy@xU7)FJOPcwZo;t+GFrjJ&8yBpp`nxs7t-V zM-xmWOjImzEwC6&9>k6SVmP3FQtgsCiOxwhNZo`drz}vHYtH%3!I&DGwwq3kz9qUQ zRDbOzN#lv$6eOg%G@rtOU@*z5b;=Pcw8}@STBVK(yYU67#v#TCxLYa}swZH8i$_V& zmo^pv2nEmqp#Bre0>Hm)aKM*n_KUvxkMLOYjTceq7siz|u%fDSveL@X#?uJd3v2#{ zj-k6)XDrr?2}@UBO{NP1a$ms`4isK}2V(w6mV22#O?%ci55RWz>C8jgII3LP|LKp# zedKt#a+p-UA3(+c!qL6nZTpeN0`g|-eja4aQ!F!Uqaf4#p!YMTpwCD|w=&1fq>{}d z7%oT-O`^afwlk?d2(7lQ-%|3N;+yD6jqFlYb{F;9_%Pyo@NdmcVRW5Zcw}u~o}ezD z$Y}o5LVrC;2bz~_6ujqOh<9EytJb89*x>@3xYxX4;Dp4Ezpl-08l)g3rm-+`H9bOjd8t(dP(*k1@WKns!k@f5B=sFjO+|u}b3sK)0EuHxoSms@PLhwvWln-y;BHPz z2*UE{2@aJ~JRMdU8qYW#O%l%}8_rmcO(GleM@fcJ>i2)zhKW?E+D0jyORI*znOatj zxYNvXF<}UQ4Suuw=9ndW(_e_|xuY#-oJw9VU9UAn?dBvM$umS{Pxm+0z5D53u;PU$ zR(x_~8qKwKgJxPL_I&bnr=R?Ma{F8@B5m+k0$WuKZQ+=RSyf)m#Yy}5*$sczcYz<< zx|kXtrhQ6t$s^`9w_@avAQsP5*{}N~FeQK-B#a8RqbK|!ey}Zxv}SK+Y{J5UiH`sg ziE{=1Q_Iq%+ybu(F-7W{nrEkB)5k&odaJ1$!Z!i&&Q4$Dg>g*H>=`keJlHTCRGl6$ zhWs6jNQz=T+^?TQxJVAx}a@=+k5s4U_6a SV_S1)BsCP`Pt@fA0RA7H6cL&L literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationLightWebfont.eot b/www/assets/fonts/sansation/SansationLightWebfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..63f89282a145836985148d511dba17471b6acf84 GIT binary patch literal 18584 zcmcJ134B!5+4nhjnSCa+X0j1xGRR^Aff)isBLcEikfn$gB4rKBU>Oy};u0;qC>EF3 zY8#PSjn=v##d{~g3bmB2t+m!xN@MG56}7d-ueFQTB4kd!|8wr05Y+bV*Z#i1oqNt* z&UwzWKhJq)wtt4P7p5`BnZoGL`lJ?Tb)3!@&7sf!e-AR&PW@rOAGEvwb*o*?E@n$v zj;+V%)hx@dKs&)MLTeRUjVp|K&ghl0OW6vx4$l{#9mPhl44ymte;Mh_QSk!78^njk z*wm@>W-i|Q)h1l@;cC^i$y27XJX6shihg4D#r5e6-g@H$^nn4kWck{qSDv`6j-G!U z$MegtxjNxo@4?zt0(soZD_5;8>8yVY{awJ)id9S3Uy18M#vDJ>{{3g_i!Gj{$)+#jFyF-3B*4fLxut7Y3}j7jGIjyxr!P*8LDG{{s4p@eUBd*pI(_#V9)eq%6F}KHnnm1kfv^D#V-SRw`lZ5qj~Hf1kN1kzik9iQ`QFh4?JbILGsRJ7ZuN5T!zI!zm$W z109GKtV;G6JAxiTQ3V))e>ND;Y0SZH1gCwIeTzN8cC*feClO7QCk7;H5`z=+36uJ^6pL%j!k5A=SocVF+G<7CEVcF=NLyo^x)~dE?KYFmcia;M!@Qxp4Z7 zi)PN6J?FD?FP?YFrJtL>p!u?epI@|i$rl&o?cTy^Yu2 z(0bkVvbnkc?SI@B;3`SkW;Tt@WAoVp_Ib95EnzKeBYOZe$+8J-23rgf&$6`;@>aHt zUCve+tj=JO8OGUj<{Q(mSzxf#`DKQqcK&$_;<@>S%0DisOeGDycD^z7 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 + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationLightWebfont.ttf b/www/assets/fonts/sansation/SansationLightWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..1524764109fbe88a130d4c7a827d30ce59354cba GIT binary patch literal 18380 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 literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationLightWebfont.woff b/www/assets/fonts/sansation/SansationLightWebfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..9182f423fc6459d0fa817e2688ac8a777b01acf2 GIT binary patch literal 11120 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 + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2011 Bernd Montag +Designer : Bernd Montag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/fonts/sansation/SansationRegularWebfont.ttf b/www/assets/fonts/sansation/SansationRegularWebfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..341fadc3aa31b79d8630c71b5354ee5887dee79c GIT binary patch literal 18168 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 QRp_RUsB}B5WD{fm1-eV$IsgCw literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/SansationRegularWebfont.woff b/www/assets/fonts/sansation/SansationRegularWebfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..ebbd6820549089329b4158eaf1e8c947179682c3 GIT binary patch literal 10944 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 literal 0 HcmV?d00001 diff --git a/www/assets/fonts/sansation/demo.html b/www/assets/fonts/sansation/demo.html new file mode 100755 index 0000000..04fc689 --- /dev/null +++ b/www/assets/fonts/sansation/demo.html @@ -0,0 +1,58 @@ + + + + + + + Font Face Demo + + + + + +

+

Font-face Demo for the Sansation Font

+ + + +

Sansation Regular - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ + + +

Sansation Light - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ + + +

Sansation Bold - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ + + +

Sansation Light Light Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ + + +

Sansation Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ + + +

Sansation Bold Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ +
+ + diff --git a/www/assets/fonts/sansation/license.txt b/www/assets/fonts/sansation/license.txt new file mode 100755 index 0000000..a0399e1 --- /dev/null +++ b/www/assets/fonts/sansation/license.txt @@ -0,0 +1,18 @@ +Sansation - freeware font family +Version 1.3 +Bernd Montag © 2011 - All Rights Reserved + +This font family is freeware and can be used for personal and commercial purposes. +Although a PayPal donation is much appreciated. + +You may but this font on CDs, websites,... with the following restrictions: + + -Editing is only allowed for personal use, don´t distribute an modiefied version of the font files! + -Do not rename the font files! + -Do not sell the font files! + -Do not pass the font files without this textfile! + -Make sure you have downloaded the latest update from www.dafont.com for best optical results. + +If you have further questions - please contact me. + +berndmontag@gmx.de \ No newline at end of file diff --git a/www/assets/fonts/sansation/stylesheet.css b/www/assets/fonts/sansation/stylesheet.css new file mode 100755 index 0000000..50085a7 --- /dev/null +++ b/www/assets/fonts/sansation/stylesheet.css @@ -0,0 +1,76 @@ +/* Generated by Font Squirrel (http://www.fontsquirrel.com) on May 11, 2012 12:44:10 PM America/New_York */ + + + +@font-face { + font-family: 'SansationRegular'; + src: url('SansationRegularWebfont.eot'); + src: url('SansationRegularWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationRegularWebfont.woff') format('woff'), + url('SansationRegularWebfont.ttf') format('truetype'), + url('SansationRegularWebfont.svg#SansationRegular') format('svg'); + font-weight: normal; + font-style: normal; + +} + +@font-face { + font-family: 'SansationLight'; + src: url('SansationLightWebfont.eot'); + src: url('SansationLightWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationLightWebfont.woff') format('woff'), + url('SansationLightWebfont.ttf') format('truetype'), + url('SansationLightWebfont.svg#SansationLight') format('svg'); + font-weight: normal; + font-style: normal; + +} + +@font-face { + font-family: 'SansationBold'; + src: url('SansationBoldWebfont.eot'); + src: url('SansationBoldWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationBoldWebfont.woff') format('woff'), + url('SansationBoldWebfont.ttf') format('truetype'), + url('SansationBoldWebfont.svg#SansationBold') format('svg'); + font-weight: normal; + font-style: normal; + +} + +@font-face { + font-family: 'SansationLightLightItalic'; + src: url('SansationLightItalicWebfont.eot'); + src: url('SansationLightItalicWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationLightItalicWebfont.woff') format('woff'), + url('SansationLightItalicWebfont.ttf') format('truetype'), + url('SansationLightItalicWebfont.svg#SansationLightLightItalic') format('svg'); + font-weight: normal; + font-style: normal; + +} + +@font-face { + font-family: 'SansationItalic'; + src: url('SansationItalicWebfont.eot'); + src: url('SansationItalicWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationItalicWebfont.woff') format('woff'), + url('SansationItalicWebfont.ttf') format('truetype'), + url('SansationItalicWebfont.svg#SansationItalic') format('svg'); + font-weight: normal; + font-style: normal; + +} + +@font-face { + font-family: 'SansationBoldItalic'; + src: url('SansationBoldItalicWebfont.eot'); + src: url('SansationBoldItalicWebfont.eot?#iefix') format('embedded-opentype'), + url('SansationBoldItalicWebfont.woff') format('woff'), + url('SansationBoldItalicWebfont.ttf') format('truetype'), + url('SansationBoldItalicWebfont.svg#SansationBoldItalic') format('svg'); + font-weight: normal; + font-style: normal; + +} + diff --git a/www/assets/graphics/backArrow.png b/www/assets/graphics/backArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..78f625e6c922cd10e4d7db27c3d1e94b6dc783b7 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mj3!3HE1R$grZQY^(zo*^7SP{WbZ0pxQQctjR6 zFmMZjFyp1Wb$@_@q9v{oCC){ui6xo&c?uz!xv31M`bH-DhDM$bW^M;6kO3(O&QB{T zPb^Aha7@WhN>y;nEJ`iUFUl@fa1J(mv1d~c0|TS9r;B5VN9Wn=w|x&g2(&)DFZTWd zXNiN7FLQ`P5TmDS3!laVj~y*bCYL106-|74;N6;!?~3N>Wb4#RRWG^O#%Z`&eF5`3 z<)zu4y8|5Wf4}~En_9{o6(2tjAvNjgu**UWwzW9&rugruDU3cy85}Sb4q9e0CFR#ssI20 literal 0 HcmV?d00001 diff --git a/www/assets/graphics/bread.png b/www/assets/graphics/bread.png new file mode 100644 index 0000000000000000000000000000000000000000..5738092cadeaf73ec8e68cb6820dff5c472a66b5 GIT binary patch literal 580 zcmV-K0=xZ*P)X1^@s6z#LUx00004b3#c}2nYxW zddbVG7wVRUJ4ZXi@?ZDjy8FETVQ zF)~TunYRD{0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#RqONNI79&I)AObcc*LMMq zUR-Bm#8Mgu6=2D;g>u=4^z*%=!_l>%BS=>Q1}U%%sT^t z!CQNAU9^gcNCZ6h7`nw3i2Q^gbP0enfEU*bfK|t&qd3T=ZH;%^J9dKy;2gS?K&r(w zCS@i&b0dqgTPQnJPG8VC`w<(E&jlz^=SQERDs(xZ^3l8V$xp~amz?I9G?|4i5pbAb z@>PWPz?u(337@MGB5HIQdHSA$~N*6RgyW#B?8MBtJ;W5IUA>mLML$* z3?VP2pX#oZo!J+IWr}SliaGo)U)Q%BQ)~{}@@da(u9BbJM<8Rl(K6`%UCoA{umjK+ zC;Uwr2V<_7-7?mBk*@j(1I2Rb3*fy^>~{N(g3hN8|0=Ul&}B@4j|uZHW60kK;dZqI SaQ`X*0000H literal 0 HcmV?d00001 diff --git a/www/assets/graphics/calculator.svg b/www/assets/graphics/calculator.svg new file mode 100755 index 0000000..05d9df4 --- /dev/null +++ b/www/assets/graphics/calculator.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/www/assets/graphics/info.png b/www/assets/graphics/info.png new file mode 100644 index 0000000000000000000000000000000000000000..2c626310949003fe1eacf445821243b8a645727c GIT binary patch literal 1133 zcmV-z1d{uSP)dbVG7wVRUJ4ZXi@?ZDjy8FETVQ zF)~TunYRD{0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#Rjd$wkG^|3qux5p_+vpx`(Pan83My`PskOMh!lz07PQ55t#%}lc~ zFaq9p{Pq@@0aM~=)n;OQ(n2-?UbmX(#siS}lJ_T_W){GsiaYWl8*>x)nu1P+O#r_)iU6;H^qnFf|AR{4Cc# zL>z61qYzOu4Flvf4iMD-x4eYYI7*BhGPgXA#@NI^lV;)miydhZSP`y?Ff_ZwYo}C* zKN`}5)7{_c#F%jBK^Vlg8i(+tNLprJc z2UB>fbLr_g*01n95tVcFSp?pk`rj~4b6quxHxK?yU#h!du~9~W2j76?nj~jgj{>s z`}TVnAX!))EAOS_s8{adj}F9Ku5BY)Ab zcDjE_5-KFu*02cBJ%#25FAa;s#v(m%{L)Jy)Ls@}Zu0=ciPN0aKR5Jz2nZZW(fGO8 zG(z$rt#r#_XNX#J1iA%z& zl#=QXpBgbKb?h|wcq8d*X}Y}L&+QL$+%(J4bCE63SJPGLMuF&|t0I3y5;480E`{q) zWA2Bl#yoD;*aq+l$c-KUT0TuJg!kpRuqENgdQp6JAdaI2X?6#ES0)b-;^W#PNdwtB zcDc^3_h&Ua*C?*nYCz5$3xT-E$w}3Xc!?Qy_q0U=a<}LVH}P)wCeq-X(45DA(0V04 zP4yYgJ!+8fnwQU}d{*p|o~o%H(yaSir1g+%Lf`9)1b46coLD1-&2mrk9>T>QQskp#f>4C<^`p0i9pBAtxUJ00000NkvXXu0mjfV=4V* literal 0 HcmV?d00001 diff --git a/www/assets/graphics/moreDisclosure.png b/www/assets/graphics/moreDisclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d91b2db32340fa48cb4e84dafa86d1bc88a5b7 GIT binary patch literal 501 zcmVdbVG7wVRUJ4ZXi@?ZDjy8FETYR zF*5O7{?Y&d0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#RdehxaIob-TCs^_dR5obU7Uob&unD;#uPqdu@QK=g1eZ-S8QhHx7zShp2P#yIM~X}-Z)@x z)c*$fDSE0Bov0?|^_=;y`WNsT4lsdVc>A{jHj3_laFzDGS3MdRs*LY|$5lHbmhldc raE>>1qPPWD#jvP~Vk0v@HUWl9xodcFJ%WYk00000NkvXXu0mjf%D~dw literal 0 HcmV?d00001 diff --git a/www/assets/graphics/notebook.svg b/www/assets/graphics/notebook.svg new file mode 100755 index 0000000..c4d784a --- /dev/null +++ b/www/assets/graphics/notebook.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/www/assets/graphics/search.png b/www/assets/graphics/search.png new file mode 100644 index 0000000000000000000000000000000000000000..5c83ac88a13cb2ca18528beb77db560da68bd457 GIT binary patch literal 947 zcmV;k15EshP)dbVG7wVRUJ4ZXi@?ZDjy8FETVQ zF)~TunYRD{0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#RJB)R7r>;v`hMgy2@4b7yPk>d>IRk=l}%Q(%pU{ua@@UP#Ah-z2uO3~u2uHQd{Hz}U)UdkSIDyVe)S z5E9!v6N3x%So?ekK(dv-#u&m9Cf(p$$hby$mUjh(Ku?B(a9zU%I=3-6u=F)@2!nns z&+fO8*w%AyM`(Gyp0vC35Uw7XY&&}zXynPM2aK(B+j})rgFxSx3H-1Un|j{yy0&`} zkg=s6YnMn(PryXYQ~`cRo}M<|0h>WKrP$ceOn=h~7<`};a^Smm_W{_JUhK1jN;e;Rh|i zTO{73knIMq%f)vh$o8ZceDb&TG{H?4rxUc;M>bH1A};1s*8jr z@R4TH?xG{`iG;YXxajtDJ1{_jl=ZpR$cd54dEPQl*DoaY*QPJs!ovc%in-P{u-KT= z%+?AZw`rzVs`aNsfOTV+QZuF3y+-hqc31O|bw{+-fwlfVF@@|F2S9sFj2;r!(ysp1Rp!v**nFBi9b+MsJd{{?YB VBi3LC$LRn7002ovPDHLkV1neEr3U~2 literal 0 HcmV?d00001 diff --git a/www/assets/graphics/settings.svg b/www/assets/graphics/settings.svg new file mode 100755 index 0000000..248d1b8 --- /dev/null +++ b/www/assets/graphics/settings.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/www/assets/graphics/wheatBg.png b/www/assets/graphics/wheatBg.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2aab24191e0894323180beb6c2653dacefcd49 GIT binary patch literal 21127 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 l35x6nUk3-EP|l div:first-child { + min-height:100%; + background:#EDEDED; + /*background-image:url('graphics/wheatBg.png'); + background-position: top left; + background-repeat:repeat;*/ + border-bottom:1px solid #444; + border-top:1px solid #444; +} + + +/*APPLICATION VIEWS*/ + +.right { + position:absolute; + right:0.75em; + top:0.5em; +} + +.padded { + padding:1em; +} + +.button { + padding:.5em; + cursor:pointer; + border:1px solid #999; + background-color: #AAA; + color: white; + text-decoration:none; +} + +.button:active { + background-color: #D9D900; +} + +.heading { + background-color: #fff; + color:#444; + border-bottom:1px solid #999; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -webkit-transform:translate3d(0,0,0); +} + +.warning { + background-color: #F2DEDE; + color:#B94A48; + border:1px solid #EED3D7; +} + +#defaultView { + background-image:url('graphics/wheatBgNoColor.png'); + background-position: bottom center; + background-repeat:no-repeat; +} + + + +@media only screen and (min-width:760px) { + #defaultView { + background-image:url('graphics/wheatBg.png'); + } +} + +#aboutView h2, +#defaultView h2 { + display:block; + padding:0em; + text-align:center; +} +#aboutView div, +#defaultView div { + display:block; + padding:1em; + padding-top:0em; +} + +#defaultView a { + height:100%; + display:block; + border:1px solid #999; + padding:1.25em; + text-decoration: none; + color:#444; + font-size:1em; + background:rgba(230,230,230,0.85); +} + +#defaultView a:active { + background-color:#D9D900; +} + +#defaultView #points { + padding-left:75px; + background-image:url('graphics/notebook.svg'); + background-size:45px 45px; + background-position: 15px center; + background-repeat:no-repeat; +} + +#defaultView #search { + padding-left:75px; + background-image:url('graphics/search.png'); + background-position: 5px center; + background-repeat:no-repeat; +} + +#defaultView #calculate { + padding-left:75px; + background-image:url('graphics/bread.png'); + background-size:45px 45px; + background-position: 5px center; + background-repeat:no-repeat; +} + +#defaultView #calculateAllowance { + padding-left:75px; + background-image:url('graphics/calculator.svg'); + background-size:45px 45px; + background-position: 5px center; + background-repeat:no-repeat; +} + +#defaultView #settings { + padding-left:75px; + background-image:url('graphics/settings.svg'); + background-size:45px 45px; + background-position: 5px center; + background-repeat:no-repeat; +} + +#defaultView #about { + padding-left:75px; + background-image:url('graphics/info.png'); + background-position: 10px center; + background-repeat:no-repeat; +} + +#aboutView { + padding:1em; + padding-top:0em; + + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + + transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); +} + +#searchView { + padding:1.25em; +} + +#foodDetailsView { + padding:1.0em; +} + + +#foodDetailsView h2 { + padding:0em; + margin:0em; +} + +.paragraph { + margin:0px; + margin-bottom:1em; + border-top:1px solid #CCC; + padding-top:1em; +} + +.paragraph_noborder { + margin:0px; + margin-bottom:1em; + border: none; + padding-top:1em; +} + +.amenities { + min-height:30px; + font-size: 1.25em; + padding-top:0.25em; + padding-left:62px; + background-repeat:no-repeat; +} + +#foodMapView { + width:100%; + height:100%; + position:absolute; +} + +#foodMapView #foodMapContainer{ + top:0px; + bottom:0px; + left:0px; + right:0px; + position:absolute; +} + +#foodMapView #footer{ + top:0px; + height:18px; + right:0px; + position:absolute; + padding:1em; + padding-right:0.5em; + z-index:99; +} + +#search_state { + font-size:1.25em; + width:100%; +} + + +#search_searchPhrase { + width:96%; + font-size:1.25em; +} + +#searchButton { + padding-left:2em; + padding-right:2em; +} + +input[type='checkbox'] { + width:2em; + height:2em; +} + +label { + font-size: .8em; + padding:.25em; +} + +.searchfilter{ + padding:.25em; +} + +.searchfilter .amenities { + font-size: 1em; +} + +#geoError{ + padding:1.25em; +} +#geoError div { + padding:1.25em; + padding-top:0px; +} \ No newline at end of file diff --git a/www/config.xml b/www/config.xml new file mode 100644 index 0000000..2eeb8df --- /dev/null +++ b/www/config.xml @@ -0,0 +1,119 @@ + + + + + + Points Watcher + + + Points Watcher is the easiest way to keep track of your Weight Watcher's Points Plus system. + + + + Travis Burtrum (moparisthebest) + + + + Copyright (C) 2013 Travis Burtrum (moparisthebest) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/icon.png b/www/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd7c378cad92d2c9a50aae66d241489cba1211c GIT binary patch literal 10833 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 WyAdt>G{^5I0E)7zGG)?c!T$&EgJ#75 literal 0 HcmV?d00001 diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..1cc3b4e --- /dev/null +++ b/www/index.html @@ -0,0 +1,30 @@ + + + + + Points Watcher + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/js/application.js b/www/js/application.js new file mode 100644 index 0000000..02de45b --- /dev/null +++ b/www/js/application.js @@ -0,0 +1,298 @@ +/*HTMLElement.prototype.originalRemoveEventListener + = HTMLElement.prototype.removeEventListener; + + HTMLElement.prototype.removeEventListener = function(type, listener, useCapture) + { + console.log('remove: ' + type); + this.originalRemoveEventListener(type, listener, useCapture); + }; + */ + +var maxSearchLength = 50; + +var weeklyPointsAllowed = 49; + +var values = []; +var database; +var viewAssembler = new ViewAssembler(); +var backButtonLabel = " "; + +$(document).ready(function () { + loadTemplates(setupDefaultView); +}); + +function setupDefaultView() { + var bodyView = viewAssembler.defaultView(); + + //Setup the default view + var defaultView = { title: "Welcome!", + view: bodyView + }; + + //Setup the ViewNavigator + window.viewNavigator = new ViewNavigator('body'); + window.viewNavigator.pushView(defaultView); + + backButtonLabel = (isTablet() ? "Back" : " "); + database = window.localStorage; + + $.ajaxSetup({ + cache: true + }); + + $.getScript("values.js", scriptSuccess); +} + +function onNearbyListItemClick(event) { + + $("li").removeClass("listSelected"); + var target = $(event.target) + if (target.get(0).nodeName.toUpperCase() != "LI") { + target = target.parent(); + } + + target.addClass("listSelected"); + var index = target.attr("index"); + index = parseInt(index); + + database.setItem("amount", values[index][3]); + + showPointsPage(true); +} + +function scriptSuccess(data, textStatus, jqXHR) { + + //for (var i = 0; i < values.length; i++) { + // values[i].push(i.toString()); + //} + //console.log( "scriptSuccess: " + values.length ); +} + +function pushPointsPage() { + showPointsPage(true); +} + +function showPointsPage(push) { + var view = { title: "My Points", + backLabel: backButtonLabel, + view: viewAssembler.pointsView() + }; + if(push == undefined || !push) + window.viewNavigator.replaceView(view); + else + window.viewNavigator.pushView(view); +} + +function onSearchButtonClick(event) { + var $input = $("#search_searchPhrase"); + var searchPhrase = $input.val(); + + if (searchPhrase != undefined && searchPhrase.length > 0) { + var values = filterValuesBySearchCriteria(searchPhrase); + var view = { title: "Search Results", + backLabel: backButtonLabel, + view: viewAssembler.searchResultsView(values, searchPhrase) + }; + window.viewNavigator.pushView(view); + } +} + +function filterValuesBySearchCriteria(searchPhrase) { + var result = []; + //var startTime = new Date().getTime(); + var tokens = searchPhrase.toLowerCase().split(" "); + var regexps = new Array(tokens.length); + for (var x = 0; x < regexps.length; ++x) + regexps[x] = new RegExp(tokens[x]); + var numFound = 0; + for (var y = 0; y < values.length; ++y) { + var found = true; + for (var z = 0; z < regexps.length; ++z) { + if (!regexps[z].test(values[y][0])) { + found = false; + break; + } + } + if (found) { + result.push(y); + if (++numFound == maxSearchLength) + break; + } + } + //console.log( new Date().getTime() - startTime ); + return result; +} + +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} + +function isPositiveNumber(n) { + return isNumber(n) && n > 0; +} + +function roundPoints(points){ + return Math.round(points * 10) / 10; +} + +function onCalcPointsButtonClick(event) { + var protein = $("#calcProtein").val(); + var carbs = $("#calcCarbs").val(); + var fat = $("#calcFat").val(); + var fiber = $("#calcFiber").val(); + + if (isPositiveNumber(protein) && isPositiveNumber(carbs) && isPositiveNumber(fat) && isPositiveNumber(fiber)) { + var amount = calcPointsPlusFood(protein, carbs, fat, fiber); + database.setItem("amount", amount); + database.setItem("calcPointsAmount", amount); + database.setItem("protein", protein); + database.setItem("carbs", carbs); + database.setItem("fat", fat); + database.setItem("fiber", fiber); + var view = { title: "Calculate Points", + backLabel: backButtonLabel, + view: viewAssembler.calcPointsView() + }; + window.viewNavigator.replaceView(view); + } +} + +function calcPointsPlusFood(protein, carbs, fat, fiber) { + var points = (protein / 10.9375) + (carbs / 9.2105) + (fat / 3.8889) - (fiber / 12.5); + return roundPoints(points); +} + +function onCalcAllowanceButtonClick(event) { + var weight = $("#calcWeight").val(); + var height = $("#calcHeight").val(); + var age = $("#calcAge").val(); + var maleNotFemale = "male" == $("#calcGender").val(); + var poundsNotKg = "pounds" == $("#calcWeightType").val(); + var inchNotMeters = "inches" == $("#calcHeightType").val(); + + if (isPositiveNumber(weight) && isPositiveNumber(height) && isPositiveNumber(age)) { + var allowance = calcPointsPlusAllowance(weight, height, age, maleNotFemale, poundsNotKg, inchNotMeters); + database.setItem("allowance", allowance); + database.setItem("weight", weight); + database.setItem("height", height); + database.setItem("age", age); + database.setItem("maleNotFemale", maleNotFemale); + + var view = { title: "Calculate Allowance", + backLabel: backButtonLabel, + view: viewAssembler.calcAllowanceView(allowance, weight, height, age, maleNotFemale, poundsNotKg, inchNotMeters) + }; + window.viewNavigator.replaceView(view); + } +} + +function calcPointsPlusAllowance(weight, height, age, maleNotFemale, poundsNotKg, inchNotMeters) { + var wmult = poundsNotKg ? .454 : 1; + var hmult = inchNotMeters ? .0254 : 1; + + var base1, age1, activity, wgt1, ht1; + if (maleNotFemale) { + base1 = 864; + age1 = 9.72; + activity = 1.12; + wgt1 = 14.2; + ht1 = 503; + } else { + base1 = 387; + age1 = 7.31; + activity = 1.14; + wgt1 = 10.9; + ht1 = 660.7; + } + + var totage = Math.round((age1 * age) * 100) / 100; + var totwgt = Math.round(((wmult * weight) * wgt1) * 100) / 100; + var totht = Math.round(((hmult * height) * ht1) * 100) / 100; + var tee1 = Math.round((activity * (totwgt + totht)) * 100) / 100; + var tee2 = Math.round((base1 - totage + tee1) * 100) / 100; + var atee1 = tee2 - (tee2 * .10) + 200; + var target1 = (atee1 - 1000) / 35; + var modtar = Math.round(target1 - 11); + + if (modtar <= 26) + modtar = 26; + else if (modtar >= 71) + modtar = 71; + + return modtar; +} + +function onSubtractPointsButtonClick(event) { + var amount = $("#pointSubtract").val(); + var dailyNotWeekly = "daily" == $("#pointType").val(); + + if (isNumber(amount)) { + var keyName = dailyNotWeekly ? "dailyPoints" : "weeklyPointsAllowed"; + var points = database.getItem(keyName); + points -= amount; + database.setItem(keyName, roundPoints(points)); + showPointsPage(); + } +} + +function onResetPointsButtonClick(dailyNotWeekly) { + var keyName = dailyNotWeekly ? "dailyPoints" : "weeklyPointsAllowed"; + var points = dailyNotWeekly ? dbGet("allowance", 0) : weeklyPointsAllowed; + database.setItem(keyName, points); + showPointsPage(); +} + +function arrayToFoodObject(index) { + var result = {}; + + var row = values[index]; + + result.name = row[1]; + result.amount = row[2]; + result.points = row[3]; + + result.index = index; + + return result; +} + +function openExternalURL(url) { + var result = confirm("You will leave the Points Watcher App. Continue?"); + if (result == true) { + window.open(url, '_blank'); + } +} + + +function dbGetNum(key) { + var ret = dbGet(key, 0); + return ret < 1 ? undefined : ret; +} + +function dbGet(key, defaultVal) { + var ret = database.getItem(key); + if (ret == undefined) { + ret = defaultVal; + database.setItem(key, ret); + } + return ret; +} + +document.addEventListener("deviceready", onDeviceReady, false); + +function onDeviceReady() { + document.addEventListener("backbutton", onBackKey, false); +} + +function onBackKey(event) { + if (window.viewNavigator.history.length > 1) { + event.preventDefault(); + window.viewNavigator.popView(); + return false; + } + navigator.app.exitApp(); +} + +document.addEventListener('touchmove', function (e) { + e.preventDefault(); +}, false); \ No newline at end of file diff --git a/www/js/libs/css/activityIndicator.css b/www/js/libs/css/activityIndicator.css new file mode 100644 index 0000000..ae17c11 --- /dev/null +++ b/www/js/libs/css/activityIndicator.css @@ -0,0 +1,15 @@ +.activityIndicator { + height: 40px; + width: 40px; + -webkit-background-size: 40px 40px; + margin: 0px auto; + background-image: url("data:image/png;base64,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"); + -webkit-animation-duration: 1s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -webkit-animation-name: spinnerAnim; +} +@-webkit-keyframes spinnerAnim { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} \ No newline at end of file diff --git a/www/js/libs/iscroll.js b/www/js/libs/iscroll.js new file mode 100755 index 0000000..83fed99 --- /dev/null +++ b/www/js/libs/iscroll.js @@ -0,0 +1,1078 @@ +/*! + * iScroll v4.1.9 ~ Copyright (c) 2011 Matteo Spinelli, http://cubiq.org + * Released under MIT license, http://cubiq.org/license + */ +(function(){ +var m = Math, + mround = function (r) { return r >> 0; }, + vendor = (/webkit/i).test(navigator.appVersion) ? 'webkit' : + (/firefox/i).test(navigator.userAgent) ? 'Moz' : + (/trident/i).test(navigator.userAgent) ? 'ms' : + 'opera' in window ? 'O' : '', + + // Browser capabilities + isAndroid = (/android/gi).test(navigator.appVersion), + isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), + isPlaybook = (/playbook/gi).test(navigator.appVersion), + isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), + + has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(), + hasTouch = 'ontouchstart' in window && !isTouchPad, + hasTransform = vendor + 'Transform' in document.documentElement.style, + hasTransitionEnd = isIDevice || isPlaybook, + + nextFrame = (function() { + return window.requestAnimationFrame + || window.webkitRequestAnimationFrame + || window.mozRequestAnimationFrame + || window.oRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { return setTimeout(callback, 1); } + })(), + cancelFrame = (function () { + return window.cancelRequestAnimationFrame + || window.webkitCancelAnimationFrame + || window.webkitCancelRequestAnimationFrame + || window.mozCancelRequestAnimationFrame + || window.oCancelRequestAnimationFrame + || window.msCancelRequestAnimationFrame + || clearTimeout + })(), + + // Events + RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', + START_EV = hasTouch ? 'touchstart' : 'mousedown', + MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', + END_EV = hasTouch ? 'touchend' : 'mouseup', + CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', + WHEEL_EV = vendor == 'Moz' ? 'DOMMouseScroll' : 'mousewheel', + + // Helpers + trnOpen = 'translate' + (has3d ? '3d(' : '('), + trnClose = has3d ? ',0)' : ')', + + // Constructor + iScroll = function (el, options) { + var that = this, + doc = document, + i; + + that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); + that.wrapper.style.overflow = 'hidden'; + that.scroller = that.wrapper.children[0]; + + // Default options + that.options = { + hScroll: true, + vScroll: true, + x: 0, + y: 0, + bounce: true, + bounceLock: false, + momentum: true, + lockDirection: true, + useTransform: true, + useTransition: false, + topOffset: 0, + checkDOMChanges: false, // Experimental + + // Scrollbar + hScrollbar: true, + vScrollbar: true, + fixedScrollbar: isAndroid, + hideScrollbar: isIDevice, + fadeScrollbar: isIDevice && has3d, + scrollbarClass: '', + + // Zoom + zoom: false, + zoomMin: 1, + zoomMax: 4, + doubleTapZoom: 2, + wheelAction: 'scroll', + + // Snap + snap: false, + snapThreshold: 1, + + // Events + onRefresh: null, + onBeforeScrollStart: function (e) { e.preventDefault(); }, + onScrollStart: null, + onBeforeScrollMove: null, + onScrollMove: null, + onBeforeScrollEnd: null, + onScrollEnd: null, + onTouchEnd: null, + onDestroy: null, + onZoomStart: null, + onZoom: null, + onZoomEnd: null + }; + + // User defined options + for (i in options) that.options[i] = options[i]; + + // Set starting position + that.x = that.options.x; + that.y = that.options.y; + + // Normalize options + that.options.useTransform = hasTransform ? that.options.useTransform : false; + that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; + that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; + that.options.zoom = that.options.useTransform && that.options.zoom; + that.options.useTransition = hasTransitionEnd && that.options.useTransition; + + // Helpers FIX ANDROID BUG! + // translate3d and scale doesn't work together! + // Ignoring 3d ONLY WHEN YOU SET that.options.zoom + if ( that.options.zoom && isAndroid ){ + trnOpen = 'translate('; + trnClose = ')'; + } + + // Set some default styles + that.scroller.style[vendor + 'TransitionProperty'] = that.options.useTransform ? '-' + vendor.toLowerCase() + '-transform' : 'top left'; + that.scroller.style[vendor + 'TransitionDuration'] = '0'; + that.scroller.style[vendor + 'TransformOrigin'] = '0 0'; + if (that.options.useTransition) that.scroller.style[vendor + 'TransitionTimingFunction'] = 'cubic-bezier(0.33,0.66,0.66,1)'; + + if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose; + else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; + + if (that.options.useTransition) that.options.fixedScrollbar = true; + + that.refresh(); + + that._bind(RESIZE_EV, window); + that._bind(START_EV); + if (!hasTouch) { + that._bind('mouseout', that.wrapper); + if (that.options.wheelAction != 'none') + that._bind(WHEEL_EV); + } + + if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () { + that._checkDOMChanges(); + }, 500); + }; + +// Prototype +iScroll.prototype = { + enabled: true, + x: 0, + y: 0, + steps: [], + scale: 1, + currPageX: 0, currPageY: 0, + pagesX: [], pagesY: [], + aniTime: null, + wheelZoomCount: 0, + + handleEvent: function (e) { + var that = this; + switch(e.type) { + case START_EV: + if (!hasTouch && e.button !== 0) return; + var nodeName = e.target.nodeName.toUpperCase(); + if (nodeName == "TEXTAREA" || nodeName == "INPUT" || nodeName == "SELECT" ) return; + that._start(e); + break; + case MOVE_EV: that._move(e); break; + case END_EV: + case CANCEL_EV: that._end(e); break; + case RESIZE_EV: that._resize(); break; + case WHEEL_EV: that._wheel(e); break; + case 'mouseout': that._mouseout(e); break; + case 'webkitTransitionEnd': that._transitionEnd(e); break; + } + }, + + _checkDOMChanges: function () { + if (this.moved || this.zoomed || this.animating || + (this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return; + + this.refresh(); + }, + + _scrollbar: function (dir) { + var that = this, + doc = document, + bar; + + if (!that[dir + 'Scrollbar']) { + if (that[dir + 'ScrollbarWrapper']) { + if (hasTransform) that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = ''; + that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); + that[dir + 'ScrollbarWrapper'] = null; + that[dir + 'ScrollbarIndicator'] = null; + } + + return; + } + + if (!that[dir + 'ScrollbarWrapper']) { + // Create the scrollbar wrapper + bar = doc.createElement('div'); + + if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); + else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); + + bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:opacity;-' + vendor + '-transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); + + that.wrapper.appendChild(bar); + that[dir + 'ScrollbarWrapper'] = bar; + + // Create the scrollbar indicator + bar = doc.createElement('div'); + if (!that.options.scrollbarClass) { + bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);-' + vendor + '-background-clip:padding-box;-' + vendor + '-box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';-' + vendor + '-border-radius:3px;border-radius:3px'; + } + bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:-' + vendor + '-transform;-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-' + vendor + '-transition-duration:0;-' + vendor + '-transform:' + trnOpen + '0,0' + trnClose; + if (that.options.useTransition) bar.style.cssText += ';-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; + + that[dir + 'ScrollbarWrapper'].appendChild(bar); + that[dir + 'ScrollbarIndicator'] = bar; + } + + if (dir == 'h') { + that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; + that.hScrollbarIndicatorSize = m.max(mround(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); + that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; + that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; + that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; + } else { + that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; + that.vScrollbarIndicatorSize = m.max(mround(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); + that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; + that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; + that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; + } + + // Reset position + that._scrollbarPos(dir, true); + }, + + _resize: function () { + var that = this; + setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0); + }, + + _pos: function (x, y) { + x = this.hScroll ? x : 0; + y = this.vScroll ? y : 0; + + if (this.options.useTransform) { + this.scroller.style[vendor + 'Transform'] = trnOpen + x + 'px,' + y + 'px' + trnClose + ' scale(' + this.scale + ')'; + } else { + x = mround(x); + y = mround(y); + this.scroller.style.left = x + 'px'; + this.scroller.style.top = y + 'px'; + } + + this.x = x; + this.y = y; + + this._scrollbarPos('h'); + this._scrollbarPos('v'); + }, + + _scrollbarPos: function (dir, hidden) { + var that = this, + pos = dir == 'h' ? that.x : that.y, + size; + + if (!that[dir + 'Scrollbar']) return; + + pos = that[dir + 'ScrollbarProp'] * pos; + + if (pos < 0) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] + mround(pos * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + } + pos = 0; + } else if (pos > that[dir + 'ScrollbarMaxScroll']) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] - mround((pos - that[dir + 'ScrollbarMaxScroll']) * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); + } else { + pos = that[dir + 'ScrollbarMaxScroll']; + } + } + + that[dir + 'ScrollbarWrapper'].style[vendor + 'TransitionDelay'] = '0'; + that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; + that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = trnOpen + (dir == 'h' ? pos + 'px,0' : '0,' + pos + 'px') + trnClose; + }, + + _start: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + matrix, x, y, + c1, c2; + + if (!that.enabled) return; + + if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); + + if (that.options.useTransition || that.options.zoom) that._transitionTime(0); + + that.moved = false; + that.animating = false; + that.zoomed = false; + that.distX = 0; + that.distY = 0; + that.absDistX = 0; + that.absDistY = 0; + that.dirX = 0; + that.dirY = 0; + + // Gesture start + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); + that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); + + that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; + that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; + + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + } + + if (that.options.momentum) { + if (that.options.useTransform) { + // Very lame general purpose alternative to CSSMatrix + matrix = getComputedStyle(that.scroller, null)[vendor + 'Transform'].replace(/[^0-9-.,]/g, '').split(','); + x = matrix[4] * 1; + y = matrix[5] * 1; + } else { + x = getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '') * 1; + y = getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '') * 1; + } + + if (x != that.x || y != that.y) { + if (that.options.useTransition) that._unbind('webkitTransitionEnd'); + else cancelFrame(that.aniTime); + that.steps = []; + that._pos(x, y); + } + } + + that.absStartX = that.x; // Needed by snap threshold + that.absStartY = that.y; + + that.startX = that.x; + that.startY = that.y; + that.pointX = point.pageX; + that.pointY = point.pageY; + + that.startTime = e.timeStamp || Date.now(); + + if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); + + that._bind(MOVE_EV); + that._bind(END_EV); + that._bind(CANCEL_EV); + }, + + _move: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + deltaX = point.pageX - that.pointX, + deltaY = point.pageY - that.pointY, + newX = that.x + deltaX, + newY = that.y + deltaY, + c1, c2, scale, + timestamp = e.timeStamp || Date.now(); + + if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); + + // Zoom + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); + that.touchesDist = m.sqrt(c1*c1+c2*c2); + + that.zoomed = true; + + scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; + + if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin); + else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale); + + that.lastScale = scale / this.scale; + + newX = this.originX - this.originX * that.lastScale + this.x, + newY = this.originY - this.originY * that.lastScale + this.y; + + this.scroller.style[vendor + 'Transform'] = trnOpen + newX + 'px,' + newY + 'px' + trnClose + ' scale(' + scale + ')'; + + if (that.options.onZoom) that.options.onZoom.call(that, e); + return; + } + + that.pointX = point.pageX; + that.pointY = point.pageY; + + // Slow down if outside of the boundaries + if (newX > 0 || newX < that.maxScrollX) { + newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; + } + if (newY > that.minScrollY || newY < that.maxScrollY) { + newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY; + } + + that.distX += deltaX; + that.distY += deltaY; + that.absDistX = m.abs(that.distX); + that.absDistY = m.abs(that.distY); + + if (that.absDistX < 6 && that.absDistY < 6) { + return; + } + + // Lock direction + if (that.options.lockDirection) { + if (that.absDistX > that.absDistY + 5) { + newY = that.y; + deltaY = 0; + } else if (that.absDistY > that.absDistX + 5) { + newX = that.x; + deltaX = 0; + } + } + + that.moved = true; + that._pos(newX, newY); + that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; + that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; + + if (timestamp - that.startTime > 300) { + that.startTime = timestamp; + that.startX = that.x; + that.startY = that.y; + } + + if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); + }, + + _end: function (e) { + if (hasTouch && e.touches.length != 0) return; + + var that = this, + point = hasTouch ? e.changedTouches[0] : e, + target, ev, + momentumX = { dist:0, time:0 }, + momentumY = { dist:0, time:0 }, + duration = (e.timeStamp || Date.now()) - that.startTime, + newPosX = that.x, + newPosY = that.y, + distX, distY, + newDuration, + snap, + scale; + + that._unbind(MOVE_EV); + that._unbind(END_EV); + that._unbind(CANCEL_EV); + + if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); + + if (that.zoomed) { + scale = that.scale * that.lastScale; + scale = Math.max(that.options.zoomMin, scale); + scale = Math.min(that.options.zoomMax, scale); + that.lastScale = scale / that.scale; + that.scale = scale; + + that.x = that.originX - that.originX * that.lastScale + that.x; + that.y = that.originY - that.originY * that.lastScale + that.y; + + that.scroller.style[vendor + 'TransitionDuration'] = '200ms'; + that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + that.scale + ')'; + + that.zoomed = false; + that.refresh(); + + if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + return; + } + + if (!that.moved) { + if (hasTouch) { + if (that.doubleTapTimer && that.options.zoom) { + // Double tapped + clearTimeout(that.doubleTapTimer); + that.doubleTapTimer = null; + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); + if (that.options.onZoomEnd) { + setTimeout(function() { + that.options.onZoomEnd.call(that, e); + }, 200); // 200 is default zoom duration + } + } else { + that.doubleTapTimer = setTimeout(function () { + that.doubleTapTimer = null; + + // Find the last touched element + target = point.target; + while (target.nodeType != 1) target = target.parentNode; + + if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { + ev = document.createEvent('MouseEvents'); + ev.initMouseEvent('click', true, true, e.view, 1, + point.screenX, point.screenY, point.clientX, point.clientY, + e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, + 0, null); + ev._fake = true; + target.dispatchEvent(ev); + } + }, that.options.zoom ? 250 : 0); + } + } + + that._resetPos(200); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + if (duration < 300 && that.options.momentum) { + momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; + momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; + + newPosX = that.x + momentumX.dist; + newPosY = that.y + momentumY.dist; + + if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; + if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; + } + + if (momentumX.dist || momentumY.dist) { + newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } + else { + snap = that._snap(newPosX, newPosY); + newPosX = snap.x; + newPosY = snap.y; + newDuration = m.max(snap.time, newDuration); + } + } + + that.scrollTo(mround(newPosX), mround(newPosY), newDuration); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); + else { + snap = that._snap(that.x, that.y); + if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); + } + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + that._resetPos(200); + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + }, + + _resetPos: function (time) { + var that = this, + resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, + resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + if (resetX == that.x && resetY == that.y) { + if (that.moved) { + that.moved = false; + if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end + } + + if (that.hScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.hScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; + that.hScrollbarWrapper.style.opacity = '0'; + } + if (that.vScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.vScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; + that.vScrollbarWrapper.style.opacity = '0'; + } + + return; + } + + that.scrollTo(resetX, resetY, time || 0); + }, + + _wheel: function (e) { + var that = this, + wheelDeltaX, wheelDeltaY, + deltaX, deltaY, + deltaScale; + + if ('wheelDeltaX' in e) { + wheelDeltaX = e.wheelDeltaX / 12; + wheelDeltaY = e.wheelDeltaY / 12; + } else if('wheelDelta' in e) { + wheelDeltaX = wheelDeltaY = e.wheelDelta / 12; + } else if ('detail' in e) { + wheelDeltaX = wheelDeltaY = -e.detail * 3; + } else { + return; + } + + if (that.options.wheelAction == 'zoom') { + deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0)); + if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin; + if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax; + + if (deltaScale != that.scale) { + if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.wheelZoomCount++; + + that.zoom(e.pageX, e.pageY, deltaScale, 400); + + setTimeout(function() { + that.wheelZoomCount--; + if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + }, 400); + } + + return; + } + + deltaX = that.x + wheelDeltaX; + deltaY = that.y + wheelDeltaY; + + if (deltaX > 0) deltaX = 0; + else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; + + if (deltaY > that.minScrollY) deltaY = that.minScrollY; + else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; + + that.scrollTo(deltaX, deltaY, 0); + }, + + _mouseout: function (e) { + var t = e.relatedTarget; + + if (!t) { + this._end(e); + return; + } + + while (t = t.parentNode) if (t == this.wrapper) return; + + this._end(e); + }, + + _transitionEnd: function (e) { + var that = this; + + if (e.target != that.scroller) return; + + that._unbind('webkitTransitionEnd'); + + that._startAni(); + }, + + + /** + * + * Utilities + * + */ + _startAni: function () { + var that = this, + startX = that.x, startY = that.y, + startTime = Date.now(), + step, easeOut, + animate; + + if (that.animating) return; + + if (!that.steps.length) { + that._resetPos(400); + return; + } + + step = that.steps.shift(); + + if (step.x == startX && step.y == startY) step.time = 0; + + that.animating = true; + that.moved = true; + + if (that.options.useTransition) { + that._transitionTime(step.time); + that._pos(step.x, step.y); + that.animating = false; + if (step.time) that._bind('webkitTransitionEnd'); + else that._resetPos(0); + return; + } + + animate = function () { + var now = Date.now(), + newX, newY; + + if (now >= startTime + step.time) { + that._pos(step.x, step.y); + that.animating = false; + if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end + that._startAni(); + return; + } + + now = (now - startTime) / step.time - 1; + easeOut = m.sqrt(1 - now * now); + newX = (step.x - startX) * easeOut + startX; + newY = (step.y - startY) * easeOut + startY; + that._pos(newX, newY); + if (that.animating) that.aniTime = nextFrame(animate); + }; + + animate(); + }, + + _transitionTime: function (time) { + time += 'ms'; + this.scroller.style[vendor + 'TransitionDuration'] = time; + if (this.hScrollbar) this.hScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; + if (this.vScrollbar) this.vScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; + }, + + _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { + var deceleration = 0.0006, + speed = m.abs(dist) / time, + newDist = (speed * speed) / (2 * deceleration), + newTime = 0, outsideDist = 0; + + // Proportinally reduce speed if we are outside of the boundaries + if (dist > 0 && newDist > maxDistUpper) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistUpper = maxDistUpper + outsideDist; + speed = speed * maxDistUpper / newDist; + newDist = maxDistUpper; + } else if (dist < 0 && newDist > maxDistLower) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistLower = maxDistLower + outsideDist; + speed = speed * maxDistLower / newDist; + newDist = maxDistLower; + } + + newDist = newDist * (dist < 0 ? -1 : 1); + newTime = speed / deceleration; + + return { dist: newDist, time: mround(newTime) }; + }, + + _offset: function (el) { + var left = -el.offsetLeft, + top = -el.offsetTop; + + while (el = el.offsetParent) { + left -= el.offsetLeft; + top -= el.offsetTop; + } + + if (el != this.wrapper) { + left *= this.scale; + top *= this.scale; + } + + return { left: left, top: top }; + }, + + _snap: function (x, y) { + var that = this, + i, l, + page, time, + sizeX, sizeY; + + // Check page X + page = that.pagesX.length - 1; + for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { + page = i; + break; + } + } + if (page == that.currPageX && page > 0 && that.dirX < 0) page--; + x = that.pagesX[page]; + sizeX = m.abs(x - that.pagesX[that.currPageX]); + sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; + that.currPageX = page; + + // Check page Y + page = that.pagesY.length-1; + for (i=0; i= that.pagesY[i]) { + page = i; + break; + } + } + if (page == that.currPageY && page > 0 && that.dirY < 0) page--; + y = that.pagesY[page]; + sizeY = m.abs(y - that.pagesY[that.currPageY]); + sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; + that.currPageY = page; + + // Snap with constant speed (proportional duration) + time = mround(m.max(sizeX, sizeY)) || 200; + + return { x: x, y: y, time: time }; + }, + + _bind: function (type, el, bubble) { + (el || this.scroller).addEventListener(type, this, !!bubble); + }, + + _unbind: function (type, el, bubble) { + (el || this.scroller).removeEventListener(type, this, !!bubble); + }, + + + /** + * + * Public methods + * + */ + destroy: function () { + var that = this; + + that.scroller.style[vendor + 'Transform'] = ''; + + // Remove the scrollbars + that.hScrollbar = false; + that.vScrollbar = false; + that._scrollbar('h'); + that._scrollbar('v'); + + // Remove the event listeners + that._unbind(RESIZE_EV, window); + that._unbind(START_EV); + that._unbind(MOVE_EV); + that._unbind(END_EV); + that._unbind(CANCEL_EV); + + if (!that.options.hasTouch) { + that._unbind('mouseout', that.wrapper); + that._unbind(WHEEL_EV); + } + + if (that.options.useTransition) that._unbind('webkitTransitionEnd'); + + if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime); + + if (that.options.onDestroy) that.options.onDestroy.call(that); + }, + + refresh: function () { + var that = this, + offset, + i, l, + els, + pos = 0, + page = 0; + + if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; + that.wrapperW = that.wrapper.clientWidth || 1; + that.wrapperH = that.wrapper.clientHeight || 1; + + that.minScrollY = -that.options.topOffset || 0; + that.scrollerW = mround(that.scroller.offsetWidth * that.scale); + that.scrollerH = mround((that.scroller.offsetHeight + that.minScrollY) * that.scale); + that.maxScrollX = that.wrapperW - that.scrollerW; + that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY; + that.dirX = 0; + that.dirY = 0; + + if (that.options.onRefresh) that.options.onRefresh.call(that); + + that.hScroll = that.options.hScroll && that.maxScrollX < 0; + that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); + + that.hScrollbar = that.hScroll && that.options.hScrollbar; + that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; + + offset = that._offset(that.wrapper); + that.wrapperOffsetLeft = -offset.left; + that.wrapperOffsetTop = -offset.top; + + // Prepare snap + if (typeof that.options.snap == 'string') { + that.pagesX = []; + that.pagesY = []; + els = that.scroller.querySelectorAll(that.options.snap); + for (i=0, l=els.length; i= that.maxScrollX) { + that.pagesX[page] = pos; + pos = pos - that.wrapperW; + page++; + } + if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; + + pos = 0; + page = 0; + that.pagesY = []; + while (pos >= that.maxScrollY) { + that.pagesY[page] = pos; + pos = pos - that.wrapperH; + page++; + } + if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; + } + + // Prepare the scrollbars + that._scrollbar('h'); + that._scrollbar('v'); + + if (!that.zoomed) { + that.scroller.style[vendor + 'TransitionDuration'] = '0'; + that._resetPos(200); + } + }, + + scrollTo: function (x, y, time, relative) { + var that = this, + step = x, + i, l; + + that.stop(); + + if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; + + for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; + pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; + time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; + + that.scrollTo(pos.left, pos.top, time); + }, + + scrollToPage: function (pageX, pageY, time) { + var that = this, x, y; + + time = time === undefined ? 400 : time; + + if (that.options.onScrollStart) that.options.onScrollStart.call(that); + + if (that.options.snap) { + pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; + pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; + + pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; + pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; + + that.currPageX = pageX; + that.currPageY = pageY; + x = that.pagesX[pageX]; + y = that.pagesY[pageY]; + } else { + x = -that.wrapperW * pageX; + y = -that.wrapperH * pageY; + if (x < that.maxScrollX) x = that.maxScrollX; + if (y < that.maxScrollY) y = that.maxScrollY; + } + + that.scrollTo(x, y, time); + }, + + disable: function () { + this.stop(); + this._resetPos(0); + this.enabled = false; + + // If disabled after touchstart we make sure that there are no left over events + this._unbind(MOVE_EV); + this._unbind(END_EV); + this._unbind(CANCEL_EV); + }, + + enable: function () { + this.enabled = true; + }, + + stop: function () { + if (this.options.useTransition) this._unbind('webkitTransitionEnd'); + else cancelFrame(this.aniTime); + this.steps = []; + this.moved = false; + this.animating = false; + }, + + zoom: function (x, y, scale, time) { + var that = this, + relScale = scale / that.scale; + + if (!that.options.useTransform) return; + + that.zoomed = true; + time = time === undefined ? 200 : time; + x = x - that.wrapperOffsetLeft - that.x; + y = y - that.wrapperOffsetTop - that.y; + that.x = x - x * relScale + that.x; + that.y = y - y * relScale + that.y; + + that.scale = scale; + that.refresh(); + + that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x; + that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + that.scroller.style[vendor + 'TransitionDuration'] = time + 'ms'; + that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + scale + ')'; + that.zoomed = false; + }, + + isReady: function () { + return !this.moved && !this.zoomed && !this.animating; + } +}; + +if (typeof exports !== 'undefined') exports.iScroll = iScroll; +else window.iScroll = iScroll; + +})(); diff --git a/www/js/libs/jquery.animateEnhanced.js b/www/js/libs/jquery.animateEnhanced.js new file mode 100755 index 0000000..d0117e9 --- /dev/null +++ b/www/js/libs/jquery.animateEnhanced.js @@ -0,0 +1,779 @@ +/* +jquery.animate-enhanced plugin v0.91 +--- +http://github.com/benbarnett/jQuery-Animate-Enhanced +http://benbarnett.net +@benpbarnett +--- +Copyright (c) 2012 Ben Barnett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--- +Extends jQuery.animate() to automatically use CSS3 transformations where applicable. +Tested with jQuery 1.3.2+ + +Supports -moz-transition, -webkit-transition, -o-transition, transition + +Targetted properties (for now): + - left + - top + - opacity + - width + - height + +Usage (exactly the same as it would be normally): + + jQuery(element).animate({left: 200}, 500, function() { + // callback + }); + +Changelog: + 0.91 (2/4/2012): + - Merge Pull Request #74 - Unit Management + + 0.90 (7/3/2012): + - Adding public $.toggleDisabledByDefault() feature to disable entire plugin by default (Issue #73) + + 0.89 (24/1/2012): + - Adding 'avoidCSSTransitions' property. Set to true to disable entire plugin. (Issue #47) + + 0.88 (24/1/2012): + - Fix Issue #67 for HighchartsJS compatibility + + 0.87 (24/1/2012): + - Fix Issue #66 selfCSSData.original is undefined + + 0.86 (9/1/2012): + - Strict JS fix for undefined variable + + 0.85 (20/12/2011): + - Merge Pull request #57 from Kronuz + - Codebase cleaned and now passes jshint. + - Fixed a few bugs (it now saves and restores the original css transition properties). + - fadeOut() is fixed, it wasn't restoring the opacity after hiding it. + + 0.80 (13/09/2011): + - Issue #28 - Report $(el).is(':animated') fix + + 0.79 (06/09/2011): + - Issue #42 - Right negative position animation: please see issue notes on Github. + + 0.78 (02/09/2011): + - Issue #18 - jQuery/$ reference joys + + 0.77 (02/09/2011): + - Adding feature on Github issue #44 - Use 3D Transitions by default + + 0.76 (28/06/2011): + - Fixing issue #37 - fixed stop() method (with gotoEnd == false) + + 0.75 (15/06/2011): + - Fixing issue #35 to pass actual object back as context for callback + + 0.74 (28/05/2011): + - Fixing issue #29 to play nice with 1.6+ + + 0.73 (05/03/2011): + - Merged Pull Request #26: Fixed issue with fadeOut() / "hide" shortcut + + 0.72 (05/03/2011): + - Merged Pull Request #23: Added Penner equation approximations from Matthew Lein's Ceaser, and added failsafe fallbacks + + 0.71 (05/03/2011): + - Merged Pull Request #24: Changes translation object to integers instead of strings to fix relative values bug with leaveTransforms = true + + 0.70 (17/03/2011): + - Merged Pull Request from amlw-nyt to add bottom/right handling + + 0.68 (15/02/2011): + - width/height fixes & queue issues resolved. + + 0.67 (15/02/2011): + - Code cleanups & file size improvements for compression. + + 0.66 (15/02/2011): + - Zero second fadeOut(), fadeIn() fixes + + 0.65 (01/02/2011): + - Callbacks with queue() support refactored to support element arrays + + 0.64 (27/01/2011): + - BUGFIX #13: .slideUp(), .slideToggle(), .slideDown() bugfixes in Webkit + + 0.63 (12/01/2011): + - BUGFIX #11: callbacks not firing when new value == old value + + 0.62 (10/01/2011): + - BUGFIX #11: queue is not a function issue fixed + + 0.61 (10/01/2011): + - BUGFIX #10: Negative positions converting to positive + + 0.60 (06/01/2011): + - Animate function rewrite in accordance with new queue system + - BUGFIX #8: Left/top position values always assumed relative rather than absolute + - BUGFIX #9: animation as last item in a chain - the chain is ignored? + - BUGFIX: width/height CSS3 transformation with left/top working + + 0.55 (22/12/2010): + - isEmptyObject function for a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = marginDiv = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + conMarginTop, ptlm, vb, style, html, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; + vb = "visibility:hidden;border:0;"; + style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Figure out if the W3C box model works as expected + div.innerHTML = ""; + div.style.width = div.style.paddingLeft = "1px"; + jQuery.boxModel = support.boxModel = div.offsetWidth === 2; + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.style.cssText = ptlm + vb; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + body.removeChild( container ); + div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, attr, name, + data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { + attr = this[0].attributes; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + jQuery._data( this[0], "parsedAttrs", true ); + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var self = jQuery( this ), + args = [ parts[0], value ]; + + self.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + + // See #9699 for explanation of this approach (setting first, then removal) + jQuery.attr( elem, name, "" ); + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /\bhover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on.call( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and